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
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)
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)
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
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)
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
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
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
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
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
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
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)), }
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 = {}
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