/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to olive/__init__.py

  • Committer: Jelmer Vernooij
  • Date: 2008-06-29 19:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 515.
  • Revision ID: jelmer@samba.org-20080629191834-ha2ecpv5szt96nge
Make sure signed testament matches repository data.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 #!/usr/bin/python
 
2
 
1
3
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
2
4
#
3
5
# This program is free software; you can redistribute it and/or modify
39
41
from bzrlib.ui import ui_factory
40
42
from bzrlib.workingtree import WorkingTree
41
43
 
 
44
from bzrlib.plugins.gtk import _i18n
42
45
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog
43
46
from bzrlib.plugins.gtk.errors import show_bzr_error
44
47
from guifiles import GLADEFILENAME
66
69
 
67
70
    # Set version
68
71
    dialog.set_version(__version__)
69
 
    dialog.set_authors([ _("Lead Developer:"),
 
72
    dialog.set_authors([ _i18n("Lead Developer:"),
70
73
                         "Szilveszter Farkas <szilveszter.farkas@gmail.com>",
71
 
                         _("Contributors:"),
 
74
                         _i18n("Contributors:"),
72
75
                         "Jelmer Vernooij <jelmer@samba.org>",
73
76
                         "Mateusz Korniak <mateusz.korniak@ant.gliwice.pl>",
74
77
                         "Gary van der Merwe <garyvdm@gmail.com>" ])
103
106
        # Get some important menu items
104
107
        self.menuitem_add_files = self.toplevel.get_widget('menuitem_add_files')
105
108
        self.menuitem_remove_files = self.toplevel.get_widget('menuitem_remove_file')
 
109
        self.menuitem_file_bookmark = self.toplevel.get_widget('menuitem_file_bookmark')
106
110
        self.menuitem_file_make_directory = self.toplevel.get_widget('menuitem_file_make_directory')
107
111
        self.menuitem_file_rename = self.toplevel.get_widget('menuitem_file_rename')
108
112
        self.menuitem_file_move = self.toplevel.get_widget('menuitem_file_move')
159
163
                "on_about_activate": self.on_about_activate,
160
164
                "on_menuitem_add_files_activate": self.on_menuitem_add_files_activate,
161
165
                "on_menuitem_remove_file_activate": self.on_menuitem_remove_file_activate,
 
166
                "on_menuitem_file_bookmark_activate": self.on_menuitem_file_bookmark_activate,
162
167
                "on_menuitem_file_make_directory_activate": self.on_menuitem_file_make_directory_activate,
163
168
                "on_menuitem_file_move_activate": self.on_menuitem_file_move_activate,
164
169
                "on_menuitem_file_rename_activate": self.on_menuitem_file_rename_activate,
193
198
                "on_treeview_right_button_press_event": self.on_treeview_right_button_press_event,
194
199
                "on_treeview_right_row_activated": self.on_treeview_right_row_activated,
195
200
                "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,
196
202
                "on_treeview_left_row_activated": self.on_treeview_left_row_activated,
197
203
                "on_button_location_up_clicked": self.on_button_location_up_clicked,
198
204
                "on_button_location_jump_clicked": self.on_button_location_jump_clicked,
440
446
    @show_bzr_error
441
447
    def on_entry_history_revno_key_press_event(self, widget, event):
442
448
        """ Key pressed handler for the history entry. """
443
 
        if event.keyval == 65293:
 
449
        if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
444
450
            # Return was hit, so we have to load that specific revision
445
451
            # Emulate being remote, so inventory should be used
446
452
            path = self.get_path()
455
461
    
456
462
    def on_entry_location_key_press_event(self, widget, event):
457
463
        """ Key pressed handler for the location entry. """
458
 
        if event.keyval == 65293:
 
464
        if event.keyval == gtk.gdk.keyval_from_name('Return') or event.keyval == gtk.gdk.keyval_from_name('KP_Enter'):
459
465
            # Return was hit, so we have to jump
460
466
            self.on_button_location_jump_clicked(widget)
461
467
    
502
508
    @show_bzr_error
503
509
    def on_menuitem_branch_commit_activate(self, widget):
504
510
        """ Branch/Commit... menu handler. """
505
 
        commit = CommitDialog(self.wt, self.wtpath, self.notbranch, self.get_selected_right(), self.window)
 
511
#     def __init__(self, wt, wtpath, notbranch, selected=None, parent=None):
 
512
        selected = self.get_selected_right()
 
513
        if selected:
 
514
            selected = os.path.join(self.wtpath, selected)
 
515
        commit = CommitDialog(wt=self.wt,
 
516
                              parent=self.window,
 
517
                              selected=selected,
 
518
                             )
506
519
        response = commit.run()
507
520
        if response != gtk.RESPONSE_NONE:
508
521
            commit.hide()
524
537
        from bzrlib.plugins.gtk.merge import MergeDialog
525
538
        
526
539
        if self.check_for_changes():
527
 
            error_dialog(_('There are local changes in the branch'),
528
 
                         _('Please commit or revert the changes before merging.'))
 
540
            error_dialog(_i18n('There are local changes in the branch'),
 
541
                         _i18n('Please commit or revert the changes before merging.'))
529
542
        else:
530
 
            merge = MergeDialog(self.wt, self.wtpath)
 
543
            parent_branch_path = self.wt.branch.get_parent()
 
544
            merge = MergeDialog(self.wt, self.wtpath,default_branch_path=parent_branch_path )
531
545
            merge.display()
532
546
 
533
547
    @show_bzr_error
534
548
    def on_menuitem_branch_missing_revisions_activate(self, widget):
535
549
        """ Branch/Missing revisions menu handler. """
 
550
        
 
551
        from bzrlib.missing import find_unmerged, iter_log_revisions
 
552
        
536
553
        local_branch = self.wt.branch
537
 
        
538
 
        other_branch = local_branch.get_parent()
539
 
        if other_branch is None:
540
 
            error_dialog(_('Parent location is unknown'),
541
 
                         _('Cannot determine missing revisions if no parent location is known.'))
 
554
        parent_branch_path = local_branch.get_parent()
 
555
        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.'))
542
558
            return
543
559
        
544
 
        remote_branch = Branch.open(other_branch)
545
 
        
546
 
        if remote_branch.base == local_branch.base:
547
 
            remote_branch = local_branch
548
 
 
549
 
        ret = len(local_branch.missing_revisions(remote_branch))
550
 
 
551
 
        if ret > 0:
552
 
            info_dialog(_('There are missing revisions'),
553
 
                        _('%d revision(s) missing.') % ret)
 
560
        parent_branch = Branch.open(parent_branch_path)
 
561
        
 
562
        if parent_branch.base == local_branch.base:
 
563
            parent_branch = local_branch
 
564
        
 
565
        local_extra, remote_extra = find_unmerged(local_branch,parent_branch)
 
566
 
 
567
        if local_extra or remote_extra:
 
568
            
 
569
            ## def log_revision_one_line_text(log_revision):
 
570
            ##    """ Generates one line description of log_revison ended with end of line."""
 
571
            ##    revision = log_revision.rev
 
572
            ##    txt =  "- %s (%s)\n" % (revision.get_summary(), revision.committer, )
 
573
            ##    txt = txt.replace("<"," ") # Seems < > chars are expected to be xml tags ...
 
574
            ##    txt = txt.replace(">"," ")
 
575
            ##    return txt
 
576
            
 
577
            dlg_txt = ""
 
578
            if local_extra:
 
579
                dlg_txt += _i18n('%d local extra revision(s). \n') % (len(local_extra),) 
 
580
                ## NOTE: We do not want such ugly info about missing revisions
 
581
                ##       Revision Browser should be used there
 
582
                ## max_revisions = 10
 
583
                ## for log_revision in iter_log_revisions(local_extra, local_branch.repository, verbose=1):
 
584
                ##    dlg_txt += log_revision_one_line_text(log_revision)
 
585
                ##    if max_revisions <= 0:
 
586
                ##        dlg_txt += _i18n("more ... \n")
 
587
                ##        break
 
588
                ## max_revisions -= 1
 
589
            ## dlg_txt += "\n"
 
590
            if remote_extra:
 
591
                dlg_txt += _i18n('%d local missing revision(s).\n') % (len(remote_extra),) 
 
592
                ## max_revisions = 10
 
593
                ## for log_revision in iter_log_revisions(remote_extra, parent_branch.repository, verbose=1):
 
594
                ##    dlg_txt += log_revision_one_line_text(log_revision)
 
595
                ##    if max_revisions <= 0:
 
596
                ##        dlg_txt += _i18n("more ... \n")
 
597
                ##        break
 
598
                ##    max_revisions -= 1
 
599
                
 
600
            info_dialog(_i18n('There are missing revisions'),
 
601
                        dlg_txt)
554
602
        else:
555
 
            info_dialog(_('Local branch up to date'),
556
 
                        _('There are no missing revisions.'))
 
603
            info_dialog(_i18n('Local branch up to date'),
 
604
                        _i18n('There are no missing revisions.'))
557
605
 
558
606
    @show_bzr_error
559
607
    def on_menuitem_branch_pull_activate(self, widget):
562
610
 
563
611
        location = branch_to.get_parent()
564
612
        if location is None:
565
 
            error_dialog(_('Parent location is unknown'),
566
 
                                     _('Pulling is not possible until there is a parent location.'))
 
613
            error_dialog(_i18n('Parent location is unknown'),
 
614
                                     _i18n('Pulling is not possible until there is a parent location.'))
567
615
            return
568
616
 
569
617
        branch_from = Branch.open(location)
573
621
 
574
622
        ret = branch_to.pull(branch_from)
575
623
        
576
 
        info_dialog(_('Pull successful'), _('%d revision(s) pulled.') % ret)
 
624
        info_dialog(_i18n('Pull successful'), _i18n('%d revision(s) pulled.') % ret)
577
625
        
578
626
    @show_bzr_error
579
627
    def on_menuitem_branch_update_activate(self, widget):
582
630
        ret = self.wt.update()
583
631
        conflicts = self.wt.conflicts()
584
632
        if conflicts:
585
 
            info_dialog(_('Update successful but conflicts generated'), _('Number of conflicts generated: %d.') % (len(conflicts),) )
 
633
            info_dialog(_i18n('Update successful but conflicts generated'), _i18n('Number of conflicts generated: %d.') % (len(conflicts),) )
586
634
        else:
587
 
            info_dialog(_('Update successful'), _('No conflicts generated.') )
 
635
            info_dialog(_i18n('Update successful'), _i18n('No conflicts generated.') )
588
636
    
589
637
    def on_menuitem_branch_push_activate(self, widget):
590
638
        """ Branch/Push... menu handler. """
598
646
        """ Branch/Revert all changes menu handler. """
599
647
        ret = self.wt.revert([])
600
648
        if ret:
601
 
            warning_dialog(_('Conflicts detected'),
602
 
                           _('Please have a look at the working tree before continuing.'))
 
649
            warning_dialog(_i18n('Conflicts detected'),
 
650
                           _i18n('Please have a look at the working tree before continuing.'))
603
651
        else:
604
 
            info_dialog(_('Revert successful'),
605
 
                        _('All files reverted to last revision.'))
 
652
            info_dialog(_i18n('Revert successful'),
 
653
                        _i18n('All files reverted to last revision.'))
606
654
        self.refresh_right()
607
655
    
608
656
    def on_menuitem_branch_status_activate(self, widget):
637
685
    def on_menuitem_file_annotate_activate(self, widget):
638
686
        """ File/Annotate... menu handler. """
639
687
        if self.get_selected_right() is None:
640
 
            error_dialog(_('No file was selected'),
641
 
                         _('Please select a file from the list.'))
 
688
            error_dialog(_i18n('No file was selected'),
 
689
                         _i18n('Please select a file from the list.'))
642
690
            return
643
691
        
644
692
        branch = self.wt.branch
645
693
        file_id = self.wt.path2id(self.wt.relpath(os.path.join(self.path, self.get_selected_right())))
646
694
        
647
 
        window = GAnnotateWindow(all=False, plain=False)
 
695
        window = GAnnotateWindow(all=False, plain=False, parent=self.window)
648
696
        window.set_title(os.path.join(self.path, self.get_selected_right()) + " - Annotate")
649
697
        config = GAnnotateConfig(window)
650
698
        window.show()
654
702
        finally:
655
703
            branch.unlock()
656
704
    
 
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.'))
 
710
            self.pref.write()
 
711
        else:
 
712
            warning_dialog(_i18n('Location already bookmarked'),
 
713
                           _i18n('The current directory is already bookmarked.\nSee the left panel for reference.'))
 
714
        
 
715
        self.refresh_left()
 
716
    
657
717
    def on_menuitem_file_make_directory_activate(self, widget):
658
718
        """ File/Make directory... menu handler. """
659
719
        from mkdir import OliveMkdir
691
751
    
692
752
    def on_menuitem_stats_diff_activate(self, widget):
693
753
        """ Statistics/Differences... menu handler. """
694
 
        window = DiffWindow()
 
754
        window = DiffWindow(parent=self.window)
695
755
        parent_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
696
756
        window.set_diff(self.wt.branch.nick, self.wt, parent_tree)
697
757
        window.show()
707
767
    
708
768
    def on_menuitem_stats_log_activate(self, widget):
709
769
        """ Statistics/Log... menu handler. """
710
 
        window = branchwin.BranchWindow()
 
770
 
711
771
        if not self.remote:
712
 
            window.set_branch(self.wt.branch, self.wt.branch.last_revision(), None)
 
772
            branch = self.wt.branch
713
773
        else:
714
 
            window.set_branch(self.remote_branch, self.remote_branch.last_revision(), None)
 
774
            branch = self.remote_branch
 
775
 
 
776
        window = branchwin.BranchWindow(branch, branch.last_revision(), None, parent=self.window)
715
777
        window.show()
716
778
    
717
779
    def on_menuitem_view_refresh_activate(self, widget):
749
811
            menu.left_context_menu().popup(None, None, None, 0,
750
812
                                           event.time)
751
813
 
 
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:
 
819
                return
 
820
            
 
821
            newdir = self.get_selected_left()
 
822
            if newdir == None:
 
823
                return
 
824
 
 
825
            if self.set_path(newdir):
 
826
                self.refresh_right()
 
827
 
752
828
    def on_treeview_left_row_activated(self, treeview, path, view_column):
753
829
        """ Occurs when somebody double-clicks or enters an item in the
754
830
        bookmark list. """
864
940
        bookmarks = self.pref.get_bookmarks()
865
941
        
866
942
        # Add them to the TreeStore
867
 
        titer = treestore.append(None, [_('Bookmarks'), None])
 
943
        titer = treestore.append(None, [_i18n('Bookmarks'), None])
868
944
        for item in bookmarks:
869
945
            title = self.pref.get_bookmark_title(item)
870
946
            treestore.append(titer, [title, item])
871
947
        
872
948
        # Create the column and add it to the TreeView
873
949
        self.treeview_left.set_model(treestore)
874
 
        tvcolumn_bookmark = gtk.TreeViewColumn(_('Bookmark'))
 
950
        tvcolumn_bookmark = gtk.TreeViewColumn(_i18n('Bookmark'))
875
951
        self.treeview_left.append_column(tvcolumn_bookmark)
876
952
        
877
953
        # Set up the cells
918
994
        
919
995
        # Add'em to the ListStore
920
996
        for item in dirs:
921
 
            statinfo = os.stat(self.path + os.sep + item)
 
997
            try:
 
998
                statinfo = os.stat(self.path + os.sep + item)
 
999
            except OSError, e:
 
1000
                if e.errno == 40:
 
1001
                    continue
 
1002
                else:
 
1003
                    raise
922
1004
            liststore.append([ gtk.STOCK_DIRECTORY,
923
1005
                               True,
924
1006
                               item,
965
1047
                    self.wt.unlock()
966
1048
            
967
1049
            if status == 'renamed':
968
 
                st = _('renamed')
 
1050
                st = _i18n('renamed')
969
1051
            elif status == 'removed':
970
 
                st = _('removed')
 
1052
                st = _i18n('removed')
971
1053
            elif status == 'added':
972
 
                st = _('added')
 
1054
                st = _i18n('added')
973
1055
            elif status == 'modified':
974
 
                st = _('modified')
 
1056
                st = _i18n('modified')
975
1057
            elif status == 'unchanged':
976
 
                st = _('unchanged')
 
1058
                st = _i18n('unchanged')
977
1059
            elif status == 'ignored':
978
 
                st = _('ignored')
 
1060
                st = _i18n('ignored')
979
1061
            else:
980
 
                st = _('unknown')
 
1062
                st = _i18n('unknown')
981
1063
            
982
 
            statinfo = os.stat(self.path + os.sep + item)
 
1064
            try:
 
1065
                statinfo = os.stat(self.path + os.sep + item)
 
1066
            except OSError, e:
 
1067
                if e.errno == 40:
 
1068
                    continue
 
1069
                else:
 
1070
                    raise
983
1071
            liststore.append([gtk.STOCK_FILE,
984
1072
                              False,
985
1073
                              item,
993
1081
        
994
1082
        # Create the columns and add them to the TreeView
995
1083
        self.treeview_right.set_model(liststore)
996
 
        self._tvcolumn_filename = gtk.TreeViewColumn(_('Filename'))
997
 
        self._tvcolumn_status = gtk.TreeViewColumn(_('Status'))
998
 
        self._tvcolumn_size = gtk.TreeViewColumn(_('Size'))
999
 
        self._tvcolumn_mtime = gtk.TreeViewColumn(_('Last modified'))
 
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'))
1000
1088
        self.treeview_right.append_column(self._tvcolumn_filename)
1001
1089
        self.treeview_right.append_column(self._tvcolumn_status)
1002
1090
        self.treeview_right.append_column(self._tvcolumn_size)
1150
1238
        bookmarks = self.pref.get_bookmarks()
1151
1239
 
1152
1240
        # Add them to the TreeStore
1153
 
        titer = treestore.append(None, [_('Bookmarks'), None])
 
1241
        titer = treestore.append(None, [_i18n('Bookmarks'), None])
1154
1242
        for item in bookmarks:
1155
1243
            title = self.pref.get_bookmark_title(item)
1156
1244
            treestore.append(titer, [title, item])
1211
1299
                
1212
1300
            # Add'em to the ListStore
1213
1301
            for item in dirs:
1214
 
                statinfo = os.stat(self.path + os.sep + item)
 
1302
                try:
 
1303
                    statinfo = os.stat(self.path + os.sep + item)
 
1304
                except OSError, e:
 
1305
                    if e.errno == 40:
 
1306
                        continue
 
1307
                    else:
 
1308
                        raise
1215
1309
                liststore.append([gtk.STOCK_DIRECTORY,
1216
1310
                                  True,
1217
1311
                                  item,
1258
1352
                        self.wt.unlock()
1259
1353
                
1260
1354
                if status == 'renamed':
1261
 
                    st = _('renamed')
 
1355
                    st = _i18n('renamed')
1262
1356
                elif status == 'removed':
1263
 
                    st = _('removed')
 
1357
                    st = _i18n('removed')
1264
1358
                elif status == 'added':
1265
 
                    st = _('added')
 
1359
                    st = _i18n('added')
1266
1360
                elif status == 'modified':
1267
 
                    st = _('modified')
 
1361
                    st = _i18n('modified')
1268
1362
                elif status == 'unchanged':
1269
 
                    st = _('unchanged')
 
1363
                    st = _i18n('unchanged')
1270
1364
                elif status == 'ignored':
1271
 
                    st = _('ignored')
 
1365
                    st = _i18n('ignored')
1272
1366
                    if not ignored_files:
1273
1367
                        continue
1274
1368
                else:
1275
 
                    st = _('unknown')
 
1369
                    st = _i18n('unknown')
1276
1370
                
1277
 
                statinfo = os.stat(self.path + os.sep + item)
 
1371
                try:
 
1372
                    statinfo = os.stat(self.path + os.sep + item)
 
1373
                except OSError, e:
 
1374
                    if e.errno == 40:
 
1375
                        continue
 
1376
                    else:
 
1377
                        raise
1278
1378
                liststore.append([gtk.STOCK_FILE,
1279
1379
                                  False,
1280
1380
                                  item,