def setPlainText(self, text): """setPlainText(str) while retaining scrollbar positions""" scrollbar = self.verticalScrollBar() if scrollbar: scrollvalue = scrollbar.value() if text is not None: DiffTextEdit.setPlainText(self, text) if scrollbar: scrollbar.setValue(scrollvalue)
def setPlainText(self, text): """setPlainText(str) while retaining scrollbar positions""" highlight = (self.mode != self.model.mode_none and self.mode != self.model.mode_untracked) self.highlighter.set_enabled(highlight) scrollbar = self.verticalScrollBar() if scrollbar: scrollvalue = scrollbar.value() if text is not None: DiffTextEdit.setPlainText(self, text) if scrollbar: scrollbar.setValue(scrollvalue)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = cola.model() self.mode = self.model.mode_none self.action_process_section = qtutils.add_action(self, N_('Process Section'), self.apply_section, Qt.Key_H) self.action_process_selection = qtutils.add_action(self, N_('Process Selection'), self.apply_selection, Qt.Key_S) self.launch_editor = qtutils.add_action(self, cmds.LaunchEditor.name(), run(cmds.LaunchEditor), cmds.LaunchEditor.SHORTCUT, 'Return', 'Enter') self.launch_editor.setIcon(qtutils.options_icon()) self.launch_difftool = qtutils.add_action(self, cmds.LaunchDifftool.name(), run(cmds.LaunchDifftool), cmds.LaunchDifftool.SHORTCUT) self.launch_difftool.setIcon(qtutils.icon('git.svg')) self.action_stage_selection = qtutils.add_action(self, N_('Stage &Selected Lines'), self.stage_selection) self.action_stage_selection.setIcon(qtutils.icon('add.svg')) self.action_stage_selection.setShortcut(Qt.Key_S) self.action_revert_selection = qtutils.add_action(self, N_('Revert Selected Lines...'), self.revert_selection) self.action_revert_selection.setIcon(qtutils.icon('undo.svg')) self.action_unstage_selection = qtutils.add_action(self, N_('Unstage &Selected Lines'), self.unstage_selection) self.action_unstage_selection.setIcon(qtutils.icon('remove.svg')) self.action_unstage_selection.setShortcut(Qt.Key_S) self.action_apply_selection = qtutils.add_action(self, N_('Apply Diff Selection to Work Tree'), self.stage_selection) self.action_apply_selection.setIcon(qtutils.apply_icon()) model.add_observer(model.message_mode_about_to_change, self._mode_about_to_change) model.add_observer(model.message_diff_text_changed, self._emit_text) self.connect(self, SIGNAL('copyAvailable(bool)'), self.enable_selection_actions) self.connect(self, SIGNAL('set_text'), self.setPlainText)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = cola.model() self.mode = self.model.mode_none self.action_process_section = qtutils.add_action( self, N_('Process Section'), self.apply_section, Qt.Key_H) self.action_process_selection = qtutils.add_action( self, N_('Process Selection'), self.apply_selection, Qt.Key_S) self.launch_editor = qtutils.add_action(self, cmds.LaunchEditor.name(), run(cmds.LaunchEditor), cmds.LaunchEditor.SHORTCUT, 'Return', 'Enter') self.launch_editor.setIcon(qtutils.options_icon()) self.launch_difftool = qtutils.add_action(self, cmds.LaunchDifftool.name(), run(cmds.LaunchDifftool), cmds.LaunchDifftool.SHORTCUT) self.launch_difftool.setIcon(qtutils.icon('git.svg')) self.action_stage_selection = qtutils.add_action( self, N_('Stage &Selected Lines'), self.stage_selection) self.action_stage_selection.setIcon(qtutils.icon('add.svg')) self.action_stage_selection.setShortcut(Qt.Key_S) self.action_revert_selection = qtutils.add_action( self, N_('Revert Selected Lines...'), self.revert_selection) self.action_revert_selection.setIcon(qtutils.icon('undo.svg')) self.action_unstage_selection = qtutils.add_action( self, N_('Unstage &Selected Lines'), self.unstage_selection) self.action_unstage_selection.setIcon(qtutils.icon('remove.svg')) self.action_unstage_selection.setShortcut(Qt.Key_S) self.action_apply_selection = qtutils.add_action( self, N_('Apply Diff Selection to Work Tree'), self.stage_selection) self.action_apply_selection.setIcon(qtutils.apply_icon()) model.add_observer(model.message_mode_about_to_change, self._mode_about_to_change) model.add_observer(model.message_diff_text_changed, self.setPlainText) self.connect(self, SIGNAL('copyAvailable(bool)'), self.enable_selection_actions)
def wheelEvent(self, event): if event.modifiers() & Qt.ControlModifier: # Intercept the Control modifier to not resize the text # when doing control+mousewheel event.accept() event = QtGui.QWheelEvent(event.pos(), event.delta(), Qt.NoButton, Qt.NoModifier, event.orientation()) return DiffTextEdit.wheelEvent(self, event)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = cola.model() self.mode = self.model.mode_none # Install diff shortcut keys for stage/unstage self.action_process_section = qtutils.add_action(self, 'Process Section', self.apply_section, Qt.Key_H) self.action_process_selection = qtutils.add_action(self, 'Process Selection', self.apply_selection, Qt.Key_S) # Context menu actions self.action_stage_selection = qtutils.add_action(self, self.tr('Stage &Selected Lines'), self.stage_selection) self.action_stage_selection.setIcon(qtutils.icon('add.svg')) self.action_stage_selection.setShortcut(Qt.Key_S) self.action_revert_selection = qtutils.add_action(self, self.tr('Revert Selected Lines...'), self.revert_selection) self.action_revert_selection.setIcon(qtutils.icon('undo.svg')) self.action_unstage_selection = qtutils.add_action(self, self.tr('Unstage &Selected Lines'), self.unstage_selection) self.action_unstage_selection.setIcon(qtutils.icon('remove.svg')) self.action_unstage_selection.setShortcut(Qt.Key_S) self.action_apply_selection = qtutils.add_action(self, self.tr('Apply Diff Selection to Work Tree'), self.stage_selection) self.action_apply_selection.setIcon(qtutils.apply_icon()) model.add_observer(model.message_mode_about_to_change, self._mode_about_to_change) model.add_observer(model.message_diff_text_changed, self.setPlainText) self.connect(self, SIGNAL('copyAvailable(bool)'), self.enable_selection_actions)
def mousePressEvent(self, event): if event.button() == Qt.RightButton: # Intercept right-click to move the cursor to the current position. # setTextCursor() clears the selection so this is only done when # nothing is selected. _, selection = self.offset_and_selection() if not selection: cursor = self.cursorForPosition(event.pos()) self.setTextCursor(cursor) return DiffTextEdit.mousePressEvent(self, event)
def setPlainText(self, text): """setPlainText(str) while retaining scrollbar positions""" highlight = (self.mode != self.model.mode_none and self.mode != self.model.mode_untracked) self.highlighter.set_enabled(highlight) scrollbar = self.verticalScrollBar() if scrollbar: scrollvalue = scrollbar.value() else: scrollvalue = None if text is None: return offset, selection = self.offset_and_selection() old_text = unicode(self.toPlainText()) DiffTextEdit.setPlainText(self, text) # If the old selection exists in the new text then # re-select it. if selection and selection in text: idx = text.index(selection) cursor = self.textCursor() cursor.setPosition(idx) cursor.setPosition(idx + len(selection), QtGui.QTextCursor.KeepAnchor) self.setTextCursor(cursor) # Otherwise, if the text is identical and there # is no selection then restore the cursor position. elif text == old_text: cursor = self.textCursor() cursor.setPosition(offset) self.setTextCursor(cursor) if scrollbar and scrollvalue is not None: scrollbar.setValue(scrollvalue)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = cola.model() self.mode = self.model.mode_none # Install diff shortcut keys for stage/unstage self.action_process_section = qtutils.add_action( self, 'Process Section', self.apply_section, Qt.Key_H) self.action_process_selection = qtutils.add_action( self, 'Process Selection', self.apply_selection, Qt.Key_S) # Context menu actions self.action_stage_selection = qtutils.add_action( self, self.tr('Stage &Selected Lines'), self.stage_selection) self.action_stage_selection.setIcon(qtutils.icon('add.svg')) self.action_stage_selection.setShortcut(Qt.Key_S) self.action_revert_selection = qtutils.add_action( self, self.tr('Revert Selected Lines...'), self.revert_selection) self.action_revert_selection.setIcon(qtutils.icon('undo.svg')) self.action_unstage_selection = qtutils.add_action( self, self.tr('Unstage &Selected Lines'), self.unstage_selection) self.action_unstage_selection.setIcon(qtutils.icon('remove.svg')) self.action_unstage_selection.setShortcut(Qt.Key_S) self.action_apply_selection = qtutils.add_action( self, self.tr('Apply Diff Selection to Work Tree'), self.stage_selection) self.action_apply_selection.setIcon(qtutils.apply_icon()) model.add_observer(model.message_mode_about_to_change, self._mode_about_to_change) model.add_observer(model.message_diff_text_changed, self.setPlainText) self.connect(self, SIGNAL('copyAvailable(bool)'), self.enable_selection_actions)
def __init__(self, model, parent=None, title=None, multiselect=True, syntax=True): QtGui.QDialog.__init__(self, parent) self.model = model if title: self.setWindowTitle(title) self.commit_list = QtGui.QListWidget() if multiselect: mode = QtGui.QAbstractItemView.ExtendedSelection else: mode = QtGui.QAbstractItemView.SingleSelection self.commit_list.setSelectionMode(mode) self.commit_list.setAlternatingRowColors(True) self.commit_text = DiffTextEdit(self, whitespace=False) self.label = QtGui.QLabel() self.label.setText(self.tr('Revision Expression:')) self.revision = QtGui.QLineEdit() self.revision.setReadOnly(True) self.select_button = QtGui.QPushButton(self.tr('Select')) self.select_button.setIcon(qtutils.apply_icon()) self.select_button.setEnabled(False) self.select_button.setDefault(True) self.close_button = QtGui.QPushButton(self.tr('Close')) # Make the list widget slighty larger self.splitter = QtGui.QSplitter() self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setHandleWidth(defs.handle_width) self.splitter.setSizes([100, 150]) self.splitter.addWidget(self.commit_list) self.splitter.addWidget(self.commit_text) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.spacing) self.input_layout.addWidget(self.label) self.input_layout.addWidget(self.revision) self.input_layout.addWidget(self.select_button) self.input_layout.addWidget(self.close_button) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.margin) self.main_layout.addWidget(self.splitter) self.main_layout.addLayout(self.input_layout) self.setLayout(self.main_layout) self.connect(self.commit_list, SIGNAL('itemSelectionChanged()'), self.commit_sha1_selected) qtutils.connect_button(self.select_button, self.accept) qtutils.connect_button(self.close_button, self.reject) #self.setTabOrder(self.commit_list, self.commit_text) #self.setTabOrder(self.commit_text, self.revision) #self.setTabOrder(self.revision, self.select_button) #self.setTabOrder(self.select_button, self.close_button) #self.setTabOrder(self.close_button, self.commit_list) self.resize(700, 420)
def __init__(self, model, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle(self.tr('Stash')) if parent: self.resize(parent.width(), 420) else: self.resize(700, 420) self.stash_list = QtGui.QListWidget(self) self.stash_text = DiffTextEdit(self) self.button_apply =\ self.toolbutton(self.tr('Apply'), self.tr('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(self.tr('Save'), self.tr('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(self.tr('Drop'), self.tr('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(self.tr('Close'), self.tr('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(self.tr('Keep Index')) self.keep_index.setChecked(True) # Arrange layouts self.main_layt = QtGui.QVBoxLayout() self.main_layt.setMargin(defs.margin) self.main_layt.setSpacing(defs.spacing) self.btn_layt = QtGui.QHBoxLayout() self.btn_layt.setMargin(0) self.btn_layt.setSpacing(defs.spacing) self.splitter = QtGui.QSplitter() self.splitter.setHandleWidth(defs.handle_width) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setChildrenCollapsible(True) self.splitter.setStretchFactor(0, 1) self.splitter.setStretchFactor(1, 1) self.splitter.insertWidget(0, self.stash_list) self.splitter.insertWidget(1, self.stash_text) self.btn_layt.addWidget(self.button_save) self.btn_layt.addWidget(self.button_apply) self.btn_layt.addWidget(self.button_drop) self.btn_layt.addWidget(self.keep_index) self.btn_layt.addStretch() self.btn_layt.addWidget(self.button_close) self.main_layt.addWidget(self.splitter) self.main_layt.addLayout(self.btn_layt) self.setLayout(self.main_layt) self.splitter.setSizes([self.width()/3, self.width()*2/3]) self.update_from_model() self.update_actions() self.setTabOrder(self.button_save, self.button_apply) self.setTabOrder(self.button_apply, self.button_drop) self.setTabOrder(self.button_drop, self.keep_index) self.setTabOrder(self.keep_index, self.button_close) self.connect(self.stash_list, SIGNAL('itemSelectionChanged()'), self.item_selected) qtutils.connect_button(self.button_apply, self.stash_apply) qtutils.connect_button(self.button_save, self.stash_save) qtutils.connect_button(self.button_drop, self.stash_drop) qtutils.connect_button(self.button_close, self.close)
class StashView(Dialog): def __init__(self, model, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle(self.tr('Stash')) if parent: self.resize(parent.width(), 420) else: self.resize(700, 420) self.stash_list = QtGui.QListWidget(self) self.stash_text = DiffTextEdit(self) self.button_apply =\ self.toolbutton(self.tr('Apply'), self.tr('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(self.tr('Save'), self.tr('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(self.tr('Drop'), self.tr('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(self.tr('Close'), self.tr('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(self.tr('Keep Index')) self.keep_index.setChecked(True) # Arrange layouts self.main_layt = QtGui.QVBoxLayout() self.main_layt.setMargin(defs.margin) self.main_layt.setSpacing(defs.spacing) self.btn_layt = QtGui.QHBoxLayout() self.btn_layt.setMargin(0) self.btn_layt.setSpacing(defs.spacing) self.splitter = QtGui.QSplitter() self.splitter.setHandleWidth(defs.handle_width) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setChildrenCollapsible(True) self.splitter.setStretchFactor(0, 1) self.splitter.setStretchFactor(1, 1) self.splitter.insertWidget(0, self.stash_list) self.splitter.insertWidget(1, self.stash_text) self.btn_layt.addWidget(self.button_save) self.btn_layt.addWidget(self.button_apply) self.btn_layt.addWidget(self.button_drop) self.btn_layt.addWidget(self.keep_index) self.btn_layt.addStretch() self.btn_layt.addWidget(self.button_close) self.main_layt.addWidget(self.splitter) self.main_layt.addLayout(self.btn_layt) self.setLayout(self.main_layt) self.splitter.setSizes([self.width()/3, self.width()*2/3]) self.update_from_model() self.update_actions() self.setTabOrder(self.button_save, self.button_apply) self.setTabOrder(self.button_apply, self.button_drop) self.setTabOrder(self.button_drop, self.keep_index) self.setTabOrder(self.keep_index, self.button_close) self.connect(self.stash_list, SIGNAL('itemSelectionChanged()'), self.item_selected) qtutils.connect_button(self.button_apply, self.stash_apply) qtutils.connect_button(self.button_save, self.stash_save) qtutils.connect_button(self.button_drop, self.stash_drop) qtutils.connect_button(self.button_close, self.close) def close(self): self.accept() self.emit(SIGNAL(rescan)) def toolbutton(self, text, tooltip, icon): return qt.create_toolbutton(text=text, tooltip=tooltip, icon=icon) def pushbutton(self, text, tooltip, icon): btn = QtGui.QPushButton(self) btn.setText(self.tr(text)) btn.setToolTip(self.tr(tooltip)) btn.setIcon(icon) return btn def selected_stash(self): """Returns the stash name of the currently selected stash """ list_widget = self.stash_list stash_list = self.revids return qtutils.selected_item(list_widget, stash_list) def selected_name(self): list_widget = self.stash_list stash_list = self.names return qtutils.selected_item(list_widget, stash_list) def item_selected(self): """Shows the current stash in the main view.""" self.update_actions() selection = self.selected_stash() if not selection: return diff_text = self.model.stash_diff(selection) self.stash_text.setPlainText(diff_text) def update_actions(self): has_changes = self.model.has_stashable_changes() has_stash = bool(self.selected_stash()) self.button_save.setEnabled(has_changes) self.button_apply.setEnabled(has_stash) self.button_drop.setEnabled(has_stash) def update_from_model(self): """Initiates git queries on the model and updates the view """ stashes, revids, names = self.model.stash_info() self.stashes = stashes self.revids = revids self.names = names self.stash_list.clear() self.stash_list.addItems(self.stashes) def stash_apply(self): """Applies the currently selected stash """ selection = self.selected_stash() if not selection: return index = self.keep_index.isChecked() self.emit(SIGNAL(apply_stash), selection, index) self.accept() self.emit(SIGNAL(rescan)) def stash_save(self): """Saves the worktree in a stash This prompts the user for a stash name and creates a git stash named accordingly. """ stash_name, ok = qtutils.prompt('Save Stash', 'Enter a name for the stash') if not ok or not stash_name: return # Sanitize the stash name stash_name = utils.sanitize(stash_name) if stash_name in self.names: qtutils.critical('Oops!', 'A stash named "%s" already exists' % stash_name) return keep_index = self.keep_index.isChecked() self.emit(SIGNAL(save_stash), stash_name, keep_index) self.accept() self.emit(SIGNAL(rescan)) def stash_drop(self): """Drops the currently selected stash """ selection = self.selected_stash() name = self.selected_name() if not selection: return if not qtutils.confirm('Drop Stash?', 'Recovering a dropped stash is not possible.', 'Drop the "%s" stash?' % name, 'Drop Stash', default=False, icon=qtutils.discard_icon()): return self.emit(SIGNAL(drop_stash), selection) self.update_from_model() self.stash_text.setPlainText('')
class StashView(Dialog): def __init__(self, model, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(QtCore.Qt.WA_MacMetalStyle) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle(self.tr('Stash')) if parent: self.resize(parent.width(), 420) else: self.resize(700, 420) self.stash_list = QtGui.QListWidget(self) self.stash_text = DiffTextEdit(self) self.button_apply =\ self.toolbutton(self.tr('Apply'), self.tr('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(self.tr('Save'), self.tr('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(self.tr('Drop'), self.tr('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(self.tr('Close'), self.tr('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(self.tr('Keep Index')) self.keep_index.setChecked(True) # Arrange layouts self.main_layt = QtGui.QVBoxLayout() self.main_layt.setMargin(defs.margin) self.main_layt.setSpacing(defs.spacing) self.btn_layt = QtGui.QHBoxLayout() self.btn_layt.setMargin(0) self.btn_layt.setSpacing(defs.spacing) self.splitter = QtGui.QSplitter() self.splitter.setHandleWidth(defs.handle_width) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setChildrenCollapsible(True) self.splitter.setStretchFactor(0, 1) self.splitter.setStretchFactor(1, 1) self.splitter.insertWidget(0, self.stash_list) self.splitter.insertWidget(1, self.stash_text) self.btn_layt.addWidget(self.button_save) self.btn_layt.addWidget(self.button_apply) self.btn_layt.addWidget(self.button_drop) self.btn_layt.addWidget(self.keep_index) self.btn_layt.addStretch() self.btn_layt.addWidget(self.button_close) self.main_layt.addWidget(self.splitter) self.main_layt.addLayout(self.btn_layt) self.setLayout(self.main_layt) self.splitter.setSizes([self.width() / 3, self.width() * 2 / 3]) self.update_from_model() self.update_actions() self.setTabOrder(self.button_save, self.button_apply) self.setTabOrder(self.button_apply, self.button_drop) self.setTabOrder(self.button_drop, self.keep_index) self.setTabOrder(self.keep_index, self.button_close) self.connect(self.stash_list, SIGNAL('itemSelectionChanged()'), self.item_selected) qtutils.connect_button(self.button_apply, self.stash_apply) qtutils.connect_button(self.button_save, self.stash_save) qtutils.connect_button(self.button_drop, self.stash_drop) qtutils.connect_button(self.button_close, self.close) def close(self): self.accept() cmds.do(cmds.Rescan) def toolbutton(self, text, tooltip, icon): return qt.create_toolbutton(text=text, tooltip=tooltip, icon=icon) def pushbutton(self, text, tooltip, icon): btn = QtGui.QPushButton(self) btn.setText(self.tr(text)) btn.setToolTip(self.tr(tooltip)) btn.setIcon(icon) return btn def selected_stash(self): """Returns the stash name of the currently selected stash """ list_widget = self.stash_list stash_list = self.revids return qtutils.selected_item(list_widget, stash_list) def selected_name(self): list_widget = self.stash_list stash_list = self.names return qtutils.selected_item(list_widget, stash_list) def item_selected(self): """Shows the current stash in the main view.""" self.update_actions() selection = self.selected_stash() if not selection: return diff_text = self.model.stash_diff(selection) self.stash_text.setPlainText(diff_text) def update_actions(self): has_changes = self.model.has_stashable_changes() has_stash = bool(self.selected_stash()) self.button_save.setEnabled(has_changes) self.button_apply.setEnabled(has_stash) self.button_drop.setEnabled(has_stash) def update_from_model(self): """Initiates git queries on the model and updates the view """ stashes, revids, names = self.model.stash_info() self.stashes = stashes self.revids = revids self.names = names self.stash_list.clear() self.stash_list.addItems(self.stashes) def stash_apply(self): """Applies the currently selected stash """ selection = self.selected_stash() if not selection: return index = self.keep_index.isChecked() cmds.do(ApplyStash, selection, index) self.accept() cmds.do(cmds.Rescan) def stash_save(self): """Saves the worktree in a stash This prompts the user for a stash name and creates a git stash named accordingly. """ stash_name, ok = qtutils.prompt('Save Stash', 'Enter a name for the stash') if not ok or not stash_name: return # Sanitize the stash name stash_name = utils.sanitize(stash_name) if stash_name in self.names: qtutils.critical('Oops!', 'A stash named "%s" already exists' % stash_name) return keep_index = self.keep_index.isChecked() cmds.do(SaveStash, stash_name, keep_index) self.accept() cmds.do(cmds.Rescan) def stash_drop(self): """Drops the currently selected stash """ selection = self.selected_stash() name = self.selected_name() if not selection: return if not qtutils.confirm('Drop Stash?', 'Recovering a dropped stash is not possible.', 'Drop the "%s" stash?' % name, 'Drop Stash', default=True, icon=qtutils.discard_icon()): return cmds.do(DropStash, selection) self.update_from_model() self.stash_text.setPlainText('')
class SelectCommitsDialog(QtGui.QDialog): def __init__(self, model, parent=None, title=None, multiselect=True, syntax=True): QtGui.QDialog.__init__(self, parent) self.model = model if title: self.setWindowTitle(title) self.commit_list = QtGui.QListWidget() if multiselect: mode = QtGui.QAbstractItemView.ExtendedSelection else: mode = QtGui.QAbstractItemView.SingleSelection self.commit_list.setSelectionMode(mode) self.commit_list.setAlternatingRowColors(True) self.commit_text = DiffTextEdit(self, whitespace=False) self.label = QtGui.QLabel() self.label.setText(self.tr('Revision Expression:')) self.revision = QtGui.QLineEdit() self.revision.setReadOnly(True) self.select_button = QtGui.QPushButton(self.tr('Select')) self.select_button.setIcon(qtutils.apply_icon()) self.select_button.setEnabled(False) self.select_button.setDefault(True) self.close_button = QtGui.QPushButton(self.tr('Close')) # Make the list widget slighty larger self.splitter = QtGui.QSplitter() self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setHandleWidth(defs.handle_width) self.splitter.setSizes([100, 150]) self.splitter.addWidget(self.commit_list) self.splitter.addWidget(self.commit_text) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.spacing) self.input_layout.addWidget(self.label) self.input_layout.addWidget(self.revision) self.input_layout.addWidget(self.select_button) self.input_layout.addWidget(self.close_button) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.margin) self.main_layout.addWidget(self.splitter) self.main_layout.addLayout(self.input_layout) self.setLayout(self.main_layout) self.connect(self.commit_list, SIGNAL('itemSelectionChanged()'), self.commit_sha1_selected) qtutils.connect_button(self.select_button, self.accept) qtutils.connect_button(self.close_button, self.reject) #self.setTabOrder(self.commit_list, self.commit_text) #self.setTabOrder(self.commit_text, self.revision) #self.setTabOrder(self.revision, self.select_button) #self.setTabOrder(self.select_button, self.close_button) #self.setTabOrder(self.close_button, self.commit_list) self.resize(700, 420) def select_commits(self): summaries = self.model.summaries if not summaries: msg = self.tr('No commits exist in this branch.') Interaction.log(msg) return [] qtutils.set_items(self.commit_list, summaries) self.show() if self.exec_() != QtGui.QDialog.Accepted: return [] revs = self.model.revisions return qtutils.selection_list(self.commit_list, revs) def commit_sha1_selected(self): row, selected = qtutils.selected_row(self.commit_list) self.select_button.setEnabled(selected) if not selected: self.commit_text.setText('') self.revision.setText('') return # Get the sha1 and put it in the revision line sha1 = self.model.revision_sha1(row) self.revision.setText(sha1) self.revision.selectAll() # Display the sha1's commit commit_diff = gitcmds.commit_diff(sha1) self.commit_text.setText(commit_diff)
def __init__(self, model, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(QtCore.Qt.WA_MacMetalStyle) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle(self.tr('Stash')) if parent: self.resize(parent.width(), 420) else: self.resize(700, 420) self.stash_list = QtGui.QListWidget(self) self.stash_text = DiffTextEdit(self) self.button_apply =\ self.toolbutton(self.tr('Apply'), self.tr('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(self.tr('Save'), self.tr('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(self.tr('Drop'), self.tr('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(self.tr('Close'), self.tr('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(self.tr('Keep Index')) self.keep_index.setChecked(True) # Arrange layouts self.main_layt = QtGui.QVBoxLayout() self.main_layt.setMargin(defs.margin) self.main_layt.setSpacing(defs.spacing) self.btn_layt = QtGui.QHBoxLayout() self.btn_layt.setMargin(0) self.btn_layt.setSpacing(defs.spacing) self.splitter = QtGui.QSplitter() self.splitter.setHandleWidth(defs.handle_width) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setChildrenCollapsible(True) self.splitter.setStretchFactor(0, 1) self.splitter.setStretchFactor(1, 1) self.splitter.insertWidget(0, self.stash_list) self.splitter.insertWidget(1, self.stash_text) self.btn_layt.addWidget(self.button_save) self.btn_layt.addWidget(self.button_apply) self.btn_layt.addWidget(self.button_drop) self.btn_layt.addWidget(self.keep_index) self.btn_layt.addStretch() self.btn_layt.addWidget(self.button_close) self.main_layt.addWidget(self.splitter) self.main_layt.addLayout(self.btn_layt) self.setLayout(self.main_layt) self.splitter.setSizes([self.width() / 3, self.width() * 2 / 3]) self.update_from_model() self.update_actions() self.setTabOrder(self.button_save, self.button_apply) self.setTabOrder(self.button_apply, self.button_drop) self.setTabOrder(self.button_drop, self.keep_index) self.setTabOrder(self.keep_index, self.button_close) self.connect(self.stash_list, SIGNAL('itemSelectionChanged()'), self.item_selected) qtutils.connect_button(self.button_apply, self.stash_apply) qtutils.connect_button(self.button_save, self.stash_save) qtutils.connect_button(self.button_drop, self.stash_drop) qtutils.connect_button(self.button_close, self.close)
def __init__(self, parent): standard.Dialog.__init__(self, parent) self.setAttribute(QtCore.Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Search')) self.mode_combo = QtGui.QComboBox() self.browse_button = create_toolbutton(icon=dir_icon(), tooltip=N_('Browse...')) self.query = QtGui.QLineEdit() self.start_date = QtGui.QDateEdit() self.start_date.setCurrentSection(QtGui.QDateTimeEdit.YearSection) self.start_date.setCalendarPopup(True) self.start_date.setDisplayFormat(N_('yyyy-MM-dd')) self.end_date = QtGui.QDateEdit() self.end_date.setCurrentSection(QtGui.QDateTimeEdit.YearSection) self.end_date.setCalendarPopup(True) self.end_date.setDisplayFormat(N_('yyyy-MM-dd')) self.search_button = QtGui.QPushButton() self.search_button.setText(N_('Search')) self.search_button.setDefault(True) self.max_count = QtGui.QSpinBox() self.max_count.setMinimum(5) self.max_count.setMaximum(9995) self.max_count.setSingleStep(5) self.max_count.setValue(500) self.commit_list = QtGui.QListWidget() self.commit_list.setMinimumSize(QtCore.QSize(1, 1)) self.commit_list.setAlternatingRowColors(True) self.commit_list.setSelectionMode( QtGui.QAbstractItemView.SingleSelection) self.commit_text = DiffTextEdit(self, whitespace=False) self.button_export = QtGui.QPushButton() self.button_export.setText(N_('Export Patches')) self.button_cherrypick = QtGui.QPushButton() self.button_cherrypick.setText(N_('Cherry Pick')) self.button_close = QtGui.QPushButton() self.button_close.setText(N_('Close')) self.top_layout = QtGui.QHBoxLayout() self.top_layout.setMargin(0) self.top_layout.setSpacing(defs.button_spacing) self.top_layout.addWidget(self.query) self.top_layout.addWidget(self.start_date) self.top_layout.addWidget(self.end_date) self.top_layout.addWidget(self.browse_button) self.top_layout.addWidget(self.search_button) self.top_layout.addStretch() self.top_layout.addWidget(self.mode_combo) self.top_layout.addWidget(self.max_count) self.splitter = QtGui.QSplitter() self.splitter.setHandleWidth(defs.handle_width) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setChildrenCollapsible(True) self.splitter.addWidget(self.commit_list) self.splitter.addWidget(self.commit_text) self.bottom_layout = QtGui.QHBoxLayout() self.bottom_layout.setMargin(0) self.bottom_layout.setSpacing(defs.spacing) self.bottom_layout.addWidget(self.button_export) self.bottom_layout.addWidget(self.button_cherrypick) self.bottom_layout.addStretch() self.bottom_layout.addWidget(self.button_close) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.spacing) self.main_layout.addLayout(self.top_layout) self.main_layout.addWidget(self.splitter) self.main_layout.addLayout(self.bottom_layout) self.setLayout(self.main_layout) if self.parent(): self.resize(self.parent().width(), self.parent().height()) else: self.resize(720, 500)
class SelectCommitsDialog(QtGui.QDialog): def __init__(self, model, parent=None, title=None, multiselect=True, syntax=True): QtGui.QDialog.__init__(self, parent) self.model = model if title: self.setWindowTitle(title) self.commit_list = QtGui.QListWidget() if multiselect: mode = QtGui.QAbstractItemView.ExtendedSelection else: mode = QtGui.QAbstractItemView.SingleSelection self.commit_list.setSelectionMode(mode) self.commit_list.setAlternatingRowColors(True) self.commit_text = DiffTextEdit(self, whitespace=False) self.label = QtGui.QLabel() self.label.setText(self.tr('Revision Expression:')) self.revision = QtGui.QLineEdit() self.revision.setReadOnly(True) self.select_button = QtGui.QPushButton(self.tr('Select')) self.select_button.setIcon(qtutils.apply_icon()) self.select_button.setEnabled(False) self.select_button.setDefault(True) self.close_button = QtGui.QPushButton(self.tr('Close')) # Make the list widget slighty larger self.splitter = QtGui.QSplitter() self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setHandleWidth(defs.handle_width) self.splitter.setSizes([100, 150]) self.splitter.addWidget(self.commit_list) self.splitter.addWidget(self.commit_text) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.spacing) self.input_layout.addWidget(self.label) self.input_layout.addWidget(self.revision) self.input_layout.addWidget(self.select_button) self.input_layout.addWidget(self.close_button) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.margin) self.main_layout.addWidget(self.splitter) self.main_layout.addLayout(self.input_layout) self.setLayout(self.main_layout) self.connect(self.commit_list, SIGNAL('itemSelectionChanged()'), self.commit_sha1_selected) qtutils.connect_button(self.select_button, self.accept) qtutils.connect_button(self.close_button, self.reject) #self.setTabOrder(self.commit_list, self.commit_text) #self.setTabOrder(self.commit_text, self.revision) #self.setTabOrder(self.revision, self.select_button) #self.setTabOrder(self.select_button, self.close_button) #self.setTabOrder(self.close_button, self.commit_list) self.resize(700, 420) def select_commits(self): summaries = self.model.summaries if not summaries: msg = self.tr('No commits exist in this branch.') qtutils.log(1, msg) return [] qtutils.set_items(self.commit_list, summaries) self.show() if self.exec_() != QtGui.QDialog.Accepted: return [] revs = self.model.revisions return qtutils.selection_list(self.commit_list, revs) def commit_sha1_selected(self): row, selected = qtutils.selected_row(self.commit_list) self.select_button.setEnabled(selected) if not selected: self.commit_text.setText('') self.revision.setText('') return # Get the sha1 and put it in the revision line sha1 = self.model.revision_sha1(row) self.revision.setText(sha1) self.revision.selectAll() # Display the sha1's commit commit_diff = gitcmds.commit_diff(sha1) self.commit_text.setText(commit_diff)