def import_state(self, state): """Imports data for save/restore""" MainWindow.import_state(self, state) # Restore the dockwidget, etc. window state if 'windowstate' in state: windowstate = state['windowstate'] self.restoreState(QtCore.QByteArray.fromBase64(str(windowstate)), self._widget_version)
def export_state(self): """Exports data for save/restore""" state = MainWindow.export_state(self) # Save the window state windowstate = self.saveState(self._widget_version) state['windowstate'] = unicode(windowstate.toBase64().data()) return state
def dragEnterEvent(self, event): """Accepts drops""" MainWindow.dragEnterEvent(self, event) event.acceptProposedAction()
def __init__(self, parent=None): MainWindow.__init__(self, parent) self.setAcceptDrops(True) # Qt does not support noun/verbs self.commit_button.setText(qtutils.tr('Commit@@verb')) self.commit_menu.setTitle(qtutils.tr('Commit@@verb')) self._has_threadpool = hasattr(QtCore, 'QThreadPool') # Diff/patch syntax highlighter self.syntax = DiffSyntaxHighlighter(self.display_text.document()) # Display the current column self.connect(self.commitmsg, SIGNAL('cursorPositionChanged()'), self.show_cursor_position) # Keeps track of merge messages we've seen self.merge_message_hash = '' # Initialize the seen tree widget indexes self._seen_indexes = set() # Initialize the GUI to show 'Column: 00' self.show_cursor_position() # Internal field used by import/export_state(). # Change this whenever dockwidgets are removed. self._widget_version = 1 self.model = cola.model() self.model.add_message_observer(self.model.message_updated, self._update_view) # Listen for text and amend messages cola.notifier().connect(signals.diff_text, self.set_display) cola.notifier().connect(signals.mode, self._mode_changed) cola.notifier().connect(signals.amend, self.amend_checkbox.setChecked) # Broadcast the amend mode self.connect(self.amend_checkbox, SIGNAL('toggled(bool)'), SLOT(signals.amend_mode)) # Add button callbacks self._relay_button(self.alt_button, signals.reset_mode) self._relay_button(self.rescan_button, signals.rescan) self._connect_button(self.signoff_button, self.signoff) self._connect_button(self.stage_button, self.stage) self._connect_button(self.unstage_button, self.unstage) self._connect_button(self.commit_button, self.commit) self._connect_button(self.fetch_button, guicmds.fetch_slot(self)) self._connect_button(self.push_button, guicmds.push_slot(self)) self._connect_button(self.pull_button, guicmds.pull_slot(self)) self._connect_button(self.stash_button, lambda: stash.stash(parent=self)) # Menu actions actions = [ (self.menu_quit, self.close), (self.menu_branch_compare, compare.branch_compare), (self.menu_branch_diff, guicmds.branch_diff), (self.menu_branch_review, guicmds.review_branch), (self.menu_browse_branch, guicmds.browse_current), (self.menu_browse_other_branch, guicmds.browse_other), (self.menu_browse_commits, guicmds.browse_commits), (self.menu_create_tag, createtag.create_tag), (self.menu_create_branch, create_new_branch), (self.menu_checkout_branch, guicmds.checkout_branch), (self.menu_delete_branch, guicmds.branch_delete), (self.menu_rebase_branch, guicmds.rebase), (self.menu_clone_repo, guicmds.clone_repo), (self.menu_commit_compare, compare.compare), (self.menu_commit_compare_file, compare.compare_file), (self.menu_cherry_pick, guicmds.cherry_pick), (self.menu_diff_expression, guicmds.diff_expression), (self.menu_diff_branch, guicmds.diff_branch), (self.menu_export_patches, guicmds.export_patches), (self.menu_help_about, about.launch_about_dialog), (self.menu_help_docs, lambda: self.model.git.web__browse(resources.html_docs())), (self.menu_load_commitmsg, guicmds.load_commitmsg_slot(self)), (self.menu_load_commitmsg_template, SLOT(signals.load_commit_template)), (self.menu_manage_bookmarks, manage_bookmarks), (self.menu_save_bookmark, save_bookmark), (self.menu_merge_local, merge.local_merge), (self.menu_merge_abort, merge.abort_merge), (self.menu_fetch, guicmds.fetch_slot(self)), (self.menu_push, guicmds.push_slot(self)), (self.menu_pull, guicmds.pull_slot(self)), (self.menu_open_repo, guicmds.open_repo_slot(self)), (self.menu_options, update_options), (self.menu_rescan, SLOT(signals.rescan)), (self.menu_grep, guicmds.grep), (self.menu_search_commits, smod.search), (self.menu_show_diffstat, SLOT(signals.diffstat)), (self.menu_stash, lambda: stash.stash(parent=self)), (self.menu_stage_modified, SLOT(signals.stage_modified)), (self.menu_stage_untracked, SLOT(signals.stage_untracked)), (self.menu_unstage_selected, SLOT(signals.unstage_selected)), (self.menu_unstage_all, SLOT(signals.unstage_all)), (self.menu_visualize_all, SLOT(signals.visualize_all)), (self.menu_visualize_current, SLOT(signals.visualize_current)), # TODO This edit menu stuff should/could be command objects (self.menu_cut, self.action_cut), (self.menu_copy, self.action_copy), (self.menu_paste, self.commitmsg.paste), (self.menu_delete, self.action_delete), (self.menu_select_all, self.commitmsg.selectAll), (self.menu_undo, self.commitmsg.undo), (self.menu_redo, self.commitmsg.redo), (self.menu_classic, classic.cola_classic), (self.menu_dag, dag.git_dag), ] # Diff Actions if hasattr(Qt, 'WidgetWithChildrenShortcut'): # We can only enable this shortcut on newer versions of Qt # that support WidgetWithChildrenShortcut otherwise we get # an ambiguous shortcut error. self.diff_copy = QtGui.QAction(self.display_text) self.diff_copy.setShortcut(QtGui.QKeySequence.Copy) self.diff_copy.setShortcutContext(Qt.WidgetWithChildrenShortcut) self.display_text.addAction(self.diff_copy) actions.append((self.diff_copy, self.copy_display,)) for menu, callback in actions: self.connect(menu, SIGNAL('triggered()'), callback) # Install UI wrappers for command objects actionsmod.install_command_wrapper(self) guicmds.install_command_wrapper(self) # Install diff shortcut keys for stage/unstage self.display_text.keyPressEvent = self.diff_key_press_event self.display_text.contextMenuEvent = self.diff_context_menu_event self.connect(self, SIGNAL('update'), self._update_callback) self.connect(self, SIGNAL('import_state'), self.import_state) self.connect(self, SIGNAL('install_config_actions'), self._install_config_actions) # Install .git-config-defined actions self._config_task = None self.install_config_actions() # Restore saved settings self._gui_state_task = None self._load_gui_state()
def __init__(self, parent=None): MainWindow.__init__(self, parent) self.setAcceptDrops(True) # Qt does not support noun/verbs self.commit_button.setText(qtutils.tr('Commit@@verb')) self.commit_menu.setTitle(qtutils.tr('Commit@@verb')) # Diff/patch syntax highlighter self.syntax = DiffSyntaxHighlighter(self.display_text.document()) # Display the current column self.connect(self.commitmsg, SIGNAL('cursorPositionChanged()'), self.show_cursor_position) # Keeps track of merge messages we've seen self.merge_message_hash = '' # Initialize the seen tree widget indexes self._seen_indexes = set() # Initialize the GUI to show 'Column: 00' self.show_cursor_position() # Internal field used by import/export_state(). # Change this whenever dockwidgets are removed. self._widget_version = 1 self.model = cola.model() self.model.add_message_observer(self.model.message_updated, self._update_view) # Listen for text and amend messages cola.notifier().listen(signals.diff_text, self.set_display) cola.notifier().listen(signals.mode, self._mode_changed) cola.notifier().listen(signals.inotify, self._inotify_enabled) cola.notifier().listen(signals.amend, self.amend_checkbox.setChecked) # Broadcast the amend mode self.connect(self.amend_checkbox, SIGNAL('toggled(bool)'), SLOT(signals.amend_mode)) # Add button callbacks self._relay_button(self.alt_button, signals.reset_mode) self._relay_button(self.rescan_button, signals.rescan) self._relay_button(self.signoff_button, signals.add_signoff) self._connect_button(self.stage_button, self.stage) self._connect_button(self.unstage_button, self.unstage) self._connect_button(self.commit_button, self.commit) self._connect_button(self.fetch_button, self.fetch) self._connect_button(self.push_button, self.push) self._connect_button(self.pull_button, self.pull) self._connect_button(self.stash_button, stash) # Menu actions actions = ( (self.menu_quit, self.close), (self.menu_branch_compare, compare.branch_compare), (self.menu_branch_diff, self.branch_diff), (self.menu_branch_review, self.review_branch), (self.menu_browse_branch, self.browse_current), (self.menu_browse_other_branch, self.browse_other), (self.menu_browse_commits, self.browse_commits), (self.menu_create_tag, createtag.create_tag), (self.menu_create_branch, create_new_branch), (self.menu_checkout_branch, self.checkout_branch), (self.menu_delete_branch, self.branch_delete), (self.menu_rebase_branch, self.rebase), (self.menu_clone_repo, guicmds.clone_repo), (self.menu_commit_compare, compare.compare), (self.menu_commit_compare_file, compare.compare_file), (self.menu_cherry_pick, self.cherry_pick), (self.menu_diff_expression, self.diff_expression), (self.menu_diff_branch, self.diff_branch), (self.menu_export_patches, self.export_patches), (self.menu_help_about, about.launch_about_dialog), (self.menu_help_docs, lambda: self.model.git.web__browse(resources.html_docs())), (self.menu_load_commitmsg, self.load_commitmsg), (self.menu_load_commitmsg_template, SLOT(signals.load_commit_template)), (self.menu_manage_bookmarks, manage_bookmarks), (self.menu_save_bookmark, save_bookmark), (self.menu_merge_local, local_merge), (self.menu_merge_abort, abort_merge), (self.menu_open_repo, self.open_repo), (self.menu_options, update_options), (self.menu_rescan, SLOT(signals.rescan)), (self.menu_search_grep, self.grep), (self.menu_search_revision, smod.search(smod.REVISION_ID)), (self.menu_search_revision_range, smod.search(smod.REVISION_RANGE)), (self.menu_search_message, smod.search(smod.MESSAGE)), (self.menu_search_path, smod.search(smod.PATH, True)), (self.menu_search_date_range, smod.search(smod.DATE_RANGE)), (self.menu_search_diff, smod.search(smod.DIFF)), (self.menu_search_author, smod.search(smod.AUTHOR)), (self.menu_search_committer, smod.search(smod.COMMITTER)), (self.menu_show_diffstat, SLOT(signals.diffstat)), (self.menu_stash, stash), (self.menu_stage_modified, SLOT(signals.stage_modified)), (self.menu_stage_untracked, SLOT(signals.stage_untracked)), (self.menu_unstage_selected, SLOT(signals.unstage_selected)), (self.menu_unstage_all, SLOT(signals.unstage_all)), (self.menu_visualize_all, SLOT(signals.visualize_all)), (self.menu_visualize_current, SLOT(signals.visualize_current)), # TODO This edit menu stuff should/could be command objects (self.menu_cut, self.action_cut), (self.menu_copy, self.action_copy), (self.menu_paste, self.commitmsg.paste), (self.menu_delete, self.action_delete), (self.menu_select_all, self.commitmsg.selectAll), (self.menu_undo, self.commitmsg.undo), (self.menu_redo, self.commitmsg.redo), (self.menu_classic, classic.cola_classic), ) for menu, callback in actions: self.connect(menu, SIGNAL('triggered()'), callback) # Install diff shortcut keys for stage/unstage self.display_text.keyPressEvent = self.diff_key_press_event self.display_text.contextMenuEvent = self.diff_context_menu_event # Restore saved settings self._load_gui_state()