58
61
self.set_title(_("Tags - Olive"))
62
self.set_default_size(600, 400)
60
64
self._scrolledwindow_tags.set_policy(gtk.POLICY_AUTOMATIC,
61
65
gtk.POLICY_AUTOMATIC)
67
self._hbox.set_border_width(5)
68
self._hbox.set_spacing(5)
69
self._vbox_buttons.set_size_request(100, -1)
71
self._vbox_buttons_top.set_spacing(3)
73
self._vpaned.set_position(200)
63
75
# Construct the dialog
64
76
self._scrolledwindow_tags.add(self._treeview_tags)
66
self._vbox_buttons.pack_start(self._button_add)
67
self._vbox_buttons.pack_start(self._button_remove)
68
self._vbox_buttons.pack_start(self._button_close)
78
self._vbox_buttons_top.pack_start(self._button_add, False, False)
79
self._vbox_buttons_top.pack_start(self._button_remove, False, False)
80
self._vbox_buttons_bottom.pack_start(self._button_close, False, False)
82
self._vbox_buttons.pack_start(self._vbox_buttons_top, True, True)
83
self._vbox_buttons.pack_start(self._vbox_buttons_bottom, False, False)
70
85
self._vpaned.add1(self._scrolledwindow_tags)
71
86
self._vpaned.add2(self._logview)
73
self._hbox.pack_start(self._vpaned)
74
self._hbox.pack_start(self._vbox_buttons)
88
self._hbox.pack_start(self._vpaned, True, True)
89
self._hbox.pack_start(self._vbox_buttons, False, True)
76
91
self.add(self._hbox)
84
102
def _load_tags(self):
85
103
""" Load the tags into the TreeView. """
86
self._treeview_tags.append_column(gtk.TreeViewColumn(_("Tag Name"),
87
gtk.CellRendererText(),
89
self._treeview_tags.append_column(gtk.TreeViewColumn(_("Revision ID"),
90
gtk.CellRendererText(),
104
tvcol_name = gtk.TreeViewColumn(_("Tag Name"),
105
gtk.CellRendererText(),
107
tvcol_name.set_resizable(True)
109
tvcol_revid = gtk.TreeViewColumn(_("Revision ID"),
110
gtk.CellRendererText(),
112
tvcol_revid.set_resizable(True)
114
self._treeview_tags.append_column(tvcol_name)
115
self._treeview_tags.append_column(tvcol_revid)
117
self._treeview_tags.set_search_column(0)
93
119
self._refresh_tags()
98
124
if self.branch.supports_tags():
99
125
tags = self.branch.tags.get_tag_dict()
100
126
if len(tags) > 0:
127
self._no_tags = False
101
128
for name, target in tags.items():
102
129
self._model.append([name, target])
132
self._no_tags_available()
106
135
self._tags_not_supported()
108
137
self._treeview_tags.set_model(self._model)
133
162
(path, col) = self._treeview_tags.get_cursor()
134
163
tag = self._model[path][0]
136
self.branch.tags.delete_tag(tag)
165
dialog = RemoveTagDialog(tag, self)
166
response = dialog.run()
167
if response != gtk.RESPONSE_NONE:
170
if response == gtk.RESPONSE_OK:
171
self.branch.tags.delete_tag(tag)
139
176
def _on_treeview_changed(self, *args):
140
177
""" When a user clicks on a tag. """
141
(path, col) = self._treeview_tags.get_cursor()
142
revision = self._model[path][1]
144
self._logview.set_revision(self.branch.repository.get_revision(revision))
178
# Refresh LogView only if there are tags available
179
if not self._no_tags:
180
(path, col) = self._treeview_tags.get_cursor()
181
revision = self._model[path][1]
183
self._logview.set_revision(self.branch.repository.get_revision(revision))
186
class RemoveTagDialog(gtk.Dialog):
187
""" Confirm removal of tag. """
188
def __init__(self, tagname, parent):
189
gtk.Dialog.__init__(self, title="Remove tag - Olive",
192
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
198
self._hbox = gtk.HBox()
199
self._vbox_question = gtk.VBox()
200
self._image_question = gtk.image_new_from_stock(gtk.STOCK_DIALOG_QUESTION,
201
gtk.ICON_SIZE_DIALOG)
202
self._label_title = gtk.Label()
203
self._label_question = gtk.Label(_("Are you sure you want to remove the tag?"))
204
self._button_remove = gtk.Button(_("_Remove tag"), use_underline=True)
207
self._button_remove.connect('clicked', self._on_remove_clicked)
210
self._hbox.set_border_width(5)
211
self._hbox.set_spacing(5)
212
self._vbox_question.set_spacing(3)
214
self._label_title.set_markup(_("<b><big>Remove tag?</big></b>"))
215
self._label_title.set_alignment(0.0, 0.5)
216
self._label_question.set_alignment(0.0, 0.5)
218
self._button_remove.set_image(gtk.image_new_from_stock(gtk.STOCK_REMOVE,
219
gtk.ICON_SIZE_BUTTON))
220
self._button_remove.set_flags(gtk.CAN_DEFAULT)
222
# Construct the dialog
223
self._vbox_question.pack_start(self._label_title)
224
self._vbox_question.pack_start(self._label_question)
226
self._hbox.pack_start(self._image_question)
227
self._hbox.pack_start(self._vbox_question)
229
self.vbox.add(self._hbox)
231
self.action_area.pack_end(self._button_remove)
236
# Default to Commit button
237
self._button_remove.grab_default()
239
def _on_remove_clicked(self, widget):
240
""" Remove button event handler. """
241
self.response(gtk.RESPONSE_OK)