def update_env_menu(self): """ """ envs_list_actions = [] envs = self.get_enviroments() self.envs_list_menu.clear() for env in envs: def trigger(value=False, e=env): return lambda: self.set_environments(e) a = create_action(self, env, triggered=trigger()) envs_list_actions.append(a) add_actions(self.envs_list_menu, envs_list_actions)
def setup_window(self): """ """ self.close_action = create_action(self, _("&Quit"), triggered=self.close) self.file_menu_actions.append(self.close_action) self.file_menu = self.menuBar().addMenu(_("&File")) add_actions(self.file_menu, self.file_menu_actions) # Environments self.add_env_action = create_action(self, _("&Add"), triggered=self.add_env) self.clone_env_action = create_action(self, _("&Clone"), triggered=self.clone_env) self.remove_env_action = create_action(self, _("&Remove"), triggered=self.remove_env) self.envs_list_menu = QMenu(_('Environments')) self.envs_menu_actions = [self.add_env_action, self.clone_env_action, self.remove_env_action, None, self.envs_list_menu] self.envs_menu = self.menuBar().addMenu(_("&Environments")) add_actions(self.envs_menu, self.envs_menu_actions) self.update_env_menu() # Channels self.envs_menu = self.menuBar().addMenu(_("&Channels")) # Tools self.preferences_action = create_action(self, _("&Preferences"), triggered=self.preferences) self.tools_menu_actions.append(self.preferences_action) self.tools_menu = self.menuBar().addMenu(_("&Tools")) add_actions(self.tools_menu, self.tools_menu_actions) # Help self.report_action = create_action(self, _("&Report issue"), triggered=self.report_issue) self.about_action = create_action(self, _("&About"), triggered=self.about) self.help_menu_actions.append(self.report_action) self.help_menu_actions.append(self.about_action) self.help_menu = self.menuBar().addMenu(_("&Help")) add_actions(self.help_menu, self.help_menu_actions) self.setWindowIcon(get_icon('condapackages.png'))
def context_menu_requested(self, event, right_click=False): """ Custom context menu. """ if self.proxy_model is None: return self._menu = QMenu(self) index = self.currentIndex() model_index = self.proxy_model.mapToSource(index) row_data = self.source_model.row(model_index.row()) column = model_index.column() name = row_data[const.COL_NAME] # package_type = row_data[const.COL_PACKAGE_TYPE] versions = self.source_model.get_package_versions(name) current_version = self.source_model.get_package_version(name) # if column in [const.COL_ACTION, const.COL_VERSION, const.COL_NAME]: if column in [const.COL_ACTION] and not right_click: is_installable = self.source_model.is_installable(model_index) is_removable = self.source_model.is_removable(model_index) is_upgradable = self.source_model.is_upgradable(model_index) action_status = self.source_model.action_status(model_index) actions = [] action_unmark = create_action( self, _('Unmark'), triggered=lambda: self.set_action_status(model_index, const.ACTION_NONE, current_version)) action_install = create_action( self, _('Mark for installation'), triggered=lambda: self.set_action_status(model_index, const.ACTION_INSTALL, versions[-1])) action_upgrade = create_action( self, _('Mark for upgrade'), triggered=lambda: self.set_action_status(model_index, const.ACTION_UPGRADE, versions[-1])) action_remove = create_action( self, _('Mark for removal'), triggered=lambda: self.set_action_status(model_index, const.ACTION_REMOVE, current_version)) version_actions = [] for version in reversed(versions): def trigger(model_index=model_index, action=const.ACTION_INSTALL, version=version): return lambda: self.set_action_status(model_index, status=action, version=version) if version == current_version: version_action = create_action( self, version, icon=QIcon(), triggered=trigger(model_index, const.ACTION_INSTALL, version)) if not is_installable: version_action.setCheckable(True) version_action.setChecked(True) version_action.setDisabled(True) elif version != current_version: if ((version in versions and versions.index(version)) > (current_version in versions and versions.index(current_version))): upgrade_or_downgrade_action = const.ACTION_UPGRADE else: upgrade_or_downgrade_action = const.ACTION_DOWNGRADE if is_installable: upgrade_or_downgrade_action = const.ACTION_INSTALL version_action = create_action( self, version, icon=QIcon(), triggered=trigger(model_index, upgrade_or_downgrade_action, version)) version_actions.append(version_action) install_versions_menu = QMenu('Mark for specific version ' 'installation', self) add_actions(install_versions_menu, version_actions) actions = [action_unmark, action_install, action_upgrade, action_remove] actions += [None, install_versions_menu] install_versions_menu.setEnabled(len(version_actions) > 1) if action_status is const.ACTION_NONE: action_unmark.setDisabled(True) action_install.setDisabled(not is_installable) action_upgrade.setDisabled(not is_upgradable) action_remove.setDisabled(not is_removable) install_versions_menu.setDisabled(False) else: action_unmark.setDisabled(False) action_install.setDisabled(True) action_upgrade.setDisabled(True) action_remove.setDisabled(True) install_versions_menu.setDisabled(True) elif right_click: license_ = row_data[const.COL_LICENSE] metadata = self.metadata_links.get(name, {}) pypi = metadata.get('pypi', '') home = metadata.get('home', '') dev = metadata.get('dev', '') docs = metadata.get('docs', '') q_pypi = QIcon(get_image_path('python.png')) q_home = QIcon(get_image_path('home.png')) q_docs = QIcon(get_image_path('conda_docs.png')) if 'git' in dev: q_dev = QIcon(get_image_path('conda_github.png')) elif 'bitbucket' in dev: q_dev = QIcon(get_image_path('conda_bitbucket.png')) else: q_dev = QIcon() if 'mit' in license_.lower(): lic = 'http://opensource.org/licenses/MIT' elif 'bsd' == license_.lower(): lic = 'http://opensource.org/licenses/BSD-3-Clause' else: lic = None actions = [] if license_ != '': actions.append(create_action(self, _('License: ' + license_), icon=QIcon(), triggered=lambda: self.open_url(lic))) actions.append(None) if pypi != '': actions.append(create_action(self, _('Python Package Index'), icon=q_pypi, triggered=lambda: self.open_url(pypi))) if home != '': actions.append(create_action(self, _('Homepage'), icon=q_home, triggered=lambda: self.open_url(home))) if docs != '': actions.append(create_action(self, _('Documentation'), icon=q_docs, triggered=lambda: self.open_url(docs))) if dev != '': actions.append(create_action(self, _('Development'), icon=q_dev, triggered=lambda: self.open_url(dev))) if actions and len(actions) > 1: # self._menu = QMenu(self) add_actions(self._menu, actions) if event.type() == QEvent.KeyRelease: rect = self.visualRect(index) global_pos = self.viewport().mapToGlobal(rect.bottomRight()) else: pos = QPoint(event.x(), event.y()) global_pos = self.viewport().mapToGlobal(pos) self._menu.popup(global_pos)
def context_menu_requested(self, event): """Custom context menu.""" index = self.current_index model_index = self.proxy_model.mapToSource(index) row = self.source_model.row(model_index.row()) column = model_index.column() if column in [const.INSTALL, const.UPGRADE, const.DOWNGRADE]: return elif column in [const.VERSION]: name = self.source_model.row(model_index.row())[const.NAME] versions = self.source_model.get_package_versions(name) actions = [] for version in reversed(versions): actions.append(create_action(self, version, icon=QIcon())) else: name, license_ = row[const.NAME], row[const.LICENSE] metadata = self._parent.get_package_metadata(name) pypi = metadata['pypi'] home = metadata['home'] dev = metadata['dev'] docs = metadata['docs'] q_pypi = QIcon(get_image_path('python.png')) q_home = QIcon(get_image_path('home.png')) q_docs = QIcon(get_image_path('conda_docs.png')) if 'git' in dev: q_dev = QIcon(get_image_path('conda_github.png')) elif 'bitbucket' in dev: q_dev = QIcon(get_image_path('conda_bitbucket.png')) else: q_dev = QIcon() if 'mit' in license_.lower(): lic = 'http://opensource.org/licenses/MIT' elif 'bsd' == license_.lower(): lic = 'http://opensource.org/licenses/BSD-3-Clause' else: lic = None actions = [] if license_ != '': actions.append(create_action(self, _('License: ' + license_), icon=QIcon(), triggered=lambda: self.open_url(lic))) actions.append(None) if pypi != '': actions.append(create_action(self, _('Python Package Index'), icon=q_pypi, triggered=lambda: self.open_url(pypi))) if home != '': actions.append(create_action(self, _('Homepage'), icon=q_home, triggered=lambda: self.open_url(home))) if docs != '': actions.append(create_action(self, _('Documentation'), icon=q_docs, triggered=lambda: self.open_url(docs))) if dev != '': actions.append(create_action(self, _('Development'), icon=q_dev, triggered=lambda: self.open_url(dev))) if len(actions) > 1: self._menu = QMenu(self) pos = QPoint(event.x(), event.y()) add_actions(self._menu, actions) self._menu.popup(self.viewport().mapToGlobal(pos))