text: defer calls to setStyleSheet()
[git-cola.git] / cola / widgets / createtag.py
blob54494ec8ebcd5478ee39821f5c503b99a29a85d2
1 from __future__ import division, absolute_import, unicode_literals
3 from qtpy import QtWidgets
4 from qtpy.QtCore import Qt
6 from .. import cmds
7 from .. import icons
8 from .. import qtutils
9 from ..i18n import N_
10 from ..qtutils import get
11 from . import defs
12 from . import completion
13 from . import standard
14 from . import text
17 def new_create_tag(context, name='', ref='', sign=False,
18 settings=None, parent=None):
19 """Entry point for external callers."""
20 opts = TagOptions(name, ref, sign)
21 view = CreateTag(context, opts, settings=settings, parent=parent)
22 return view
25 def create_tag(context, name='', ref='', sign=False, settings=None):
26 """Entry point for external callers."""
27 view = new_create_tag(context, name=name, ref=ref, sign=sign,
28 settings=settings, parent=qtutils.active_window())
29 view.show()
30 view.raise_()
31 return view
34 class TagOptions(object):
35 """Simple data container for the CreateTag dialog."""
37 def __init__(self, name, ref, sign):
38 self.name = name or ''
39 self.ref = ref or 'HEAD'
40 self.sign = sign
43 class CreateTag(standard.Dialog):
45 def __init__(self, context, opts, settings=None, parent=None):
46 standard.Dialog.__init__(self, parent=parent)
48 self.context = context
49 self.model = model = context.model
50 self.opts = opts
52 self.setWindowTitle(N_('Create Tag'))
53 if parent is not None:
54 self.setWindowModality(Qt.WindowModal)
56 # Tag label
57 self.tag_name_label = QtWidgets.QLabel(self)
58 self.tag_name_label.setText(N_('Name'))
60 self.tag_name = text.HintedLineEdit(context, N_('vX.Y.Z'), parent=self)
61 self.tag_name.set_value(opts.name)
62 self.tag_name.setToolTip(N_('Specifies the tag name'))
64 qtutils.add_completer(self.tag_name, model.tags)
66 # Sign Tag
67 self.sign_label = QtWidgets.QLabel(self)
68 self.sign_label.setText(N_('Sign Tag'))
70 tooltip = N_('Whether to sign the tag (git tag -s)')
71 self.sign_tag = qtutils.checkbox(checked=True, tooltip=tooltip)
73 # Tag message
74 self.tag_msg_label = QtWidgets.QLabel(self)
75 self.tag_msg_label.setText(N_('Message'))
77 self.tag_msg = text.HintedPlainTextEdit(
78 context, N_('Tag message...'), self)
79 self.tag_msg.setToolTip(N_('Specifies the tag message'))
80 # Revision
81 self.rev_label = QtWidgets.QLabel(self)
82 self.rev_label.setText(N_('Revision'))
84 self.revision = completion.GitRefLineEdit(context)
85 self.revision.setText(self.opts.ref)
86 self.revision.setToolTip(N_('Specifies the SHA-1 to tag'))
87 # Buttons
88 self.create_button = qtutils.create_button(text=N_('Create Tag'),
89 icon=icons.tag(),
90 default=True)
91 self.close_button = qtutils.close_button()
93 # Form layout for inputs
94 self.input_layout = qtutils.form(defs.margin, defs.spacing,
95 (self.tag_name_label, self.tag_name),
96 (self.tag_msg_label, self.tag_msg),
97 (self.rev_label, self.revision),
98 (self.sign_label, self.sign_tag))
100 self.button_layout = qtutils.hbox(defs.no_margin, defs.button_spacing,
101 self.close_button,
102 qtutils.STRETCH,
103 self.create_button)
105 self.main_layt = qtutils.vbox(defs.margin, defs.spacing,
106 self.input_layout, self.button_layout)
107 self.setLayout(self.main_layt)
109 qtutils.connect_button(self.close_button, self.close)
110 qtutils.connect_button(self.create_button, self.create_tag)
112 self.init_state(settings, self.resize,
113 defs.scale(720), defs.scale(210))
115 def create_tag(self):
116 """Verifies inputs and emits a notifier tag message."""
118 context = self.context
119 revision = get(self.revision)
120 tag_name = get(self.tag_name)
121 tag_msg = get(self.tag_msg)
122 sign_tag = get(self.sign_tag)
124 ok = cmds.do(cmds.Tag, context, tag_name, revision,
125 sign=sign_tag, message=tag_msg)
126 if ok:
127 self.close()