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.hide()
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.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( self.action_history['last_action']['description']) self.ui.backButton.show() self.action_history['last_action'] = { 'function': fun, 'args': args, 'description': 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']) return todo['function'](*todo['args']) def processFinished(self): self.parent.ui.searchEdit.setEnabled(True) QApplication.restoreOverrideCursor() self.process = None self.parent.ui.stopButton.hide() 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('Details of recipe "%s"' % recipe.title, self.displayRecipe, [recipe, backend]) QApplication.restoreOverrideCursor()
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.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(self.action_history['last_action']['description']) self.ui.backButton.show() self.action_history['last_action'] = {'function': fun, 'args': args, 'description': 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']) return todo['function'](*todo['args']) def processFinished(self): self.parent.ui.searchEdit.setEnabled(True) QApplication.restoreOverrideCursor() self.process = None self.parent.ui.stopButton.hide() 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('Details of recipe "%s"' % recipe.title, self.displayRecipe, [recipe, backend]) QApplication.restoreOverrideCursor()