Changeset 2525801b8b8d…
Parent ddb08f5804ce…
by
Changes to 2 files · Browse files at 2525801b8b8d Showing diff from parent ddb08f5804ce Diff from another changeset...
|
@@ -155,3 +155,106 @@ repo=self.repo,
mark=name,
delete=True)
+
+class BookmarkRenameDialog(gtk.Dialog):
+ """ Dialog to rename a bookmark """
+ def __init__(self, repo, bookmark='', rev=''):
+ """ Initialize the Dialog """
+ gtk.Dialog.__init__(self,
+ buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
+ gtklib.set_tortoise_keys(self)
+ self.set_title(_('Bookmark - %s') % hglib.get_reponame(repo))
+ self.set_resizable(False)
+ self.set_has_separator(False)
+ self.connect('response', self.dialog_response)
+
+ self.repo = repo
+
+ # add Rename button
+ renamebutton = gtk.Button(_('Rename'))
+ renamebutton.connect('clicked', lambda b: self._do_rename_bookmark())
+ self.action_area.pack_end(renamebutton)
+
+ # top layout table
+ table = gtklib.LayoutTable()
+ self.vbox.pack_start(table, True, True, 2)
+
+ ## bookmark name input
+ self._bookmarkslist = gtk.ListStore(str)
+ self._bookmarklistbox = gtk.ComboBoxEntry(self._bookmarkslist, 0)
+ self._bookmark_input = self._bookmarklistbox.get_child()
+ self._bookmark_input.connect('activate', self._bookmarkinput_activated)
+ self._bookmark_input.set_text(bookmark)
+ table.add_row(_('Bookmark:'), self._bookmarklistbox, padding=False)
+
+ ## revision input
+ self._name_input = gtk.Entry()
+ table.add_row(_('New name:'), self._name_input)
+
+ # prepare to show
+ self._refresh()
+ self._bookmarklistbox.grab_focus()
+
+ def _refresh(self):
+ """ update display on dialog with recent repo data """
+ self.repo.invalidate()
+ self._bookmarkslist.clear()
+ self._bookmark_input.set_text("")
+
+ # add bookmarks to drop-down list
+ bookmarks = hglib.get_repo_bookmarks(self.repo)
+ bookmarks.sort()
+ for bookmarkname in bookmarks:
+ if bookmarkname == "tip":
+ continue
+ self._bookmarkslist.append([bookmarkname])
+
+ def dialog_response(self, dialog, response_id):
+ if response_id == gtk.RESPONSE_CLOSE \
+ or response_id == gtk.RESPONSE_DELETE_EVENT:
+ self.destroy()
+
+ def _bookmarkinput_activated(self, bookmarkinput):
+ self._do_rename_bookmark()
+
+ def _do_rename_bookmark(self):
+ # gather input data
+ name = self._bookmark_input.get_text()
+ new_name = self._name_input.get_text()
+
+ # verify input
+ if name == '':
+ dialog.error_dialog(self, _('Bookmark input is empty'),
+ _('Please enter bookmark name'))
+ self._bookmark_input.grab_focus()
+ return False
+
+ if new_name == '':
+ dialog.error_dialog(self, _('Bookmark new name input is empty'),
+ _('Please enter new bookmark name'))
+ self._bookmark_input.grab_focus()
+ return False
+
+ # rename bookmark
+ try:
+ self._rename_hg_bookmark(name, new_name)
+ dialog.info_dialog(self, _('Bookmarking completed'),
+ _('Bookmark "%s" has been renamed to "%s"') %
+ (name, new_name))
+ self._refresh()
+ except util.Abort, inst:
+ dialog.error_dialog(self, _('Error in bookmarking'), str(inst))
+ return False
+ except:
+ dialog.error_dialog(self, _('Error in bookmarking'),
+ traceback.format_exc())
+ return False
+
+ def _rename_hg_bookmark(self, name, new_name):
+ if new_name in hglib.get_repo_bookmarks(self.repo):
+ raise util.Abort(_('a bookmark named "%s" already exists') % new_name)
+ bookmarks.bookmark(ui=ui.ui(),
+ repo=self.repo,
+ mark=new_name,
+ rename=name)
+
|
@@ -722,6 +722,8 @@ if 'bookmarks' in self.exs:
m.append(create_menu(_('Add/Remove B_ookmark...'),
self.add_bookmark))
+ m.append(create_menu(_('Rename Bookmark...'),
+ self.rename_bookmark))
m.append_sep()
cmenu_backout = create_menu(_('Backout Revision...'), self.backout_rev)
@@ -1741,6 +1743,21 @@ dialog.connect('destroy', refresh)
self.show_dialog(dialog)
+ def rename_bookmark(self, menuitem):
+ # save bookmark info for detecting new bookmarks added
+ oldbookmarks = hglib.get_repo_bookmarks(self.repo)
+ oldlen = len(self.repo)
+ rev = self.currevid
+
+ def refresh(*args):
+ self.refresh_on_marker_change(oldlen,
+ oldbookmarks,
+ hglib.get_repo_bookmarks(self.repo))
+
+ dialog = bookmark.BookmarkRenameDialog(self.repo, rev=str(rev))
+ dialog.connect('destroy', refresh)
+ self.show_dialog(dialog)
+
def show_status(self, menuitem):
rev = self.currevid
statopts = self.merge_opts(commands.table['^status|st'][1],
|
Loading...