def __init__(self, parent, a=None, b=None, expr=None): super(FileDiffDialog, self).__init__(parent) self.setAttribute(Qt.WA_MacMetalStyle) self.a = a self.b = b self.expr = expr self.setWindowTitle('Select File(s)') self.setWindowModality(QtCore.Qt.WindowModal) self._tree = standard.TreeWidget(self) self._tree.setRootIsDecorated(False) self._tree.setSelectionMode(self._tree.ExtendedSelection) self._tree.setHeaderHidden(True) self._diff_btn = QtGui.QPushButton('Compare') self._diff_btn.setIcon(qtutils.ok_icon()) self._diff_btn.setEnabled(False) self._close_btn = QtGui.QPushButton('Close') self._close_btn.setIcon(qtutils.close_icon()) self._button_layt = QtGui.QHBoxLayout() self._button_layt.setMargin(0) self._button_layt.addStretch() self._button_layt.addWidget(self._diff_btn) self._button_layt.addWidget(self._close_btn) self._layt = QtGui.QVBoxLayout() self._layt.setMargin(defs.margin) self._layt.setSpacing(defs.spacing) self._layt.addWidget(self._tree) self._layt.addLayout(self._button_layt) self.setLayout(self._layt) qtutils.add_close_action(self) self.connect(self._tree, SIGNAL('itemSelectionChanged()'), self._tree_selection_changed) self.connect(self._tree, SIGNAL('itemDoubleClicked(QTreeWidgetItem*,int)'), self._tree_double_clicked) self.connect(self._diff_btn, SIGNAL('clicked()'), self.diff) self.connect(self._close_btn, SIGNAL('clicked()'), self.close) if self.expr: self.diff_arg = tuple(utils.shell_split(self.expr)) elif self.b is None: self.diff_arg = (self.a,) else: self.diff_arg = (self.a, self.b) self.resize(720, 420)
def __init__(self, model, parent=None): standard.Dialog.__init__(self, parent=parent) self.setWindowTitle(self.tr('Preferences')) self.resize(600, 360) self._tabbar = QtGui.QTabBar() self._tabbar.setDrawBase(False) self._tabbar.addTab('All Repositories') self._tabbar.addTab('Current Repository') self._tabbar.addTab('Settings') self._user_form = RepoFormWidget(model, self, source='user') self._repo_form = RepoFormWidget(model, self, source='all') self._options_form = SettingsFormWidget(model, self) relay_signal(self, self._user_form, SIGNAL(model.message_set_config)) relay_signal(self, self._repo_form, SIGNAL(model.message_set_config)) relay_signal(self, self._options_form, SIGNAL(model.message_set_config)) self._stackedwidget = QtGui.QStackedWidget() self._stackedwidget.addWidget(self._user_form) self._stackedwidget.addWidget(self._repo_form) self._stackedwidget.addWidget(self._options_form) self.close_button = QtGui.QPushButton(self) self.close_button.setText(qtutils.tr('Close')) self.close_button.setIcon(qtutils.close_icon()) self._button_layt = QtGui.QHBoxLayout() self._button_layt.setMargin(0) self._button_layt.setSpacing(defs.spacing) self._button_layt.addStretch() self._button_layt.addWidget(self.close_button) self._layt = QtGui.QVBoxLayout() self._layt.setMargin(defs.margin) self._layt.setSpacing(defs.spacing) self._layt.addWidget(self._tabbar) self._layt.addWidget(self._stackedwidget) self._layt.addLayout(self._button_layt) self.setLayout(self._layt) self.connect(self._tabbar, SIGNAL('currentChanged(int)'), self._stackedwidget.setCurrentIndex) self.connect(self._stackedwidget, SIGNAL('currentChanged(int)'), self.update_widget) self.connect(self.close_button, SIGNAL('clicked()'), self.accept) qtutils.add_close_action(self) self.update_widget(0)
def __init__(self, parent, update=True): standard.Widget.__init__(self, parent) self.tree = RepoTreeView(self) self.mainlayout = qtutils.hbox(defs.no_margin, defs.spacing, self.tree) self.setLayout(self.mainlayout) self.resize(720, 420) self.connect(self, SIGNAL('updated'), self._updated_callback) self.model = main.model() self.model.add_observer(self.model.message_updated, self.model_updated) qtutils.add_close_action(self) if update: self.model_updated()
def __init__(self, parent, a, b): QtGui.QDialog.__init__(self, parent) self.a = a self.b = b self.setWindowTitle('Select File(s)') self._tree = QtGui.QTreeWidget(self) self._tree.setAlternatingRowColors(True) self._tree.setRootIsDecorated(False) self._tree.setSelectionMode(self._tree.ExtendedSelection) self._tree.setUniformRowHeights(True) self._tree.setAllColumnsShowFocus(True) self._tree.setHeaderHidden(True) self._diff_btn = QtGui.QPushButton('Compare') self._diff_btn.setIcon(qtutils.ok_icon()) self._diff_btn.setEnabled(False) self._close_btn = QtGui.QPushButton('Close') self._close_btn.setIcon(qtutils.close_icon()) self._button_layt = QtGui.QHBoxLayout() self._button_layt.setMargin(0) self._button_layt.addStretch() self._button_layt.addWidget(self._diff_btn) self._button_layt.addWidget(self._close_btn) self._layt = QtGui.QVBoxLayout() self._layt.setMargin(defs.margin) self._layt.setSpacing(defs.spacing) self._layt.addWidget(self._tree) self._layt.addLayout(self._button_layt) self.setLayout(self._layt) qtutils.add_close_action(self) self.connect(self._tree, SIGNAL('itemSelectionChanged()'), self._tree_selection_changed) self.connect(self._tree, SIGNAL('itemDoubleClicked(QTreeWidgetItem*,int)'), self._tree_double_clicked) self.connect(self._diff_btn, SIGNAL('clicked()'), self.diff) self.connect(self._close_btn, SIGNAL('clicked()'), self.close) self.diff_arg = (self.a, self.b) self.resize(720, 420)
def __init__(self, model, parent=None): standard.Dialog.__init__(self, parent=parent) self.setWindowTitle(N_("Preferences")) if parent is not None: self.setWindowModality(QtCore.Qt.WindowModal) self.resize(600, 360) self._tabbar = QtGui.QTabBar() self._tabbar.setDrawBase(False) self._tabbar.addTab(N_("All Repositories")) self._tabbar.addTab(N_("Current Repository")) self._tabbar.addTab(N_("Settings")) self._user_form = RepoFormWidget(model, self, source="user") self._repo_form = RepoFormWidget(model, self, source="repo") self._options_form = SettingsFormWidget(model, self) self._stackedwidget = QtGui.QStackedWidget() self._stackedwidget.addWidget(self._user_form) self._stackedwidget.addWidget(self._repo_form) self._stackedwidget.addWidget(self._options_form) self.close_button = QtGui.QPushButton(self) self.close_button.setText(N_("Close")) self.close_button.setIcon(qtutils.close_icon()) self._button_layt = QtGui.QHBoxLayout() self._button_layt.setMargin(0) self._button_layt.setSpacing(defs.spacing) self._button_layt.addStretch() self._button_layt.addWidget(self.close_button) self._layt = QtGui.QVBoxLayout() self._layt.setMargin(defs.margin) self._layt.setSpacing(defs.spacing) self._layt.addWidget(self._tabbar) self._layt.addWidget(self._stackedwidget) self._layt.addLayout(self._button_layt) self.setLayout(self._layt) self.connect(self._tabbar, SIGNAL("currentChanged(int)"), self._stackedwidget.setCurrentIndex) self.connect(self._stackedwidget, SIGNAL("currentChanged(int)"), self.update_widget) qtutils.connect_button(self.close_button, self.accept) qtutils.add_close_action(self) self.update_widget(0)
def __init__(self, parent, update=True): standard.Dialog.__init__(self, parent) self.setObjectName('classic') self.tree = RepoTreeView(self) self.setLayout(QtGui.QHBoxLayout()) self.layout().setMargin(1) self.layout().addWidget(self.tree) self.resize(720, 420) self.connect(self, SIGNAL('updated'), self._updated_callback) self.model = cola.model() self.model.add_message_observer(self.model.message_updated, self._model_updated) qtutils.add_close_action(self) if update: self._model_updated()
def __init__(self, parent, update=True): super(Browser, self).__init__(parent) self.tree = RepoTreeView(self) self.mainlayout = QtGui.QHBoxLayout() self.setLayout(self.mainlayout) self.mainlayout.setMargin(0) self.mainlayout.setSpacing(defs.spacing) self.mainlayout.addWidget(self.tree) self.resize(720, 420) self.connect(self, SIGNAL('updated'), self._updated_callback) self.model = cola.model() self.model.add_observer(self.model.message_updated, self.model_updated) qtutils.add_close_action(self) if update: self.model_updated()
def __init__(self, model, parent=None): standard.Dialog.__init__(self, parent=parent) self.setWindowTitle(N_('Preferences')) if parent is not None: self.setWindowModality(QtCore.Qt.WindowModal) self.resize(600, 360) self.tab_bar = QtGui.QTabBar() self.tab_bar.setDrawBase(False) self.tab_bar.addTab(N_('All Repositories')) self.tab_bar.addTab(N_('Current Repository')) self.tab_bar.addTab(N_('Settings')) self.user_form = RepoFormWidget(model, self, source='user') self.repo_form = RepoFormWidget(model, self, source='repo') self.options_form = SettingsFormWidget(model, self) self.stack_widget = QtGui.QStackedWidget() self.stack_widget.addWidget(self.user_form) self.stack_widget.addWidget(self.repo_form) self.stack_widget.addWidget(self.options_form) self.close_button = QtGui.QPushButton(self) self.close_button.setText(N_('Close')) self.close_button.setIcon(qtutils.close_icon()) self.button_layout = qtutils.hbox(defs.no_margin, defs.spacing, qtutils.STRETCH, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.tab_bar, self.stack_widget, self.button_layout) self.setLayout(self.main_layout) self.connect(self.tab_bar, SIGNAL('currentChanged(int)'), self.stack_widget.setCurrentIndex) self.connect(self.stack_widget, SIGNAL('currentChanged(int)'), self.update_widget) qtutils.connect_button(self.close_button, self.accept) qtutils.add_close_action(self) self.update_widget(0)
def __init__(self, parent, update=True, settings=None): standard.Widget.__init__(self, parent) self.settings = settings self.tree = RepoTreeView(self) self.mainlayout = qtutils.hbox(defs.no_margin, defs.spacing, self.tree) self.setLayout(self.mainlayout) self.connect(self, SIGNAL('updated()'), self._updated_callback, Qt.QueuedConnection) self.model = main.model() self.model.add_observer(self.model.message_updated, self.model_updated) qtutils.add_close_action(self) if update: self.model_updated() # Restore saved settings if not self.restore_state(settings=settings): self.resize(720, 420)
def __init__(self, parent=None): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Search')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) self.input_txt = HintedLineEdit(N_('command-line arguments'), self) self.input_txt.enable_hint(True) self.regexp_combo = combo = QtGui.QComboBox() combo.setToolTip(N_('Choose the "git grep" regular expression mode')) items = [N_('Basic Regexp'), N_('Extended Regexp'), N_('Fixed String')] combo.addItems(items) combo.setCurrentIndex(0) combo.setEditable(False) combo.setItemData(0, N_('Search using a POSIX basic regular expression'), Qt.ToolTipRole) combo.setItemData(1, N_('Search using a POSIX extended regular expression'), Qt.ToolTipRole) combo.setItemData(2, N_('Search for a fixed string'), Qt.ToolTipRole) combo.setItemData(0, '--basic-regexp', Qt.UserRole) combo.setItemData(1, '--extended-regexp', Qt.UserRole) combo.setItemData(2, '--fixed-strings', Qt.UserRole) self.result_txt = GrepTextView(N_('grep result...'), self) self.result_txt.enable_hint(True) self.edit_button = QtGui.QPushButton(N_('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setEnabled(False) self.edit_button.setShortcut(cmds.Edit.SHORTCUT) self.refresh_button = QtGui.QPushButton(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(QtGui.QKeySequence.Refresh) self.shell_checkbox = QtGui.QCheckBox(N_('Shell arguments')) self.shell_checkbox.setToolTip( N_('Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".')) self.shell_checkbox.setChecked(False) self.close_button = QtGui.QPushButton(N_('Close')) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.button_spacing) self.bottom_layout = QtGui.QHBoxLayout() self.bottom_layout.setMargin(0) self.bottom_layout.setSpacing(defs.button_spacing) self.mainlayout = QtGui.QVBoxLayout() self.mainlayout.setMargin(defs.margin) self.mainlayout.setSpacing(defs.spacing) self.input_layout.addWidget(self.input_label) self.input_layout.addWidget(self.input_txt) self.input_layout.addWidget(self.regexp_combo) self.bottom_layout.addWidget(self.edit_button) self.bottom_layout.addWidget(self.refresh_button) self.bottom_layout.addWidget(self.shell_checkbox) self.bottom_layout.addStretch() self.bottom_layout.addWidget(self.close_button) self.mainlayout.addLayout(self.input_layout) self.mainlayout.addWidget(self.result_txt) self.mainlayout.addLayout(self.bottom_layout) self.setLayout(self.mainlayout) self.grep_thread = GrepThread(self) self.connect(self.grep_thread, SIGNAL('result'), self.process_result) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.regexp_combo, SIGNAL('currentIndexChanged(int)'), lambda x: self.search()) self.connect(self.result_txt, SIGNAL('leave()'), lambda: self.input_txt.setFocus()) qtutils.add_action(self.input_txt, 'FocusResults', lambda: self.result_txt.setFocus(), Qt.Key_Down, Qt.Key_Enter, Qt.Key_Return) qtutils.add_action(self, 'FocusSearch', lambda: self.input_txt.setFocus(), 'Ctrl+l') qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_toggle(self.shell_checkbox, lambda x: self.search()) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): self.resize(666, 420)
def __init__(self, model, dag, parent=None, args=None): standard.Dialog.__init__(self, parent=parent) if utils.is_darwin(): self.setAttribute(QtCore.Qt.WA_MacMetalStyle) # change when widgets are added/removed self.widget_version = 1 self.model = model self.dag = dag self.setObjectName('dag') self.setMinimumSize(1, 1) self.revlabel = QtGui.QLabel() self.revlabel.setText('git log -') self.revtext = GitLogLineEdit(parent=self) self.maxresults = QtGui.QSpinBox() self.maxresults.setMinimum(-1) self.maxresults.setMaximum(2**31 - 1) self.displaybutton = QtGui.QPushButton() self.displaybutton.setText('Display') self.zoom_in = QtGui.QPushButton() self.zoom_in.setIcon(qtutils.theme_icon('zoom-in.png')) self.zoom_in.setFlat(True) self.zoom_out = QtGui.QPushButton() self.zoom_out.setIcon(qtutils.theme_icon('zoom-out.png')) self.zoom_out.setFlat(True) self._buttons_layt = QtGui.QHBoxLayout() self._buttons_layt.setMargin(2) self._buttons_layt.setSpacing(4) self._buttons_layt.addWidget(self.revlabel) self._buttons_layt.addWidget(self.maxresults) self._buttons_layt.addWidget(self.revtext) self._buttons_layt.addWidget(self.displaybutton) self._buttons_layt.addStretch() self._buttons_layt.addWidget(self.zoom_out) self._buttons_layt.addWidget(self.zoom_in) self._commits = {} self._notifier = notifier = observable.Observable() self._notifier.refs_updated = refs_updated = 'refs_updated' self._notifier.add_message_observer(refs_updated, self._display) self._graphview = GraphView(notifier) self._treewidget = CommitTreeWidget(notifier) self._diffwidget = DiffWidget(notifier) for signal in (archive,): qtutils.relay_signal(self, self._graphview, SIGNAL(signal)) qtutils.relay_signal(self, self._treewidget, SIGNAL(signal)) self._mainsplitter = QtGui.QSplitter() self._mainsplitter.setOrientation(QtCore.Qt.Horizontal) self._mainsplitter.setChildrenCollapsible(True) self._leftsplitter = QtGui.QSplitter() self._leftsplitter.setOrientation(QtCore.Qt.Vertical) self._leftsplitter.setChildrenCollapsible(True) self._leftsplitter.setStretchFactor(0, 1) self._leftsplitter.setStretchFactor(1, 1) self._leftsplitter.insertWidget(0, self._treewidget) self._leftsplitter.insertWidget(1, self._diffwidget) self._mainsplitter.insertWidget(0, self._leftsplitter) self._mainsplitter.insertWidget(1, self._graphview) self._mainsplitter.setStretchFactor(0, 1) self._mainsplitter.setStretchFactor(1, 1) self._layt = layt = QtGui.QVBoxLayout() layt.setMargin(0) layt.setSpacing(0) layt.addLayout(self._buttons_layt) layt.addWidget(self._mainsplitter) self.setLayout(layt) # Also re-loads dag.* from the saved state if not qtutils.apply_state(self): self.resize_to_desktop() # Update fields affected by model self.revtext.setText(dag.ref) self.maxresults.setValue(dag.count) self.update_window_title() self.thread = ReaderThread(self, dag) self.thread.connect(self.thread, self.thread.commits_ready, self.add_commits) self.thread.connect(self.thread, self.thread.done, self.thread_done) self.connect(self._mainsplitter, SIGNAL('splitterMoved(int,int)'), self._splitter_moved) self.connect(self.zoom_in, SIGNAL('pressed()'), self._graphview.zoom_in) self.connect(self.zoom_out, SIGNAL('pressed()'), self._graphview.zoom_out) self.connect(self.maxresults, SIGNAL('valueChanged(int)'), lambda(x): self.dag.set_count(x)) self.connect(self.displaybutton, SIGNAL('pressed()'), self._display) self.connect(self.revtext, SIGNAL('ref_changed'), self._display) self.connect(self.revtext, SIGNAL('textChanged(QString)'), self._text_changed) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_message_observer(self.model.message_updated, self._model_updated) self.connect(self, SIGNAL('model_updated'), self.model_updated) qtutils.add_close_action(self)
def __init__(self, parent=None): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Search')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.edit_action = qtutils.add_action(self, N_('Edit'), self.edit, hotkeys.EDIT) self.refresh_action = qtutils.add_action(self, N_('Refresh'), self.search, *hotkeys.REFRESH_HOTKEYS) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) self.input_txt = HintedLineEdit(N_('command-line arguments'), self) self.input_txt.hint.enable(True) self.regexp_combo = combo = QtGui.QComboBox() combo.setToolTip(N_('Choose the "git grep" regular expression mode')) items = [N_('Basic Regexp'), N_('Extended Regexp'), N_('Fixed String')] combo.addItems(items) combo.setCurrentIndex(0) combo.setEditable(False) combo.setItemData(0, N_('Search using a POSIX basic regular expression'), Qt.ToolTipRole) combo.setItemData( 1, N_('Search using a POSIX extended regular expression'), Qt.ToolTipRole) combo.setItemData(2, N_('Search for a fixed string'), Qt.ToolTipRole) combo.setItemData(0, '--basic-regexp', Qt.UserRole) combo.setItemData(1, '--extended-regexp', Qt.UserRole) combo.setItemData(2, '--fixed-strings', Qt.UserRole) self.result_txt = GrepTextView(N_('grep result...'), self) self.result_txt.hint.enable(True) self.edit_button = qtutils.edit_button() qtutils.button_action(self.edit_button, self.edit_action) self.refresh_button = qtutils.refresh_button() qtutils.button_action(self.refresh_button, self.refresh_action) text = N_('Shell arguments') tooltip = N_('Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".') self.shell_checkbox = qtutils.checkbox(text=text, tooltip=tooltip, checked=False) self.close_button = qtutils.close_button() self.refresh_group = Group(self.refresh_action, self.refresh_button) self.refresh_group.setEnabled(False) self.edit_group = Group(self.edit_action, self.edit_button) self.edit_group.setEnabled(False) self.input_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.input_label, self.input_txt, self.regexp_combo) self.bottom_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.edit_button, self.refresh_button, self.shell_checkbox, qtutils.STRETCH, self.close_button) self.mainlayout = qtutils.vbox(defs.margin, defs.no_spacing, self.input_layout, self.result_txt, self.bottom_layout) self.setLayout(self.mainlayout) self.worker_thread = GrepThread(self) self.connect( self.worker_thread, SIGNAL('result(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)'), self.process_result, Qt.QueuedConnection) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.regexp_combo, SIGNAL('currentIndexChanged(int)'), lambda x: self.search()) self.connect(self.result_txt, SIGNAL('leave()'), lambda: self.input_txt.setFocus()) qtutils.add_action(self.input_txt, 'Focus Results', self.focus_results, hotkeys.DOWN, *hotkeys.ACCEPT) qtutils.add_action(self, 'Focus Input', self.focus_input, hotkeys.FOCUS) qtutils.connect_toggle(self.shell_checkbox, lambda x: self.search()) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): width, height = qtutils.default_size(parent, 666, 420) self.resize(width, height)
def __init__(self, model, ctx, parent=None, settings=None): standard.MainWindow.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setMinimumSize(420, 420) # change when widgets are added/removed self.widget_version = 2 self.model = model self.ctx = ctx self.settings = settings self.commits = {} self.commit_list = [] self.selection = [] self.thread = ReaderThread(ctx, self) self.revtext = completion.GitLogLineEdit() self.maxresults = standard.SpinBox() self.zoom_out = qtutils.create_action_button(tooltip=N_('Zoom Out'), icon=icons.zoom_out()) self.zoom_in = qtutils.create_action_button(tooltip=N_('Zoom In'), icon=icons.zoom_in()) self.zoom_to_fit = qtutils.create_action_button( tooltip=N_('Zoom to Fit'), icon=icons.zoom_fit_best()) self.notifier = notifier = observable.Observable() self.notifier.refs_updated = refs_updated = 'refs_updated' self.notifier.add_observer(refs_updated, self.display) self.notifier.add_observer(filelist.HISTORIES_SELECTED, self.histories_selected) self.notifier.add_observer(filelist.DIFFTOOL_SELECTED, self.difftool_selected) self.notifier.add_observer(diff.COMMITS_SELECTED, self.commits_selected) self.treewidget = CommitTreeWidget(notifier, self) self.diffwidget = diff.DiffWidget(notifier, self) self.filewidget = filelist.FileWidget(notifier, self) self.graphview = GraphView(notifier, self) self.controls_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.revtext, self.maxresults) self.controls_widget = QtGui.QWidget() self.controls_widget.setLayout(self.controls_layout) self.log_dock = qtutils.create_dock(N_('Log'), self, stretch=False) self.log_dock.setWidget(self.treewidget) log_dock_titlebar = self.log_dock.titleBarWidget() log_dock_titlebar.add_corner_widget(self.controls_widget) self.file_dock = qtutils.create_dock(N_('Files'), self) self.file_dock.setWidget(self.filewidget) self.diff_dock = qtutils.create_dock(N_('Diff'), self) self.diff_dock.setWidget(self.diffwidget) self.graph_controls_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.zoom_out, self.zoom_in, self.zoom_to_fit, defs.spacing) self.graph_controls_widget = QtGui.QWidget() self.graph_controls_widget.setLayout(self.graph_controls_layout) self.graphview_dock = qtutils.create_dock(N_('Graph'), self) self.graphview_dock.setWidget(self.graphview) graph_titlebar = self.graphview_dock.titleBarWidget() graph_titlebar.add_corner_widget(self.graph_controls_widget) self.lock_layout_action = qtutils.add_action_bool( self, N_('Lock Layout'), self.set_lock_layout, False) self.refresh_action = qtutils.add_action(self, N_('Refresh'), self.refresh, hotkeys.REFRESH) # Create the application menu self.menubar = QtGui.QMenuBar(self) # View Menu self.view_menu = qtutils.create_menu(N_('View'), self.menubar) self.view_menu.addAction(self.refresh_action) self.view_menu.addAction(self.log_dock.toggleViewAction()) self.view_menu.addAction(self.graphview_dock.toggleViewAction()) self.view_menu.addAction(self.diff_dock.toggleViewAction()) self.view_menu.addAction(self.file_dock.toggleViewAction()) self.view_menu.addSeparator() self.view_menu.addAction(self.lock_layout_action) self.menubar.addAction(self.view_menu.menuAction()) self.setMenuBar(self.menubar) left = Qt.LeftDockWidgetArea right = Qt.RightDockWidgetArea self.addDockWidget(left, self.log_dock) self.addDockWidget(left, self.diff_dock) self.addDockWidget(right, self.graphview_dock) self.addDockWidget(right, self.file_dock) # Update fields affected by model self.revtext.setText(ctx.ref) self.maxresults.setValue(ctx.count) self.update_window_title() # Also re-loads dag.* from the saved state if not self.restore_state(settings=settings): self.resize_to_desktop() qtutils.connect_button(self.zoom_out, self.graphview.zoom_out) qtutils.connect_button(self.zoom_in, self.graphview.zoom_in) qtutils.connect_button(self.zoom_to_fit, self.graphview.zoom_to_fit) self.thread.connect(self.thread, self.thread.begin, self.thread_begin, Qt.QueuedConnection) self.thread.connect(self.thread, self.thread.status, self.thread_status, Qt.QueuedConnection) self.thread.connect(self.thread, self.thread.add, self.add_commits, Qt.QueuedConnection) self.thread.connect(self.thread, self.thread.end, self.thread_end, Qt.QueuedConnection) self.connect(self.treewidget, SIGNAL('diff_commits(PyQt_PyObject,PyQt_PyObject)'), self.diff_commits) self.connect(self.graphview, SIGNAL('diff_commits(PyQt_PyObject,PyQt_PyObject)'), self.diff_commits) self.connect(self.maxresults, SIGNAL('editingFinished()'), self.display) self.connect(self.revtext, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.revtext, SIGNAL('activated()'), self.display) self.connect(self.revtext, SIGNAL('return()'), self.display) self.connect(self.revtext, SIGNAL('down()'), self.focus_tree) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_observer(self.model.message_updated, self.emit_model_updated) self.connect(self, SIGNAL('model_updated()'), self.model_updated, Qt.QueuedConnection) qtutils.add_action(self, 'Focus Input', self.focus_input, hotkeys.FOCUS) qtutils.add_close_action(self)
def __init__(self, parent): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) hint = N_('command-line arguments') self.input_txt = HintedLineEdit(hint, self) self.input_txt.enable_hint(True) hint = N_('grep result...') self.result_txt = GrepTextView(hint, self) self.result_txt.enable_hint(True) self.edit_button = QtGui.QPushButton(N_('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setEnabled(False) self.edit_button.setShortcut(cmds.Edit.SHORTCUT) self.refresh_button = QtGui.QPushButton(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(QtGui.QKeySequence.Refresh) self.shell_checkbox = QtGui.QCheckBox(N_('Shell arguments')) self.shell_checkbox.setToolTip( N_('Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".')) self.shell_checkbox.setChecked(False) self.close_button = QtGui.QPushButton(N_('Close')) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.button_spacing) self.bottom_layout = QtGui.QHBoxLayout() self.bottom_layout.setMargin(0) self.bottom_layout.setSpacing(defs.button_spacing) self.mainlayout = QtGui.QVBoxLayout() self.mainlayout.setMargin(defs.margin) self.mainlayout.setSpacing(defs.spacing) self.input_layout.addWidget(self.input_label) self.input_layout.addWidget(self.input_txt) self.bottom_layout.addWidget(self.edit_button) self.bottom_layout.addWidget(self.refresh_button) self.bottom_layout.addWidget(self.shell_checkbox) self.bottom_layout.addStretch() self.bottom_layout.addWidget(self.close_button) self.mainlayout.addLayout(self.input_layout) self.mainlayout.addWidget(self.result_txt) self.mainlayout.addLayout(self.bottom_layout) self.setLayout(self.mainlayout) self.grep_thread = GrepThread(self) self.connect(self.grep_thread, SIGNAL('result'), self.process_result) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), self.input_txt_changed) self.connect(self.result_txt, SIGNAL('leave()'), lambda: self.input_txt.setFocus()) qtutils.add_action(self.input_txt, 'FocusResults', lambda: self.result_txt.setFocus(), Qt.Key_Down, Qt.Key_Enter, Qt.Key_Return) qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not qtutils.apply_state(self): self.resize(666, 420)
def __init__(self, parent=None): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Search')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.edit_action = qtutils.add_action( self, N_('Edit'), self.edit, hotkeys.EDIT) self.refresh_action = qtutils.add_action( self, N_('Refresh'), self.search, *hotkeys.REFRESH_HOTKEYS) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) self.input_txt = HintedLineEdit(N_('command-line arguments'), self) self.input_txt.hint.enable(True) self.regexp_combo = combo = QtGui.QComboBox() combo.setToolTip(N_('Choose the "git grep" regular expression mode')) items = [N_('Basic Regexp'), N_('Extended Regexp'), N_('Fixed String')] combo.addItems(items) combo.setCurrentIndex(0) combo.setEditable(False) combo.setItemData(0, N_('Search using a POSIX basic regular expression'), Qt.ToolTipRole) combo.setItemData(1, N_('Search using a POSIX extended regular expression'), Qt.ToolTipRole) combo.setItemData(2, N_('Search for a fixed string'), Qt.ToolTipRole) combo.setItemData(0, '--basic-regexp', Qt.UserRole) combo.setItemData(1, '--extended-regexp', Qt.UserRole) combo.setItemData(2, '--fixed-strings', Qt.UserRole) self.result_txt = GrepTextView(N_('grep result...'), self) self.result_txt.hint.enable(True) self.edit_button = qtutils.edit_button() qtutils.button_action(self.edit_button, self.edit_action) self.refresh_button = qtutils.refresh_button() qtutils.button_action(self.refresh_button, self.refresh_action) text = N_('Shell arguments') tooltip = N_('Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".') self.shell_checkbox = qtutils.checkbox(text=text, tooltip=tooltip, checked=False) self.close_button = qtutils.close_button() self.refresh_group = Group(self.refresh_action, self.refresh_button) self.refresh_group.setEnabled(False) self.edit_group = Group(self.edit_action, self.edit_button) self.edit_group.setEnabled(False) self.input_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.input_label, self.input_txt, self.regexp_combo) self.bottom_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.edit_button, self.refresh_button, self.shell_checkbox, qtutils.STRETCH, self.close_button) self.mainlayout = qtutils.vbox(defs.margin, defs.no_spacing, self.input_layout, self.result_txt, self.bottom_layout) self.setLayout(self.mainlayout) self.worker_thread = GrepThread(self) self.connect(self.worker_thread, SIGNAL('result(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)'), self.process_result, Qt.QueuedConnection) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.regexp_combo, SIGNAL('currentIndexChanged(int)'), lambda x: self.search()) self.connect(self.result_txt, SIGNAL('leave()'), lambda: self.input_txt.setFocus()) qtutils.add_action(self.input_txt, 'Focus Results', self.focus_results, hotkeys.DOWN, *hotkeys.ACCEPT) qtutils.add_action(self, 'Focus Input', self.focus_input, hotkeys.FOCUS) qtutils.connect_toggle(self.shell_checkbox, lambda x: self.search()) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): width, height = qtutils.default_size(parent, 666, 420) self.resize(width, height)
def __init__(self, model, settings=None, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Create Branch')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.model = model self.opts = CreateOpts(model) self.thread = CreateThread(self.opts, self) self.progress = QtGui.QProgressDialog(self) self.progress.setRange(0, 0) self.progress.setCancelButton(None) self.progress.setWindowTitle(N_('Create Branch')) self.progress.setWindowModality(Qt.WindowModal) self.branch_name_label = QtGui.QLabel() self.branch_name_label.setText(N_('Branch Name')) self.branch_name = QtGui.QLineEdit() self.rev_label = QtGui.QLabel() self.rev_label.setText(N_('Starting Revision')) self.revision = completion.GitRefLineEdit() current = gitcmds.current_branch() if current: self.revision.setText(current) self.local_radio = qtutils.radio(text=N_('Local branch'), checked=True) self.remote_radio = qtutils.radio(text=N_('Tracking branch')) self.tag_radio = qtutils.radio(text=N_('Tag')) self.branch_list = QtGui.QListWidget() self.update_existing_label = QtGui.QLabel() self.update_existing_label.setText(N_('Update Existing Branch:')) self.no_update_radio = qtutils.radio(text=N_('No')) self.ffwd_only_radio = qtutils.radio(text=N_('Fast Forward Only'), checked=True) self.reset_radio = qtutils.radio(text=N_('Reset')) text = N_('Fetch Tracking Branch') self.fetch_checkbox = qtutils.checkbox(text=text, checked=True) text = N_('Checkout After Creation') self.checkout_checkbox = qtutils.checkbox(text=text, checked=True) icon = icons.branch() self.create_button = qtutils.create_button(text=N_('Create Branch'), icon=icon, default=True) self.close_button = qtutils.close_button() self.options_checkbox_layout = qtutils.hbox(defs.margin, defs.spacing, self.fetch_checkbox, self.checkout_checkbox, qtutils.STRETCH) self.branch_name_layout = qtutils.hbox(defs.margin, defs.spacing, self.branch_name_label, self.branch_name) self.rev_radio_group = qtutils.buttongroup(self.local_radio, self.remote_radio, self.tag_radio) self.rev_radio_layout = qtutils.hbox(defs.margin, defs.spacing, self.local_radio, self.remote_radio, self.tag_radio, qtutils.STRETCH) self.rev_start_textinput_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.rev_label, defs.spacing, self.revision) self.rev_start_layout = qtutils.vbox(defs.no_margin, defs.spacing, self.rev_radio_layout, self.branch_list, self.rev_start_textinput_layout) self.options_radio_group = qtutils.buttongroup(self.no_update_radio, self.ffwd_only_radio, self.reset_radio) self.options_radio_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.update_existing_label, self.no_update_radio, self.ffwd_only_radio, self.reset_radio, qtutils.STRETCH) self.buttons_layout = qtutils.hbox(defs.margin, defs.spacing, qtutils.STRETCH, self.create_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.branch_name_layout, self.rev_start_layout, defs.button_spacing, self.options_radio_layout, self.options_checkbox_layout, self.buttons_layout) self.setLayout(self.main_layout) qtutils.add_close_action(self) qtutils.connect_button(self.close_button, self.close) qtutils.connect_button(self.create_button, self.create_branch) qtutils.connect_button(self.local_radio, self.display_model) qtutils.connect_button(self.remote_radio, self.display_model) qtutils.connect_button(self.tag_radio, self.display_model) self.connect(self.branch_list, SIGNAL('itemSelectionChanged()'), self.branch_item_changed) self.connect(self.thread, SIGNAL(COMMAND_SIGNAL), self.thread_command, Qt.QueuedConnection) self.connect(self.thread, SIGNAL('done(PyQt_PyObject)'), self.thread_done, Qt.QueuedConnection) if not self.restore_state(settings=settings): self.resize(555, 333) self.display_model()
def __init__(self, model, dag, parent=None, args=None): super(DAGView, self).__init__(parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setMinimumSize(1, 1) # change when widgets are added/removed self.widget_version = 1 self.model = model self.dag = dag self.commits = {} self.commit_list = [] self.old_count = None self.old_ref = None self.revtext = completion.GitLogLineEdit(parent=self) self.maxresults = QtGui.QSpinBox() self.maxresults.setMinimum(1) self.maxresults.setMaximum(99999) self.maxresults.setPrefix("git log -") self.maxresults.setSuffix("") self.displaybutton = QtGui.QPushButton() self.displaybutton.setText("Display") self.zoom_in = QtGui.QPushButton() self.zoom_in.setIcon(qtutils.theme_icon("zoom-in.png")) self.zoom_in.setFlat(True) self.zoom_out = QtGui.QPushButton() self.zoom_out.setIcon(qtutils.theme_icon("zoom-out.png")) self.zoom_out.setFlat(True) self.top_layout = QtGui.QHBoxLayout() self.top_layout.setMargin(defs.margin) self.top_layout.setSpacing(defs.button_spacing) self.top_layout.addWidget(self.maxresults) self.top_layout.addWidget(self.revtext) self.top_layout.addWidget(self.displaybutton) self.top_layout.addStretch() self.top_layout.addWidget(self.zoom_out) self.top_layout.addWidget(self.zoom_in) self.notifier = notifier = observable.Observable() self.notifier.refs_updated = refs_updated = "refs_updated" self.notifier.add_observer(refs_updated, self.display) self.graphview = GraphView(notifier, self) self.treewidget = CommitTreeWidget(notifier, self) self.diffwidget = DiffWidget(notifier, self) for signal in (archive,): qtutils.relay_signal(self, self.graphview, SIGNAL(signal)) qtutils.relay_signal(self, self.treewidget, SIGNAL(signal)) self.splitter = QtGui.QSplitter() self.splitter.setOrientation(Qt.Horizontal) self.splitter.setChildrenCollapsible(True) self.splitter.setHandleWidth(defs.handle_width) self.left_splitter = QtGui.QSplitter() self.left_splitter.setOrientation(Qt.Vertical) self.left_splitter.setChildrenCollapsible(True) self.left_splitter.setHandleWidth(defs.handle_width) self.left_splitter.setStretchFactor(0, 1) self.left_splitter.setStretchFactor(1, 1) self.left_splitter.insertWidget(0, self.treewidget) self.left_splitter.insertWidget(1, self.diffwidget) self.splitter.insertWidget(0, self.left_splitter) self.splitter.insertWidget(1, self.graphview) self.splitter.setStretchFactor(0, 1) self.splitter.setStretchFactor(1, 1) self.main_layout = QtGui.QVBoxLayout() self.main_layout.setMargin(0) self.main_layout.setSpacing(0) self.main_layout.addLayout(self.top_layout) self.main_layout.addWidget(self.splitter) self.setLayout(self.main_layout) # Also re-loads dag.* from the saved state if not qtutils.apply_state(self): self.resize_to_desktop() # Update fields affected by model self.revtext.setText(dag.ref) self.maxresults.setValue(dag.count) self.update_window_title() self.thread = ReaderThread(dag, self) self.thread.connect(self.thread, self.thread.commits_ready, self.add_commits) self.thread.connect(self.thread, self.thread.done, self.thread_done) self.connect(self.splitter, SIGNAL("splitterMoved(int,int)"), self.splitter_moved) self.connect(self.zoom_in, SIGNAL("pressed()"), self.graphview.zoom_in) self.connect(self.zoom_out, SIGNAL("pressed()"), self.graphview.zoom_out) self.connect(self.treewidget, SIGNAL("diff_commits"), self.diff_commits) self.connect(self.graphview, SIGNAL("diff_commits"), self.diff_commits) self.connect(self.maxresults, SIGNAL("editingFinished()"), self.display) self.connect(self.displaybutton, SIGNAL("pressed()"), self.display) self.connect(self.revtext, SIGNAL("ref_changed"), self.display) self.connect(self.revtext, SIGNAL("textChanged(QString)"), self.text_changed) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_observer(self.model.message_updated, self.emit_model_updated) self.connect(self, SIGNAL("model_updated"), self.model_updated) qtutils.add_close_action(self)
def __init__(self, parent, a=None, b=None, expr=None, title=None, hide_expr=False): QtGui.QDialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.a = a self.b = b self.diff_expr = expr if title is None: title = N_('git-cola diff') self.setWindowTitle(title) self.setWindowModality(QtCore.Qt.WindowModal) self.expr = completion.GitRefLineEdit(parent=self) if expr is not None: self.expr.setText(expr) if expr is None or hide_expr: self.expr.hide() self.tree = filetree.FileTree(parent=self) self.diff_button = QtGui.QPushButton(N_('Compare')) self.diff_button.setIcon(qtutils.ok_icon()) self.diff_button.setEnabled(False) self.close_button = QtGui.QPushButton(N_('Close')) self.close_button.setIcon(qtutils.close_icon()) self.button_layout = qtutils.hbox(defs.no_margin, defs.spacing, qtutils.STRETCH, self.diff_button, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.spacing, self.expr, self.tree, self.button_layout) self.setLayout(self.main_layout) self.connect(self.tree, SIGNAL('itemSelectionChanged()'), self.tree_selection_changed) self.connect(self.tree, SIGNAL('itemDoubleClicked(QTreeWidgetItem*,int)'), self.tree_double_clicked) self.connect(self.expr, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.tree, SIGNAL('up()'), self.focus_input) self.connect(self.expr, SIGNAL('activated()'), self.focus_tree) self.connect(self.expr, SIGNAL('down()'), self.focus_tree) self.connect(self.expr, SIGNAL('enter()'), self.focus_tree) self.connect(self.expr, SIGNAL('return()'), self.focus_tree) qtutils.connect_button(self.diff_button, self.diff) qtutils.connect_button(self.close_button, self.close) qtutils.add_action(self, 'Focus Input', self.focus_input, 'Ctrl+L') qtutils.add_close_action(self) self.resize(720, 420) self.refresh()
def __init__(self, parent=None): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Search')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) self.input_txt = HintedLineEdit(N_('command-line arguments'), self) self.input_txt.enable_hint(True) self.regexp_combo = combo = QtGui.QComboBox() combo.setToolTip(N_('Choose the "git grep" regular expression mode')) items = [N_('Basic Regexp'), N_('Extended Regexp'), N_('Fixed String')] combo.addItems(items) combo.setCurrentIndex(0) combo.setEditable(False) combo.setItemData(0, N_('Search using a POSIX basic regular expression'), Qt.ToolTipRole) combo.setItemData( 1, N_('Search using a POSIX extended regular expression'), Qt.ToolTipRole) combo.setItemData(2, N_('Search for a fixed string'), Qt.ToolTipRole) combo.setItemData(0, '--basic-regexp', Qt.UserRole) combo.setItemData(1, '--extended-regexp', Qt.UserRole) combo.setItemData(2, '--fixed-strings', Qt.UserRole) self.result_txt = GrepTextView(N_('grep result...'), self) self.result_txt.enable_hint(True) self.edit_button = QtGui.QPushButton(N_('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setEnabled(False) self.edit_button.setShortcut(cmds.Edit.SHORTCUT) self.refresh_button = QtGui.QPushButton(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(QtGui.QKeySequence.Refresh) self.shell_checkbox = QtGui.QCheckBox(N_('Shell arguments')) self.shell_checkbox.setToolTip( N_('Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".')) self.shell_checkbox.setChecked(False) self.close_button = QtGui.QPushButton(N_('Close')) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.button_spacing) self.bottom_layout = QtGui.QHBoxLayout() self.bottom_layout.setMargin(0) self.bottom_layout.setSpacing(defs.button_spacing) self.mainlayout = QtGui.QVBoxLayout() self.mainlayout.setMargin(defs.margin) self.mainlayout.setSpacing(defs.spacing) self.input_layout.addWidget(self.input_label) self.input_layout.addWidget(self.input_txt) self.input_layout.addWidget(self.regexp_combo) self.bottom_layout.addWidget(self.edit_button) self.bottom_layout.addWidget(self.refresh_button) self.bottom_layout.addWidget(self.shell_checkbox) self.bottom_layout.addStretch() self.bottom_layout.addWidget(self.close_button) self.mainlayout.addLayout(self.input_layout) self.mainlayout.addWidget(self.result_txt) self.mainlayout.addLayout(self.bottom_layout) self.setLayout(self.mainlayout) self.grep_thread = GrepThread(self) self.connect(self.grep_thread, SIGNAL('result'), self.process_result) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.regexp_combo, SIGNAL('currentIndexChanged(int)'), lambda x: self.search()) self.connect(self.result_txt, SIGNAL('leave()'), lambda: self.input_txt.setFocus()) qtutils.add_action(self.input_txt, 'FocusResults', lambda: self.result_txt.setFocus(), Qt.Key_Down, Qt.Key_Enter, Qt.Key_Return) qtutils.add_action(self, 'FocusSearch', lambda: self.input_txt.setFocus(), 'Ctrl+l') qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_toggle(self.shell_checkbox, lambda x: self.search()) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): self.resize(666, 420)
def __init__(self, parent=None): standard.Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Find Files')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel(os.path.basename(core.getcwd()) + '/') self.input_txt = completion.GitTrackedLineEdit(hint=N_('<path> ...')) self.input_txt.enable_hint(True) self.tree = filetree.FileTree(parent=self) self.edit_button = QtGui.QPushButton(N_('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setEnabled(False) self.edit_button.setShortcut(cmds.Edit.SHORTCUT) self.open_default_button = QtGui.QPushButton(cmds.OpenDefaultApp.name()) self.open_default_button.setIcon(qtutils.open_file_icon()) self.open_default_button.setEnabled(False) self.open_default_button.setShortcut(cmds.OpenDefaultApp.SHORTCUT) self.refresh_button = QtGui.QPushButton(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(QtGui.QKeySequence.Refresh) self.help_button = qtutils.create_button( text=N_('Help'), tooltip=N_('Show help\nShortcut: ?'), icon=qtutils.help_icon()) self.close_button = QtGui.QPushButton(N_('Close')) self.input_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.input_label, self.input_txt) self.bottom_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.edit_button, self.open_default_button, self.refresh_button, self.help_button, qtutils.STRETCH, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.no_spacing, self.input_layout, self.tree, self.bottom_layout) self.setLayout(self.main_layout) self.setFocusProxy(self.input_txt) self.worker_thread = FindFilesThread(self) self.connect(self.worker_thread, SIGNAL('result(PyQt_PyObject)'), self.process_result, Qt.QueuedConnection) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.input_txt, SIGNAL('activated()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('down()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('enter()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('return()'), self.focus_tree) self.connect(self.tree, SIGNAL('itemSelectionChanged()'), self.tree_item_selection_changed) self.connect(self.tree, SIGNAL('up()'), self.focus_input) self.connect(self.tree, SIGNAL('space()'), self.open_default) qtutils.add_action(self, 'Focus Input', self.focus_input, 'Ctrl+L', 'Ctrl+T') self.show_help_action = qtutils.add_action(self, N_('Show Help'), show_help, Qt.Key_Question) qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.open_default_button, self.open_default) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_button(self.help_button, show_help) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): width, height = qtutils.default_size(parent, 666, 420) self.resize(width, height)
def __init__(self, model, dag, parent=None): MainWindow.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setMinimumSize(420, 420) # change when widgets are added/removed self.widget_version = 1 self.model = model self.dag = dag self.commits = {} self.commit_list = [] self.old_count = None self.old_ref = None self.thread = ReaderThread(dag, self) self.revtext = completion.GitLogLineEdit() self.maxresults = QtGui.QSpinBox() self.maxresults.setMinimum(1) self.maxresults.setMaximum(99999) self.maxresults.setPrefix('') self.maxresults.setSuffix('') self.zoom_out = qtutils.create_action_button( tooltip=N_('Zoom Out'), icon=qtutils.theme_icon('zoom-out.png')) self.zoom_in = qtutils.create_action_button( tooltip=N_('Zoom In'), icon=qtutils.theme_icon('zoom-in.png')) self.zoom_to_fit = qtutils.create_action_button( tooltip=N_('Zoom to Fit'), icon=qtutils.theme_icon('zoom-fit-best.png')) self.notifier = notifier = observable.Observable() self.notifier.refs_updated = refs_updated = 'refs_updated' self.notifier.add_observer(refs_updated, self.display) self.treewidget = CommitTreeWidget(notifier, self) self.diffwidget = DiffWidget(notifier, self) self.filewidget = FileWidget(notifier, self) self.graphview = GraphView(notifier, self) self.controls_layout = QtGui.QHBoxLayout() self.controls_layout.setMargin(defs.no_margin) self.controls_layout.setSpacing(defs.spacing) self.controls_layout.addWidget(self.revtext) self.controls_layout.addWidget(self.maxresults) self.controls_widget = QtGui.QWidget() self.controls_widget.setLayout(self.controls_layout) self.log_dock = qtutils.create_dock(N_('Log'), self, stretch=False) self.log_dock.setWidget(self.treewidget) log_dock_titlebar = self.log_dock.titleBarWidget() log_dock_titlebar.add_corner_widget(self.controls_widget) self.file_dock = qtutils.create_dock(N_('Files'), self) self.file_dock.setWidget(self.filewidget) self.diff_dock = qtutils.create_dock(N_('Diff'), self) self.diff_dock.setWidget(self.diffwidget) self.graph_controls_layout = QtGui.QHBoxLayout() self.graph_controls_layout.setMargin(defs.no_margin) self.graph_controls_layout.setSpacing(defs.button_spacing) self.graph_controls_layout.addWidget(self.zoom_out) self.graph_controls_layout.addWidget(self.zoom_in) self.graph_controls_layout.addWidget(self.zoom_to_fit) self.graph_controls_widget = QtGui.QWidget() self.graph_controls_widget.setLayout(self.graph_controls_layout) self.graphview_dock = qtutils.create_dock(N_('Graph'), self) self.graphview_dock.setWidget(self.graphview) graph_titlebar = self.graphview_dock.titleBarWidget() graph_titlebar.add_corner_widget(self.graph_controls_widget) self.lock_layout_action = qtutils.add_action_bool(self, N_('Lock Layout'), self.set_lock_layout, False) # Create the application menu self.menubar = QtGui.QMenuBar(self) # View Menu self.view_menu = qtutils.create_menu(N_('View'), self.menubar) self.view_menu.addAction(self.log_dock.toggleViewAction()) self.view_menu.addAction(self.graphview_dock.toggleViewAction()) self.view_menu.addAction(self.diff_dock.toggleViewAction()) self.view_menu.addAction(self.file_dock.toggleViewAction()) self.view_menu.addSeparator() self.view_menu.addAction(self.lock_layout_action) self.menubar.addAction(self.view_menu.menuAction()) self.setMenuBar(self.menubar) left = Qt.LeftDockWidgetArea right = Qt.RightDockWidgetArea bottom = Qt.BottomDockWidgetArea self.addDockWidget(left, self.log_dock) self.addDockWidget(right, self.graphview_dock) self.addDockWidget(right, self.file_dock) self.addDockWidget(bottom, self.diff_dock) # Update fields affected by model self.revtext.setText(dag.ref) self.maxresults.setValue(dag.count) self.update_window_title() # Also re-loads dag.* from the saved state if not self.restore_state(): self.resize_to_desktop() qtutils.connect_button(self.zoom_out, self.graphview.zoom_out) qtutils.connect_button(self.zoom_in, self.graphview.zoom_in) qtutils.connect_button(self.zoom_to_fit, self.graphview.zoom_to_fit) self.thread.connect(self.thread, self.thread.commits_ready, self.add_commits) self.thread.connect(self.thread, self.thread.done, self.thread_done) self.connect(self.treewidget, SIGNAL('diff_commits'), self.diff_commits) self.connect(self.graphview, SIGNAL('diff_commits'), self.diff_commits) self.connect(self.maxresults, SIGNAL('editingFinished()'), self.display) self.connect(self.revtext, SIGNAL('changed()'), self.display) self.connect(self.revtext, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.revtext, SIGNAL('returnPressed()'), self.display) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_observer(self.model.message_updated, self.emit_model_updated) self.connect(self, SIGNAL('model_updated'), self.model_updated) qtutils.add_action(self, 'Focus search field', lambda: self.revtext.setFocus(), 'Ctrl+l') qtutils.add_close_action(self)
def __init__(self, parent, a=None, b=None, expr=None, title=None, hide_expr=False): QtGui.QDialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.a = a self.b = b self.expr = expr if title is None: title = N_('git-cola diff') self.setWindowTitle(title) self.setWindowModality(QtCore.Qt.WindowModal) self._expr = completion.GitRefLineEdit(parent=self) if expr is not None: self._expr.setText(expr) if expr is None or hide_expr: self._expr.hide() self._tree = standard.TreeWidget(self) self._tree.setSelectionMode(self._tree.ExtendedSelection) self._tree.setHeaderHidden(True) self._diff_btn = QtGui.QPushButton(N_('Compare')) self._diff_btn.setIcon(qtutils.ok_icon()) self._diff_btn.setEnabled(False) self._close_btn = QtGui.QPushButton(N_('Close')) self._close_btn.setIcon(qtutils.close_icon()) self._button_layt = QtGui.QHBoxLayout() self._button_layt.setMargin(0) self._button_layt.addStretch() self._button_layt.addWidget(self._diff_btn) self._button_layt.addWidget(self._close_btn) self._layt = QtGui.QVBoxLayout() self._layt.setMargin(defs.margin) self._layt.setSpacing(defs.spacing) self._layt.addWidget(self._expr) self._layt.addWidget(self._tree) self._layt.addLayout(self._button_layt) self.setLayout(self._layt) self.connect(self._tree, SIGNAL('itemSelectionChanged()'), self._tree_selection_changed) self.connect(self._tree, SIGNAL('itemDoubleClicked(QTreeWidgetItem*,int)'), self._tree_double_clicked) self.connect(self._expr, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self._expr, SIGNAL('returnPressed()'), self.refresh) qtutils.connect_button(self._diff_btn, self.diff) qtutils.connect_button(self._close_btn, self.close) qtutils.add_close_action(self) self.resize(720, 420) self.refresh()
def __init__(self, model, ctx, parent=None, settings=None): standard.MainWindow.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setMinimumSize(420, 420) # change when widgets are added/removed self.widget_version = 2 self.model = model self.ctx = ctx self.settings = settings self.commits = {} self.commit_list = [] self.thread = ReaderThread(ctx, self) self.revtext = completion.GitLogLineEdit() self.maxresults = standard.SpinBox() self.zoom_out = qtutils.create_action_button( tooltip=N_('Zoom Out'), icon=qtutils.theme_icon('zoom-out.png')) self.zoom_in = qtutils.create_action_button( tooltip=N_('Zoom In'), icon=qtutils.theme_icon('zoom-in.png')) self.zoom_to_fit = qtutils.create_action_button( tooltip=N_('Zoom to Fit'), icon=qtutils.theme_icon('zoom-fit-best.png')) self.notifier = notifier = observable.Observable() self.notifier.refs_updated = refs_updated = 'refs_updated' self.notifier.add_observer(refs_updated, self.display) self.notifier.add_observer(filelist.HISTORIES_SELECTED, self.histories_selected) self.treewidget = CommitTreeWidget(notifier, self) self.diffwidget = diff.DiffWidget(notifier, self) self.filewidget = filelist.FileWidget(notifier, self) self.graphview = GraphView(notifier, self) self.controls_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.revtext, self.maxresults) self.controls_widget = QtGui.QWidget() self.controls_widget.setLayout(self.controls_layout) self.log_dock = qtutils.create_dock(N_('Log'), self, stretch=False) self.log_dock.setWidget(self.treewidget) log_dock_titlebar = self.log_dock.titleBarWidget() log_dock_titlebar.add_corner_widget(self.controls_widget) self.file_dock = qtutils.create_dock(N_('Files'), self) self.file_dock.setWidget(self.filewidget) self.diff_dock = qtutils.create_dock(N_('Diff'), self) self.diff_dock.setWidget(self.diffwidget) self.graph_controls_layout = qtutils.hbox( defs.no_margin, defs.button_spacing, self.zoom_out, self.zoom_in, self.zoom_to_fit) self.graph_controls_widget = QtGui.QWidget() self.graph_controls_widget.setLayout(self.graph_controls_layout) self.graphview_dock = qtutils.create_dock(N_('Graph'), self) self.graphview_dock.setWidget(self.graphview) graph_titlebar = self.graphview_dock.titleBarWidget() graph_titlebar.add_corner_widget(self.graph_controls_widget) self.lock_layout_action = qtutils.add_action_bool(self, N_('Lock Layout'), self.set_lock_layout, False) self.refresh_action = qtutils.add_action(self, N_('Refresh'), self.refresh, 'Ctrl+R') # Create the application menu self.menubar = QtGui.QMenuBar(self) # View Menu self.view_menu = qtutils.create_menu(N_('View'), self.menubar) self.view_menu.addAction(self.refresh_action) self.view_menu.addAction(self.log_dock.toggleViewAction()) self.view_menu.addAction(self.graphview_dock.toggleViewAction()) self.view_menu.addAction(self.diff_dock.toggleViewAction()) self.view_menu.addAction(self.file_dock.toggleViewAction()) self.view_menu.addSeparator() self.view_menu.addAction(self.lock_layout_action) self.menubar.addAction(self.view_menu.menuAction()) self.setMenuBar(self.menubar) left = Qt.LeftDockWidgetArea right = Qt.RightDockWidgetArea self.addDockWidget(left, self.log_dock) self.addDockWidget(left, self.diff_dock) self.addDockWidget(right, self.graphview_dock) self.addDockWidget(right, self.file_dock) # Update fields affected by model self.revtext.setText(ctx.ref) self.maxresults.setValue(ctx.count) self.update_window_title() # Also re-loads dag.* from the saved state if not self.restore_state(settings=settings): self.resize_to_desktop() qtutils.connect_button(self.zoom_out, self.graphview.zoom_out) qtutils.connect_button(self.zoom_in, self.graphview.zoom_in) qtutils.connect_button(self.zoom_to_fit, self.graphview.zoom_to_fit) self.thread.connect(self.thread, self.thread.commits_ready, self.add_commits) self.thread.connect(self.thread, self.thread.done, self.thread_done) self.connect(self.treewidget, SIGNAL('diff_commits(PyQt_PyObject,PyQt_PyObject)'), self.diff_commits) self.connect(self.graphview, SIGNAL('diff_commits(PyQt_PyObject,PyQt_PyObject)'), self.diff_commits) self.connect(self.maxresults, SIGNAL('editingFinished()'), self.display) self.connect(self.revtext, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.revtext, SIGNAL('activated()'), self.display) self.connect(self.revtext, SIGNAL('return()'), self.display) self.connect(self.revtext, SIGNAL('down()'), self.focus_tree) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_observer(self.model.message_updated, self.emit_model_updated) self.connect(self, SIGNAL('model_updated()'), self.model_updated, Qt.QueuedConnection) qtutils.add_action(self, 'Focus Input', self.focus_input, 'Ctrl+L') qtutils.add_close_action(self)
def __init__(self, model, dag, parent=None, settings=None): MainWindow.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setMinimumSize(420, 420) # change when widgets are added/removed self.widget_version = 2 self.model = model self.dag = dag self.settings = settings self.commits = {} self.commit_list = [] self.thread = ReaderThread(dag, self) self.revtext = completion.GitLogLineEdit() self.maxresults = standard.SpinBox() self.zoom_out = qtutils.create_action_button( tooltip=N_('Zoom Out'), icon=qtutils.theme_icon('zoom-out.png')) self.zoom_in = qtutils.create_action_button( tooltip=N_('Zoom In'), icon=qtutils.theme_icon('zoom-in.png')) self.zoom_to_fit = qtutils.create_action_button( tooltip=N_('Zoom to Fit'), icon=qtutils.theme_icon('zoom-fit-best.png')) self.notifier = notifier = observable.Observable() self.notifier.refs_updated = refs_updated = 'refs_updated' self.notifier.add_observer(refs_updated, self.display) self.treewidget = CommitTreeWidget(notifier, self) self.diffwidget = DiffWidget(notifier, self) self.filewidget = FileWidget(notifier, self) self.graphview = GraphView(notifier, self) self.controls_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.revtext, self.maxresults) self.controls_widget = QtGui.QWidget() self.controls_widget.setLayout(self.controls_layout) self.log_dock = qtutils.create_dock(N_('Log'), self, stretch=False) self.log_dock.setWidget(self.treewidget) log_dock_titlebar = self.log_dock.titleBarWidget() log_dock_titlebar.add_corner_widget(self.controls_widget) self.file_dock = qtutils.create_dock(N_('Files'), self) self.file_dock.setWidget(self.filewidget) self.diff_dock = qtutils.create_dock(N_('Diff'), self) self.diff_dock.setWidget(self.diffwidget) self.graph_controls_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.zoom_out, self.zoom_in, self.zoom_to_fit) self.graph_controls_widget = QtGui.QWidget() self.graph_controls_widget.setLayout(self.graph_controls_layout) self.graphview_dock = qtutils.create_dock(N_('Graph'), self) self.graphview_dock.setWidget(self.graphview) graph_titlebar = self.graphview_dock.titleBarWidget() graph_titlebar.add_corner_widget(self.graph_controls_widget) self.lock_layout_action = qtutils.add_action_bool( self, N_('Lock Layout'), self.set_lock_layout, False) self.refresh_action = qtutils.add_action(self, N_('Refresh'), self.refresh, 'Ctrl+R') # Create the application menu self.menubar = QtGui.QMenuBar(self) # View Menu self.view_menu = qtutils.create_menu(N_('View'), self.menubar) self.view_menu.addAction(self.refresh_action) self.view_menu.addAction(self.log_dock.toggleViewAction()) self.view_menu.addAction(self.graphview_dock.toggleViewAction()) self.view_menu.addAction(self.diff_dock.toggleViewAction()) self.view_menu.addAction(self.file_dock.toggleViewAction()) self.view_menu.addSeparator() self.view_menu.addAction(self.lock_layout_action) self.menubar.addAction(self.view_menu.menuAction()) self.setMenuBar(self.menubar) left = Qt.LeftDockWidgetArea right = Qt.RightDockWidgetArea self.addDockWidget(left, self.log_dock) self.addDockWidget(left, self.diff_dock) self.addDockWidget(right, self.graphview_dock) self.addDockWidget(right, self.file_dock) # Update fields affected by model self.revtext.setText(dag.ref) self.maxresults.setValue(dag.count) self.update_window_title() # Also re-loads dag.* from the saved state if not self.restore_state(settings=settings): self.resize_to_desktop() qtutils.connect_button(self.zoom_out, self.graphview.zoom_out) qtutils.connect_button(self.zoom_in, self.graphview.zoom_in) qtutils.connect_button(self.zoom_to_fit, self.graphview.zoom_to_fit) self.thread.connect(self.thread, self.thread.commits_ready, self.add_commits) self.thread.connect(self.thread, self.thread.done, self.thread_done) self.connect(self.treewidget, SIGNAL('diff_commits'), self.diff_commits) self.connect(self.graphview, SIGNAL('diff_commits'), self.diff_commits) self.connect(self.maxresults, SIGNAL('editingFinished()'), self.display) self.connect(self.revtext, SIGNAL('changed()'), self.display) self.connect(self.revtext, SIGNAL('textChanged(QString)'), self.text_changed) self.connect(self.revtext, SIGNAL('returnPressed()'), self.display) # The model is updated in another thread so use # signals/slots to bring control back to the main GUI thread self.model.add_observer(self.model.message_updated, self.emit_model_updated) self.connect(self, SIGNAL('model_updated'), self.model_updated) qtutils.add_action(self, 'Focus search field', lambda: self.revtext.setFocus(), 'Ctrl+L') qtutils.add_close_action(self)
def __init__(self, model, settings=None, parent=None): Dialog.__init__(self, parent=parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Create Branch')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.model = model self.opts = CreateOpts(model) self.thread = CreateThread(self.opts, self) self.progress = QtGui.QProgressDialog(self) self.progress.setRange(0, 0) self.progress.setCancelButton(None) self.progress.setWindowTitle(N_('Create Branch')) self.progress.setWindowModality(Qt.WindowModal) self.branch_name_label = QtGui.QLabel() self.branch_name_label.setText(N_('Branch Name')) self.branch_name = QtGui.QLineEdit() self.rev_label = QtGui.QLabel() self.rev_label.setText(N_('Starting Revision')) self.revision = completion.GitRefLineEdit() current = gitcmds.current_branch() if current: self.revision.setText(current) self.local_radio = qtutils.radio(text=N_('Local branch'), checked=True) self.remote_radio = qtutils.radio(text=N_('Tracking branch')) self.tag_radio = qtutils.radio(text=N_('Tag')) self.branch_list = QtGui.QListWidget() self.update_existing_label = QtGui.QLabel() self.update_existing_label.setText(N_('Update Existing Branch:')) self.no_update_radio = qtutils.radio(text=N_('No')) self.ffwd_only_radio = qtutils.radio(text=N_('Fast Forward Only'), checked=True) self.reset_radio = qtutils.radio(text=N_('Reset')) text = N_('Fetch Tracking Branch') self.fetch_checkbox = qtutils.checkbox(text=text, checked=True) text = N_('Checkout After Creation') self.checkout_checkbox = qtutils.checkbox(text=text, checked=True) icon = icons.branch() self.create_button = qtutils.create_button(text=N_('Create Branch'), icon=icon, default=True) self.close_button = qtutils.close_button() self.options_checkbox_layout = qtutils.hbox(defs.margin, defs.spacing, self.fetch_checkbox, self.checkout_checkbox, qtutils.STRETCH) self.branch_name_layout = qtutils.hbox(defs.margin, defs.spacing, self.branch_name_label, self.branch_name) self.rev_radio_group = qtutils.buttongroup(self.local_radio, self.remote_radio, self.tag_radio) self.rev_radio_layout = qtutils.hbox(defs.margin, defs.spacing, self.local_radio, self.remote_radio, self.tag_radio, qtutils.STRETCH) self.rev_start_textinput_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.rev_label, defs.spacing, self.revision) self.rev_start_layout = qtutils.vbox(defs.no_margin, defs.spacing, self.rev_radio_layout, self.branch_list, self.rev_start_textinput_layout) self.options_radio_group = qtutils.buttongroup(self.no_update_radio, self.ffwd_only_radio, self.reset_radio) self.options_radio_layout = qtutils.hbox(defs.no_margin, defs.spacing, self.update_existing_label, self.no_update_radio, self.ffwd_only_radio, self.reset_radio, qtutils.STRETCH) self.buttons_layout = qtutils.hbox(defs.margin, defs.spacing, qtutils.STRETCH, self.create_button, self.close_button) self.main_layout = qtutils.vbox( defs.margin, defs.spacing, self.branch_name_layout, self.rev_start_layout, defs.button_spacing, self.options_radio_layout, self.options_checkbox_layout, self.buttons_layout) self.setLayout(self.main_layout) qtutils.add_close_action(self) qtutils.connect_button(self.close_button, self.close) qtutils.connect_button(self.create_button, self.create_branch) qtutils.connect_button(self.local_radio, self.display_model) qtutils.connect_button(self.remote_radio, self.display_model) qtutils.connect_button(self.tag_radio, self.display_model) self.connect(self.branch_list, SIGNAL('itemSelectionChanged()'), self.branch_item_changed) self.connect(self.thread, SIGNAL(COMMAND_SIGNAL), self.thread_command, Qt.QueuedConnection) self.connect(self.thread, SIGNAL('done(PyQt_PyObject)'), self.thread_done, Qt.QueuedConnection) if not self.restore_state(settings=settings): self.resize(555, 333) self.display_model()
def __init__(self, parent): Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel('git grep') self.input_label.setFont(diff_font()) hint = 'command-line arguments' self.input_txt = GrepLineEdit(hint, self) self.input_txt.enable_hint(True) hint = 'grep result...' self.result_txt = GrepTextView(hint, self) self.result_txt.enable_hint(True) self.edit_button = QtGui.QPushButton(self.tr('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setEnabled(False) self.edit_button.setShortcut(cmds.Edit.SHORTCUT) self.refresh_button = QtGui.QPushButton(self.tr('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(QtGui.QKeySequence.Refresh) self.shell_checkbox = QtGui.QCheckBox(self.tr('Shell arguments')) self.shell_checkbox.setToolTip( 'Parse arguments using a shell.\n' 'Queries with spaces will require "double quotes".') self.shell_checkbox.setChecked(False) self.close_button = QtGui.QPushButton(self.tr('Close')) self.input_layout = QtGui.QHBoxLayout() self.input_layout.setMargin(0) self.input_layout.setSpacing(defs.button_spacing) self.bottom_layout = QtGui.QHBoxLayout() self.bottom_layout.setMargin(0) self.bottom_layout.setSpacing(defs.button_spacing) self.mainlayout = QtGui.QVBoxLayout() self.mainlayout.setMargin(defs.margin) self.mainlayout.setSpacing(defs.spacing) self.input_layout.addWidget(self.input_label) self.input_layout.addWidget(self.input_txt) self.bottom_layout.addWidget(self.edit_button) self.bottom_layout.addWidget(self.refresh_button) self.bottom_layout.addWidget(self.shell_checkbox) self.bottom_layout.addStretch() self.bottom_layout.addWidget(self.close_button) self.mainlayout.addLayout(self.input_layout) self.mainlayout.addWidget(self.result_txt) self.mainlayout.addLayout(self.bottom_layout) self.setLayout(self.mainlayout) self.grep_thread = GrepThread(self) self.connect(self.grep_thread, SIGNAL('result'), self.process_result) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), self.input_txt_changed) self.connect(self.input_txt, SIGNAL('returnPressed()'), lambda: self.result_txt.setFocus()) qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not qtutils.apply_state(self): self.resize(666, 420)
def __init__(self, parent=None): standard.Dialog.__init__(self, parent) self.setAttribute(Qt.WA_MacMetalStyle) self.setWindowTitle(N_('Find Files')) if parent is not None: self.setWindowModality(Qt.WindowModal) self.input_label = QtGui.QLabel(os.path.basename(core.getcwd()) + '/') self.input_txt = completion.GitTrackedLineEdit(hint=N_('<path> ...')) self.input_txt.hint.enable(True) self.tree = filetree.FileTree(parent=self) self.edit_button = QtGui.QPushButton(N_('Edit')) self.edit_button.setIcon(qtutils.open_file_icon()) self.edit_button.setShortcut(hotkeys.EDIT) self.open_default_button = QtGui.QPushButton( cmds.OpenDefaultApp.name()) self.open_default_button.setIcon(qtutils.open_file_icon()) self.open_default_button.setShortcut(hotkeys.PRIMARY_ACTION) self.button_group = Group(self.edit_button, self.open_default_button) self.button_group.setEnabled(False) self.refresh_button = QtGui.QPushButton(N_('Refresh')) self.refresh_button.setIcon(qtutils.reload_icon()) self.refresh_button.setShortcut(hotkeys.REFRESH) self.help_button = qtutils.create_button( text=N_('Help'), tooltip=N_('Show help\nShortcut: ?'), icon=qtutils.help_icon()) self.close_button = QtGui.QPushButton(N_('Close')) self.input_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.input_label, self.input_txt) self.bottom_layout = qtutils.hbox(defs.no_margin, defs.button_spacing, self.edit_button, self.open_default_button, self.refresh_button, self.help_button, qtutils.STRETCH, self.close_button) self.main_layout = qtutils.vbox(defs.margin, defs.no_spacing, self.input_layout, self.tree, self.bottom_layout) self.setLayout(self.main_layout) self.setFocusProxy(self.input_txt) self.worker_thread = FindFilesThread(self) self.connect(self.worker_thread, SIGNAL('result(PyQt_PyObject)'), self.process_result, Qt.QueuedConnection) self.connect(self.input_txt, SIGNAL('textChanged(QString)'), lambda s: self.search()) self.connect(self.input_txt, SIGNAL('activated()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('down()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('enter()'), self.focus_tree) self.connect(self.input_txt, SIGNAL('return()'), self.focus_tree) self.connect(self.tree, SIGNAL('itemSelectionChanged()'), self.tree_item_selection_changed) self.connect(self.tree, SIGNAL('up()'), self.focus_input) self.connect(self.tree, SIGNAL('space()'), self.open_default) qtutils.add_action(self, 'Focus Input', self.focus_input, hotkeys.FOCUS, hotkeys.FINDER) self.show_help_action = qtutils.add_action(self, N_('Show Help'), show_help, hotkeys.QUESTION) qtutils.connect_button(self.edit_button, self.edit) qtutils.connect_button(self.open_default_button, self.open_default) qtutils.connect_button(self.refresh_button, self.search) qtutils.connect_button(self.help_button, show_help) qtutils.connect_button(self.close_button, self.close) qtutils.add_close_action(self) if not self.restore_state(): width, height = qtutils.default_size(parent, 666, 420) self.resize(width, height)