예제 #1
0
    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)
예제 #2
0
    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()] )
예제 #7
0
 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)