def create_servers_group(servers): """Create an action group for the specified servers.""" servers_group = QActionGroup(self) current_server = self._plugin.network.server for server in servers: is_connected = ( self._plugin.network.connected and server["host"] == current_server["host"] and server["port"] == current_server["port"] ) server_text = "%s:%d" % (server["host"], server["port"]) server_action = QAction(server_text, menu) server_action._server = server server_action.setCheckable(True) server_action.setChecked(is_connected) servers_group.addAction(server_action) def server_action_triggered(server_action): """ Called when a action is clicked. Connects to the new server or disconnects from the old server. """ was_connected = ( self._plugin.network.connected and self._plugin.network.server == server ) self._plugin.network.stop_server() self._plugin.network.disconnect() if not was_connected: self._plugin.network.connect(server_action._server) servers_group.triggered.connect(server_action_triggered) return servers_group
def _context_menu(self, point): """ Called when the widget is right-clicked to display the context menu. :param point: the location where the click happened """ logger.debug("Opening widget context menu") menu = QMenu(self) # Add the network settings settings = QAction('Network Settings', menu) iconPath = self._plugin.resource('settings.png') settings.setIcon(QIcon(iconPath)) # Add a handler on the action def settingsActionTriggered(): dialog = NetworkSettingsDialog(self._plugin) dialog.exec_() settings.triggered.connect(settingsActionTriggered) menu.addAction(settings) # Add each of the servers if self._plugin.core.servers: menu.addSeparator() serverGroup = QActionGroup(self) def serverActionTriggered(serverAction): if not self._plugin.network.connected and \ serverAction.isChecked(): self._plugin.network.connect(serverAction._server.host, serverAction._server.port) else: self._plugin.network.disconnect() for server in self._plugin.core.servers: isConnected = self._plugin.network.connected \ and server.host == self._plugin.network.host \ and server.port == self._plugin.network.port serverAction = QAction('%s:%d' % (server.host, server.port), menu, checkable=True) serverAction._server = server serverAction.setChecked(isConnected) serverGroup.addAction(serverAction) menu.addActions(serverGroup.actions()) serverGroup.triggered.connect(serverActionTriggered) # Show the context menu menu.exec_(self.mapToGlobal(point))
def _context_menu(self, point): """ Called when the widget is right-clicked to display the context menu. :param point: the location where the click happened """ logger.debug("Opening widget context menu") menu = QMenu(self) # Add the settings settings = QAction('Settings...', menu) iconPath = self._plugin.resource('settings.png') settings.setIcon(QIcon(iconPath)) def dialog_accepted(dialog): name, color, notifications, navbarColorizer = dialog.get_result() # Add a handler on the action def settingsActionTriggered(): dialog = SettingsDialog(self._plugin) dialog.accepted.connect(partial(dialog_accepted, dialog)) dialog.exec_() settings.triggered.connect(settingsActionTriggered) menu.addAction(settings) menu.addSeparator() integrated = QAction('Integrated Server', menu) integrated.setCheckable(True) def integratedActionTriggered(): if integrated.isChecked(): self._plugin.network.start_server() else: self._plugin.network.stop_server() integrated.setChecked(self._plugin.network.server_running()) integrated.triggered.connect(integratedActionTriggered) menu.addAction(integrated) # Add each of the servers if self._plugin.core.servers: menu.addSeparator() serverGroup = QActionGroup(self) currentServer = self._plugin.network.server def serverActionTriggered(serverAction): isConnected = self._plugin.network.connected \ and server["host"] == currentServer["host"] \ and server["port"] == currentServer["port"] self._plugin.network.stop_server() if not isConnected: self._plugin.network.connect(serverAction._server) for server in self._plugin.core.servers: isConnected = self._plugin.network.connected \ and server["host"] == currentServer["host"] \ and server["port"] == currentServer["port"] serverText = '%s:%d' % (server["host"], server["port"]) serverAction = QAction(serverText, menu) serverAction._server = server serverAction.setCheckable(True) serverAction.setChecked(isConnected) serverGroup.addAction(serverAction) menu.addActions(serverGroup.actions()) serverGroup.triggered.connect(serverActionTriggered) # Show the context menu menu.exec_(self.mapToGlobal(point))