def treeSelectionChanged_Bg(self, selected, deselected): if self.__init_state < self.INIT_STATE_CONSISTENT: return # force the UI controls off while the data is changing self.updateEnableStates(force_disabled=True) # set the table view to the selected item in the tree self.debugLog('treeSelectionChanged_Bg calling selectionChanged_Bg') yield from self.tree_model.selectionChanged_Bg(selected, deselected) self.filter_text.clear() scm_project = self.table_view.selectedScmProject() if (scm_project is not None and self.__ui_active_scm_type != scm_project.scmType()): if self.__ui_active_scm_type is not None: self.debugLog('treeSelectionChanged hiding UI for %s' % (self.__ui_active_scm_type, )) self.all_ui_components[ self.__ui_active_scm_type].hideUiComponents() self.debugLog('treeSelectionChanged showing UI for %s' % (scm_project.scmType(), )) self.__ui_active_scm_type = scm_project.scmType() self.all_ui_components[ self.__ui_active_scm_type].showUiComponents() self.updateActionEnabledStates() self.__updateBranches() folder = self.table_view.selectedAbsoluteFolder() if folder is None: self.folder_text.clear() else: try: # try to convert to ~ form if sys.platform == 'win32': folder = folder.relative_to( wb_platform_specific.getHomeFolder()) folder = '~\\%s' % (folder, ) else: folder = folder.relative_to( wb_platform_specific.getHomeFolder()) folder = '~/%s' % (folder, ) except ValueError: folder = str(folder) self.folder_text.setText(folder)
def __init__(self, app): super().__init__(app, T_('General')) if self.app is None: self.prefs = None else: self.prefs = self.app.prefs.projects_defaults self.new_projects_folder = QtWidgets.QLineEdit() if self.prefs.new_projects_folder is not None: self.new_projects_folder.setText( str(self.prefs.new_projects_folder)) else: # show the default self.new_projects_folder.setText( str(wb_platform_specific.getHomeFolder())) self.browse_folder = QtWidgets.QPushButton(T_('Browse...')) self.browse_folder.clicked.connect(self.__pickFolder) self.addRow(T_('New projects folder'), self.new_projects_folder, self.browse_folder) self.dark_theme = QtWidgets.QCheckBox( T_("Force use of a Dark Mode Theme")) self.dark_theme.setChecked(self.prefs.force_dark_mode) self.addRow(T_('Theme'), self.dark_theme)
def treeSelectionChanged_Bg( self, selected, deselected ): if self.__init_state < self.INIT_STATE_CONSISTENT: return # force the UI controls off while the data is changing self.updateEnableStates( force_disabled=True ) # set the table view to the selected item in the tree self._debug( 'treeSelectionChanged_Bg calling selectionChanged_Bg' ) yield from self.tree_model.selectionChanged_Bg( selected, deselected ) self.filter_text.clear() scm_project = self.table_view.selectedScmProject() if( scm_project is not None and self.__ui_active_scm_type != scm_project.scmType() ): if self.__ui_active_scm_type is not None: self._debug( 'treeSelectionChanged hiding UI for %s' % (self.__ui_active_scm_type,) ) self.all_ui_components[ self.__ui_active_scm_type ].hideUiComponents() self._debug( 'treeSelectionChanged showing UI for %s' % (scm_project.scmType(),) ) self.__ui_active_scm_type = scm_project.scmType() self.all_ui_components[ self.__ui_active_scm_type ].showUiComponents() self.updateActionEnabledStates() self.__updateBranches() folder = self.table_view.selectedAbsoluteFolder() if folder is None: self.folder_text.clear() else: try: # try to convert to ~ form if sys.platform == 'win32': folder = folder.relative_to( wb_platform_specific.getHomeFolder() ) folder = '~\\%s' % (folder,) else: folder = folder.relative_to( wb_platform_specific.getHomeFolder() ) folder = '~/%s' % (folder,) except ValueError: folder = str( folder ) self.folder_text.setText( folder )
def pickFolder(parent, orig_folder): if orig_folder is None or orig_folder == '.': orig_folder = wb_platform_specific.getHomeFolder() folder = orig_folder if folder.exists(): if not folder.is_dir(): folder = folder.parent else: while not orig_folder.exists(): orig_folder = orig_folder.parent file_browser = QtWidgets.QFileDialog(parent) file_browser.setFileMode(file_browser.Directory) # # When ShowDirsOnly is True QFileDialog show a number of # bugs: # 1. folder double click edits folder name # 2. setDirectory does not work, always starts in $HOME # file_browser.setOption(file_browser.ShowDirsOnly, False) file_browser.setOption(file_browser.ReadOnly, True) file_browser.setViewMode(file_browser.Detail) file_browser.setFilter(QtCore.QDir.Hidden | QtCore.QDir.Dirs) file_browser.setDirectory(str(folder)) file_browser.selectFile(str(orig_folder)) if file_browser.exec_(): all_directories = file_browser.selectedFiles() assert len(all_directories) == 1 return pathlib.Path(all_directories[0]) return None
def pickFolder( parent, orig_folder ): if orig_folder is None or orig_folder == '.': orig_folder = wb_platform_specific.getHomeFolder() folder = orig_folder if folder.exists(): if not folder.is_dir(): folder = folder.parent else: while not orig_folder.exists(): orig_folder = orig_folder.parent file_browser = QtWidgets.QFileDialog( parent ) file_browser.setFileMode( file_browser.Directory ) # # When ShowDirsOnly is True QFileDialog show a number of # bugs: # 1. folder double click edits folder name # 2. setDirectory does not work, always starts in $HOME # file_browser.setOption( file_browser.ShowDirsOnly, False ) file_browser.setOption( file_browser.ReadOnly, True ) file_browser.setViewMode( file_browser.Detail ) file_browser.setFilter( QtCore.QDir.Hidden | QtCore.QDir.Dirs ) file_browser.setDirectory( str( folder ) ) file_browser.selectFile( str( orig_folder ) ) if file_browser.exec_(): all_directories = file_browser.selectedFiles() assert len(all_directories) == 1 return pathlib.Path( all_directories[0] ) return None
def appActionViewLog( self ): wb_shell_commands.EditFile( self.app, wb_platform_specific.getHomeFolder(), [wb_platform_specific.getLogFilename()] )
def appActionViewLog(self): wb_shell_commands.editFile(self.app, wb_platform_specific.getHomeFolder(), [wb_platform_specific.getLogFilename()])
def __init__( self, app ): self.app = app self.all_factories = app.all_factories super().__init__() em = self.app.fontMetrics().width( 'm' ) self.setMinimumWidth( 100*em ) # ------------------------------------------------------------ self.page_id_start = 1 self.page_id_browse_existing = 2 self.page_id_scan_for_existing = 3 self.page_id_name = 4 next_id = 5 self.all_clone_pages = {} self.all_init_pages = {} for scm_name in sorted( self.all_factories ): f = self.all_factories[ scm_name ] for page in f.projectDialogClonePages( self ): self.all_clone_pages[ next_id ] = page next_id += 1 for page in f.projectDialogInitPages( self ): self.all_init_pages[ next_id ] = page next_id += 1 # needs all_clone_pages and all_init_pages self.page_start = PageAddProjectStart( self ) self.page_browse_existing = PageAddProjectBrowseExisting() self.page_scan_for_existing = PageAddProjectScanForExisting() self.page_name = PageAddProjectName() self.setPage( self.page_id_start, self.page_start ) self.setPage( self.page_id_scan_for_existing, self.page_scan_for_existing ) self.setPage( self.page_id_browse_existing, self.page_browse_existing ) self.setPage( self.page_id_name, self.page_name ) for id_, page in sorted( self.all_clone_pages.items() ): self.setPage( id_, page ) for id_, page in sorted( self.all_init_pages.items() ): self.setPage( id_, page ) #------------------------------------------------------------ self.all_existing_project_names = set() self.all_existing_project_paths = set() if self.app is not None: prefs = self.app.prefs for project in prefs.getAllProjects(): self.all_existing_project_names.add( project.name.lower() ) self.all_existing_project_paths.add( project.path ) self.project_default_parent_folder = wb_platform_specific.getHomeFolder() self.scm_type = None self.action = None self.wc_path = None self.scm_url = None self.name = None
def __init__(self, app): self.app = app self.all_factories = app.all_factories super().__init__() self.setWindowTitle( T_('Add Project Wizard - %s') % (' '.join(app.app_name_parts), )) em = self.app.fontMetrics().width('m') self.setMinimumWidth(60 * em) #------------------------------------------------------------ self.all_existing_project_names = set() self.all_existing_project_paths = set() if self.app is not None: prefs = self.app.prefs for project in prefs.getAllProjects(): self.all_existing_project_names.add(project.name.lower()) self.all_existing_project_paths.add(project.path) if self.app.prefs.projects_defaults.new_projects_folder is not None: self.project_default_parent_folder = pathlib.Path( self.app.prefs.projects_defaults.new_projects_folder) else: self.project_default_parent_folder = wb_platform_specific.getHomeFolder( ) self.scm_type = None self.action = None self.__project_folder = None self.scm_url = None self.scm_specific_state = None self.__name = None # ------------------------------------------------------------ self.page_id_start = 1 self.page_id_folder = 2 self.page_id_name = 3 next_id = 4 self.all_existing_pages = {} self.all_clone_pages = {} self.all_init_pages = {} # first the special "existing" pages for page in (PageAddProjectScanForExisting(self), PageAddProjectBrowseExisting(self)): self.all_existing_pages[next_id] = page next_id += 1 for scm_name in sorted(self.all_factories): f = self.all_factories[scm_name] for page in f.projectDialogExistingPages(self): self.all_existing_pages[next_id] = page next_id += 1 for page in f.projectDialogClonePages(self): self.all_clone_pages[next_id] = page next_id += 1 for page in f.projectDialogInitPages(self): self.all_init_pages[next_id] = page next_id += 1 # needs all_clone_pages and all_init_pages self.page_start = PageAddProjectStart(self) self.page_folder = PageAddProjectFolder(self) self.page_name = PageAddProjectName(self) self.setPage(self.page_id_start, self.page_start) self.setPage(self.page_id_folder, self.page_folder) self.setPage(self.page_id_name, self.page_name) for id_, page in sorted(self.all_existing_pages.items()): self.setPage(id_, page) for id_, page in sorted(self.all_clone_pages.items()): self.setPage(id_, page) for id_, page in sorted(self.all_init_pages.items()): self.setPage(id_, page)