Merge pull request #1387 from davvid/remote-dialog
[git-cola.git] / cola / widgets / createtag.py
blob98b0f7b288df6c53f6df593e91363241a0d75db1
1 from qtpy import QtWidgets
2 from qtpy.QtCore import Qt
4 from .. import cmds
5 from .. import icons
6 from .. import qtutils
7 from ..i18n import N_
8 from ..qtutils import get
9 from . import defs
10 from . import completion
11 from . import standard
12 from . import text
15 def new_create_tag(context, name='', ref='', sign=False, parent=None):
16 """Entry point for external callers."""
17 opts = TagOptions(name, ref, sign)
18 view = CreateTag(context, opts, parent=parent)
19 return view
22 def create_tag(context, name='', ref='', sign=False):
23 """Entry point for external callers."""
24 view = new_create_tag(
25 context,
26 name=name,
27 ref=ref,
28 sign=sign,
29 parent=qtutils.active_window(),
31 view.show()
32 view.raise_()
33 return view
36 class TagOptions:
37 """Simple data container for the CreateTag dialog."""
39 def __init__(self, name, ref, sign):
40 self.name = name or ''
41 self.ref = ref or 'HEAD'
42 self.sign = sign
45 class CreateTag(standard.Dialog):
46 def __init__(self, context, opts, parent=None):
47 standard.Dialog.__init__(self, parent=parent)
49 self.context = context
50 self.model = model = context.model
51 self.opts = opts
53 self.setWindowTitle(N_('Create Tag'))
54 if parent is not None:
55 self.setWindowModality(Qt.WindowModal)
57 # Tag label
58 self.tag_name_label = QtWidgets.QLabel(self)
59 self.tag_name_label.setText(N_('Name'))
61 self.tag_name = text.HintedLineEdit(context, N_('vX.Y.Z'), parent=self)
62 self.tag_name.set_value(opts.name)
63 self.tag_name.setToolTip(N_('Specifies the tag name'))
65 qtutils.add_completer(self.tag_name, model.tags)
67 # Sign Tag
68 self.sign_label = QtWidgets.QLabel(self)
69 self.sign_label.setText(N_('Sign Tag'))
71 tooltip = N_('Whether to sign the tag (git tag -s)')
72 self.sign_tag = qtutils.checkbox(checked=True, tooltip=tooltip)
74 # Tag message
75 self.tag_msg_label = QtWidgets.QLabel(self)
76 self.tag_msg_label.setText(N_('Message'))
78 self.tag_msg = text.HintedPlainTextEdit(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(
89 text=N_('Create Tag'), icon=icons.tag(), default=True
91 self.close_button = qtutils.close_button()
93 # Form layout for inputs
94 self.input_layout = qtutils.form(
95 defs.margin,
96 defs.spacing,
97 (self.tag_name_label, self.tag_name),
98 (self.tag_msg_label, self.tag_msg),
99 (self.rev_label, self.revision),
100 (self.sign_label, self.sign_tag),
103 self.button_layout = qtutils.hbox(
104 defs.no_margin,
105 defs.button_spacing,
106 qtutils.STRETCH,
107 self.close_button,
108 self.create_button,
111 self.main_layt = qtutils.vbox(
112 defs.margin, defs.spacing, self.input_layout, self.button_layout
114 self.setLayout(self.main_layt)
116 qtutils.connect_button(self.close_button, self.close)
117 qtutils.connect_button(self.create_button, self.create_tag)
119 settings = context.settings
120 self.init_state(settings, self.resize, defs.scale(720), defs.scale(210))
122 def create_tag(self):
123 """Verifies inputs and emits a notifier tag message."""
125 context = self.context
126 revision = get(self.revision)
127 tag_name = get(self.tag_name)
128 tag_msg = get(self.tag_msg)
129 sign_tag = get(self.sign_tag)
131 ok = cmds.do(
132 cmds.Tag, context, tag_name, revision, sign=sign_tag, message=tag_msg
134 if ok:
135 self.close()