Beispiel #1
0
    def _create_item(self, change, shelver, trees, old_changes):
        """Create QTreeWidgetItem for file list from Change instance."""
        ch = Change(change, shelver, trees)
        item = QtWidgets.QTreeWidgetItem()

        if ch.kind == 'directory':
            item.setIcon(0, get_icon("folder", 16))
        else:
            item.setIcon(0, get_icon("file", 16))
        item.change = ch
        item.setText(0, ch.disp_text)
        item.setText(1, gettext(ch.status))
        if ch.status == 'modify text':
            item.setText(2, '0/%d' % len(ch.parsed_patch.hunks))
        brush = self.brushes.get(ch.status)
        if brush:
            for i in range(3):
                item.setForeground(i, brush)
        item.setCheckState(0, QtCore.Qt.Unchecked)

        if old_changes:
            old_change = old_changes.get((ch.file_id, ch.status))
            if old_change and old_change.is_same_change(ch):
                # Keep selection when reloading
                if ch.status == 'modify text':
                    item.change = old_change
                    self.update_item(item)
                else:
                    item.setCheckState(0, QtCore.Qt.Checked)
        return item
Beispiel #2
0
    def load_diff(self, tree, base_tree):
        self.file_view.clear()

        for di in DiffItem.iter_items((base_tree, tree), lock_trees=False):
            di.load()

            old_path, new_path = di.paths
            if di.versioned == (True, False):
                text = old_path
            elif di.versioned == (False, True):
                text = new_path
            elif di.paths[0] != di.paths[1]:
                text = '%s => %s' % (old_path, new_path)
            else:
                text = old_path

            item = QtWidgets.QTreeWidgetItem()
            item.setText(0, text)
            item.setText(1, gettext(di.status))
            if (di.kind[1] or di.kind[0]) == 'directory':
                item.setIcon(0, get_icon("folder", 16))
            else:
                item.setIcon(0, get_icon("file", 16))
            item.diffitem = di
            brush = self.brushes.get(di.status)
            if brush:
                item.setForeground(0, brush)
                item.setForeground(1, brush)
            self.file_view.addTopLevelItem(item)
Beispiel #3
0
    def __init__(self, window, text_edit, show_action):
        QtWidgets.QToolBar.__init__(self, gettext("Find"), window)
        self.text_edits = []
        if isinstance(text_edit, list) or isinstance(text_edit, tuple):
            self.set_text_edits(text_edit)
        else:
            self.set_text_edits([text_edit])
        self.show_action = show_action

        self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        self.setMovable(False)

        find_label = QtWidgets.QLabel(gettext("Find: "), self)
        self.addWidget(find_label)

        self.find_text = QtWidgets.QLineEdit(self)
        self.addWidget(self.find_text)
        find_label.setBuddy(self.find_text)

        self.found_palette = QtGui.QPalette()
        self.not_found_palette = QtGui.QPalette()
        self.not_found_palette.setColor(QtGui.QPalette.Active,
                                        QtGui.QPalette.Base, QtCore.Qt.red)
        self.not_found_palette.setColor(QtGui.QPalette.Active,
                                        QtGui.QPalette.Text, QtCore.Qt.white)

        prev = self.addAction(get_icon("go-previous"), gettext("Previous"))
        prev.setShortcut(QtGui.QKeySequence.FindPrevious)
        show_shortcut_hint(prev)

        next = self.addAction(get_icon("go-next"), gettext("Next"))
        next.setShortcut(QtGui.QKeySequence.FindNext)
        show_shortcut_hint(next)

        self.case_sensitive = QtWidgets.QCheckBox(gettext("Case sensitive"),
                                                  self)
        self.addWidget(self.case_sensitive)
        self.whole_words = QtWidgets.QCheckBox(gettext("Whole words"), self)
        self.addWidget(self.whole_words)

        close_find = QtWidgets.QAction(self)
        close_find.setIcon(self.style().standardIcon(
            QtWidgets.QStyle.SP_DialogCloseButton))
        self.addAction(close_find)
        close_find.setShortcut((QtCore.Qt.Key_Escape))
        close_find.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut)
        close_find.setStatusTip(gettext("Close find"))
        self.show_action.toggled[bool].connect(self.show_action_toggle)
        close_find.triggered[bool].connect(self.close_triggered)
        self.find_text.textChanged['QString'].connect(self.find_text_changed)
        next.triggered[bool].connect(self.find_next)
        prev.triggered[bool].connect(self.find_prev)
        self.case_sensitive.stateChanged[int].connect(self.find_text_changed)
        self.whole_words.stateChanged[int].connect(self.find_text_changed)
        self.find_text.returnPressed.connect(self.find_next)
Beispiel #4
0
    def refresh(self):
        self.loaded = False
        self.clear()
        tree = WorkingTree.open_containing(self.directory)[0]
        tree.lock_read()
        try:
            manager = tree.get_shelf_manager()
            shelves = manager.active_shelves()
            for shelf_id in reversed(shelves):
                message = manager.get_metadata(shelf_id).get('message')
                item = QtWidgets.QTreeWidgetItem()
                item.setText(0, str(shelf_id))
                item.setText(1, message or gettext('<no message>'))
                item.setIcon(0, get_icon("folder", 16))
                item.shelf_id = shelf_id
                self.shelve_view.addTopLevelItem(item)
            self.tree = tree
            self.manager = manager

            branch = tree.branch
            if self.initial_encoding is None:
                encoding = get_set_encoding(None, branch)
                self.initial_encoding = encoding            # save real encoding for the next time
                self.encoding_selector.encoding = encoding  # set encoding selector
            tabwidth = get_set_tab_width_chars(branch)
            self.tabwidth_selector.setTabWidth(tabwidth)
            self._on_tabwidth_changed(tabwidth)

        finally:
            tree.unlock()
        self.update()
        self.loaded = True
Beispiel #5
0
    def __init__(self, anotate_window, show_action):
        QtWidgets.QToolBar.__init__(self, gettext("Goto Line"), anotate_window)
        self.anotate_window = anotate_window
        if 0:
            self.anotate_window = AnnotateWindow()
        self.show_action = show_action

        self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        self.setMovable(False)

        label = QtWidgets.QLabel(gettext("Goto Line: "), self)
        self.addWidget(label)

        self.line_edit = QtWidgets.QLineEdit(self)
        # QIntValidator is working in python3, so we'll use that
        # self.line_edit.setValidator(IntValidator(self.line_edit))
        self.line_edit.setValidator(QtGui.QIntValidator())
        self.addWidget(self.line_edit)
        label.setBuddy(self.line_edit)

        go = self.addAction(get_icon("go-next"), gettext("Go"))

        spacer = QtWidgets.QWidget()
        spacer.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        self.addWidget(spacer)

        close = QtWidgets.QAction(self)
        close.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton))
        self.addAction(close)
        close.setShortcut((QtCore.Qt.Key_Escape))
        close.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut)
        close.setStatusTip(gettext("Close Goto Line"))
        close.triggered[bool].connect(self.close_triggered)
        go.triggered[bool].connect(self.go_triggered)
        self.line_edit.returnPressed.connect(self.go_triggered)
Beispiel #6
0
def create_toolbar_button(text,
                          parent=None,
                          icon_name=None,
                          icon_size=22,
                          enabled=True,
                          checkable=False,
                          checked=False,
                          shortcut=None,
                          onclick=None):
    # RJLRJL modified to work with PyQt5
    if icon_name:
        button = QtWidgets.QAction(get_icon(icon_name, size=icon_size),
                                   gettext(text), parent)
    else:
        button = QtWidgets.QAction(gettext(text), parent)
    if checkable:
        button.setCheckable(True)
        button.setChecked(checked)
    if not enabled:
        button.setEnabled(False)
    if shortcut:
        button.setShortcut(shortcut)
        show_shortcut_hint(button)
    if onclick:
        if checkable:
            button.toggled[bool].connect(onclick)
        else:
            button.triggered.connect(onclick)
    return button
Beispiel #7
0
 def create_ext_diff_action(self):
     action = QtWidgets.QAction(get_icon("system-run"), gettext("&External Diff"), self)
     action.setToolTip(gettext("Launch an external diff application"))
     ext_diff_menu = ExtDiffMenu(parent=self, include_builtin = False)
     action.setMenu(ext_diff_menu)
     ext_diff_menu.triggered['QString'].connect(self.ext_diff_triggered)
     return action
Beispiel #8
0
 def create_refresh_action(self, allow_refresh=True):
     action = QtWidgets.QAction(get_icon("view-refresh"), gettext("&Refresh"), self)
     action.setShortcut("Ctrl+R")
     show_shortcut_hint(action)
     action.triggered[bool].connect(self.click_refresh)
     action.setEnabled(allow_refresh)
     return action
Beispiel #9
0
 def create_find_action(self):
     action = QtWidgets.QAction(get_icon("edit-find"), gettext("&Find"), self)
     action.setShortcut(QtGui.QKeySequence.Find)
     action.setToolTip(gettext("Find on active panel"))
     show_shortcut_hint(action)
     action.setCheckable(True)
     return action
Beispiel #10
0
 def create_toggle_view_mode(self):
     action = QtWidgets.QAction(get_icon("view-split-left-right"), gettext("Unidiff"), self)
     action.setToolTip(gettext("Toggle between Side by side and Unidiff view modes"))
     action.setShortcut("Ctrl+U")
     show_shortcut_hint(action)
     action.setCheckable(True)
     action.setChecked(False);
     action.toggled[bool].connect(self.click_toggle_view_mode)
     return action
Beispiel #11
0
    def __init__(self,
                 file_list=None,
                 directory=None,
                 complete=False,
                 encoding=None,
                 splitters=None,
                 parent=None,
                 select_all=False,
                 init_msg=None):
        ToolbarPanel.__init__(self, slender=False, icon_size=22, parent=parent)

        self.revision = None
        self.file_list = file_list
        self.directory = directory
        self.message = None

        self.initial_encoding = encoding
        self.select_all = select_all

        self.current_layout = -1
        self.load_settings()

        self.splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical, self)
        pal = QtGui.QPalette()
        pal.setColor(QtGui.QPalette.Window, QtGui.QColor(0, 0, 0, 0))
        self.splitter.setPalette(pal)

        self.splitter1 = QtWidgets.QSplitter(QtCore.Qt.Horizontal, self)
        self.splitter2 = QtWidgets.QSplitter(QtCore.Qt.Horizontal, self)
        self.splitter.addWidget(self.splitter1)
        self.splitter.addWidget(self.splitter2)

        message_groupbox = QtWidgets.QGroupBox(gettext("Message"), self)
        message_layout = QtWidgets.QVBoxLayout(message_groupbox)
        self.splitter1.addWidget(message_groupbox)

        language = get_global_config().get_user_option(
            'spellcheck_language') or 'en'
        spell_checker = SpellChecker(language)

        self.message = TextEdit(spell_checker,
                                message_groupbox,
                                main_window=self)
        self.message.setToolTip(gettext("Enter the shelve message"))
        self.message.messageEntered.connect(self.do_shelve)
        self.completer = QtWidgets.QCompleter()
        self.completer_model = QtCore.QStringListModel(self.completer)
        self.completer.setModel(self.completer_model)
        self.message.setCompleter(self.completer)
        self.message.setAcceptRichText(False)
        if init_msg is not None:
            self.message.setText(init_msg)
        SpellCheckHighlighter(self.message.document(), spell_checker)

        message_layout.addWidget(self.message)

        self.file_view = QtWidgets.QTreeWidget(self)
        self.file_view.setHeaderLabels(
            [gettext("File Name"),
             gettext("Status"),
             gettext("Hunks")])
        header = self.file_view.header()
        header.setStretchLastSection(False)
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)

        self.splitter1.addWidget(self.file_view)

        hunk_panel = ToolbarPanel(parent=self)
        self.hunk_view = HunkView(complete=complete)

        self.splitter2.addWidget(hunk_panel)

        # Build hunk panel toolbar
        show_find = hunk_panel.add_toolbar_button(
            N_("Find"),
            icon_name="edit-find",
            checkable=True,
            shortcut=QtGui.QKeySequence.Find)
        hunk_panel.add_separator()

        view_menu = QtWidgets.QMenu(gettext('View Options'), self)
        view_menu.addAction(
            hunk_panel.create_button(N_("Complete"),
                                     icon_name="complete",
                                     onclick=self.hunk_view.set_complete,
                                     checkable=True,
                                     checked=complete))
        self.tabwidth_selector = \
                TabWidthMenuSelector(label_text=gettext("Tab width"),
                    onChanged=self.on_tabwidth_changed)
        view_menu.addMenu(self.tabwidth_selector)

        self.encoding_selector = EncodingMenuSelector(encoding,
                                                      gettext("Encoding"),
                                                      self.encoding_changed)
        self.encoding_selector.setIcon(get_icon("format-text-bold", 16))
        view_menu.addMenu(self.encoding_selector)
        hunk_panel.add_toolbar_menu(N_("&View Options"),
                                    view_menu,
                                    icon_name="document-properties",
                                    shortcut="Alt+V")

        hunk_panel.add_separator()
        hunk_panel.add_toolbar_button(N_("Previous hunk"),
                                      icon_name="go-up",
                                      onclick=self.hunk_view.move_previous,
                                      shortcut="Alt+Up")
        hunk_panel.add_toolbar_button(N_("Next hunk"),
                                      icon_name="go-down",
                                      onclick=self.hunk_view.move_next,
                                      shortcut="Alt+Down")

        self.editor_button = hunk_panel.add_toolbar_button(
            N_("Use editor"),
            icon_name="accessories-text-editor",
            enabled=False,
            onclick=self.use_editor,
            shortcut="Ctrl+E")
        find_toolbar = FindToolbar(self, self.hunk_view.browser, show_find)
        hunk_panel.add_widget(find_toolbar)
        hunk_panel.add_widget(self.hunk_view)
        find_toolbar.hide()

        setup_guidebar_for_find(self.hunk_view.guidebar, find_toolbar, index=1)
        self.find_toolbar = find_toolbar

        layout = QtWidgets.QVBoxLayout()
        layout.setContentsMargins(10, 10, 10, 10)
        layout.addWidget(self.splitter)
        self.add_layout(layout)

        shelve_menu = QtWidgets.QMenu(gettext("Shelve"), self)
        shelve_menu.addAction(
            self.create_button(N_("Destroy"),
                               onclick=lambda: self.do_shelve(destroy=True)))

        self.add_toolbar_button(N_('Shelve'),
                                icon_name='shelve',
                                shortcut=QtGui.QKeySequence.Save,
                                onclick=self.do_shelve,
                                menu=shelve_menu)

        self.add_separator()

        self.add_toolbar_button(N_('Select all'),
                                icon_name='select-all',
                                onclick=lambda: self.check_all(True))

        self.add_toolbar_button(N_('Unselect all'),
                                icon_name='unselect-all',
                                onclick=lambda: self.check_all(False))

        layout_selector = \
                LayoutSelector(num=3, onchanged=self.set_layout, parent=self,
                                initial_no=self.current_layout)

        self.add_toolbar_menu(N_("&Layout"),
                              layout_selector,
                              icon_name="internet-news-reader",
                              shortcut="Alt+L")

        self.add_toolbar_button(N_('&Refresh'),
                                icon_name='view-refresh',
                                shortcut="Ctrl+R",
                                onclick=self.refresh)

        self.file_view.itemSelectionChanged.connect(self.selected_file_changed)

        self.file_view.itemChanged[QtWidgets.QTreeWidgetItem,
                                   int].connect(self.file_checked)

        self.hunk_view.selectionChanged.connect(self.selected_hunk_changed)

        self.set_layout()

        if splitters:
            splitters.add("shelve_splitter", self.splitter)
            splitters.add("shelve_splitter1", self.splitter1)
            splitters.add("shelve_splitter2", self.splitter2)
        for sp in (self.splitter, self.splitter1, self.splitter2):
            sp.setChildrenCollapsible(False)
            sp.setStretchFactor(0, 3)
            sp.setStretchFactor(1, 7)

        self.brushes = {
            'add file': QtGui.QBrush(QtCore.Qt.blue),
            'delete file': QtGui.QBrush(QtCore.Qt.red),
            'rename': QtGui.QBrush(QtGui.QColor(160, 32, 240)),  # purple
        }

        self.loaded = False
Beispiel #12
0
    def __init__(self, directory=None, complete=False, ignore_whitespace=False,
                 encoding=None, splitters=None, parent=None):
        ToolbarPanel.__init__(self, slender=False, icon_size=22, parent=parent)

        self.initial_encoding = encoding
        self.directory = directory

        self.current_diffs = []
        self.complete = complete
        self.ignore_whitespace = ignore_whitespace
        self.show_files = False
        self.load_settings()

        # build main widgets
        self.shelve_view = QtWidgets.QTreeWidget(self)
        self.shelve_view.setHeaderLabels([gettext("Id"), gettext("Message")])
        header = self.shelve_view.header()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)

        self.file_view = QtWidgets.QTreeWidget(self)
        self.file_view.setHeaderLabels([gettext("File Name"), gettext("Status")])
        self.file_view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
        header = self.file_view.header()
        header.setStretchLastSection(False)
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        self.stack = QtWidgets.QStackedWidget(self)
        self.diffviews = (SidebySideDiffView(self), SimpleDiffView(self))
        for view in self.diffviews:
            self.stack.addWidget(view)
        for browser in self.diffviews[0].browsers:
            browser.installEventFilter(self)

        diff_panel = ToolbarPanel(self)

        # build diffpanel toolbar
        show_find = diff_panel.add_toolbar_button(
                        N_("Find"), icon_name="edit-find", checkable=True,
                        shortcut=QtGui.QKeySequence.Find)
        diff_panel.add_separator()
        diff_panel.add_toolbar_button(N_("Unidiff"), icon_name="unidiff",
                checkable=True, shortcut="Ctrl+U", onclick=self.unidiff_toggled)

        view_menu = QtWidgets.QMenu(gettext('View Options'), self)
        view_menu.addAction(
                diff_panel.create_button(N_("&Complete"), icon_name="complete",
                    checkable=True, checked=complete, onclick=self.complete_toggled)
                )
        view_menu.addAction(
                diff_panel.create_button(N_("Ignore whitespace"), icon_name="whitespace",
                    checkable=True, checked=ignore_whitespace, onclick=self.whitespace_toggled)
                )
        self.tabwidth_selector = TabWidthMenuSelector(label_text=gettext("Tab width"),
                                    onChanged=self.on_tabwidth_changed)
        view_menu.addMenu(self.tabwidth_selector)
        self.encoding_selector = EncodingMenuSelector(encoding,
                                    gettext("Encoding"), self.encoding_changed)
        self.encoding_selector.setIcon(get_icon("format-text-bold", 16))
        view_menu.addMenu(self.encoding_selector)
        diff_panel.add_toolbar_menu(
                N_("&View Options"), view_menu, icon_name="document-properties",
                shortcut="Alt+V")

        self.find_toolbar = FindToolbar(self, self.diffviews[0].browsers, show_find)
        diff_panel.add_widget(self.find_toolbar)
        diff_panel.add_widget(self.stack)
        self.find_toolbar.hide()
        for gb in self.diffviews[0].guidebar_panels:
            setup_guidebar_for_find(gb, self.find_toolbar, 1)
        setup_guidebar_for_find(self.diffviews[1], self.find_toolbar, 1)

        # Layout widgets
        self.splitter1 = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        self.splitter1.addWidget(self.shelve_view)

        self.splitter2 = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        self.splitter2.addWidget(self.file_view)
        self.splitter2.addWidget(diff_panel)

        self.splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        self.splitter.addWidget(self.splitter1)
        self.splitter.addWidget(self.splitter2)
        self.splitter.setStretchFactor(0, 1)

        if splitters:
            splitters.add("shelvelist_splitter", self.splitter)
            splitters.add("shelvelist_splitter1", self.splitter1)
            splitters.add("shelvelist_splitter2", self.splitter2)

        for sp in (self.splitter, self.splitter1, self.splitter2):
            sp.setChildrenCollapsible(False)
            sp.setStretchFactor(0, 3)
            sp.setStretchFactor(1, 7)

        pal = QtGui.QPalette()
        pal.setColor(QtGui.QPalette.Window, QtGui.QColor(0,0,0,0))
        self.splitter.setPalette(pal)

        layout = QtWidgets.QVBoxLayout()
        layout.setContentsMargins(10, 10, 10, 10)
        layout.addWidget(self.splitter)
        self.add_layout(layout)

        # build main toolbar
        unshelve_menu = QtWidgets.QMenu(gettext("Unshelve"), self)
        unshelve_menu.addAction(self.create_button(N_("Dry run"),
                                    onclick=lambda:self.do_unshelve('dry-run')))
        unshelve_menu.addAction(self.create_button(N_("Keep"),
                                    onclick=lambda:self.do_unshelve('keep')))
        unshelve_menu.addAction(self.create_button(N_("Delete"),
                                    onclick=lambda:self.do_unshelve('delete-only')))

        self.unshelve_button = self.add_toolbar_button(N_("Unshelve"), icon_name="unshelve",
                                    enabled=False, onclick=lambda:self.do_unshelve('apply'),
                                    menu=unshelve_menu)
        self.add_separator()

        layout_selector = \
                LayoutSelector(num=3, onchanged=lambda val:self.set_layout(type=val),
                    parent=self, initial_no=self.current_layout)

        layout_selector.addSeparator()
        layout_selector.addAction(
                self.create_button(gettext("Show filelist"),
                    icon_name="file", icon_size=16, checkable=True,
                    checked=self.show_files, shortcut="Ctrl+L",
                    onclick=lambda val:self.set_layout(show_files=val))
                )

        self.add_toolbar_menu(N_("&Layout"), layout_selector,
                icon_name="internet-news-reader", shortcut="Alt+L")

        self.add_toolbar_button(N_("&Refresh"), icon_name="view-refresh",
                shortcut="Ctrl+R", onclick=self.refresh)

        self.shelf_id = None

        self.set_layout()

        # set signals
        self.shelve_view.itemSelectionChanged.connect(self.selected_shelve_changed)
        self.file_view.itemSelectionChanged.connect(self.selected_files_changed)

        self.loaded = False
        self._interrupt_switch = False
        self._need_refresh = False
        self._selecting_all_files = False
        self.brushes = {
            'added' : QtGui.QBrush(QtCore.Qt.blue),
            'removed' : QtGui.QBrush(QtCore.Qt.red),
            'renamed' : QtGui.QBrush(QtGui.QColor(160, 32, 240)), # purple
            'renamed and modified' : QtGui.QBrush(QtGui.QColor(160, 32, 240)),
        }
Beispiel #13
0
    def __init__(self, branch, working_tree, annotate_tree, path, fileId,
                 encoding=None, parent=None, ui_mode=True, no_graph=False,
                 loader=None, loader_args=None, activate_line=None):
        QBzrWindow.__init__(self, [gettext("Annotate"), gettext("Loading...")], parent, ui_mode=ui_mode)
        self.restoreSize("annotate", (780, 680))

        self.activate_line_after_load = activate_line

        self.windows = []

        self.branch = branch
        self.annotate_tree = annotate_tree
        self.working_tree = working_tree
        if (self.working_tree is None and isinstance(annotate_tree, WorkingTree)):
            self.working_tree = annotate_tree

        self.no_graph = no_graph
        self.old_lines = None

        self.fileId = fileId
        self.path = path
        self.encoding = encoding
        self.loader_func = loader
        self.loader_args = loader_args

        self.throbber = ToolBarThrobberWidget(self)

        self.text_edit_frame = AnnotateEditerFrameBase(self)
        self.text_edit = AnnotatedTextEdit(self)
        self.text_edit.setFrameStyle(QtWidgets.QFrame.NoFrame)
        self.text_edit.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.TextSelectableByKeyboard)
        self.text_edit.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap)

        self.text_edit.document().setDefaultFont(get_monospace_font())

        self.guidebar_panel = GuideBarPanel(self.text_edit, parent=self)
        self.guidebar_panel.add_entry('annotate', QtGui.QColor(255, 160, 180))
        self.annotate_bar = AnnotateBar(self.text_edit, self, self.get_revno)
        annotate_spliter = QtWidgets.QSplitter(QtCore.Qt.Horizontal, self)
        annotate_spliter.addWidget(self.annotate_bar)
        annotate_spliter.addWidget(self.guidebar_panel)
        self.annotate_bar.splitter = annotate_spliter
        self.text_edit_frame.hbox.addWidget(annotate_spliter)

        self.text_edit.cursorPositionChanged.connect(self.edit_cursorPositionChanged)
        self.annotate_bar.cursorPositionChanged.connect(self.edit_cursorPositionChanged)
        self.text_edit.documentChangeFinished.connect(self.edit_documentChangeFinished)

        self.log_list = AnnotateLogList(self.processEvents, self.throbber, self)
        self.log_list.header().hideSection(logmodel.COL_DATE)
        self.log_list.parent_annotate_window = self
        self.log_branch_loaded = False

        self.log_list.selectionModel().selectionChanged[QtCore.QItemSelection, QtCore.QItemSelection].connect(self.log_list_selectionChanged)

        self.message = LogListRevisionMessageBrowser(self.log_list, self)

        self.encoding_selector = EncodingMenuSelector(self.encoding, gettext("Encoding"), self._on_encoding_changed)

        hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        hsplitter.addWidget(self.log_list)
        hsplitter.addWidget(self.message)

        hsplitter.setStretchFactor(0, 2)
        hsplitter.setStretchFactor(1, 2)

        splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)
        splitter.addWidget(self.text_edit_frame)
        splitter.addWidget(hsplitter)

        splitter.setStretchFactor(0, 5)
        splitter.setStretchFactor(1, 2)

        vbox = QtWidgets.QVBoxLayout(self.centralwidget)
        #vbox.addWidget(self.toolbar)
        vbox.addWidget(splitter)
        self.text_edit.setFocus()

        self.show_find = QtWidgets.QAction(get_icon("edit-find"), gettext("Find"), self)
        self.show_find.setShortcuts(QtGui.QKeySequence.Find)
        self.show_find.setCheckable(True)

        self.show_goto_line = QtWidgets.QAction(get_icon("go-jump"), gettext("Goto Line"), self)
        self.show_goto_line.setShortcuts((QtCore.Qt.CTRL + QtCore.Qt.Key_L,))
        self.show_goto_line.setCheckable(True)

        show_view_menu = QtWidgets.QAction(get_icon("document-properties"), gettext("&View Options"), self)
        view_menu = QtWidgets.QMenu(gettext('View Options'), self)
        show_view_menu.setMenu(view_menu)

        word_wrap = QtWidgets.QAction(gettext("Word Wrap"), self)
        word_wrap.setCheckable(True)
        word_wrap.toggled [bool].connect(self.word_wrap_toggle)

        def setTabStopWidth(tw):
            self.text_edit.setTabStopWidth(get_tab_width_pixels(tab_width_chars=tw))
            get_set_tab_width_chars(branch=self.branch,tab_width_chars=tw)
        self.tab_width_selector = TabWidthMenuSelector(get_set_tab_width_chars(branch=branch), gettext("Tab Width"), setTabStopWidth)

        view_menu.addMenu(self.tab_width_selector)
        view_menu.addMenu(self.encoding_selector)
        view_menu.addAction(word_wrap)

        toolbar = self.addToolBar(gettext("Annotate"))
        toolbar.setMovable (False)
        toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        #self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        toolbar.addAction(self.show_find)
        toolbar.addAction(self.show_goto_line)
        toolbar.addAction(show_view_menu)
        toolbar.widgetForAction(show_view_menu).setPopupMode(QtWidgets.QToolButton.InstantPopup)

        spacer = QtWidgets.QWidget()
        spacer.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        toolbar.addWidget(spacer)
        toolbar.addWidget(self.throbber)

        self.addToolBarBreak()

        self.find_toolbar = FindToolbar(self, self.text_edit, self.show_find)
        self.find_toolbar.hide()
        self.addToolBar(self.find_toolbar)
        self.show_find.toggled [bool].connect(self.show_find_toggle)
        setup_guidebar_for_find(self.guidebar_panel, self.find_toolbar, index=1)

        self.goto_line_toolbar = GotoLineToolbar(self, self.show_goto_line)
        self.goto_line_toolbar.hide()
        self.addToolBar(self.goto_line_toolbar)

        self.show_goto_line.toggled [bool].connect(self.show_goto_line_toggle)

        self.__hashes = {}
Beispiel #14
0
    def create_view_menu(self):
        show_view_menu = QtWidgets.QAction(get_icon("document-properties"), gettext("&View Options"), self)
        view_menu = QtWidgets.QMenu(gettext('View Options'), self)
        show_view_menu.setMenu(view_menu)
        view_complete = QtWidgets.QAction(gettext("&Complete"), self)
        view_complete.setCheckable(True)
        view_complete.toggled [bool].connect(self.click_complete)
        view_menu.addAction(view_complete)
        self.ignore_whitespace_action = self.create_ignore_ws_action()
        view_menu.addAction(self.ignore_whitespace_action)

        # Indent is correct: nested function
        def on_unidiff_tab_width_changed(tabwidth):
            if self.branches:
                get_set_tab_width_chars(branch=self.branches[0],tab_width_chars=tabwidth)
            self.custom_tab_widths[2] = tabwidth
            self.setup_tab_width()

        self.tab_width_selector_unidiff = TabWidthMenuSelector(label_text=gettext("Tab width"), onChanged=on_unidiff_tab_width_changed)
        view_menu.addMenu(self.tab_width_selector_unidiff)

        # Indent is correct: nested function
        def on_left_tab_width_changed(tabwidth):
            if self.branches:
                get_set_tab_width_chars(branch=self.branches[0],tab_width_chars=tabwidth)
            self.custom_tab_widths[0] = tabwidth
            self.setup_tab_width()

        self.tab_width_selector_left = TabWidthMenuSelector(label_text=gettext("Left side tab width"), onChanged=on_left_tab_width_changed)
        view_menu.addMenu(self.tab_width_selector_left)

        # Indent is correct: nested function
        def on_right_tab_width_changed(tabwidth):
            if self.branches:
                get_set_tab_width_chars(branch=self.branches[1],tab_width_chars=tabwidth)
            self.custom_tab_widths[1] = tabwidth
            self.setup_tab_width()

        self.tab_width_selector_right = TabWidthMenuSelector(label_text=gettext("Right side tab width"), onChanged=on_right_tab_width_changed)
        view_menu.addMenu(self.tab_width_selector_right)

        if self.stack.currentWidget() == self.diffview:
            self.tab_width_selector_unidiff.menuAction().setVisible(False)
        else:
            self.tab_width_selector_left.menuAction().setVisible(False)
            self.tab_width_selector_right.menuAction().setVisible(False)

        # Indent is correct: nested function
        def on_left_encoding_changed(encoding):
            if self.branches:
                get_set_encoding(encoding, self.branches[0])
            self.click_refresh()

        self.encoding_selector_left = EncodingMenuSelector(self.encoding, gettext("Left side encoding"), on_left_encoding_changed)
        view_menu.addMenu(self.encoding_selector_left)

        # Indent is correct: nested function
        def on_right_encoding_changed(encoding):
            if self.branches:
                get_set_encoding(encoding, self.branches[1])
            self.click_refresh()

        self.encoding_selector_right = EncodingMenuSelector(self.encoding, gettext("Right side encoding"), on_right_encoding_changed)
        view_menu.addMenu(self.encoding_selector_right)
        return show_view_menu