def __init__(self, lineedit, title, button_text, parent): QtGui.QDialog.__init__(self, parent) self.setWindowTitle(title) self.setMinimumWidth(333) self.label = QtGui.QLabel() self.label.setText(title) self.lineedit = lineedit() self.setFocusProxy(self.lineedit) self.ok_button = QtGui.QPushButton() self.ok_button.setText(button_text) self.ok_button.setIcon(qtutils.apply_icon()) self.close_button = QtGui.QPushButton() self.close_button.setText(N_('Close')) self.button_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, qtutils.STRETCH, self.ok_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.label, self.lineedit, self.button_layout) self.setLayout(self.main_layout) qtutils.connect_button(self.ok_button, self.accept) qtutils.connect_button(self.close_button, self.reject) self.connect(self.lineedit, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.lineedit, SIGNAL('return()'), self.accept) self.setWindowModality(Qt.WindowModal) self.ok_button.setEnabled(False)
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(N_('Revision Expression:')) self.revision = QtGui.QLineEdit() self.revision.setReadOnly(True) self.select_button = QtGui.QPushButton(N_('Select')) self.select_button.setIcon(qtutils.apply_icon()) self.select_button.setEnabled(False) self.select_button.setDefault(True) self.close_button = QtGui.QPushButton(N_('Close')) # Make the list widget slighty larger self.splitter = qtutils.splitter(Qt.Vertical, self.commit_list, self.commit_text) self.splitter.setSizes([100, 150]) self.input_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.label, self.revision, self.select_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.margin, self.splitter, self.input_layout) self.setLayout(self.main_layout) self.connect(self.commit_list, SIGNAL('itemSelectionChanged()'), self.commit_sha1_selected) self.connect(self.commit_list, SIGNAL('itemDoubleClicked(QListWidgetItem*)'), self.commit_sha1_double_clicked) qtutils.connect_button(self.select_button, self.accept) qtutils.connect_button(self.close_button, self.reject) self.resize(700, 420)
def contextMenuEvent(self, event): """Create the context menu for the diff display.""" menu = QtGui.QMenu(self) staged, modified, unmerged, untracked = cola.selection() if self.mode == self.model.mode_worktree: if modified and modified[0] in cola.model().submodules: menu.addAction(qtutils.icon('add.svg'), self.tr('Stage'), SLOT(signals.stage, modified)) menu.addAction(qtutils.git_icon(), self.tr('Launch git-cola'), SLOT(signals.open_repo, os.path.abspath(modified[0]))) elif modified: menu.addAction(qtutils.icon('add.svg'), self.tr('Stage Section'), self.stage_section) menu.addAction(self.action_stage_selection) menu.addSeparator() menu.addAction(qtutils.icon('undo.svg'), self.tr('Revert Section...'), self.revert_section) menu.addAction(self.action_revert_selection) elif self.mode == self.model.mode_index: if staged and staged[0] in cola.model().submodules: menu.addAction(qtutils.icon('remove.svg'), self.tr('Unstage'), SLOT(signals.unstage, staged)) menu.addAction(qtutils.git_icon(), self.tr('Launch git-cola'), SLOT(signals.open_repo, os.path.abspath(staged[0]))) else: menu.addAction(qtutils.icon('remove.svg'), self.tr('Unstage Section'), self.unstage_section) menu.addAction(self.action_unstage_selection) elif self.mode == self.model.mode_branch: menu.addAction(qtutils.apply_icon(), self.tr('Apply Diff to Work Tree'), self.stage_section) menu.addAction(self.action_apply_selection) elif self.mode == self.model.mode_grep: menu.addAction(qtutils.icon('open.svg'), self.tr('Launch Editor'), lambda: guicmds.goto_grep(self.selected_line())) menu.addSeparator() menu.addAction(qtutils.icon('edit-copy.svg'), 'Copy', self.copy) menu.addAction(qtutils.icon('edit-select-all.svg'), 'Select All', self.selectAll) menu.exec_(self.mapToGlobal(event.pos()))
def __init__(self, parent=None): standard.StandardDialog.__init__(self, parent=parent) self.setWindowModality(QtCore.Qt.WindowModal) self.setWindowTitle(self.tr('Stash')) self.resize(600, 200) self._label = QtGui.QLabel() self._label.setText('<center>Stash List</center>') self.stash_list = QtGui.QListWidget(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_remove = \ self.toolbutton(self.tr('Remove'), self.tr('Remove 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) self.setTabOrder(self.button_save, self.button_apply) self.setTabOrder(self.button_apply, self.button_remove) self.setTabOrder(self.button_remove, self.keep_index) self.setTabOrder(self.keep_index, self.button_close) # Arrange layouts self._main_layt = QtGui.QVBoxLayout(self) self._main_layt.setMargin(6) self._main_layt.setSpacing(6) self._btn_layt = QtGui.QHBoxLayout() self._btn_layt.setMargin(0) self._btn_layt.setSpacing(4) self._btn_layt.addWidget(self.button_save) self._btn_layt.addWidget(self.button_apply) self._btn_layt.addWidget(self.button_remove) self._btn_layt.addWidget(self.keep_index) self._btn_layt.addStretch() self._btn_layt.addWidget(self.button_close) self._main_layt.addWidget(self._label) self._main_layt.addWidget(self.stash_list) self._main_layt.addItem(self._btn_layt)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = main.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): super(AddRemoteWidget, self).__init__(parent) self.setWindowModality(Qt.WindowModal) self.add_btn = QtGui.QPushButton(self.tr('Add Remote')) self.add_btn.setIcon(qtutils.apply_icon()) self.cancel_btn = QtGui.QPushButton(self.tr('Cancel')) diff_font = prefs.diff_font() metrics = QtGui.QFontMetrics(diff_font) def lineedit(hint): widget = text.HintedLineEdit(hint) widget.setFont(diff_font) widget.enable_hint(True) widget.setMinimumWidth(metrics.width('_' * 32)) return widget self.name = lineedit('Name for the new remote') self.url = lineedit('git://git.example.com/repo.git') self._form = QtGui.QFormLayout() self._form.setMargin(defs.margin) self._form.setSpacing(defs.spacing) self._form.addRow(self.tr('Name'), self.name) self._form.addRow(self.tr('URL'), self.url) self._btn_layout = QtGui.QHBoxLayout() self._btn_layout.setMargin(0) self._btn_layout.setSpacing(defs.button_spacing) self._btn_layout.addStretch() self._btn_layout.addWidget(self.add_btn) self._btn_layout.addWidget(self.cancel_btn) self._layout = QtGui.QVBoxLayout() self._layout.setMargin(defs.margin) self._layout.setSpacing(defs.margin) self._layout.addLayout(self._form) self._layout.addLayout(self._btn_layout) self.setLayout(self._layout) self.connect(self.name, SIGNAL('textChanged(QString)'), self.validate) self.connect(self.url, SIGNAL('textChanged(QString)'), self.validate) self.add_btn.setEnabled(False) qtutils.connect_button(self.add_btn, self.accept) qtutils.connect_button(self.cancel_btn, self.reject)
def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setWindowModality(Qt.WindowModal) self.add_btn = QtGui.QPushButton(N_('Add Remote')) self.add_btn.setIcon(qtutils.apply_icon()) self.cancel_btn = QtGui.QPushButton(N_('Cancel')) def lineedit(hint): widget = text.HintedLineEdit(hint) widget.enable_hint(True) metrics = QtGui.QFontMetrics(widget.font()) widget.setMinimumWidth(metrics.width('_' * 32)) return widget self.setWindowTitle(N_('Add remote')) self.name = lineedit(N_('Name for the new remote')) self.url = lineedit('git://git.example.com/repo.git') self._form = QtGui.QFormLayout() self._form.setMargin(defs.margin) self._form.setSpacing(defs.spacing) self._form.addRow(N_('Name'), self.name) self._form.addRow(N_('URL'), self.url) self._btn_layout = QtGui.QHBoxLayout() self._btn_layout.setMargin(0) self._btn_layout.setSpacing(defs.button_spacing) self._btn_layout.addStretch() self._btn_layout.addWidget(self.add_btn) self._btn_layout.addWidget(self.cancel_btn) self._layout = QtGui.QVBoxLayout() self._layout.setMargin(defs.margin) self._layout.setSpacing(defs.margin) self._layout.addLayout(self._form) self._layout.addLayout(self._btn_layout) self.setLayout(self._layout) self.connect(self.name, SIGNAL('textChanged(QString)'), self.validate) self.connect(self.url, SIGNAL('textChanged(QString)'), self.validate) self.add_btn.setEnabled(False) qtutils.connect_button(self.add_btn, self.accept) qtutils.connect_button(self.cancel_btn, self.reject)
def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setWindowModality(Qt.WindowModal) self.add_btn = QtGui.QPushButton(N_("Add Remote")) self.add_btn.setIcon(qtutils.apply_icon()) self.cancel_btn = QtGui.QPushButton(N_("Cancel")) def lineedit(hint): widget = text.HintedLineEdit(hint) widget.enable_hint(True) metrics = QtGui.QFontMetrics(widget.font()) widget.setMinimumWidth(metrics.width("_" * 32)) return widget self.setWindowTitle(N_("Add remote")) self.name = lineedit(N_("Name for the new remote")) self.url = lineedit("git://git.example.com/repo.git") self._form = QtGui.QFormLayout() self._form.setMargin(defs.margin) self._form.setSpacing(defs.spacing) self._form.addRow(N_("Name"), self.name) self._form.addRow(N_("URL"), self.url) self._btn_layout = QtGui.QHBoxLayout() self._btn_layout.setMargin(0) self._btn_layout.setSpacing(defs.button_spacing) self._btn_layout.addStretch() self._btn_layout.addWidget(self.add_btn) self._btn_layout.addWidget(self.cancel_btn) self._layout = QtGui.QVBoxLayout() self._layout.setMargin(defs.margin) self._layout.setSpacing(defs.margin) self._layout.addLayout(self._form) self._layout.addLayout(self._btn_layout) self.setLayout(self._layout) self.connect(self.name, SIGNAL("textChanged(QString)"), self.validate) self.connect(self.url, SIGNAL("textChanged(QString)"), self.validate) self.add_btn.setEnabled(False) qtutils.connect_button(self.add_btn, self.accept) qtutils.connect_button(self.cancel_btn, self.reject)
def __init__(self, lineedit, title, button_text, parent): QtGui.QDialog.__init__(self, parent) self.setWindowTitle(title) self.setMinimumWidth(333) self.label = QtGui.QLabel() self.label.setText(title) self.lineedit = lineedit(self) self.setFocusProxy(self.lineedit) self.ok_button = QtGui.QPushButton() self.ok_button.setText(button_text) self.ok_button.setIcon(qtutils.apply_icon()) self.close_button = QtGui.QPushButton() self.close_button.setText(N_('Close')) self.button_layout = QtGui.QHBoxLayout() self.button_layout.setMargin(defs.no_margin) self.button_layout.setSpacing(defs.button_spacing) self.button_layout.addStretch() self.button_layout.addWidget(self.ok_button) self.button_layout.addWidget(self.close_button) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.spacing) self.main_layout.addWidget(self.label) self.main_layout.addWidget(self.lineedit) self.main_layout.addLayout(self.button_layout) self.setLayout(self.main_layout) qtutils.connect_button(self.ok_button, self.accept) qtutils.connect_button(self.close_button, self.reject) self.connect(self.lineedit, SIGNAL('textChanged(const QString&)'), self.text_changed) self.connect(self.lineedit, SIGNAL('returnPressed()'), self.accept) self.setWindowModality(Qt.WindowModal) self.ok_button.setEnabled(False)
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, title, button_text, parent): super(GitRefDialog, self).__init__(parent) self.setWindowTitle(title) self.label = QtGui.QLabel() self.label.setText(title) self.lineedit = completion.GitRefLineEdit(self) self.setFocusProxy(self.lineedit) self.ok_button = QtGui.QPushButton() self.ok_button.setText(self.tr(button_text)) self.ok_button.setIcon(qtutils.apply_icon()) self.close_button = QtGui.QPushButton() self.close_button.setText(self.tr('Close')) self.button_layout = QtGui.QHBoxLayout() self.button_layout.setMargin(0) self.button_layout.setSpacing(defs.button_spacing) self.button_layout.addStretch() self.button_layout.addWidget(self.ok_button) self.button_layout.addWidget(self.close_button) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(defs.margin) self.main_layout.setSpacing(defs.spacing) self.main_layout.addWidget(self.label) self.main_layout.addWidget(self.lineedit) self.main_layout.addLayout(self.button_layout) self.setLayout(self.main_layout) qtutils.connect_button(self.ok_button, self.accept) qtutils.connect_button(self.close_button, self.reject) self.connect(self.lineedit, SIGNAL('textChanged(QString)'), self.text_changed) self.setWindowModality(Qt.WindowModal) self.ok_button.setEnabled(False)
def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setWindowModality(Qt.WindowModal) self.add_btn = QtGui.QPushButton(N_('Add Remote')) self.add_btn.setIcon(qtutils.apply_icon()) self.add_btn.setEnabled(False) self.cancel_btn = QtGui.QPushButton(N_('Cancel')) def lineedit(hint): widget = text.HintedLineEdit(hint) widget.enable_hint(True) metrics = QtGui.QFontMetrics(widget.font()) widget.setMinimumWidth(metrics.width('_' * 32)) return widget self.setWindowTitle(N_('Add remote')) self.name = lineedit(N_('Name for the new remote')) self.url = lineedit('git://git.example.com/repo.git') self._form = qtutils.form(defs.margin, defs.spacing, (N_('Name'), self.name), (N_('URL'), self.url)) self._btn_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, qtutils.STRETCH, self.add_btn, self.cancel_btn) self._layout = qtutils.vbox(defs.margin, defs.spacing, self._form, self._btn_layout) self.setLayout(self._layout) self.connect(self.name, SIGNAL('textChanged(QString)'), self.validate) self.connect(self.url, SIGNAL('textChanged(QString)'), self.validate) qtutils.connect_button(self.add_btn, self.accept) qtutils.connect_button(self.cancel_btn, self.reject)
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): Dialog.__init__(self, parent=parent) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowTitle(N_('Stash')) self.setAttribute(QtCore.Qt.WA_MacMetalStyle) if parent is not None: self.setWindowModality(QtCore.Qt.WindowModal) 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(N_('Apply'), N_('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(N_('Save'), N_('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(N_('Drop'), N_('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(N_('Close'), N_('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(N_('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(defs.no_margin) 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=None): MainWindowBase.__init__(self, parent) # Default size; this is thrown out when save/restore is used self.resize(987, 610) # Dockwidget options qtcompat.set_common_dock_options(self) self.classic_dockable = gitcfg.instance().get('cola.classicdockable') if self.classic_dockable: self.classicdockwidget = self.create_dock('Cola Classic') self.classicwidget = classic.widget(parent=self) self.classicdockwidget.setWidget(self.classicwidget) # "Actions" widget self.actiondockwidget = self.create_dock('Actions') self.actiondockwidgetcontents = qt.QFlowLayoutWidget(parent=self) layout = self.actiondockwidgetcontents.layout() self.rescan_button = qt.create_button('Rescan', layout) self.stage_button = qt.create_button('Stage', layout) self.unstage_button = qt.create_button('Unstage', layout) self.fetch_button = qt.create_button('Fetch...', layout) self.push_button = qt.create_button('Push...', layout) self.pull_button = qt.create_button('Pull...', layout) self.stash_button = qt.create_button('Stash...', layout) self.alt_button = qt.create_button('Exit Diff Mode', layout) self.alt_button.hide() layout.addStretch() self.actiondockwidget.setWidget(self.actiondockwidgetcontents) # "Repository Status" widget self.statusdockwidget = self.create_dock('Repository Status') self.statusdockwidget.setWidget(status.StatusWidget(self)) # "Commit Message Editor" widget self.commitdockwidget = self.create_dock('Commit Message Editor') self.commitdockwidgetcontents = QtGui.QWidget() self.commitdockwidgetlayout = QtGui.QVBoxLayout(self.commitdockwidgetcontents) self.commitdockwidgetlayout.setMargin(0) self.commitdockwidgetlayout.setSpacing(0) self.commitmsg = QtGui.QTextEdit(self.commitdockwidgetcontents) self.commitmsg.setMinimumSize(QtCore.QSize(1, 1)) policy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) self.commitmsg.setSizePolicy(policy) self.commitmsg.setLineWrapMode(QtGui.QTextEdit.NoWrap) self.commitmsg.setAcceptRichText(False) self.commit_ctrls_layt = QtGui.QHBoxLayout() self.commit_ctrls_layt.setSpacing(4) self.commit_ctrls_layt.setMargin(4) # Sign off and commit buttons self.signoff_button = qt.create_toolbutton(self, text='Sign Off', tooltip='Sign off on this commit', icon=qtutils.apply_icon()) self.commit_button = qt.create_toolbutton(self, text='Commit@@verb', tooltip='Commit staged changes', icon=qtutils.save_icon()) # Position display self.position_label = QtGui.QLabel(self.actiondockwidgetcontents) self.position_label.setAlignment(Qt.AlignCenter | Qt.AlignVCenter) # Amend checkbox self.amend_checkbox = QtGui.QCheckBox(self.commitdockwidgetcontents) self.amend_checkbox.setText(tr('Amend Last Commit')) self.commit_ctrls_layt.addWidget(self.signoff_button) self.commit_ctrls_layt.addWidget(self.commit_button) self.commit_ctrls_layt.addWidget(self.position_label) self.commit_ctrls_layt.addStretch() self.commit_ctrls_layt.addWidget(self.amend_checkbox) self.commitdockwidgetlayout.addWidget(self.commitmsg) self.commitdockwidgetlayout.addLayout(self.commit_ctrls_layt) self.commitdockwidget.setWidget(self.commitdockwidgetcontents) # "Command Output" widget logwidget = qtutils.logger() self.logdockwidget = self.create_dock('Command Output') self.logdockwidget.setWidget(logwidget) # "Diff Viewer" widget self.diffdockwidget = self.create_dock('Diff Viewer') self.diffdockwidgetcontents = QtGui.QWidget() self.diffdockwidgetlayout = QtGui.QVBoxLayout(self.diffdockwidgetcontents) self.diffdockwidgetlayout.setMargin(0) self.display_text = QtGui.QTextEdit(self.diffdockwidgetcontents) self.display_text.setMinimumSize(QtCore.QSize(1, 1)) self.display_text.setLineWrapMode(QtGui.QTextEdit.NoWrap) self.display_text.setReadOnly(True) self.display_text.setAcceptRichText(False) self.display_text.setCursorWidth(2) self.display_text.setTextInteractionFlags(Qt.LinksAccessibleByKeyboard | Qt.LinksAccessibleByMouse | Qt.TextBrowserInteraction | Qt.TextSelectableByKeyboard | Qt.TextSelectableByMouse) self.diffdockwidgetlayout.addWidget(self.display_text) self.diffdockwidget.setWidget(self.diffdockwidgetcontents) # All Actions self.menu_unstage_selected = self.create_action('Unstage From Commit') self.menu_show_diffstat = self.create_action('Diffstat') self.menu_stage_modified =\ self.create_action('Stage Changed Files To Commit') self.menu_stage_untracked = self.create_action('Stage All Untracked') self.menu_export_patches = self.create_action('Export Patches...') self.menu_cut = self.create_action('Cut') self.menu_copy = self.create_action('Copy', local=True) self.menu_paste = self.create_action('Paste') self.menu_select_all = self.create_action('Select All') self.menu_options = self.create_action('Preferences') self.menu_delete = self.create_action('Delete') self.menu_undo = self.create_action('Undo') self.menu_redo = self.create_action('Redo') self.menu_rescan = self.create_action('Rescan') self.menu_cherry_pick = self.create_action('Cherry-Pick...') self.menu_unstage_all = self.create_action('Unstage All') self.menu_load_commitmsg = self.create_action('Load Commit Message...') self.menu_quit = self.create_action('Quit') self.menu_search_revision = self.create_action('Revision ID...') self.menu_search_path =\ self.create_action('Commits Touching Path(s)...') self.menu_search_revision_range =\ self.create_action('Revision Range...') self.menu_search_date_range = self.create_action('Latest Commits...') self.menu_search_diff =\ self.create_action('Content Introduced in Commit...') self.menu_search_author = self.create_action('Commits By Author...') self.menu_search_committer =\ self.create_action('Commits By Committer...') self.menu_manage_bookmarks = self.create_action('Bookmarks...') self.menu_save_bookmark = self.create_action('Bookmark Current...') self.menu_grep = self.create_action('Grep') self.menu_merge_local = self.create_action('Merge...') self.menu_merge_abort = self.create_action('Abort Merge...') self.menu_fetch = self.create_action('Fetch...') self.menu_push = self.create_action('Push...') self.menu_pull = self.create_action('Pull...') self.menu_open_repo = self.create_action('Open...') self.menu_stash = self.create_action('Stash...') self.menu_diff_branch =\ self.create_action('Apply Changes From Branch...') self.menu_branch_compare = self.create_action('Branches...') self.menu_clone_repo = self.create_action('Clone...') self.menu_help_docs = self.create_action('Documentation') self.menu_commit_compare = self.create_action('Commits...') self.menu_visualize_current =\ self.create_action('Visualize Current Branch...') self.menu_visualize_all =\ self.create_action('Visualize All Branches...') self.menu_browse_commits = self.create_action('Browse...') self.menu_search_commits = self.create_action('Search...') self.menu_browse_branch =\ self.create_action('Browse Current Branch...') self.menu_browse_other_branch =\ self.create_action('Browse Other Branch...') self.menu_load_commitmsg_template =\ self.create_action('Get Commit Message Template') self.menu_commit_compare_file =\ self.create_action('Commits Touching File...') self.menu_help_about = self.create_action('About') self.menu_branch_diff = self.create_action('SHA-1...') self.menu_diff_expression = self.create_action('Expression...') self.menu_create_tag = self.create_action('Create Tag...') self.menu_create_branch = self.create_action('Create...') self.menu_delete_branch = self.create_action('Delete...') self.menu_checkout_branch = self.create_action('Checkout...') self.menu_rebase_branch = self.create_action('Rebase...') self.menu_branch_review = self.create_action('Review...') self.menu_classic = self.create_action('Cola Classic...') self.menu_dag = self.create_action('DAG...') # Create the application menu self.menubar = QtGui.QMenuBar(self) # File Menu self.file_menu = self.create_menu('&File', self.menubar) self.file_menu.addAction(self.menu_open_repo) self.file_menu.addAction(self.menu_clone_repo) self.file_menu.addSeparator() self.file_menu.addAction(self.menu_rescan) self.file_menu.addSeparator() self.file_menu.addAction(self.menu_manage_bookmarks) self.file_menu.addAction(self.menu_save_bookmark) self.file_menu.addSeparator() self.file_menu.addAction(self.menu_load_commitmsg) self.file_menu.addAction(self.menu_load_commitmsg_template) self.file_menu.addSeparator() self.file_menu.addAction(self.menu_quit) # Add to menubar self.menubar.addAction(self.file_menu.menuAction()) # Edit Menu self.edit_menu = self.create_menu('&Edit', self.menubar) self.edit_menu.addAction(self.menu_undo) self.edit_menu.addAction(self.menu_redo) self.edit_menu.addSeparator() self.edit_menu.addAction(self.menu_cut) self.edit_menu.addAction(self.menu_copy) self.edit_menu.addAction(self.menu_paste) self.edit_menu.addAction(self.menu_delete) self.edit_menu.addSeparator() self.edit_menu.addAction(self.menu_select_all) self.edit_menu.addSeparator() self.edit_menu.addAction(self.menu_options) # Add to menubar self.menubar.addAction(self.edit_menu.menuAction()) # Commit Menu self.commit_menu = self.create_menu('Co&mmit', self.menubar) self.commit_menu.addAction(self.menu_stage_modified) self.commit_menu.addAction(self.menu_stage_untracked) self.commit_menu.addSeparator() self.commit_menu.addAction(self.menu_unstage_all) self.commit_menu.addAction(self.menu_unstage_selected) self.commit_menu.addSeparator() self.commit_menu.addAction(self.menu_browse_commits) self.commit_menu.addAction(self.menu_search_commits) # Add to menubar self.menubar.addAction(self.commit_menu.menuAction()) # Branch Menu self.branch_menu = self.create_menu('B&ranch', self.menubar) self.branch_menu.addAction(self.menu_branch_review) self.branch_menu.addSeparator() self.branch_menu.addAction(self.menu_create_branch) self.branch_menu.addAction(self.menu_checkout_branch) self.branch_menu.addAction(self.menu_rebase_branch) self.branch_menu.addAction(self.menu_delete_branch) self.branch_menu.addSeparator() self.branch_menu.addAction(self.menu_browse_branch) self.branch_menu.addAction(self.menu_browse_other_branch) self.branch_menu.addSeparator() self.branch_menu.addAction(self.menu_visualize_current) self.branch_menu.addAction(self.menu_visualize_all) self.branch_menu.addSeparator() self.branch_menu.addAction(self.menu_diff_branch) # Add to menubar self.menubar.addAction(self.branch_menu.menuAction()) # Actions menu self.actions_menu = self.create_menu('Act&ions', self.menubar) self.actions_menu.addAction(self.menu_merge_local) self.actions_menu.addAction(self.menu_stash) self.actions_menu.addSeparator() self.actions_menu.addAction(self.menu_fetch) self.actions_menu.addAction(self.menu_push) self.actions_menu.addAction(self.menu_pull) self.actions_menu.addSeparator() self.actions_menu.addAction(self.menu_create_tag) self.actions_menu.addSeparator() self.actions_menu.addAction(self.menu_export_patches) self.actions_menu.addAction(self.menu_cherry_pick) self.actions_menu.addSeparator() self.actions_menu.addAction(self.menu_merge_abort) self.actions_menu.addAction(self.menu_grep) # Add to menubar self.menubar.addAction(self.actions_menu.menuAction()) # Diff Menu self.diff_menu = self.create_menu('&Diff', self.menubar) self.diff_menu.addAction(self.menu_branch_diff) self.diff_menu.addAction(self.menu_diff_expression) self.diff_menu.addSeparator() self.diff_menu.addAction(self.menu_branch_compare) self.diff_menu.addAction(self.menu_commit_compare) self.diff_menu.addAction(self.menu_commit_compare_file) self.diff_menu.addSeparator() self.diff_menu.addAction(self.menu_show_diffstat) # Add to menubar self.menubar.addAction(self.diff_menu.menuAction()) # Tools Menu self.tools_menu = self.create_menu('&Tools', self.menubar) self.tools_menu.addAction(self.menu_classic) self.tools_menu.addAction(self.menu_dag) self.tools_menu.addSeparator() if self.classic_dockable: self.tools_menu.addAction(self.classicdockwidget.toggleViewAction()) self.tools_menu.addAction(self.diffdockwidget.toggleViewAction()) self.tools_menu.addAction(self.actiondockwidget.toggleViewAction()) self.tools_menu.addAction(self.commitdockwidget.toggleViewAction()) self.tools_menu.addAction(self.statusdockwidget.toggleViewAction()) self.tools_menu.addAction(self.logdockwidget.toggleViewAction()) self.menubar.addAction(self.tools_menu.menuAction()) # Help Menu self.help_menu = self.create_menu('&Help', self.menubar) self.help_menu.addAction(self.menu_help_docs) self.help_menu.addAction(self.menu_help_about) # Add to menubar self.menubar.addAction(self.help_menu.menuAction()) # Set main menu self.setMenuBar(self.menubar) # Shortcuts self.menu_show_diffstat.setShortcut(tr('Ctrl+D')) self.menu_stage_modified.setShortcut(tr('Alt+A')) self.menu_stage_untracked.setShortcut(tr('Alt+U')) self.menu_export_patches.setShortcut(tr('Ctrl+E')) self.menu_cut.setShortcut(QtGui.QKeySequence.Cut) self.menu_copy.setShortcut(QtGui.QKeySequence.Copy) self.menu_paste.setShortcut(QtGui.QKeySequence.Paste) self.menu_select_all.setShortcut(QtGui.QKeySequence.SelectAll) self.menu_options.setShortcut(tr('Ctrl+O')) self.menu_delete.setShortcut(tr('Del')) self.menu_undo.setShortcut(tr('Ctrl+Z')) self.menu_redo.setShortcut(tr('Ctrl+Shift+Z')) self.menu_rescan.setShortcut(tr('Ctrl+R')) self.menu_cherry_pick.setShortcut(tr('Ctrl+P')) self.menu_quit.setShortcut(tr('Ctrl+Q')) self.menu_create_branch.setShortcut(tr('Ctrl+B')) self.menu_checkout_branch.setShortcut(tr('Alt+B')) self.menu_stash.setShortcut(tr('Alt+Shift+S')) self.menu_help_docs.setShortcut(tr('F1')) # Arrange dock widgets top = Qt.TopDockWidgetArea bottom = Qt.BottomDockWidgetArea self.addDockWidget(top, self.commitdockwidget) if self.classic_dockable: self.addDockWidget(top, self.classicdockwidget) self.addDockWidget(top, self.statusdockwidget) self.addDockWidget(top, self.actiondockwidget) self.addDockWidget(bottom, self.logdockwidget) if self.classic_dockable: self.tabifyDockWidget(self.classicdockwidget, self.commitdockwidget) self.tabifyDockWidget(self.logdockwidget, self.diffdockwidget)
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, parent=None): super(ApplyPatches, self).__init__(parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Apply Patches')) self.setAcceptDrops(True) if parent is not None: self.setWindowModality(Qt.WindowModal) self.curdir = core.getcwd() self.inner_drag = False self.usage = QtGui.QLabel() self.usage.setText( N_(""" <p> Drag and drop or use the <strong>Add</strong> button to add patches to the list </p> """)) self.tree = PatchTreeWidget(parent=self) self.tree.setHeaderHidden(True) self.add_button = qtutils.create_toolbutton( text=N_('Add'), icon=qtutils.add_icon(), tooltip=N_('Add patches (+)')) self.remove_button = qtutils.create_toolbutton( text=N_('Remove'), icon=qtutils.remove_icon(), tooltip=N_('Remove selected (Delete)')) self.apply_button = qtutils.create_button(text=N_('Apply'), icon=qtutils.apply_icon()) self.close_button = qtutils.create_button(text=N_('Close'), icon=qtutils.close_icon()) self.add_action = qtutils.add_action(self, N_('Add'), self.add_files, Qt.Key_Plus) self.remove_action = qtutils.add_action(self, N_('Remove'), self.tree.remove_selected, QtGui.QKeySequence.Delete, Qt.Key_Backspace, Qt.Key_Minus) self.top_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.add_button, self.remove_button, qtutils.STRETCH, self.usage) self.bottom_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.apply_button, qtutils.STRETCH, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.top_layout, self.tree, self.bottom_layout) self.setLayout(self.main_layout) qtutils.connect_button(self.add_button, self.add_files) qtutils.connect_button(self.remove_button, self.tree.remove_selected) qtutils.connect_button(self.apply_button, self.apply_patches) qtutils.connect_button(self.close_button, self.close) if not self.restore_state(): self.resize(666, 420)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = main.model() # "Diff Options" tool menu self.diff_ignore_space_at_eol_action = add_action(self, N_('Ignore changes in whitespace at EOL'), self._update_diff_opts) self.diff_ignore_space_at_eol_action.setCheckable(True) self.diff_ignore_space_change_action = add_action(self, N_('Ignore changes in amount of whitespace'), self._update_diff_opts) self.diff_ignore_space_change_action.setCheckable(True) self.diff_ignore_all_space_action = add_action(self, N_('Ignore all whitespace'), self._update_diff_opts) self.diff_ignore_all_space_action.setCheckable(True) self.diff_function_context_action = add_action(self, N_('Show whole surrounding functions of changes'), self._update_diff_opts) self.diff_function_context_action.setCheckable(True) self.diffopts_button = create_action_button( tooltip=N_('Diff Options'), icon=options_icon()) self.diffopts_menu = create_menu(N_('Diff Options'), self.diffopts_button) self.diffopts_menu.addAction(self.diff_ignore_space_at_eol_action) self.diffopts_menu.addAction(self.diff_ignore_space_change_action) self.diffopts_menu.addAction(self.diff_ignore_all_space_action) self.diffopts_menu.addAction(self.diff_function_context_action) self.diffopts_button.setMenu(self.diffopts_menu) qtutils.hide_button_menu_indicator(self.diffopts_button) titlebar = parent.titleBarWidget() titlebar.add_corner_widget(self.diffopts_button) self.action_process_section = qtutils.add_action(self, N_('Process Diff Region'), 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_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, model, parent): QtGui.QWidget.__init__(self, parent) self.model = model self._layt = QtGui.QVBoxLayout() self._layt.setMargin(0) self._layt.setSpacing(0) self.commitmsg = CommitMessageTextEdit(model, self) self.commitmsg.setFont(diff_font()) self._ctrls_layt = QtGui.QHBoxLayout() self._ctrls_layt.setSpacing(4) self._ctrls_layt.setMargin(4) # Sign off and commit buttons self.signoff_button = create_toolbutton(self, text='Sign Off', tooltip='Sign off on this commit', icon=apply_icon()) self.commit_button = create_toolbutton(self, text='Commit@@verb', tooltip='Commit staged changes', icon=save_icon()) # Position display self.position_label = QtGui.QLabel() self.position_label.setAlignment(Qt.AlignCenter | Qt.AlignVCenter) # Amend checkbox self.amend_checkbox = QtGui.QCheckBox() self.amend_checkbox.setText(tr('Amend Last Commit')) self._ctrls_layt.addWidget(self.signoff_button) self._ctrls_layt.addWidget(self.commit_button) self._ctrls_layt.addWidget(self.position_label) self._ctrls_layt.addStretch() self._ctrls_layt.addWidget(self.amend_checkbox) self._layt.addWidget(self.commitmsg) self._layt.addLayout(self._ctrls_layt) self.setLayout(self._layt) relay_signal(self, self.commitmsg, SIGNAL(signals.load_previous_message)) connect_button(self.commit_button, self.commit) cola.notifier().connect(signals.amend, self.amend_checkbox.setChecked) # Broadcast the amend mode self.connect(self.amend_checkbox, SIGNAL('toggled(bool)'), emit(self, signals.amend_mode)) self.connect(self.signoff_button, SIGNAL('clicked()'), emit(self, signals.signoff)) # Display the current column self.connect(self.commitmsg, SIGNAL('cursorPositionChanged()'), self.show_cursor_position) # Initialize the GUI to show 'Column: 00' self.show_cursor_position()
def __init__(self, parent=None): super(ApplyPatches, self).__init__(parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Apply Patches')) self.setAcceptDrops(True) if parent is not None: self.setWindowModality(Qt.WindowModal) self.curdir = os.getcwd() self.inner_drag = False self.usage = QtGui.QLabel() self.usage.setText(N_(""" <p> Drag and drop or use the <strong>Add</strong> button to add patches to the list </p> """)) self.tree = PatchTreeWidget(parent=self) self.tree.setHeaderHidden(True) self.add_button = qtutils.create_toolbutton( text=N_('Add'), icon=qtutils.add_icon(), tooltip=N_('Add patches (+)')) self.remove_button = qtutils.create_toolbutton( text=N_('Remove'), icon=qtutils.remove_icon(), tooltip=N_('Remove selected (Delete)')) self.apply_button = qtutils.create_button( text=N_('Apply'), icon=qtutils.apply_icon()) self.close_button = qtutils.create_button( text=N_('Close'), icon=qtutils.close_icon()) self.add_action = qtutils.add_action(self, N_('Add'), self.add_files, Qt.Key_Plus) self.remove_action = qtutils.add_action(self, N_('Remove'), self.tree.remove_selected, QtGui.QKeySequence.Delete, Qt.Key_Backspace, Qt.Key_Minus) layout = QtGui.QVBoxLayout() layout.setMargin(defs.margin) layout.setSpacing(defs.spacing) top = QtGui.QHBoxLayout() top.setMargin(defs.no_margin) top.setSpacing(defs.button_spacing) top.addWidget(self.add_button) top.addWidget(self.remove_button) top.addStretch() top.addWidget(self.usage) bottom = QtGui.QHBoxLayout() bottom.setMargin(defs.no_margin) bottom.setSpacing(defs.button_spacing) bottom.addWidget(self.apply_button) bottom.addStretch() bottom.addWidget(self.close_button) layout.addLayout(top) layout.addWidget(self.tree) layout.addLayout(bottom) self.setLayout(layout) qtutils.connect_button(self.add_button, self.add_files) qtutils.connect_button(self.remove_button, self.tree.remove_selected) qtutils.connect_button(self.apply_button, self.apply_patches) qtutils.connect_button(self.close_button, self.close) if not self.restore_state(): self.resize(666, 420)
def __init__(self, parent): DiffTextEdit.__init__(self, parent) self.model = model = main.model() # "Diff Options" tool menu self.diff_ignore_space_at_eol_action = add_action( self, N_('Ignore changes in whitespace at EOL'), self._update_diff_opts) self.diff_ignore_space_at_eol_action.setCheckable(True) self.diff_ignore_space_change_action = add_action( self, N_('Ignore changes in amount of whitespace'), self._update_diff_opts) self.diff_ignore_space_change_action.setCheckable(True) self.diff_ignore_all_space_action = add_action( self, N_('Ignore all whitespace'), self._update_diff_opts) self.diff_ignore_all_space_action.setCheckable(True) self.diff_function_context_action = add_action( self, N_('Show whole surrounding functions of changes'), self._update_diff_opts) self.diff_function_context_action.setCheckable(True) self.diffopts_button = create_action_button(tooltip=N_('Diff Options'), icon=options_icon()) self.diffopts_menu = create_menu(N_('Diff Options'), self.diffopts_button) self.diffopts_menu.addAction(self.diff_ignore_space_at_eol_action) self.diffopts_menu.addAction(self.diff_ignore_space_change_action) self.diffopts_menu.addAction(self.diff_ignore_all_space_action) self.diffopts_menu.addAction(self.diff_function_context_action) self.diffopts_button.setMenu(self.diffopts_menu) qtutils.hide_button_menu_indicator(self.diffopts_button) titlebar = parent.titleBarWidget() titlebar.add_corner_widget(self.diffopts_button) 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_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): standard.Dialog.__init__(self, parent) self.setWindowTitle(N_('Recently Modified Files')) self.setWindowModality(Qt.WindowModal) count = 8 self.update_thread = UpdateFileListThread(count) self.count = QtGui.QSpinBox() self.count.setMinimum(0) self.count.setMaximum(10000) self.count.setValue(count) self.count.setSuffix(N_(' commits ago')) self.count_label = QtGui.QLabel() self.count_label.setText(N_('Showing changes since')) self.refresh_button = QtGui.QPushButton() self.refresh_button.setText(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setEnabled(False) self.tree = GitTreeWidget(parent=self) self.tree_model = GitFileTreeModel(self) self.tree.setModel(self.tree_model) self.expand_button = QtGui.QPushButton() self.expand_button.setText(N_('Expand all')) self.expand_button.setIcon(qtutils.open_icon()) self.collapse_button = QtGui.QPushButton() self.collapse_button.setText(N_('Collapse all')) self.collapse_button.setIcon(qtutils.dir_close_icon()) self.edit_button = QtGui.QPushButton() self.edit_button.setText(N_('Edit')) self.edit_button.setIcon(qtutils.apply_icon()) self.edit_button.setDefault(True) self.edit_button.setEnabled(False) self.close_button = QtGui.QPushButton() self.close_button.setText(N_('Close')) self.top_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.count_label, self.count, qtutils.STRETCH, self.refresh_button) self.button_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.expand_button, self.collapse_button, qtutils.STRETCH, self.edit_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.top_layout, self.tree, self.button_layout) self.setLayout(self.main_layout) self.connect(self.tree, SIGNAL('selectionChanged()'), self.selection_changed) self.connect(self.tree, SIGNAL('path_chosen'), self.edit_file) self.connect(self.count, SIGNAL('valueChanged(int)'), self.count_changed) self.connect(self.count, SIGNAL('editingFinished()'), self.refresh) self.connect(self.update_thread, SIGNAL('filenames'), self.set_filenames) qtutils.connect_button(self.refresh_button, self.refresh) qtutils.connect_button(self.expand_button, self.tree.expandAll) qtutils.connect_button(self.collapse_button, self.tree.collapseAll) qtutils.connect_button(self.close_button, self.accept) qtutils.connect_button(self.edit_button, self.edit_selected) qtutils.add_action(self, N_('Refresh'), self.refresh, 'Ctrl+R') self.update_thread.start()
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(N_('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(N_('Apply'), N_('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(N_('Save'), N_('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(N_('Drop'), N_('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(N_('Close'), N_('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(N_('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, model, parent=None): Dialog.__init__(self, parent=parent) self.model = model self.stashes = [] self.revids = [] self.names = [] self.setWindowTitle(N_('Stash')) self.setAttribute(QtCore.Qt.WA_MacMetalStyle) if parent is not None: self.setWindowModality(QtCore.Qt.WindowModal) 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(N_('Apply'), N_('Apply the selected stash'), qtutils.apply_icon()) self.button_save =\ self.toolbutton(N_('Save'), N_('Save modified state to new stash'), qtutils.save_icon()) self.button_drop = \ self.toolbutton(N_('Drop'), N_('Drop the selected stash'), qtutils.discard_icon()) self.button_close = \ self.pushbutton(N_('Close'), N_('Close'), qtutils.close_icon()) self.keep_index = QtGui.QCheckBox(self) self.keep_index.setText(N_('Keep Index')) self.keep_index.setChecked(True) # Arrange layouts self.splitter = qtutils.splitter(Qt.Horizontal, self.stash_list, self.stash_text) self.btn_layt = qtutils.hbox(defs.no_margin, defs.spacing, self.button_save, self.button_apply, self.button_drop, self.keep_index, qtutils.STRETCH, self.button_close) self.main_layt = qtutils.vbox(defs.margin, defs.spacing, self.splitter, 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.setWindowTitle(N_('Recently Modified Files')) self.setWindowModality(Qt.WindowModal) count = 8 self.update_thread = UpdateFileListThread(count) self.count = QtGui.QSpinBox() self.count.setMinimum(0) self.count.setMaximum(10000) self.count.setValue(count) self.count.setSuffix(N_(' commits ago')) self.count_label = QtGui.QLabel() self.count_label.setText(N_('Showing changes since')) self.refresh_button = QtGui.QPushButton() self.refresh_button.setText(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setEnabled(False) self.tree = GitTreeWidget(parent=self) self.tree_model = GitFileTreeModel(self) self.tree.setModel(self.tree_model) self.expand_button = QtGui.QPushButton() self.expand_button.setText(N_('Expand')) self.expand_button.setIcon(qtutils.open_icon()) self.collapse_button = QtGui.QPushButton() self.collapse_button.setText(N_('Collapse')) self.collapse_button.setIcon(qtutils.dir_close_icon()) self.edit_button = QtGui.QPushButton() self.edit_button.setText(N_('Edit')) self.edit_button.setIcon(qtutils.apply_icon()) self.edit_button.setDefault(True) self.edit_button.setEnabled(False) self.close_button = QtGui.QPushButton() self.close_button.setText(N_('Close')) toplayout = QtGui.QHBoxLayout() toplayout.setMargin(0) toplayout.setSpacing(defs.spacing) toplayout.addWidget(self.count_label) toplayout.addWidget(self.count) toplayout.addStretch() toplayout.addWidget(self.refresh_button) btnlayout = QtGui.QHBoxLayout() btnlayout.setMargin(0) btnlayout.setSpacing(defs.spacing) btnlayout.addWidget(self.expand_button) btnlayout.addWidget(self.collapse_button) btnlayout.addStretch() btnlayout.addWidget(self.edit_button) btnlayout.addWidget(self.close_button) layout = QtGui.QVBoxLayout() layout.setMargin(defs.margin) layout.setSpacing(defs.spacing) layout.addLayout(toplayout) layout.addWidget(self.tree) layout.addLayout(btnlayout) self.setLayout(layout) self.connect(self.tree, SIGNAL('selectionChanged()'), self.selection_changed) self.connect(self.tree, SIGNAL('path_chosen'), self.edit_file) self.connect(self.count, SIGNAL('valueChanged(int)'), self.count_changed) self.connect(self.count, SIGNAL('editingFinished()'), self.refresh) self.connect(self.update_thread, SIGNAL('filenames'), self.set_filenames) qtutils.connect_button(self.refresh_button, self.refresh) qtutils.connect_button(self.expand_button, self.tree.expandAll) qtutils.connect_button(self.collapse_button, self.tree.collapseAll) qtutils.connect_button(self.close_button, self.accept) qtutils.connect_button(self.edit_button, self.edit_selected) qtutils.add_action(self, N_('Refresh'), self.refresh, 'Ctrl+R') self.update_thread.start()
def __init__(self, parent): standard.Dialog.__init__(self, parent) self.setWindowTitle(N_('Recently Modified Files')) self.setWindowModality(Qt.WindowModal) count = 8 self.update_thread = UpdateFileListThread(count) self.count = QtGui.QSpinBox() self.count.setMinimum(0) self.count.setMaximum(10000) self.count.setValue(count) self.count.setSuffix(N_(' commits ago')) self.count_label = QtGui.QLabel() self.count_label.setText(N_('Showing changes since')) self.refresh_button = QtGui.QPushButton() self.refresh_button.setText(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setEnabled(False) self.tree = GitTreeWidget(parent=self) self.tree_model = GitFileTreeModel(self) self.tree.setModel(self.tree_model) self.expand_button = QtGui.QPushButton() self.expand_button.setText(N_('Expand all')) self.expand_button.setIcon(qtutils.open_icon()) self.collapse_button = QtGui.QPushButton() self.collapse_button.setText(N_('Collapse all')) self.collapse_button.setIcon(qtutils.dir_close_icon()) self.edit_button = QtGui.QPushButton() self.edit_button.setText(N_('Edit')) self.edit_button.setIcon(qtutils.apply_icon()) self.edit_button.setDefault(True) self.edit_button.setEnabled(False) self.close_button = QtGui.QPushButton() self.close_button.setText(N_('Close')) self.top_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.count_label, self.count, qtutils.STRETCH, self.refresh_button) self.button_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.expand_button, self.collapse_button, qtutils.STRETCH, self.edit_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.top_layout, self.tree, self.button_layout) self.setLayout(self.main_layout) self.connect(self.tree, SIGNAL('selectionChanged()'), self.selection_changed) self.connect(self.tree, SIGNAL('path_chosen(PyQt_PyObject)'), self.edit_file) self.connect(self.count, SIGNAL('valueChanged(int)'), self.count_changed) self.connect(self.count, SIGNAL('editingFinished()'), self.refresh) self.connect(self.update_thread, SIGNAL('filenames(PyQt_PyObject)'), self.set_filenames, Qt.QueuedConnection) qtutils.connect_button(self.refresh_button, self.refresh) qtutils.connect_button(self.expand_button, self.tree.expandAll) qtutils.connect_button(self.collapse_button, self.tree.collapseAll) qtutils.connect_button(self.close_button, self.accept) qtutils.connect_button(self.edit_button, self.edit_selected) qtutils.add_action(self, N_('Refresh'), self.refresh, hotkeys.REFRESH) self.update_thread.start()
def __init__(self, parent): standard.Dialog.__init__(self, parent) self.setWindowTitle(self.tr('Recently Modified Files')) self.setWindowModality(QtCore.Qt.WindowModal) self.update_thread = UpdateFileListThread() self.count = QtGui.QSpinBox() self.count.setMinimum(0) self.count.setMaximum(10000) self.count.setValue(0) self.count.setSuffix(self.tr(' commits ago')) self.count_label = QtGui.QLabel() self.count_label.setText(self.tr('Showing changes since')) self.refresh_button = QtGui.QPushButton() self.refresh_button.setText('Refresh') self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setEnabled(False) self.tree = GitTreeWidget(None, parent=self) self.tree_model = GitFileTreeModel(self) self.tree.setModel(self.tree_model) self.expand_button = QtGui.QPushButton() self.expand_button.setText('Expand') self.expand_button.setIcon(qtutils.open_icon()) self.collapse_button = QtGui.QPushButton() self.collapse_button.setText('Collapse') self.collapse_button.setIcon(qtutils.dir_close_icon()) self.edit_button = QtGui.QPushButton() self.edit_button.setText('Edit') self.edit_button.setIcon(qtutils.apply_icon()) self.edit_button.setDefault(True) self.edit_button.setEnabled(False) self.close_button = QtGui.QPushButton() self.close_button.setText('Close') toplayout = QtGui.QHBoxLayout() toplayout.setMargin(0) toplayout.setSpacing(defs.spacing) toplayout.addWidget(self.count_label) toplayout.addWidget(self.count) toplayout.addStretch() toplayout.addWidget(self.refresh_button) btnlayout = QtGui.QHBoxLayout() btnlayout.setMargin(0) btnlayout.setSpacing(defs.spacing) btnlayout.addWidget(self.expand_button) btnlayout.addWidget(self.collapse_button) btnlayout.addStretch() btnlayout.addWidget(self.edit_button) btnlayout.addWidget(self.close_button) layout = QtGui.QVBoxLayout() layout.setMargin(defs.margin) layout.setSpacing(defs.spacing) layout.addLayout(toplayout) layout.addWidget(self.tree) layout.addLayout(btnlayout) self.setLayout(layout) self.connect(self.tree, SIGNAL('selectionChanged()'), self.selection_changed) self.connect(self.tree, SIGNAL('path_chosen'), self.edit_file) self.connect(self.count, SIGNAL('valueChanged(int)'), self.count_changed) self.connect(self.count, SIGNAL('editingFinished()'), self.refresh) self.connect(self.refresh_button, SIGNAL('clicked()'), self.refresh) self.connect(self.update_thread, SIGNAL('filenames'), self.set_filenames) self.connect(self.expand_button, SIGNAL('clicked()'), self.tree.expandAll) self.connect(self.collapse_button, SIGNAL('clicked()'), self.tree.collapseAll) self.connect(self.close_button, SIGNAL('clicked()'), self.accept) self.connect(self.edit_button, SIGNAL('clicked()'), self.edit_selected) qtutils.add_action(self, 'Refresh', self.refresh, 'Ctrl+R') self.update_thread.count = 0 self.update_thread.start()