def __init__(self, repo=None, parent=None): super(ChangesetList, self).__init__(parent) self.currepo = repo self.curitems = None self.curfactory = None self.showitems = None self.limit = 20 contents = ('%(item_l)s:', ' %(branch)s', ' %(tags)s', ' %(summary)s') self.lstyle = csinfo.labelstyle(contents=contents, width=350, selectable=True) contents = ('item', 'summary', 'user', 'dateage', 'rawbranch', 'tags', 'graft', 'transplant', 'p4', 'svn', 'converted') self.pstyle = csinfo.panelstyle(contents=contents, width=350, selectable=True) # main layout self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.mainvbox = QVBoxLayout() self.mainvbox.setSpacing(_SPACING) self.mainvbox.setSizeConstraint(QLayout.SetMinAndMaxSize) self.setLayout(self.mainvbox) ## status box self.statusbox = QHBoxLayout() self.statuslabel = QLabel(_('No items to display')) self.compactchk = QCheckBox(_('Use compact view')) self.statusbox.addWidget(self.statuslabel) self.statusbox.addWidget(self.compactchk) self.mainvbox.addLayout(self.statusbox) ## scroll area self.scrollarea = QScrollArea() self.scrollarea.setMinimumSize(400, 200) self.scrollarea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.scrollarea.setWidgetResizable(True) self.mainvbox.addWidget(self.scrollarea) ### cs layout grid, contains Factory objects, one per revision self.scrollbox = QWidget() self.csvbox = QVBoxLayout() self.csvbox.setSpacing(_SPACING) self.csvbox.setSizeConstraint(QLayout.SetMaximumSize) self.scrollbox.setLayout(self.csvbox) self.scrollarea.setWidget(self.scrollbox) # signal handlers self.compactchk.toggled.connect(self._updateView) # csetinfo def datafunc(widget, item, ctx): if item in ('item', 'item_l'): if not isinstance(ctx, patchctx): return True revid = widget.get_data('revid') if not revid: return widget.target filename = os.path.basename(widget.target) return filename, revid raise csinfo.UnknownItem(item) def labelfunc(widget, item, ctx): if item in ('item', 'item_l'): if not isinstance(ctx, patchctx): return _('Revision:') return _('Patch:') raise csinfo.UnknownItem(item) def markupfunc(widget, item, value): if item in ('item', 'item_l'): if not isinstance(widget.ctx, patchctx): if item == 'item': return widget.get_markup('rev') return widget.get_markup('revnum') mono = dict(face='monospace', size='9000') if isinstance(value, basestring): return qtlib.markup(value, **mono) filename = qtlib.markup(value[0]) revid = qtlib.markup(value[1], **mono) if item == 'item': return '%s (%s)' % (filename, revid) return filename raise csinfo.UnknownItem(item) self.custom = csinfo.custom(data=datafunc, label=labelfunc, markup=markupfunc)
def __init__(self, repoagent, rev=None, parent=None, opts={}): super(UpdateDialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & \ ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent repo = repoagent.rawRepo() # base layout box box = QVBoxLayout() box.setSpacing(6) ## main layout grid self.grid = QGridLayout() self.grid.setSpacing(6) box.addLayout(self.grid) ### target revision combo self.rev_combo = combo = QComboBox() combo.setEditable(True) self.grid.addWidget(QLabel(_('Update to:')), 0, 0) self.grid.addWidget(combo, 0, 1) # Give the combo box a minimum width that will ensure that the dialog is # large enough to fit the additional progress bar that will appear when # updating subrepositories. combo.setMinimumWidth(450) # always include integer revision try: assert not isinstance(rev, (unicode, QString)) ctx = self.repo[rev] if isinstance(ctx.rev(), int): # could be None or patch name combo.addItem(str(ctx.rev())) except error.RepoLookupError: pass for name in repo.namedbranches: combo.addItem(hglib.tounicode(name)) tags = list(self.repo.tags()) + repo._bookmarks.keys() tags.sort(reverse=True) for tag in tags: combo.addItem(hglib.tounicode(tag)) if rev is None: selecturev = hglib.tounicode(self.repo.dirstate.branch()) else: selecturev = hglib.tounicode(str(rev)) selectindex = combo.findText(selecturev) if selectindex >= 0: combo.setCurrentIndex(selectindex) else: combo.setEditText(selecturev) ### target revision info items = ('%(rev)s', ' %(branch)s', ' %(tags)s', '<br />%(summary)s') style = csinfo.labelstyle(contents=items, width=350, selectable=True) factory = csinfo.factory(self.repo, style=style) self.target_info = factory() self.grid.addWidget(QLabel(_('Target:')), 1, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.target_info, 1, 1) ### parent revision info self.ctxs = self.repo[None].parents() if len(self.ctxs) == 2: self.p1_info = factory() self.grid.addWidget(QLabel(_('Parent 1:')), 2, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p1_info, 2, 1) self.p2_info = factory() self.grid.addWidget(QLabel(_('Parent 2:')), 3, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p2_info, 3, 1) else: self.p1_info = factory() self.grid.addWidget(QLabel(_('Parent:')), 2, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p1_info, 2, 1) ### options self.optbox = QVBoxLayout() self.optbox.setSpacing(6) expander = qtlib.ExpanderLabel(_('Options:'), False) expander.expanded.connect(self.show_options) row = self.grid.rowCount() self.grid.addWidget(expander, row, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addLayout(self.optbox, row, 1) self.verbose_chk = QCheckBox(_('List updated files (--verbose)')) self.discard_chk = QCheckBox( _('Discard local changes, no backup ' '(-C/--clean)')) self.merge_chk = QCheckBox(_('Always merge (when possible)')) self.autoresolve_chk = QCheckBox( _('Automatically resolve merge conflicts ' 'where possible')) self.showlog_chk = QCheckBox(_('Always show command log')) self.optbox.addWidget(self.verbose_chk) self.optbox.addWidget(self.discard_chk) self.optbox.addWidget(self.merge_chk) self.optbox.addWidget(self.autoresolve_chk) self.optbox.addWidget(self.showlog_chk) s = QSettings() self.discard_chk.setChecked(bool(opts.get('clean'))) #### Persisted Options self.merge_chk.setChecked(QSettings().value('update/merge', False).toBool()) self.autoresolve_chk.setChecked( repo.ui.configbool('tortoisehg', 'autoresolve', False) or s.value('update/autoresolve', False).toBool()) self.showlog_chk.setChecked(s.value('update/showlog', False).toBool()) self.verbose_chk.setChecked(s.value('update/verbose', False).toBool()) ## command widget self.cmd = cmdui.Widget(True, True, self) self.cmd.commandStarted.connect(self.command_started) self.cmd.commandFinished.connect(self.command_finished) self.cmd.commandCanceling.connect(self.command_canceling) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.progress.connect(self.progress) box.addWidget(self.cmd) ## bottom buttons buttons = QDialogButtonBox() self.cancel_btn = buttons.addButton(QDialogButtonBox.Cancel) self.cancel_btn.clicked.connect(self.cancel_clicked) self.close_btn = buttons.addButton(QDialogButtonBox.Close) self.close_btn.clicked.connect(self.reject) self.close_btn.setAutoDefault(False) self.update_btn = buttons.addButton(_('&Update'), QDialogButtonBox.ActionRole) self.update_btn.clicked.connect(self.update) self.detail_btn = buttons.addButton(_('Detail'), QDialogButtonBox.ResetRole) self.detail_btn.setAutoDefault(False) self.detail_btn.setCheckable(True) self.detail_btn.toggled.connect(self.detail_toggled) box.addWidget(buttons) # signal handlers self.rev_combo.editTextChanged.connect(self.update_info) self.discard_chk.toggled.connect(self.update_info) # dialog setting self.setLayout(box) self.layout().setSizeConstraint(QLayout.SetFixedSize) self.setWindowTitle(_('Update - %s') % self.repo.displayname) self.setWindowIcon(qtlib.geticon('hg-update')) # prepare to show self.cmd.setHidden(True) self.cancel_btn.setHidden(True) self.detail_btn.setHidden(True) self.merge_chk.setHidden(True) self.autoresolve_chk.setHidden(True) self.showlog_chk.setHidden(True) self.update_info() if not self.update_btn.isEnabled(): self.rev_combo.lineEdit().selectAll() # need to change rev # expand options if a hidden one is checked hiddenOptionsChecked = self.hiddenSettingIsChecked() self.show_options(hiddenOptionsChecked) expander.set_expanded(hiddenOptionsChecked)
def __init__(self, repo=None, parent=None): super(ChangesetList, self).__init__() self.currepo = repo self.curitems = None self.curfactory = None self.showitems = None self.limit = 20 contents = ('%(item_l)s:', ' %(branch)s', ' %(tags)s', ' %(summary)s') self.lstyle = csinfo.labelstyle(contents=contents, width=350, selectable=True) contents = ('item', 'summary', 'user', 'dateage', 'rawbranch', 'tags', 'graft', 'transplant', 'p4', 'svn', 'converted') self.pstyle = csinfo.panelstyle(contents=contents, width=350, selectable=True) # main layout self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.mainvbox = QVBoxLayout() self.mainvbox.setSpacing(_SPACING) self.mainvbox.setSizeConstraint(QLayout.SetMinAndMaxSize) self.setLayout(self.mainvbox) ## status box self.statusbox = QHBoxLayout() self.statuslabel = QLabel(_('No items to display')) self.compactchk = QCheckBox(_('Use compact view')) self.statusbox.addWidget(self.statuslabel) self.statusbox.addWidget(self.compactchk) self.mainvbox.addLayout(self.statusbox) ## scroll area self.scrollarea = QScrollArea() self.scrollarea.setMinimumSize(400, 200) self.scrollarea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.scrollarea.setWidgetResizable(True) self.mainvbox.addWidget(self.scrollarea) ### cs layout grid, contains Factory objects, one per revision self.scrollbox = QWidget() self.csvbox = QVBoxLayout() self.csvbox.setSpacing(_SPACING) self.csvbox.setSizeConstraint(QLayout.SetMaximumSize) self.scrollbox.setLayout(self.csvbox) self.scrollarea.setWidget(self.scrollbox) # signal handlers self.compactchk.toggled.connect(lambda *a: self.update(self.curitems)) # csetinfo def datafunc(widget, item, ctx): if item in ('item', 'item_l'): if not isinstance(ctx, patchctx): return True revid = widget.get_data('revid') if not revid: return widget.target filename = os.path.basename(widget.target) return filename, revid raise csinfo.UnknownItem(item) def labelfunc(widget, item, ctx): if item in ('item', 'item_l'): if not isinstance(ctx, patchctx): return _('Revision:') return _('Patch:') raise csinfo.UnknownItem(item) def markupfunc(widget, item, value): if item in ('item', 'item_l'): if not isinstance(widget.ctx, patchctx): if item == 'item': return widget.get_markup('rev') return widget.get_markup('revnum') mono = dict(face='monospace', size='9000') if isinstance(value, basestring): return qtlib.markup(value, **mono) filename = qtlib.markup(value[0]) revid = qtlib.markup(value[1], **mono) if item == 'item': return '%s (%s)' % (filename, revid) return filename raise csinfo.UnknownItem(item) self.custom = csinfo.custom(data=datafunc, label=labelfunc, markup=markupfunc)
def __init__(self, repoagent, rev=None, parent=None): super(RemoteUpdateWidget, self).__init__(parent) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self._repoagent = repoagent repo = repoagent.rawRepo() ## main layout form = QFormLayout() form.setContentsMargins(0, 0, 0, 0) form.setSpacing(6) self.setLayout(form) ### target path combo self.path_combo = pcombo = QComboBox() pcombo.setEditable(True) pcombo.addItems([hglib.tounicode(path) for _name, path in repo.ui.configitems('paths')]) form.addRow(_('Location:'), pcombo) ### target revision combo self.rev_combo = combo = QComboBox() combo.setEditable(True) form.addRow(_('Update to:'), combo) combo.addItems(map(hglib.tounicode, hglib.namedbranches(repo))) tags = list(self.repo.tags()) + repo._bookmarks.keys() tags.sort(reverse=True) combo.addItems(map(hglib.tounicode, tags)) if rev is None: selecturev = hglib.tounicode(self.repo.dirstate.branch()) else: selecturev = hglib.tounicode(str(rev)) selectindex = combo.findText(selecturev) if selectindex >= 0: combo.setCurrentIndex(selectindex) else: combo.setEditText(selecturev) ### target revision info items = ('%(rev)s', ' %(branch)s', ' %(tags)s', '<br />%(summary)s') style = csinfo.labelstyle(contents=items, width=350, selectable=True) factory = csinfo.factory(self.repo, style=style) self.target_info = factory() form.addRow(_('Target:'), self.target_info) ### Options self.optbox = QVBoxLayout() self.optbox.setSpacing(6) self.optexpander = expander = qtlib.ExpanderLabel(_('Options:'), False) expander.expanded.connect(self.show_options) form.addRow(expander, self.optbox) self.discard_chk = QCheckBox(_('Discard remote changes, no backup ' '(-C/--clean)')) self.push_chk = QCheckBox(_('Perform a push before updating' ' (-p/--push)')) self.newbranch_chk = QCheckBox(_('Allow pushing new branches' ' (--new-branch)')) self.force_chk = QCheckBox(_('Force push to remote location' ' (-f/--force)')) self.optbox.addWidget(self.discard_chk) self.optbox.addWidget(self.push_chk) self.optbox.addWidget(self.newbranch_chk) self.optbox.addWidget(self.force_chk) # signal handlers self.rev_combo.editTextChanged.connect(self.update_info) # prepare to show self.push_chk.setHidden(True) self.newbranch_chk.setHidden(True) self.force_chk.setHidden(True) self.update_info()
def __init__(self, repoagent, rev=None, parent=None, opts={}): super(UpdateWidget, self).__init__(parent) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self._repoagent = repoagent repo = repoagent.rawRepo() ## main layout form = QFormLayout() form.setContentsMargins(0, 0, 0, 0) form.setSpacing(6) self.setLayout(form) ### target revision combo self.rev_combo = combo = QComboBox() combo.setEditable(True) combo.setMinimumContentsLength(30) # cut long name combo.installEventFilter(qtlib.BadCompletionBlocker(combo)) form.addRow(_('Update to:'), combo) # always include integer revision try: assert not isinstance(rev, (unicode, QString)) ctx = self.repo[rev] if isinstance(ctx.rev(), int): # could be None or patch name combo.addItem(str(ctx.rev())) except error.RepoLookupError: pass combo.addItems(map(hglib.tounicode, hglib.namedbranches(repo))) tags = list(self.repo.tags()) + repo._bookmarks.keys() tags.sort(reverse=True) combo.addItems(map(hglib.tounicode, tags)) if rev is None: selecturev = hglib.tounicode(self.repo.dirstate.branch()) else: selecturev = hglib.tounicode(str(rev)) selectindex = combo.findText(selecturev) if selectindex >= 0: combo.setCurrentIndex(selectindex) else: combo.setEditText(selecturev) ### target revision info items = ('%(rev)s', ' %(branch)s', ' %(tags)s', '<br />%(summary)s') style = csinfo.labelstyle(contents=items, width=350, selectable=True) factory = csinfo.factory(self.repo, style=style) self.target_info = factory() form.addRow(_('Target:'), self.target_info) ### parent revision info self.ctxs = self.repo[None].parents() if len(self.ctxs) == 2: self.p1_info = factory() form.addRow(_('Parent 1:'), self.p1_info) self.p2_info = factory() form.addRow(_('Parent 2:'), self.p2_info) else: self.p1_info = factory() form.addRow(_('Parent:'), self.p1_info) # show a subrepo "pull path" combo, with the # default path as the first (and default) path self.path_combo_label = QLabel(_('Pull subrepos from:')) self.path_combo = QComboBox(self) syncpaths = dict(repo.ui.configitems('paths')) aliases = sorted(syncpaths) # make sure that the default path is the first one if 'default' in aliases: aliases.remove('default') aliases.insert(0, 'default') for n, alias in enumerate(aliases): self.path_combo.addItem(hglib.tounicode(alias)) self.path_combo.setItemData( n, hglib.tounicode(syncpaths[alias])) self.path_combo.currentIndexChanged.connect( self._updatePathComboTooltip) self._updatePathComboTooltip(0) form.addRow(self.path_combo_label, self.path_combo) ### options self.optbox = QVBoxLayout() self.optbox.setSpacing(6) self.optexpander = expander = qtlib.ExpanderLabel(_('Options:'), False) expander.expanded.connect(self.show_options) form.addRow(expander, self.optbox) self.verbose_chk = QCheckBox(_('List updated files (--verbose)')) self.discard_chk = QCheckBox(_('Discard local changes, no backup ' '(-C/--clean)')) self.merge_chk = QCheckBox(_('Always merge (when possible)')) self.autoresolve_chk = QCheckBox(_('Automatically resolve merge ' 'conflicts where possible')) self.optbox.addWidget(self.verbose_chk) self.optbox.addWidget(self.discard_chk) self.optbox.addWidget(self.merge_chk) self.optbox.addWidget(self.autoresolve_chk) self.discard_chk.setChecked(bool(opts.get('clean'))) # signal handlers self.rev_combo.editTextChanged.connect(self.update_info) self.discard_chk.toggled.connect(self.update_info) # prepare to show self.merge_chk.setHidden(True) self.autoresolve_chk.setHidden(True) self.update_info() if not self.canRunCommand(): # need to change rev self.rev_combo.lineEdit().selectAll()
def __init__(self, repo, rev=None, parent=None, opts={}): super(UpdateDialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & \ ~Qt.WindowContextHelpButtonHint) self._finished = False self.repo = repo # base layout box box = QVBoxLayout() box.setSpacing(6) ## main layout grid self.grid = QGridLayout() self.grid.setSpacing(6) box.addLayout(self.grid) ### target revision combo self.rev_combo = combo = QComboBox() combo.setEditable(True) self.grid.addWidget(QLabel(_('Update to:')), 0, 0) self.grid.addWidget(combo, 0, 1) # Give the combo box a minimum width that will ensure that the dialog is # large enough to fit the additional progress bar that will appear when # updating subrepositories. combo.setMinimumWidth(450) if rev is None: rev = self.repo.dirstate.branch() else: rev = str(rev) combo.addItem(hglib.tounicode(rev)) combo.setCurrentIndex(0) for name in repo.namedbranches: combo.addItem(name) tags = list(self.repo.tags()) + repo._bookmarks.keys() tags.sort(reverse=True) for tag in tags: combo.addItem(hglib.tounicode(tag)) ### target revision info items = ('%(rev)s', ' %(branch)s', ' %(tags)s', '<br />%(summary)s') style = csinfo.labelstyle(contents=items, width=350, selectable=True) factory = csinfo.factory(self.repo, style=style) self.target_info = factory() self.grid.addWidget(QLabel(_('Target:')), 1, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.target_info, 1, 1) ### parent revision info self.ctxs = self.repo[None].parents() if len(self.ctxs) == 2: self.p1_info = factory() self.grid.addWidget(QLabel(_('Parent 1:')), 2, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p1_info, 2, 1) self.p2_info = factory() self.grid.addWidget(QLabel(_('Parent 2:')), 3, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p2_info, 3, 1) else: self.p1_info = factory() self.grid.addWidget(QLabel(_('Parent:')), 2, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addWidget(self.p1_info, 2, 1) ### options self.optbox = QVBoxLayout() self.optbox.setSpacing(6) expander = qtlib.ExpanderLabel(_('Options:'), False) expander.expanded.connect(self.show_options) row = self.grid.rowCount() self.grid.addWidget(expander, row, 0, Qt.AlignLeft | Qt.AlignTop) self.grid.addLayout(self.optbox, row, 1) self.verbose_chk = QCheckBox(_('List updated files (--verbose)')) self.discard_chk = QCheckBox(_('Discard local changes, no backup ' '(-C/--clean)')) self.merge_chk = QCheckBox(_('Always merge (when possible)')) self.autoresolve_chk = QCheckBox(_('Automatically resolve merge conflicts ' 'where possible')) self.showlog_chk = QCheckBox(_('Always show command log')) self.optbox.addWidget(self.verbose_chk) self.optbox.addWidget(self.discard_chk) self.optbox.addWidget(self.merge_chk) self.optbox.addWidget(self.autoresolve_chk) self.optbox.addWidget(self.showlog_chk) s = QSettings() self.discard_chk.setChecked(bool(opts.get('clean'))) #### Persisted Options self.merge_chk.setChecked( QSettings().value('update/merge', False).toBool()) self.autoresolve_chk.setChecked( repo.ui.configbool('tortoisehg', 'autoresolve', False) or s.value('update/autoresolve', False).toBool()) self.showlog_chk.setChecked(s.value('update/showlog', False).toBool()) self.verbose_chk.setChecked(s.value('update/verbose', False).toBool()) ## command widget self.cmd = cmdui.Widget(True, True, self) self.cmd.commandStarted.connect(self.command_started) self.cmd.commandFinished.connect(self.command_finished) self.cmd.commandCanceling.connect(self.command_canceling) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.progress.connect(self.progress) box.addWidget(self.cmd) ## bottom buttons buttons = QDialogButtonBox() self.cancel_btn = buttons.addButton(QDialogButtonBox.Cancel) self.cancel_btn.clicked.connect(self.cancel_clicked) self.close_btn = buttons.addButton(QDialogButtonBox.Close) self.close_btn.clicked.connect(self.reject) self.close_btn.setAutoDefault(False) self.update_btn = buttons.addButton(_('&Update'), QDialogButtonBox.ActionRole) self.update_btn.clicked.connect(self.update) self.detail_btn = buttons.addButton(_('Detail'), QDialogButtonBox.ResetRole) self.detail_btn.setAutoDefault(False) self.detail_btn.setCheckable(True) self.detail_btn.toggled.connect(self.detail_toggled) box.addWidget(buttons) # signal handlers self.rev_combo.editTextChanged.connect(self.update_info) self.discard_chk.toggled.connect(self.update_info) # dialog setting self.setLayout(box) self.layout().setSizeConstraint(QLayout.SetFixedSize) self.setWindowTitle(_('Update - %s') % self.repo.displayname) self.setWindowIcon(qtlib.geticon('hg-update')) # prepare to show self.cmd.setHidden(True) self.cancel_btn.setHidden(True) self.detail_btn.setHidden(True) self.merge_chk.setHidden(True) self.autoresolve_chk.setHidden(True) self.showlog_chk.setHidden(True) self.update_info() if not self.update_btn.isEnabled(): self.rev_combo.lineEdit().selectAll() # need to change rev # expand options if a hidden one is checked self.show_options(self.hiddenSettingIsChecked())