Exemplo n.º 1
0
 def create_widget(self, parent):
     from PyQt4.QtGui import QSortFilterProxyModel
     from PyQt4.QtCore import QTimer, Qt
     from members_table.members_table_model import MembersTableModel
     from lunchinator.table_widget import TableWidget
     
     class NameSortProxyModel(QSortFilterProxyModel):
         def lessThan(self, left, right):
             # compare by lunch time
             ldata = self.sourceModel().data(left, MembersTableModel.SORT_ROLE)
             rdata = self.sourceModel().data(right, MembersTableModel.SORT_ROLE)
             if ldata != rdata:
                 return super(NameSortProxyModel, self).lessThan(left, right)
             
             # compare by name, case sensitive
             lindex = self.sourceModel().index(left.row(), MembersTableModel.NAME_COL_INDEX)
             rindex = self.sourceModel().index(right.row(), MembersTableModel.NAME_COL_INDEX)
             
             res = super(NameSortProxyModel, self).lessThan(lindex, rindex)
             if res or super(NameSortProxyModel, self).lessThan(rindex, lindex):
                 return res
             
             # compare by name, byte order
             ls = convert_string(self.sourceModel().data(lindex, MembersTableModel.SORT_ROLE).toString())
             rs = convert_string(self.sourceModel().data(rindex, MembersTableModel.SORT_ROLE).toString())
             if ls != rs:
                 return ls < rs
             
             # compare by peer ID 
             return self.sourceModel().keys[left.row()] < self.sourceModel().keys[right.row()]
     
     self.membersTable = TableWidget(parent, "Add Host", self.addHostClicked, sortedColumn=MembersTableModel.LUNCH_TIME_COL_INDEX, placeholderText="Enter hostname")
     self.membersTable.getTable().setContextMenuPolicy(Qt.CustomContextMenu)
     self.membersTable.getTable().customContextMenuRequested.connect(self._showContextMenu)
     
     # initialize members table
     self.membersModel = MembersTableModel(get_peers(), self.logger)
     self.membersProxyModel = NameSortProxyModel(self.membersTable)
     self.membersProxyModel.setSortCaseSensitivity(Qt.CaseInsensitive)
     self.membersProxyModel.setSortRole(MembersTableModel.SORT_ROLE)
     self.membersProxyModel.setDynamicSortFilter(True)
     self.membersProxyModel.setSourceModel(self.membersModel)
     self.membersTable.setModel(self.membersProxyModel)
     
     self.membersTable.setColumnWidth(MembersTableModel.NAME_COL_INDEX, 150)
     self.membersTable.setColumnWidth(MembersTableModel.GROUP_COL_INDEX, 150)
     
     get_notification_center().connectPeerAppended(self.membersModel.externalRowAppended)
     get_notification_center().connectPeerUpdated(self.membersModel.externalRowUpdated)
     get_notification_center().connectPeerRemoved(self.membersModel.externalRowRemoved)
     
     get_notification_center().connectMemberAppended(self._updatePeer)
     get_notification_center().connectMemberRemoved(self._updatePeer)
     
     get_notification_center().connectDisplayedPeerNameChanged(self._displayedNameChanged)
     
     self._lunchTimeColumnTimer = QTimer(self.membersModel)
     self._lunchTimeColumnTimer.timeout.connect(self._startSyncedTimer)
     self._lunchTimeColumnTimer.start(msecUntilNextMinute())
     
     return self.membersTable
Exemplo n.º 2
0
 def init_menu(self, parent):        
     # create the plugin submenu
     menu = QMenu(parent)
     plugin_menu = QMenu("PlugIns", menu)
     
     self.pluginActions = None
     if get_settings().get_plugins_enabled():
         allPlugins = [x for x in get_plugin_manager().getAllPlugins() if not x.plugin_object.is_activation_forced()]
         
         if get_settings().get_group_plugins():
             self.pluginActions = {}
             catMenus = {}
             
             for pluginInfo in sorted(allPlugins, key=lambda info : self._getDisplayedName(info)):                
                 categoryMenu = None
                 anAction = None
                 for aCat in pluginInfo.categories:
                     if aCat in catMenus:
                         categoryMenu = catMenus[aCat]
                     else:
                         categoryMenu = QMenu(aCat, plugin_menu)
                         catMenus[aCat] = categoryMenu
                 
                     if anAction == None:
                         anAction = self._create_plugin_action(pluginInfo, categoryMenu, aCat)
                     else:
                         categoryMenu.addAction(anAction)
                     
                     if aCat in self.pluginActions:
                         self.pluginActions[aCat].append(anAction)
                     else:
                         self.pluginActions[aCat] = [anAction]
             for _cat, aMenu in sorted(catMenus.iteritems(), key=lambda aTuple : aTuple[0]):
                 plugin_menu.addMenu(aMenu)
         else:
             self.pluginActions = []
             for pluginInfo in sorted(allPlugins, key=lambda info : self._getDisplayedName(info)):
                 anAction = self._create_plugin_action(pluginInfo, plugin_menu, pluginInfo.categories[0])
                 self.pluginActions.append(anAction)
     
     # main _menu
     self._memberStatusAction = menu.addAction("Initializing...")
     self._memberStatusAction.setEnabled(False)
     
     if hasattr(menu, "addSeparator"):
         menu.addSeparator()
         
     get_notification_center().connectMemberAppended(self._updateMemberStatus)
     get_notification_center().connectMemberUpdated(self._updateMemberStatus)
     get_notification_center().connectMemberRemoved(self._updateMemberStatus)
     self.memberStatusUpdateTimer = QTimer(self)
     self.memberStatusUpdateTimer.timeout.connect(self._startSyncedTimer)
     self.memberStatusUpdateTimer.start(msecUntilNextMinute())
     
     anAction = menu.addAction('Call for lunch')
     anAction.triggered.connect(partial(self.sendMessageClicked, u'lunch'))
     
     anAction = menu.addAction('Show Lunchinator')
     anAction.triggered.connect(self.openWindowClicked)
     
     anAction = menu.addAction(u"Change today's lunch time")
     anAction.triggered.connect(self.changeNextLunchTime)
     
     if hasattr(menu, "addSeparator"):
         menu.addSeparator()
     
     anAction = menu.addAction('Settings')
     anAction.triggered.connect(self.openSettingsClicked)
     
     menu.addMenu(plugin_menu)
     
     if hasattr(menu, "addSeparator"):
         menu.addSeparator()
     
     self._restartStatusAction = menu.addAction(self._restartReason)
     self._restartStatusAction.setEnabled(False)
     self._restartAction = menu.addAction("Restart")
     self._restartAction.triggered.connect(partial(restart, getCoreLogger()))
     if self._restartReason:
         self._restartStatusAction.setVisible(True)
         self._restartAction.setVisible(True)
     else:
         self._restartStatusAction.setVisible(False)
         self._restartAction.setVisible(False)
     
     self._appUpdateStatusAction = menu.addAction("Lunchinator can be updated")
     self._appUpdateStatusAction.setEnabled(False)
     self._appUpdateStatusAction.setVisible(self._updateAvailable)
     
     self._repoUpdateStatusAction = menu.addAction("")
     self._repoUpdateStatusAction.setEnabled(False)
     self._updateRepoUpdateStatusAction()
     
     self._installUpdatesAction = menu.addAction("Install updates and restart")
     self._installUpdatesAction.triggered.connect(get_notification_center().emitInstallUpdates)
     self._installUpdatesAction.setVisible(self._updateAvailable)
     
     anAction = menu.addAction('Exit')
     anAction.triggered.connect(self.quitClicked)
         
     return menu