41
39
from bzrlib.ui import ui_factory
42
40
from bzrlib.workingtree import WorkingTree
44
from bzrlib.plugins.gtk import _i18n
45
42
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog
46
43
from bzrlib.plugins.gtk.errors import show_bzr_error
47
44
from guifiles import GLADEFILENAME
71
68
dialog.set_version(__version__)
72
dialog.set_authors([ _i18n("Lead Developer:"),
69
dialog.set_authors([ _("Lead Developer:"),
73
70
"Szilveszter Farkas <szilveszter.farkas@gmail.com>",
74
_i18n("Contributors:"),
75
72
"Jelmer Vernooij <jelmer@samba.org>",
76
73
"Mateusz Korniak <mateusz.korniak@ant.gliwice.pl>",
77
74
"Gary van der Merwe <garyvdm@gmail.com>" ])
106
103
# Get some important menu items
107
104
self.menuitem_add_files = self.toplevel.get_widget('menuitem_add_files')
108
105
self.menuitem_remove_files = self.toplevel.get_widget('menuitem_remove_file')
109
self.menuitem_file_bookmark = self.toplevel.get_widget('menuitem_file_bookmark')
110
106
self.menuitem_file_make_directory = self.toplevel.get_widget('menuitem_file_make_directory')
111
107
self.menuitem_file_rename = self.toplevel.get_widget('menuitem_file_rename')
112
108
self.menuitem_file_move = self.toplevel.get_widget('menuitem_file_move')
163
159
"on_about_activate": self.on_about_activate,
164
160
"on_menuitem_add_files_activate": self.on_menuitem_add_files_activate,
165
161
"on_menuitem_remove_file_activate": self.on_menuitem_remove_file_activate,
166
"on_menuitem_file_bookmark_activate": self.on_menuitem_file_bookmark_activate,
167
162
"on_menuitem_file_make_directory_activate": self.on_menuitem_file_make_directory_activate,
168
163
"on_menuitem_file_move_activate": self.on_menuitem_file_move_activate,
169
164
"on_menuitem_file_rename_activate": self.on_menuitem_file_rename_activate,
198
193
"on_treeview_right_button_press_event": self.on_treeview_right_button_press_event,
199
194
"on_treeview_right_row_activated": self.on_treeview_right_row_activated,
200
195
"on_treeview_left_button_press_event": self.on_treeview_left_button_press_event,
201
"on_treeview_left_button_release_event": self.on_treeview_left_button_release_event,
202
196
"on_treeview_left_row_activated": self.on_treeview_left_row_activated,
203
197
"on_button_location_up_clicked": self.on_button_location_up_clicked,
204
198
"on_button_location_jump_clicked": self.on_button_location_jump_clicked,
447
441
def on_entry_history_revno_key_press_event(self, widget, event):
448
442
""" Key pressed handler for the history entry. """
449
if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
443
if event.keyval == 65293:
450
444
# Return was hit, so we have to load that specific revision
451
445
# Emulate being remote, so inventory should be used
452
446
path = self.get_path()
462
456
def on_entry_location_key_press_event(self, widget, event):
463
457
""" Key pressed handler for the location entry. """
464
if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
458
if event.keyval == 65293:
465
459
# Return was hit, so we have to jump
466
460
self.on_button_location_jump_clicked(widget)
537
531
from bzrlib.plugins.gtk.merge import MergeDialog
539
533
if self.check_for_changes():
540
error_dialog(_i18n('There are local changes in the branch'),
541
_i18n('Please commit or revert the changes before merging.'))
534
error_dialog(_('There are local changes in the branch'),
535
_('Please commit or revert the changes before merging.'))
543
537
parent_branch_path = self.wt.branch.get_parent()
544
538
merge = MergeDialog(self.wt, self.wtpath,default_branch_path=parent_branch_path )
553
547
local_branch = self.wt.branch
554
548
parent_branch_path = local_branch.get_parent()
555
549
if parent_branch_path is None:
556
error_dialog(_i18n('Parent location is unknown'),
557
_i18n('Cannot determine missing revisions if no parent location is known.'))
550
error_dialog(_('Parent location is unknown'),
551
_('Cannot determine missing revisions if no parent location is known.'))
560
554
parent_branch = Branch.open(parent_branch_path)
579
dlg_txt += _i18n('%d local extra revision(s). \n') % (len(local_extra),)
573
dlg_txt += _('%d local extra revision(s). \n') % (len(local_extra),)
580
574
## NOTE: We do not want such ugly info about missing revisions
581
575
## Revision Browser should be used there
582
576
## max_revisions = 10
583
577
## for log_revision in iter_log_revisions(local_extra, local_branch.repository, verbose=1):
584
578
## dlg_txt += log_revision_one_line_text(log_revision)
585
579
## if max_revisions <= 0:
586
## dlg_txt += _i18n("more ... \n")
580
## dlg_txt += _("more ... \n")
588
582
## max_revisions -= 1
589
583
## dlg_txt += "\n"
591
dlg_txt += _i18n('%d local missing revision(s).\n') % (len(remote_extra),)
585
dlg_txt += _('%d local missing revision(s).\n') % (len(remote_extra),)
592
586
## max_revisions = 10
593
587
## for log_revision in iter_log_revisions(remote_extra, parent_branch.repository, verbose=1):
594
588
## dlg_txt += log_revision_one_line_text(log_revision)
595
589
## if max_revisions <= 0:
596
## dlg_txt += _i18n("more ... \n")
590
## dlg_txt += _("more ... \n")
598
592
## max_revisions -= 1
600
info_dialog(_i18n('There are missing revisions'),
594
info_dialog(_('There are missing revisions'),
603
info_dialog(_i18n('Local branch up to date'),
604
_i18n('There are no missing revisions.'))
597
info_dialog(_('Local branch up to date'),
598
_('There are no missing revisions.'))
607
601
def on_menuitem_branch_pull_activate(self, widget):
611
605
location = branch_to.get_parent()
612
606
if location is None:
613
error_dialog(_i18n('Parent location is unknown'),
614
_i18n('Pulling is not possible until there is a parent location.'))
607
error_dialog(_('Parent location is unknown'),
608
_('Pulling is not possible until there is a parent location.'))
617
611
branch_from = Branch.open(location)
622
616
ret = branch_to.pull(branch_from)
624
info_dialog(_i18n('Pull successful'), _i18n('%d revision(s) pulled.') % ret)
618
info_dialog(_('Pull successful'), _('%d revision(s) pulled.') % ret)
627
621
def on_menuitem_branch_update_activate(self, widget):
630
624
ret = self.wt.update()
631
625
conflicts = self.wt.conflicts()
633
info_dialog(_i18n('Update successful but conflicts generated'), _i18n('Number of conflicts generated: %d.') % (len(conflicts),) )
627
info_dialog(_('Update successful but conflicts generated'), _('Number of conflicts generated: %d.') % (len(conflicts),) )
635
info_dialog(_i18n('Update successful'), _i18n('No conflicts generated.') )
629
info_dialog(_('Update successful'), _('No conflicts generated.') )
637
631
def on_menuitem_branch_push_activate(self, widget):
638
632
""" Branch/Push... menu handler. """
646
640
""" Branch/Revert all changes menu handler. """
647
641
ret = self.wt.revert([])
649
warning_dialog(_i18n('Conflicts detected'),
650
_i18n('Please have a look at the working tree before continuing.'))
643
warning_dialog(_('Conflicts detected'),
644
_('Please have a look at the working tree before continuing.'))
652
info_dialog(_i18n('Revert successful'),
653
_i18n('All files reverted to last revision.'))
646
info_dialog(_('Revert successful'),
647
_('All files reverted to last revision.'))
654
648
self.refresh_right()
656
650
def on_menuitem_branch_status_activate(self, widget):
685
679
def on_menuitem_file_annotate_activate(self, widget):
686
680
""" File/Annotate... menu handler. """
687
681
if self.get_selected_right() is None:
688
error_dialog(_i18n('No file was selected'),
689
_i18n('Please select a file from the list.'))
682
error_dialog(_('No file was selected'),
683
_('Please select a file from the list.'))
692
686
branch = self.wt.branch
705
def on_menuitem_file_bookmark_activate(self, widget):
706
""" File/Bookmark current directory menu handler. """
707
if self.pref.add_bookmark(self.path):
708
info_dialog(_i18n('Bookmark successfully added'),
709
_i18n('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
712
warning_dialog(_i18n('Location already bookmarked'),
713
_i18n('The current directory is already bookmarked.\nSee the left panel for reference.'))
717
699
def on_menuitem_file_make_directory_activate(self, widget):
718
700
""" File/Make directory... menu handler. """
719
701
from mkdir import OliveMkdir
811
793
menu.left_context_menu().popup(None, None, None, 0,
814
def on_treeview_left_button_release_event(self, widget, event):
815
""" Occurs when somebody just clicks a bookmark. """
816
if event.button != 3:
817
# Allow one-click bookmark opening
818
if self.get_selected_left() == None:
821
newdir = self.get_selected_left()
825
if self.set_path(newdir):
828
796
def on_treeview_left_row_activated(self, treeview, path, view_column):
829
797
""" Occurs when somebody double-clicks or enters an item in the
830
798
bookmark list. """
940
908
bookmarks = self.pref.get_bookmarks()
942
910
# Add them to the TreeStore
943
titer = treestore.append(None, [_i18n('Bookmarks'), None])
911
titer = treestore.append(None, [_('Bookmarks'), None])
944
912
for item in bookmarks:
945
913
title = self.pref.get_bookmark_title(item)
946
914
treestore.append(titer, [title, item])
948
916
# Create the column and add it to the TreeView
949
917
self.treeview_left.set_model(treestore)
950
tvcolumn_bookmark = gtk.TreeViewColumn(_i18n('Bookmark'))
918
tvcolumn_bookmark = gtk.TreeViewColumn(_('Bookmark'))
951
919
self.treeview_left.append_column(tvcolumn_bookmark)
953
921
# Set up the cells
995
963
# Add'em to the ListStore
996
964
for item in dirs:
998
statinfo = os.stat(self.path + os.sep + item)
965
statinfo = os.stat(self.path + os.sep + item)
1004
966
liststore.append([ gtk.STOCK_DIRECTORY,
1047
1009
self.wt.unlock()
1049
1011
if status == 'renamed':
1050
st = _i18n('renamed')
1051
1013
elif status == 'removed':
1052
st = _i18n('removed')
1053
1015
elif status == 'added':
1055
1017
elif status == 'modified':
1056
st = _i18n('modified')
1057
1019
elif status == 'unchanged':
1058
st = _i18n('unchanged')
1059
1021
elif status == 'ignored':
1060
st = _i18n('ignored')
1062
st = _i18n('unknown')
1065
statinfo = os.stat(self.path + os.sep + item)
1026
statinfo = os.stat(self.path + os.sep + item)
1071
1027
liststore.append([gtk.STOCK_FILE,
1082
1038
# Create the columns and add them to the TreeView
1083
1039
self.treeview_right.set_model(liststore)
1084
self._tvcolumn_filename = gtk.TreeViewColumn(_i18n('Filename'))
1085
self._tvcolumn_status = gtk.TreeViewColumn(_i18n('Status'))
1086
self._tvcolumn_size = gtk.TreeViewColumn(_i18n('Size'))
1087
self._tvcolumn_mtime = gtk.TreeViewColumn(_i18n('Last modified'))
1040
self._tvcolumn_filename = gtk.TreeViewColumn(_('Filename'))
1041
self._tvcolumn_status = gtk.TreeViewColumn(_('Status'))
1042
self._tvcolumn_size = gtk.TreeViewColumn(_('Size'))
1043
self._tvcolumn_mtime = gtk.TreeViewColumn(_('Last modified'))
1088
1044
self.treeview_right.append_column(self._tvcolumn_filename)
1089
1045
self.treeview_right.append_column(self._tvcolumn_status)
1090
1046
self.treeview_right.append_column(self._tvcolumn_size)
1238
1194
bookmarks = self.pref.get_bookmarks()
1240
1196
# Add them to the TreeStore
1241
titer = treestore.append(None, [_i18n('Bookmarks'), None])
1197
titer = treestore.append(None, [_('Bookmarks'), None])
1242
1198
for item in bookmarks:
1243
1199
title = self.pref.get_bookmark_title(item)
1244
1200
treestore.append(titer, [title, item])
1300
1256
# Add'em to the ListStore
1301
1257
for item in dirs:
1303
statinfo = os.stat(self.path + os.sep + item)
1258
statinfo = os.stat(self.path + os.sep + item)
1309
1259
liststore.append([gtk.STOCK_DIRECTORY,
1352
1302
self.wt.unlock()
1354
1304
if status == 'renamed':
1355
st = _i18n('renamed')
1356
1306
elif status == 'removed':
1357
st = _i18n('removed')
1358
1308
elif status == 'added':
1360
1310
elif status == 'modified':
1361
st = _i18n('modified')
1362
1312
elif status == 'unchanged':
1363
st = _i18n('unchanged')
1364
1314
elif status == 'ignored':
1365
st = _i18n('ignored')
1366
1316
if not ignored_files:
1369
st = _i18n('unknown')
1372
statinfo = os.stat(self.path + os.sep + item)
1321
statinfo = os.stat(self.path + os.sep + item)
1378
1322
liststore.append([gtk.STOCK_FILE,