pax_global_header 0000666 0000000 0000000 00000000064 13507732167 0014525 g ustar 00root root 0000000 0000000 52 comment=387a3e3cdc31032e63b3c0e660d6629e91b6ccdd
woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/ 0000775 0000000 0000000 00000000000 13507732167 0025457 5 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/ 0000775 0000000 0000000 00000000000 13507732167 0026734 5 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/ 0000775 0000000 0000000 00000000000 13507732167 0031422 5 ustar 00root root 0000000 0000000 qcookboob/ 0000775 0000000 0000000 00000000000 13507732167 0033321 5 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications __init__.py 0000664 0000000 0000000 00000000072 13507732167 0035431 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob from .qcookboob import QCookboob
__all__ = ['QCookboob']
main_window.py 0000664 0000000 0000000 00000026330 13507732167 0036212 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob # -*- coding: utf-8 -*-
# Copyright(C) 2013 Julien Veyssier
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
import os
from PyQt5.QtCore import pyqtSlot as Slot, Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QApplication, QFrame, QShortcut
from weboob.capabilities.recipe import CapRecipe
from weboob.tools.application.qt5 import QtMainWindow, QtDo
from weboob.tools.application.qt5.backendcfg import BackendCfg
from weboob.tools.application.qt5.models import BackendListModel
from weboob.tools.application.qt5.search_history import HistoryCompleter
from weboob.applications.qcookboob.ui.main_window_ui import Ui_MainWindow
from weboob.applications.qcookboob.ui.result_ui import Ui_Result
from .minirecipe import MiniRecipe
from .recipe import Recipe
MAX_TAB_TEXT_LENGTH=30
class Result(QFrame):
def __init__(self, weboob, app, parent=None):
super(Result, self).__init__(parent)
self.ui = Ui_Result()
self.ui.setupUi(self)
self.parent = parent
self.weboob = weboob
self.app = app
self.minis = []
self.current_info_widget = None
# action history is composed by the last action and the action list
# An action is a function, a list of arguments and a description string
self.action_history = {'last_action': None, 'action_list': []}
self.ui.backButton.clicked.connect(self.doBack)
self.ui.backButton.setShortcut(QKeySequence('Alt+Left'))
self.ui.backButton.hide()
def doAction(self, description, fun, args):
''' Call fun with args as arguments
and save it in the action history
'''
self.ui.currentActionLabel.setText(description)
if self.action_history['last_action'] is not None:
self.action_history['action_list'].append(self.action_history['last_action'])
self.ui.backButton.setToolTip('%s (Alt+Left)'%self.action_history['last_action']['description'])
self.ui.backButton.show()
self.action_history['last_action'] = {'function': fun, 'args': args, 'description': description}
# manage tab text
mytabindex = self.parent.ui.resultsTab.indexOf(self)
tabtxt = description
if len(tabtxt) > MAX_TAB_TEXT_LENGTH:
tabtxt = '%s...'%tabtxt[:MAX_TAB_TEXT_LENGTH]
self.parent.ui.resultsTab.setTabText(mytabindex, tabtxt)
self.parent.ui.resultsTab.setTabToolTip(mytabindex, description)
return fun(*args)
@Slot()
def doBack(self):
''' Go back in action history
Basically call previous function and update history
'''
if len(self.action_history['action_list']) > 0:
todo = self.action_history['action_list'].pop()
self.ui.currentActionLabel.setText(todo['description'])
self.action_history['last_action'] = todo
if len(self.action_history['action_list']) == 0:
self.ui.backButton.hide()
else:
self.ui.backButton.setToolTip(self.action_history['action_list'][-1]['description'])
# manage tab text
mytabindex = self.parent.ui.resultsTab.indexOf(self)
tabtxt = todo['description']
if len(tabtxt) > MAX_TAB_TEXT_LENGTH:
tabtxt = '%s...'%tabtxt[:MAX_TAB_TEXT_LENGTH]
self.parent.ui.resultsTab.setTabText(mytabindex, tabtxt)
self.parent.ui.resultsTab.setTabToolTip(mytabindex, todo['description'])
return todo['function'](*todo['args'])
def processFinished(self):
self.parent.ui.searchEdit.setEnabled(True)
QApplication.restoreOverrideCursor()
self.process = None
self.parent.ui.stopButton.hide()
@Slot()
def stopProcess(self):
if self.process is not None:
self.process.stop()
def searchRecipe(self,pattern):
if not pattern:
return
self.doAction(u'Search recipe "%s"' % pattern, self.searchRecipeAction, [pattern])
def searchRecipeAction(self, pattern):
self.ui.stackedWidget.setCurrentWidget(self.ui.list_page)
for mini in self.minis:
self.ui.list_content.layout().removeWidget(mini)
mini.hide()
mini.deleteLater()
self.minis = []
self.parent.ui.searchEdit.setEnabled(False)
QApplication.setOverrideCursor(Qt.WaitCursor)
backend_name = self.parent.ui.backendEdit.itemData(self.parent.ui.backendEdit.currentIndex())
self.process = QtDo(self.weboob, self.addRecipe, fb=self.processFinished)
self.process.do(self.app._do_complete, self.parent.getCount(), ('title'), 'iter_recipes', pattern, backends=backend_name, caps=CapRecipe)
self.parent.ui.stopButton.show()
def addRecipe(self, recipe):
minirecipe = MiniRecipe(self.weboob, self.weboob[recipe.backend], recipe, self)
self.ui.list_content.layout().insertWidget(self.ui.list_content.layout().count()-1,minirecipe)
self.minis.append(minirecipe)
def displayRecipe(self, recipe, backend):
self.ui.stackedWidget.setCurrentWidget(self.ui.info_page)
if self.current_info_widget is not None:
self.ui.info_content.layout().removeWidget(self.current_info_widget)
self.current_info_widget.hide()
self.current_info_widget.deleteLater()
wrecipe = Recipe(recipe, backend, self)
self.ui.info_content.layout().addWidget(wrecipe)
self.current_info_widget = wrecipe
QApplication.restoreOverrideCursor()
def searchId(self, id):
QApplication.setOverrideCursor(Qt.WaitCursor)
if '@' in id:
backend_name = id.split('@')[1]
id = id.split('@')[0]
else:
backend_name = None
for backend in self.weboob.iter_backends():
if (backend_name and backend.name == backend_name) or not backend_name:
recipe = backend.get_recipe(id)
if recipe:
self.doAction('Recipe "%s"' % recipe.title, self.displayRecipe, [recipe, backend])
QApplication.restoreOverrideCursor()
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, app, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.config = config
self.weboob = weboob
self.app = app
self.minis = []
self.current_info_widget = None
# search history is a list of patterns which have been searched
history_path = os.path.join(self.weboob.workdir, 'qcookboob_history')
qc = HistoryCompleter(history_path, self)
qc.load()
qc.setCaseSensitivity(Qt.CaseInsensitive)
self.ui.searchEdit.setCompleter(qc)
self.ui.searchEdit.returnPressed.connect(self.search)
self.ui.idEdit.returnPressed.connect(self.searchId)
count = self.config.get('settings', 'maxresultsnumber')
self.ui.countSpin.setValue(int(count))
showT = self.config.get('settings', 'showthumbnails')
self.ui.showTCheck.setChecked(showT == '1')
self.ui.stopButton.hide()
self.ui.actionBackends.triggered.connect(self.backendsConfig)
q = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Q), self)
q.activated.connect(self.close)
n = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_PageDown), self)
n.activated.connect(self.nextTab)
p = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_PageUp), self)
p.activated.connect(self.prevTab)
w = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_W), self)
w.activated.connect(self.closeCurrentTab)
l = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_L), self)
l.activated.connect(self.ui.searchEdit.setFocus)
l.activated.connect(self.ui.searchEdit.selectAll)
self.ui.resultsTab.tabCloseRequested.connect(self.closeTab)
self.loadBackendsList()
if self.ui.backendEdit.count() == 0:
self.backendsConfig()
@Slot()
def backendsConfig(self):
bckndcfg = BackendCfg(self.weboob, (CapRecipe, ), self)
if bckndcfg.run():
self.loadBackendsList()
def loadBackendsList(self):
model = BackendListModel(self.weboob)
model.addBackends()
self.ui.backendEdit.setModel(model)
current_backend = self.config.get('settings', 'backend')
idx = self.ui.backendEdit.findData(current_backend)
if idx >= 0:
self.ui.backendEdit.setCurrentIndex(idx)
if self.ui.backendEdit.count() == 0:
self.ui.searchEdit.setEnabled(False)
else:
self.ui.searchEdit.setEnabled(True)
def getCount(self):
num = self.ui.countSpin.value()
if num == 0:
return None
else:
return num
@Slot(int)
def closeTab(self, index):
if self.ui.resultsTab.widget(index) != 0:
self.ui.resultsTab.removeTab(index)
@Slot()
def closeCurrentTab(self):
self.closeTab(self.ui.resultsTab.currentIndex())
@Slot()
def prevTab(self):
index = self.ui.resultsTab.currentIndex() - 1
size = self.ui.resultsTab.count()
if size != 0:
self.ui.resultsTab.setCurrentIndex(index % size)
@Slot()
def nextTab(self):
index = self.ui.resultsTab.currentIndex() + 1
size = self.ui.resultsTab.count()
if size != 0:
self.ui.resultsTab.setCurrentIndex(index % size)
def newTab(self, txt, backend, recipe=None):
id = ''
if recipe is not None:
id = recipe.id
new_res = Result(self.weboob, self.app, self)
self.ui.resultsTab.addTab(new_res, txt)
new_res.searchId('%s@%s'%(id,backend.NAME))
@Slot()
def search(self):
pattern = self.ui.searchEdit.text()
self.ui.searchEdit.completer().addString(pattern)
new_res = Result(self.weboob, self.app, self)
self.ui.resultsTab.addTab(new_res, pattern)
self.ui.resultsTab.setCurrentWidget(new_res)
new_res.searchRecipe(pattern)
self.ui.stopButton.clicked.connect(new_res.stopProcess)
@Slot()
def searchId(self):
id = self.ui.idEdit.text()
new_res = Result(self.weboob, self.app, self)
self.ui.resultsTab.addTab(new_res, id)
self.ui.resultsTab.setCurrentWidget(new_res)
new_res.searchId(id)
def closeEvent(self, ev):
self.config.set('settings', 'backend', self.ui.backendEdit.itemData(
self.ui.backendEdit.currentIndex()))
self.ui.searchEdit.completer().save()
self.config.set('settings', 'maxresultsnumber', self.ui.countSpin.value())
self.config.save()
ev.accept()
minirecipe.py 0000664 0000000 0000000 00000007350 13507732167 0036024 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob # -*- coding: utf-8 -*-
# Copyright(C) 2013 Julien Veyssier
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
import requests
from PyQt5.QtGui import QIcon, QImage, QPixmap, QPixmapCache
from PyQt5.QtWidgets import QFrame, QApplication
from PyQt5.QtCore import Qt, pyqtSlot as Slot
from weboob.applications.qcookboob.ui.minirecipe_ui import Ui_MiniRecipe
from weboob.capabilities.base import empty
class MiniRecipe(QFrame):
def __init__(self, weboob, backend, recipe, parent=None):
super(MiniRecipe, self).__init__(parent)
self.parent = parent
self.ui = Ui_MiniRecipe()
self.ui.setupUi(self)
self.weboob = weboob
self.backend = backend
self.recipe = recipe
self.ui.titleLabel.setText(recipe.title)
if not empty(recipe.short_description):
if len(recipe.short_description) > 300:
self.ui.shortDescLabel.setText('%s [...]'%recipe.short_description[:300])
else:
self.ui.shortDescLabel.setText(recipe.short_description)
else:
self.ui.shortDescLabel.setText('')
self.ui.backendButton.setText(backend.name)
minfo = self.weboob.repositories.get_module_info(backend.NAME)
icon_path = self.weboob.repositories.get_module_icon_path(minfo)
if icon_path:
pixmap = QPixmapCache.find(icon_path)
if not pixmap:
pixmap = QPixmap(QImage(icon_path))
self.ui.backendButton.setIcon(QIcon(pixmap))
self.ui.newTabButton.clicked.connect(self.newTabPressed)
self.ui.viewButton.clicked.connect(self.viewPressed)
self.ui.viewThumbnailButton.clicked.connect(self.gotThumbnail)
if self.parent.parent.ui.showTCheck.isChecked():
self.gotThumbnail()
@Slot()
def gotThumbnail(self):
try:
url = self.recipe.picture.thumbnail.url
except AttributeError:
return
if not empty(url):
data = requests.get(url).content
img = QImage.fromData(data)
self.ui.imageLabel.setPixmap(QPixmap.fromImage(img).scaledToHeight(100,Qt.SmoothTransformation))
@Slot()
def viewPressed(self):
QApplication.setOverrideCursor(Qt.WaitCursor)
recipe = self.backend.get_recipe(self.recipe.id)
if recipe:
self.parent.doAction('Recipe "%s"' %
recipe.title, self.parent.displayRecipe, [recipe, self.backend])
@Slot()
def newTabPressed(self):
recipe = self.backend.get_recipe(self.recipe.id)
self.parent.parent.newTab(u'Recipe "%s"' %
recipe.title, self.backend, recipe=recipe)
def enterEvent(self, event):
self.setFrameShadow(self.Sunken)
QFrame.enterEvent(self, event)
def leaveEvent(self, event):
self.setFrameShadow(self.Raised)
QFrame.leaveEvent(self, event)
def mousePressEvent(self, event):
QFrame.mousePressEvent(self, event)
if event.button() == 2:
self.gotThumbnail()
elif event.button() == 4:
self.newTabPressed()
else:
self.viewPressed()
qcookboob.py 0000664 0000000 0000000 00000002730 13507732167 0035653 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob # -*- coding: utf-8 -*-
# Copyright(C) 2013 Julien Veyssier
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
from weboob.capabilities.recipe import CapRecipe
from weboob.tools.application.qt5 import QtApplication
from .main_window import MainWindow
class QCookboob(QtApplication):
APPNAME = 'qcookboob'
VERSION = '1.6'
COPYRIGHT = 'Copyright(C) 2013-2014 Julien Veyssier'
DESCRIPTION = "Qt application allowing to search recipes."
SHORT_DESCRIPTION = "search recipes"
CAPS = CapRecipe
CONFIG = {'settings': {'backend': '',
'maxresultsnumber': '10'
}
}
def main(self, argv):
self.load_backends([CapRecipe])
self.load_config()
main_window = MainWindow(self.config, self.weboob, self)
main_window.show()
return self.weboob.loop()
recipe.py 0000664 0000000 0000000 00000011015 13507732167 0035140 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob # -*- coding: utf-8 -*-
# Copyright(C) 2013 Julien Veyssier
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
from __future__ import print_function
import codecs
import requests
from PyQt5.QtCore import Qt, pyqtSlot as Slot
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QFrame, QFileDialog
from weboob.applications.qcookboob.ui.recipe_ui import Ui_Recipe
from weboob.capabilities.base import empty
from weboob.tools.capabilities.recipe import recipe_to_krecipes_xml
class Recipe(QFrame):
def __init__(self, recipe, backend, parent=None):
super(Recipe, self).__init__(parent)
self.parent = parent
self.ui = Ui_Recipe()
self.ui.setupUi(self)
self.ui.exportButton.clicked.connect(self.export)
self.recipe = recipe
self.backend = backend
self.gotThumbnail()
self.ui.idEdit.setText(u'%s@%s' % (recipe.id, backend.name))
if not empty(recipe.title):
self.ui.titleLabel.setText(recipe.title)
if not empty(recipe.nb_person):
nbstr = '-'.join(str(num) for num in recipe.nb_person)
self.ui.nbPersonLabel.setText(nbstr)
else:
self.ui.nbPersonLabel.parent().hide()
if not empty(recipe.preparation_time):
self.ui.prepTimeLabel.setText('%s min' % recipe.preparation_time)
else:
self.ui.prepTimeLabel.parent().hide()
if not empty(recipe.cooking_time):
self.ui.cookingTimeLabel.setText('%s min' % recipe.cooking_time)
else:
self.ui.cookingTimeLabel.parent().hide()
if not empty(recipe.ingredients):
txt = u''
for ing in recipe.ingredients:
txt += u'* %s\n' % ing
self.ui.ingredientsPlain.setPlainText(u'%s' % txt)
else:
self.ui.ingredientsPlain.parent().hide()
if not empty(recipe.author):
self.ui.authorLabel.setText(u'%s' % recipe.author)
else:
self.ui.authorLabel.parent().hide()
if not empty(recipe.instructions):
self.ui.instructionsPlain.setPlainText(u'%s' % recipe.instructions)
else:
self.ui.instructionsPlain.parent().hide()
if not empty(recipe.comments):
txt = u''
for com in recipe.comments:
txt += u'* %s\n' % com
self.ui.commentsPlain.setPlainText(u'%s' % txt)
else:
self.ui.commentsPlain.parent().hide()
self.ui.verticalLayout.setAlignment(Qt.AlignTop)
self.ui.verticalLayout_2.setAlignment(Qt.AlignTop)
def gotThumbnail(self):
try:
url = self.recipe.picture.url
except AttributeError:
return
if not empty(url):
data = requests.get(url).content
img = QImage.fromData(data)
self.ui.imageLabel.setPixmap(QPixmap.fromImage(img).scaledToWidth(250, Qt.SmoothTransformation))
@Slot()
def export(self):
fileDial = QFileDialog(self, u'Export "%s" recipe' %
self.recipe.title, u'%s.kreml' % self.recipe.id, 'Krecipe file (*.kreml);;all files (*)')
fileDial.setAcceptMode(QFileDialog.AcceptSave)
fileDial.setLabelText(QFileDialog.Accept, 'Export recipe')
fileDial.setLabelText(QFileDialog.FileName, 'Recipe file name')
ok = (fileDial.exec_() == 1)
if not ok:
return
result = fileDial.selectedFiles()
if len(result) > 0:
dest = result[0]
if not dest.endswith('.kreml'):
dest += '.kreml'
data = recipe_to_krecipes_xml(self.recipe, author=self.backend.name)
try:
with codecs.open(dest, 'w', 'utf-8') as f:
f.write(data)
except IOError as e:
print(u'Unable to write Krecipe file in "%s": %s' % (dest, e), file=self.stderr)
return 1
return
ui/ 0000775 0000000 0000000 00000000000 13507732167 0033736 5 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob Makefile 0000664 0000000 0000000 00000000265 13507732167 0035401 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui UI_FILES = $(wildcard *.ui)
UI_PY_FILES = $(UI_FILES:%.ui=%_ui.py)
PYUIC = pyuic5
all: $(UI_PY_FILES)
%_ui.py: %.ui
$(PYUIC) -o $@ $^
clean:
rm -f *.pyc
rm -f $(UI_PY_FILES)
__init__.py 0000664 0000000 0000000 00000000000 13507732167 0036035 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui main_window.ui 0000664 0000000 0000000 00000010447 13507732167 0036616 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui
MainWindow
0
0
748
463
QCookboob
4
-
QFrame::StyledPanel
QFrame::Raised
0
0
-
Search:
-
-
35
16777215
background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:1, stop:0 rgba(255, 0, 0, 255), stop:0.479904 rgba(255, 0, 0, 255), stop:0.522685 rgba(255, 255, 255, 255), stop:1 rgba(255, 255, 255, 255));
stop
-
-
<html><head/><body><p>Maximum results by backend</p><p>0 = no limit</p></body></html>
max results
-
<html><head/><body><p>Maximum results by backend</p><p>0 = no limit</p></body></html>
-
-1
true
true
-
-
Show thumbnails
-
search by ID:
-
toolBar
TopToolBarArea
false
Backends
minirecipe.ui 0000664 0000000 0000000 00000012737 13507732167 0036433 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui
MiniRecipe
0
0
578
136
Form
QFrame::StyledPanel
QFrame::Raised
9
5
5
-
0
0
-
-
TextLabel
true
-
0
0
50
true
false
TextLabel
true
-
75
true
Short description:
-
75
true
Where
-
75
true
Title
-
-
120
20
View
-
120
20
View in new tab
-
120
20
View thumbnail
-
Qt::Horizontal
40
20
-
-
16777215
20
PushButton
true
-
Qt::Horizontal
40
20
recipe.ui 0000664 0000000 0000000 00000032534 13507732167 0035553 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui
Recipe
0
0
645
855
0
0
8000
5000
Frame
QFrame::StyledPanel
QFrame::Raised
-
16777215
3000
QFrame::NoFrame
QFrame::Raised
-
-
16777215
4000
QFrame::NoFrame
QFrame::Raised
-
Export to KRecipesML file
-
16777215
40
QFrame::StyledPanel
QFrame::Raised
3
3
-
75
true
Id:
-
Qt::AlignCenter
true
-
16777215
35
QFrame::StyledPanel
QFrame::Raised
-
75
true
Title:
-
-
16777215
35
QFrame::StyledPanel
QFrame::Raised
-
75
true
Author:
-
-
16777215
35
QFrame::StyledPanel
QFrame::Raised
-
75
true
Number of people:
-
-
16777215
35
QFrame::StyledPanel
QFrame::Raised
-
75
true
Preparation time:
-
-
16777215
35
QFrame::StyledPanel
QFrame::Raised
-
75
true
Cook time:
-
-
0
0
16777215
1000
QFrame::StyledPanel
QFrame::Raised
-
75
true
Ingredients:
-
0
200
Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
-
0
0
16777215
1000
QFrame::StyledPanel
QFrame::Raised
-
100
16777215
75
true
Instructions:
-
0
200
Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
-
0
0
16777215
1000
QFrame::StyledPanel
QFrame::Raised
-
75
true
Comments:
-
0
100
Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
result.ui 0000664 0000000 0000000 00000011173 13507732167 0035616 0 ustar 00root root 0000000 0000000 woob-387a3e3cdc31032e63b3c0e660d6629e91b6ccdd-weboob-applications-qcookboob/weboob/applications/qcookboob/ui
Result
0
0
645
733
0
0
10000
10000
Frame
QFrame::StyledPanel
QFrame::Raised
-
QFrame::NoFrame
QFrame::Raised
0
0
-
Qt::Horizontal
40
20
-
60
20
<<back
-
75
true
Qt::AlignCenter
true
-
Qt::Horizontal
40
20
-
-
true
0
0
605
667
-
Qt::Vertical
20
40
-
true
0
0
605
667