class World(DirectObject): def __init__(self): base.makeDefaultPipe() width=base.pipe.getDisplayWidth() height=base.pipe.getDisplayHeight() print('screen dimensions are '+str(width)+','+str(height)) base.windowType = 'onscreen' props=WindowProperties.getDefault() props.setSize(width,height) props.setFullscreen(True) base.openDefaultWindow(props) PStatClient.connect() loadPrcFileData("", "framebuffer-stencil #t") self.sessionManager=SessionManager() FPS = 60 globalClock = ClockObject.getGlobalClock() globalClock.setMode(ClockObject.MLimited) globalClock.setFrameRate(FPS) taskMgr.add(self.move,"moveTask") def move(self, task): self.sessionManager.advanceTime() return task.cont
def exportIndex(self, filename): iface = backend.pm.Iface() source = iface.source # store current source iface.setSource(None) # set source None list_installed = iface.getPackageList() # get installed package list packages = [] self.totalPackages = len(list_installed) self.packageNo = 0 for name in list_installed: packages.append(iface.getPackage(name)) self.packageNo += 1 self.updateExportingProgress() session = SessionManager() session.setSession(session.OFFLINE) try: backend.pm.Iface().writeIndex(packages, filename) print "Index file is written successfully." except: print "Index file could not written!" # set source and session to their previous states session.setSession(session.NORMAL) iface.setSource(source)
def setup_subscription(self): dprint("get:", SessionManager.instance().get_session()) if self.use_other_session == False: self.m_client.subscribe( 'commandResponse', [SessionManager.instance().get_session()], callback=self.subscription_response_callback) self.m_client.subscribe('imageviewerdb', [SessionManager.instance().get_session()], callback=self.subscription_image_callback)
def getSession_callback(self, error, result): if error: dprint("getSession_callback error") dprint(error) return print("in getSession_callback, sessionID:", result) if self.use_other_session == False: SessionManager.instance().set_session(result) # subscribe response # subscribe imageController # observe response, imageController self.setup_subscription()
def send_command(self, cmd, parameter, built_callback=None, user_callback=""): # 有built_callback就先處理它. 然後有user_callback就async, 沒有就直接return result # 沒有built_callback就建一個dummmy, 然後裡面再callback user_callback # 沒有user_callback就要把self.sync_resp_queue.put # 也有可能都沒有 print("send command".format("cmd")) identifier = cmd + parameter #const id = cmd + parameter; # cmd_dict = {'if_async': if_async, 'callback': callback} cmd_dict = { 'id': identifier, 'built_callback': built_callback, 'user_callback': user_callback } self.mutex.acquire() self.callbacks.append(cmd_dict) self.mutex.release() self.client.call( sendCmd, [cmd, parameter, SessionManager.instance().get_session()], self.send_command_callback) if user_callback == None: data = self.block_for_user_callback() return data else: print("async send command !!!!!")
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self) self.searchButton.setIcon(KIcon("edit-find")) self.statusUpdater = StatusUpdater() self.state = StateManager(self) self.session = SessionManager() self.basket = BasketDialog(self.state) self.initialize() self.setSelectAll() self.actionButton.setIcon(self.state.getActionIcon()) self.operation = OperationManager(self.state) self.progressDialog = ProgressDialog(self.state) self.summaryDialog = SummaryDialog() self.connectMainSignals() self.connectOperationSignals()
def saveDataToCollection(self, collection, newDocObject, actionType): sessionID = SessionManager.instance().get_session() docs = self.m_client.find(collection, selector={'sessionID': sessionID}) total = len(docs) if total > 0: dprint("try to replace first image in mongo, total images:", total) doc = docs[0] docID = doc["_id"] newDocObject["sessionID"] = sessionID # update, not test yet self.m_client.update(collection, {'_id': docID}, newDocObject, callback=self.update_callback) else: # insert dprint("try to to insert images") newDocObject["sessionID"] = sessionID self.m_client.insert(collection, newDocObject, callback=self.insert_callback) dprint("end to insert")
import sys from sessionmanager import SessionManager from PyQt4 import QtGui if __name__ == "__main__": app = QtGui.QApplication(sys.argv) sessionManager = SessionManager() sessionManager.show() app.exec_()
def handleAddedOrChanged(self, collection, id, fields): for key, value in fields.items(): dprint(' - FIELD {}'.format(key)) # dprint(' - FIELD {} {}'.format(key, value)) if collection == "users": dprint("grimmer users added/changed ") elif collection == "responses": dprint("grimmer responses added/changed, self_sessionID:", fields["sessionID"]) if "pushedImage" in fields: # if "buffer" in fields: imgString = fields["buffer"] imageLeng = len(imgString) print("get image, data size in (cmd) response:", imageLeng) #TODO the dummy empty images should be solved in the future, but now we use it to judge connect ok if imageLeng > 10012: # url = "data:image/jpeg;base64,"+imgString # save to mongo for share screen #TODO python: forget to setup controllerID. js: forget to add size self.saveDataToCollection('imageviewerdb', { "imageURL": imgString, "size": len(imgString) }, GET_IMAGE) #save file for testing # dprint("try to save image") # self.render_received_image(imgString) # imgdata = base64.b64decode(imgString) # filename = currentTime +".jpg" # I assume you have a way of picking unique filenames # with open(filename, 'wb') as f: # f.write(imgdata) # # if run_from_interactive(): # # img = mpimg.imread('1.jpg'), from file # i = io.BytesIO(imgdata) # i = mpimg.imread(i, format='JPG') # from memory, binary # # # plt.imshow(i, interpolation='nearest') # #TODO let mainthread to redraw # imgplot = plt.imshow(i)# may be no difference # plt.pause(0.01) # else: # dprint("not ipython, so do no show image after saving") # global numberOfImages # self.numberOfImages += 1 # if self.numberOfImages == 2: # print("get dummy 2 images") # self.sync_connected_queue.put(connect_response) elif "cmd" in fields: self.receive_response(fields) #2. remove it, may not be necessary for Browser, just aligh with React JS Browser client self.m_client.remove('responses', {'_id': id}, callback=self.remove_callback) elif collection == 'imageviewerdb': sessionID = SessionManager.instance().get_session() docs = self.m_client.find(collection, selector={'sessionID': sessionID}) total = len(docs) print("imagecontroller added/changed event happens, total docs:", total) if total > 0: # firstDoc = docs[0] for doc in docs: docID = doc["_id"] dprint("loop image collection, id is", docID) #NOTE since meteor-python does not have Optimistic update so that we need to remove old images after getting added/changed callback if docID != id: print("remove one image document") self.m_client.remove( 'imageviewerdb', {'_id': docID}, callback=self.remove_image_callback) # global testimage # testimage +=1 # if testimage ==1: # dprint("try 2nd image file") # ImageController.selectFileToOpen2(client) # # doc["comments"] = "apple" # for testing client.update('imageviewerdb', {'_id': docID}, {"name": "ggg"}, callback=update_callback) # for testing # client.update('imageviewerdb', {'_id': docID}, doc, callback=update_callback) else: dprint("not remove it") print("image size in collection:", len(doc["imageURL"])) self.render_received_image(doc["imageURL"])
def watch_other_session(self, session): SessionManager.instance().use_other_session(session) self.use_other_session = True
import sys from sessionmanager import SessionManager from PyQt4 import QtGui if __name__ == '__main__': app = QtGui.QApplication(sys.argv) sessionManager = SessionManager() sessionManager.show() app.exec_()
#!/usr/bin/env python import sys assert sys.version_info > (3,5) #from ipaddress import IPv4Address import netifaces from sessionmanager import SessionManager def get_local_ipv4_addresses(): for interface in netifaces.interfaces(): if netifaces.AF_INET in netifaces.ifaddresses(interface): for address_info in netifaces.ifaddresses(interface)[netifaces.AF_INET]: yield address_info['addr'] peers = ["192.168.122.1","192.168.122.179","192.168.122.113"] local_addresses = list(get_local_ipv4_addresses()) #print(local_addresses) #print(peers) _peers = [] for peer in peers: if peer not in local_addresses: print("using %s" % peer) _peers.append(peer) # __peers = list(map(IPv4Address,_peers)) sm = SessionManager(_peers)
class MainWidget(QtGui.QWidget, Ui_MainWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self) self.searchButton.setIcon(KIcon("edit-find")) self.statusUpdater = StatusUpdater() self.state = StateManager(self) self.session = SessionManager() self.basket = BasketDialog(self.state) self.initialize() self.setSelectAll() self.actionButton.setIcon(self.state.getActionIcon()) self.operation = OperationManager(self.state) self.progressDialog = ProgressDialog(self.state) self.summaryDialog = SummaryDialog() self.connectMainSignals() self.connectOperationSignals() def connectMainSignals(self): self.connect(self.actionButton, SIGNAL("clicked()"), self.showBasket) self.connect(self.searchButton, SIGNAL("clicked()"), self.searchActivated) self.connect(self.searchLine, SIGNAL("textEdited(const QString&)"), self.searchLineChanged) self.connect(self.searchLine, SIGNAL("returnPressed()"), self.searchActivated) self.connect(self.searchLine, SIGNAL("clearButtonClicked()"), self.groupFilter) self.connect(self.groupList, SIGNAL("groupChanged()"), self.groupFilter) self.connect(self.groupList, SIGNAL("groupChanged()"), self.searchLine.clear) self.connect(self.groupList, SIGNAL("groupChanged()"), lambda:self.searchButton.setEnabled(False)) self.connect(self.selectAll, SIGNAL("leftClickedUrl(const QString&)"), self.toggleSelectAll) self.connect(self.statusUpdater, SIGNAL("selectedInfoChanged(int, QString, int, QString)"), self.emitStatusBarInfo) self.connect(self.statusUpdater, SIGNAL("finished()"), self.statusUpdated) def connectOperationSignals(self): self.connect(self.operation, SIGNAL("exception(QString)"), self.exceptionCaught) self.connect(self.operation, SIGNAL("finished(QString)"), self.actionFinished) self.connect(self.operation, SIGNAL("started(QString)"), self.actionStarted) self.connect(self.operation, SIGNAL("started(QString)"), self.progressDialog.updateActionLabel) self.connect(self.operation, SIGNAL("operationCancelled()"), self.progressDialog.hide) self.connect(self.operation, SIGNAL("progress(int)"), self.progressDialog.updateProgress) self.connect(self.operation, SIGNAL("operationChanged(QString,QString)"), self.progressDialog.updateOperation) self.connect(self.operation, SIGNAL("packageChanged(int, int, QString)"), self.progressDialog.updateStatus) self.connect(self.operation, SIGNAL("elapsedTime(QString)"), self.progressDialog.updateRemainingTime) self.connect(self.operation, SIGNAL("downloadInfoChanged(QString, QString, QString)"), self.progressDialog.updateCompletedInfo) def initialize(self): waitCursor() self.state.reset() self.initializePackageList() self.initializeGroupList() self.initializeBasket() self.initializeStatusUpdater() self.statusChanged() restoreCursor() def initializeStatusUpdater(self): self.statusUpdater.setModel(self.packageList.model().sourceModel()) def initializeBasket(self): self.basket.setModel(self.packageList.model().sourceModel()) def initializePackageList(self): self.packageList.setModel(PackageProxy(self)) self.packageList.model().setSourceModel(PackageModel(self)) self.packageList.setItemDelegate(PackageDelegate(self)) self.packageList.setColumnWidth(0, 32) self.packageList.setAlternatingRowColors(True) self.packageList.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) self.packageList.setPackages(self.state.packages()) self.connect(self.packageList.model(), SIGNAL("dataChanged(QModelIndex,QModelIndex)"), self.statusChanged) def searchLineChanged(self, text): self.searchButton.setEnabled(bool(text)) def statusUpdated(self): if self.statusUpdater.needsUpdate: self.statusUpdater.needsUpdate = False self.statusChanged() def statusChanged(self): self.setActionEnabled() if self.statusUpdater.isRunning(): self.statusUpdater.needsUpdate = True else: self.emit(SIGNAL("updatingStatus()")) self.statusUpdater.start() def initializeGroupList(self): self.groupList.clear() self.groupList.setAlternatingRowColors(True) self.groupList.setIconSize(QSize(KIconLoader.SizeLarge, KIconLoader.SizeLarge)) self.groupList.setState(self.state) self.groupList.addGroups(self.state.groups()) self.groupFilter() def packageFilter(self, text): self.packageList.model().setFilterRole(Qt.DisplayRole) self.packageList.model().setFilterRegExp(QRegExp(unicode(text), Qt.CaseInsensitive, QRegExp.FixedString)) def groupFilter(self): self.setSelectAll() self.packageList.resetMoreInfoRow() packages = self.state.groupPackages(self.groupList.currentGroup()) self.packageList.model().setFilterRole(GroupRole) waitCursor() self.packageList.model().setFilterPackages(packages) restoreCursor() def searchActivated(self): self.setSelectAll() self.packageList.resetMoreInfoRow() waitCursor() packages = self.packageList.search(str(self.searchLine.text()).split()) self.packageList.model().setFilterRole(GroupRole) self.packageList.model().setFilterPackages(packages) restoreCursor() def setActionButton(self): self.actionButton.setEnabled(False) self.actionButton.setText(self.state.getActionName()) self.actionButton.setIcon(self.state.getActionIcon()) def actionStarted(self, operation): totalPackages = self.packageList.packageCount() self.operation.setTotalPackages(totalPackages) self.progressDialog.reset() self.progressDialog.updateStatus(0, totalPackages, self.state.toBe()) if self.isVisible(): if operation in ["System.Manager.updateRepository", "System.Manager.updateAllRepositories"]: self.progressDialog.repoOperationView() self.progressDialog.show() self.progressDialog.enableCancel() def exceptionCaught(self, message): self.progressDialog.hide() if "urlopen error" in message or "Socket Error" in message: errorTitle = i18n("Network Error") errorMessage = i18n("Please check your network connections and try again.") elif "Access denied" in message or "tr.org.pardus.comar.Comar.PolicyKit" in message: errorTitle = i18n("Authorization Error") errorMessage = i18n("You are not authorized for this operation.") elif "HTTP Error 404": errorTitle = i18n("Pisi Error") errorMessage = i18n("Package not found. It may be upgraded in or removed from the repository. Please try upgrading repository informations.") else: errorTitle = i18n("Pisi Error") errorMessage = message self.messageBox = QtGui.QMessageBox(errorTitle, errorMessage, QtGui.QMessageBox.Critical, QtGui.QMessageBox.Ok, 0, 0) self.messageBox.show() def actionFinished(self, operation): self.searchLine.clear() self.state.reset() self.progressDialog.hide() if operation == "System.Manager.installPackage": self.showSummary() if operation in ["System.Manager.installPackage", "System.Manager.removePackage", "System.Manager.updatePackage"]: self.notifyFinished() self.initialize() def notifyFinished(self): # Since we can not identify the caller yet if not self.operation.totalPackages: return KNotification.event("Summary", self.state.getSummaryInfo(self.operation.totalPackages), QtGui.QPixmap(), None, KNotification.CloseOnTimeout, KComponentData("package-manager", "package-manager", KComponentData.SkipMainComponentRegistration) ) def showSummary(self): self.summaryDialog.setDesktopFiles(self.operation.desktopFiles) if self.summaryDialog.hasApplication(): self.summaryDialog.show() def setActionEnabled(self): enabled = self.packageList.isSelected() self.actionButton.setEnabled(enabled) self.basket.setActionEnabled(enabled) def switchState(self, state, action=True): self.setSelectAll() self.searchLine.clear() self.state.setState(state) self.setActionButton() if action: self.state.stateAction() def emitStatusBarInfo(self, packages, packagesSize, extraPackages, extraPackagesSize): self.emit(SIGNAL("selectionStatusChanged(QString)"), self.state.statusText(packages, packagesSize, extraPackages, extraPackagesSize)) def setSelectAll(self, packages=None): if packages: self.packageList.reverseSelection(packages) self.selectAll.setText(i18n("Select all packages in this group")) self.selectAll.setUrl("All") def setReverseAll(self, packages=None): if packages: self.packageList.selectAll(packages) self.selectAll.setText(i18n("Reverse package selections")) self.selectAll.setUrl("Reverse") def toggleSelectAll(self, text): packages = self.packageList.model().getFilteredPackages() if text == "All": self.setReverseAll(packages) else: self.setSelectAll(packages) self.statusChanged() def showBasket(self): waitCursor() self.statusUpdater.wait() self.basket.show() restoreCursor() def switchSession(self, session): self.session.setSession(session) waitCursor() self.searchLine.clear() self.progressDialog.hide() self.state.setState(StateManager.INSTALL) self.setActionButton() restoreCursor()
class MainWidget(QtGui.QWidget, Ui_MainWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self) self.searchButton.setIcon(KIcon("edit-find")) self.statusUpdater = StatusUpdater() self.state = StateManager(self) self.session = SessionManager() self.basket = BasketDialog(self.state) self.initialize() self.setSelectAll() self.actionButton.setIcon(self.state.getActionIcon()) self.operation = OperationManager(self.state) self.progressDialog = ProgressDialog(self.state) self.summaryDialog = SummaryDialog() self.connectMainSignals() self.connectOperationSignals() def connectMainSignals(self): self.connect(self.actionButton, SIGNAL("clicked()"), self.showBasket) self.connect(self.searchButton, SIGNAL("clicked()"), self.searchActivated) self.connect(self.searchLine, SIGNAL("textEdited(const QString&)"), self.searchLineChanged) self.connect(self.searchLine, SIGNAL("returnPressed()"), self.searchActivated) self.connect(self.searchLine, SIGNAL("clearButtonClicked()"), self.groupFilter) self.connect(self.groupList, SIGNAL("groupChanged()"), self.groupFilter) self.connect(self.groupList, SIGNAL("groupChanged()"), self.searchLine.clear) self.connect(self.groupList, SIGNAL("groupChanged()"), lambda: self.searchButton.setEnabled(False)) self.connect(self.selectAll, SIGNAL("leftClickedUrl(const QString&)"), self.toggleSelectAll) self.connect(self.statusUpdater, SIGNAL("selectedInfoChanged(int, QString, int, QString)"), self.emitStatusBarInfo) self.connect(self.statusUpdater, SIGNAL("finished()"), self.statusUpdated) def connectOperationSignals(self): self.connect(self.operation, SIGNAL("exception(QString)"), self.exceptionCaught) self.connect(self.operation, SIGNAL("finished(QString)"), self.actionFinished) self.connect(self.operation, SIGNAL("started(QString)"), self.actionStarted) self.connect(self.operation, SIGNAL("started(QString)"), self.progressDialog.updateActionLabel) self.connect(self.operation, SIGNAL("operationCancelled()"), self.progressDialog.hide) self.connect(self.operation, SIGNAL("progress(int)"), self.progressDialog.updateProgress) self.connect(self.operation, SIGNAL("operationChanged(QString,QString)"), self.progressDialog.updateOperation) self.connect(self.operation, SIGNAL("packageChanged(int, int, QString)"), self.progressDialog.updateStatus) self.connect(self.operation, SIGNAL("elapsedTime(QString)"), self.progressDialog.updateRemainingTime) self.connect(self.operation, SIGNAL("downloadInfoChanged(QString, QString, QString)"), self.progressDialog.updateCompletedInfo) def initialize(self): waitCursor() self.state.reset() self.initializePackageList() self.initializeGroupList() self.initializeBasket() self.initializeStatusUpdater() self.statusChanged() restoreCursor() def initializeStatusUpdater(self): self.statusUpdater.setModel(self.packageList.model().sourceModel()) def initializeBasket(self): self.basket.setModel(self.packageList.model().sourceModel()) def initializePackageList(self): self.packageList.setModel(PackageProxy(self)) self.packageList.model().setSourceModel(PackageModel(self)) self.packageList.setItemDelegate(PackageDelegate(self)) self.packageList.setColumnWidth(0, 32) self.packageList.setAlternatingRowColors(True) self.packageList.setSelectionMode( QtGui.QAbstractItemView.MultiSelection) self.packageList.setPackages(self.state.packages()) self.connect(self.packageList.model(), SIGNAL("dataChanged(QModelIndex,QModelIndex)"), self.statusChanged) def searchLineChanged(self, text): self.searchButton.setEnabled(bool(text)) def statusUpdated(self): if self.statusUpdater.needsUpdate: self.statusUpdater.needsUpdate = False self.statusChanged() def statusChanged(self): self.setActionEnabled() if self.statusUpdater.isRunning(): self.statusUpdater.needsUpdate = True else: self.emit(SIGNAL("updatingStatus()")) self.statusUpdater.start() def initializeGroupList(self): self.groupList.clear() self.groupList.setAlternatingRowColors(True) self.groupList.setIconSize( QSize(KIconLoader.SizeLarge, KIconLoader.SizeLarge)) self.groupList.setState(self.state) self.groupList.addGroups(self.state.groups()) self.groupFilter() def packageFilter(self, text): self.packageList.model().setFilterRole(Qt.DisplayRole) self.packageList.model().setFilterRegExp( QRegExp(unicode(text), Qt.CaseInsensitive, QRegExp.FixedString)) def groupFilter(self): self.setSelectAll() self.packageList.resetMoreInfoRow() packages = self.state.groupPackages(self.groupList.currentGroup()) self.packageList.model().setFilterRole(GroupRole) waitCursor() self.packageList.model().setFilterPackages(packages) restoreCursor() def searchActivated(self): self.setSelectAll() self.packageList.resetMoreInfoRow() waitCursor() packages = self.packageList.search(str(self.searchLine.text()).split()) self.packageList.model().setFilterRole(GroupRole) self.packageList.model().setFilterPackages(packages) restoreCursor() def setActionButton(self): self.actionButton.setEnabled(False) self.actionButton.setText(self.state.getActionName()) self.actionButton.setIcon(self.state.getActionIcon()) def actionStarted(self, operation): totalPackages = self.packageList.packageCount() self.operation.setTotalPackages(totalPackages) self.progressDialog.reset() self.progressDialog.updateStatus(0, totalPackages, self.state.toBe()) if self.isVisible(): if operation in [ "System.Manager.updateRepository", "System.Manager.updateAllRepositories" ]: self.progressDialog.repoOperationView() self.progressDialog.show() self.progressDialog.enableCancel() def exceptionCaught(self, message): self.progressDialog.hide() if "urlopen error" in message or "Socket Error" in message: errorTitle = i18n("Network Error") errorMessage = i18n( "Please check your network connections and try again.") elif "Access denied" in message or "tr.org.pardus.comar.Comar.PolicyKit" in message: errorTitle = i18n("Authorization Error") errorMessage = i18n("You are not authorized for this operation.") elif "HTTP Error 404": errorTitle = i18n("Pisi Error") errorMessage = i18n( "Package not found. It may be upgraded in or removed from the repository. Please try upgrading repository informations." ) else: errorTitle = i18n("Pisi Error") errorMessage = message self.messageBox = QtGui.QMessageBox(errorTitle, errorMessage, QtGui.QMessageBox.Critical, QtGui.QMessageBox.Ok, 0, 0) self.messageBox.show() def actionFinished(self, operation): self.searchLine.clear() self.state.reset() self.progressDialog.hide() if operation == "System.Manager.installPackage": self.showSummary() if operation in [ "System.Manager.installPackage", "System.Manager.removePackage", "System.Manager.updatePackage" ]: self.notifyFinished() self.initialize() def notifyFinished(self): # Since we can not identify the caller yet if not self.operation.totalPackages: return KNotification.event( "Summary", self.state.getSummaryInfo(self.operation.totalPackages), QtGui.QPixmap(), None, KNotification.CloseOnTimeout, KComponentData("package-manager", "package-manager", KComponentData.SkipMainComponentRegistration)) def showSummary(self): self.summaryDialog.setDesktopFiles(self.operation.desktopFiles) if self.summaryDialog.hasApplication(): self.summaryDialog.show() def setActionEnabled(self): enabled = self.packageList.isSelected() self.actionButton.setEnabled(enabled) self.basket.setActionEnabled(enabled) def switchState(self, state, action=True): self.setSelectAll() self.searchLine.clear() self.state.setState(state) self.setActionButton() if action: self.state.stateAction() def emitStatusBarInfo(self, packages, packagesSize, extraPackages, extraPackagesSize): self.emit( SIGNAL("selectionStatusChanged(QString)"), self.state.statusText(packages, packagesSize, extraPackages, extraPackagesSize)) def setSelectAll(self, packages=None): if packages: self.packageList.reverseSelection(packages) self.selectAll.setText(i18n("Select all packages in this group")) self.selectAll.setUrl("All") def setReverseAll(self, packages=None): if packages: self.packageList.selectAll(packages) self.selectAll.setText(i18n("Reverse package selections")) self.selectAll.setUrl("Reverse") def toggleSelectAll(self, text): packages = self.packageList.model().getFilteredPackages() if text == "All": self.setReverseAll(packages) else: self.setSelectAll(packages) self.statusChanged() def showBasket(self): waitCursor() self.statusUpdater.wait() self.basket.show() restoreCursor() def switchSession(self, session): self.session.setSession(session) waitCursor() self.searchLine.clear() self.progressDialog.hide() self.state.setState(StateManager.INSTALL) self.setActionButton() restoreCursor()