/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: Jasper Groenewegen
  • Date: 2008-07-20 22:36:42 UTC
  • mto: This revision was merged to the branch mainline in revision 566.
  • Revision ID: colbrac@xs4all.nl-20080720223642-bk05nf98lcafdrda
Fixes to launch in menu.py
Absolute import in bookmark.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 #!/usr/bin/python
2
 
 
3
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
4
2
#
5
3
# This program is free software; you can redistribute it and/or modify
19
17
import os
20
18
import sys
21
19
import time
 
20
import errno
22
21
 
23
22
# gettext support
24
23
import gettext
33
32
import gobject
34
33
import gtk
35
34
import gtk.gdk
36
 
import gtk.glade
37
35
 
38
36
from bzrlib.branch import Branch
39
37
import bzrlib.errors as bzrerrors
44
42
from bzrlib.plugins.gtk import _i18n
45
43
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog
46
44
from bzrlib.plugins.gtk.errors import show_bzr_error
47
 
from guifiles import GLADEFILENAME
 
45
from bzrlib.plugins.gtk.olive.window import OliveGui
48
46
 
49
47
from bzrlib.plugins.gtk.diff import DiffWindow
50
48
lazy_import(globals(), """
60
58
 
61
59
def about():
62
60
    """ Display the AboutDialog. """
63
 
    from bzrlib.plugins.gtk import __version__
64
 
    from bzrlib.plugins.gtk.olive.guifiles import GLADEFILENAME
65
 
 
66
 
    # Load AboutDialog description
67
 
    dglade = gtk.glade.XML(GLADEFILENAME, 'aboutdialog')
68
 
    dialog = dglade.get_widget('aboutdialog')
69
 
 
70
 
    # Set version
 
61
    from bzrlib.plugins.gtk import __version__, icon_path
 
62
    
 
63
    iconpath = icon_path() + os.sep
 
64
    
 
65
    dialog = gtk.AboutDialog()
 
66
    dialog.set_name("Olive")
71
67
    dialog.set_version(__version__)
 
68
    dialog.set_copyright("Copyright (C) 2006 Szilveszter Farkas (Phanatic)")
 
69
    dialog.set_website("https://launchpad.net/products/olive")
 
70
    dialog.set_website_label("https://launchpad.net/products/olive")
 
71
    dialog.set_icon_from_file(iconpath+"oliveicon2.png")
 
72
    dialog.set_logo(gtk.gdk.pixbuf_new_from_file(iconpath+"oliveicon2.png"))
72
73
    dialog.set_authors([ _i18n("Lead Developer:"),
73
74
                         "Szilveszter Farkas <szilveszter.farkas@gmail.com>",
74
75
                         _i18n("Contributors:"),
87
88
    program. """
88
89
    
89
90
    def __init__(self):
90
 
        self.toplevel = gtk.glade.XML(GLADEFILENAME, 'window_main', 'olive-gtk')
91
 
        self.window = self.toplevel.get_widget('window_main')
 
91
        self.window = OliveGui(calling_app = self)
 
92
        
92
93
        self.pref = Preferences()
93
94
        self.path = None
94
95
 
95
96
        # Initialize the statusbar
96
 
        self.statusbar = self.toplevel.get_widget('statusbar')
97
 
        self.context_id = self.statusbar.get_context_id('olive')
98
 
        
99
 
        # Get the main window
100
 
        self.window_main = self.toplevel.get_widget('window_main')
101
 
        # Get the HPaned
102
 
        self.hpaned_main = self.toplevel.get_widget('hpaned_main')
103
 
        # Get the TreeViews
104
 
        self.treeview_left = self.toplevel.get_widget('treeview_left')
105
 
        self.treeview_right = self.toplevel.get_widget('treeview_right')
106
 
        # Get some important menu items
107
 
        self.menuitem_add_files = self.toplevel.get_widget('menuitem_add_files')
108
 
        self.menuitem_remove_files = self.toplevel.get_widget('menuitem_remove_file')
109
 
        self.menuitem_file_bookmark = self.toplevel.get_widget('menuitem_file_bookmark')
110
 
        self.menuitem_file_make_directory = self.toplevel.get_widget('menuitem_file_make_directory')
111
 
        self.menuitem_file_rename = self.toplevel.get_widget('menuitem_file_rename')
112
 
        self.menuitem_file_move = self.toplevel.get_widget('menuitem_file_move')
113
 
        self.menuitem_file_annotate = self.toplevel.get_widget('menuitem_file_annotate')
114
 
        self.menuitem_view_show_hidden_files = self.toplevel.get_widget('menuitem_view_show_hidden_files')
115
 
        self.menuitem_view_show_ignored_files = self.toplevel.get_widget('menuitem_view_show_ignored_files')
116
 
        self.menuitem_branch = self.toplevel.get_widget('menuitem_branch')
117
 
        self.menuitem_branch_init = self.toplevel.get_widget('menuitem_branch_initialize')
118
 
        self.menuitem_branch_get = self.toplevel.get_widget('menuitem_branch_get')
119
 
        self.menuitem_branch_checkout = self.toplevel.get_widget('menuitem_branch_checkout')
120
 
        self.menuitem_branch_pull = self.toplevel.get_widget('menuitem_branch_pull')
121
 
        self.menuitem_branch_push = self.toplevel.get_widget('menuitem_branch_push')
122
 
        self.menuitem_branch_update = self.toplevel.get_widget('menuitem_branch_update')
123
 
        self.menuitem_branch_revert = self.toplevel.get_widget('menuitem_branch_revert')
124
 
        self.menuitem_branch_merge = self.toplevel.get_widget('menuitem_branch_merge')
125
 
        self.menuitem_branch_commit = self.toplevel.get_widget('menuitem_branch_commit')
126
 
        self.menuitem_branch_tags = self.toplevel.get_widget('menuitem_branch_tags')
127
 
        self.menuitem_branch_status = self.toplevel.get_widget('menuitem_branch_status')
128
 
        self.menuitem_branch_missing = self.toplevel.get_widget('menuitem_branch_missing_revisions')
129
 
        self.menuitem_branch_conflicts = self.toplevel.get_widget('menuitem_branch_conflicts')
130
 
        self.menuitem_stats = self.toplevel.get_widget('menuitem_stats')
131
 
        self.menuitem_stats_diff = self.toplevel.get_widget('menuitem_stats_diff')
132
 
        self.menuitem_stats_log = self.toplevel.get_widget('menuitem_stats_log')
133
 
        # Get some toolbuttons
134
 
        #self.menutoolbutton_diff = self.toplevel.get_widget('menutoolbutton_diff')
135
 
        self.toolbutton_diff = self.toplevel.get_widget('toolbutton_diff')
136
 
        self.toolbutton_log = self.toplevel.get_widget('toolbutton_log')
137
 
        self.toolbutton_commit = self.toplevel.get_widget('toolbutton_commit')
138
 
        self.toolbutton_pull = self.toplevel.get_widget('toolbutton_pull')
139
 
        self.toolbutton_push = self.toplevel.get_widget('toolbutton_push')
140
 
        self.toolbutton_update = self.toplevel.get_widget('toolbutton_update')
 
97
        self.context_id = self.window.statusbar.get_context_id('olive')
 
98
        
 
99
                # Get the TreeViews
 
100
        self.treeview_left = self.window.treeview_left
 
101
        self.treeview_right = self.window.treeview_right
 
102
        
141
103
        # Get the drive selector
142
104
        self.combobox_drive = gtk.combo_box_new_text()
143
105
        self.combobox_drive.connect("changed", self._refresh_drives)
144
106
        
145
107
        # Get the navigation widgets
146
 
        self.hbox_location = self.toplevel.get_widget('hbox_location')
147
 
        self.button_location_up = self.toplevel.get_widget('button_location_up')
148
 
        self.button_location_jump = self.toplevel.get_widget('button_location_jump')
149
 
        self.entry_location = self.toplevel.get_widget('entry_location')
150
 
        self.image_location_error = self.toplevel.get_widget('image_location_error')
 
108
        self.hbox_location = self.window.locationbar
 
109
        self.button_location_up = self.window.button_location_up
 
110
        self.button_location_jump = self.window.button_location_jump
 
111
        self.entry_location = self.window.entry_location
 
112
        self.image_location_error = self.window.image_location_error
151
113
        
152
114
        # Get the History widgets
153
 
        self.check_history = self.toplevel.get_widget('checkbutton_history')
154
 
        self.entry_history = self.toplevel.get_widget('entry_history_revno')
155
 
        self.button_history = self.toplevel.get_widget('button_history_browse')
156
 
        
157
 
        self.vbox_main_right = self.toplevel.get_widget('vbox_main_right')
158
 
        
159
 
        # Dictionary for signal_autoconnect
160
 
        dic = { "on_window_main_destroy": gtk.main_quit,
161
 
                "on_window_main_delete_event": self.on_window_main_delete_event,
162
 
                "on_quit_activate": self.on_window_main_delete_event,
163
 
                "on_about_activate": self.on_about_activate,
164
 
                "on_menuitem_add_files_activate": self.on_menuitem_add_files_activate,
165
 
                "on_menuitem_remove_file_activate": self.on_menuitem_remove_file_activate,
166
 
                "on_menuitem_file_bookmark_activate": self.on_menuitem_file_bookmark_activate,
167
 
                "on_menuitem_file_make_directory_activate": self.on_menuitem_file_make_directory_activate,
168
 
                "on_menuitem_file_move_activate": self.on_menuitem_file_move_activate,
169
 
                "on_menuitem_file_rename_activate": self.on_menuitem_file_rename_activate,
170
 
                "on_menuitem_file_annotate_activate": self.on_menuitem_file_annotate_activate,
171
 
                "on_menuitem_view_show_hidden_files_activate": self.on_menuitem_view_show_hidden_files_activate,
172
 
                "on_menuitem_view_show_ignored_files_activate": self.on_menuitem_view_show_ignored_files_activate,
173
 
                "on_menuitem_view_refresh_activate": self.on_menuitem_view_refresh_activate,
174
 
                "on_menuitem_branch_initialize_activate": self.on_menuitem_branch_initialize_activate,
175
 
                "on_menuitem_branch_get_activate": self.on_menuitem_branch_get_activate,
176
 
                "on_menuitem_branch_checkout_activate": self.on_menuitem_branch_checkout_activate,
177
 
                "on_menuitem_branch_revert_activate": self.on_menuitem_branch_revert_activate,
178
 
                "on_menuitem_branch_merge_activate": self.on_menuitem_branch_merge_activate,
179
 
                "on_menuitem_branch_commit_activate": self.on_menuitem_branch_commit_activate,
180
 
                "on_menuitem_branch_push_activate": self.on_menuitem_branch_push_activate,
181
 
                "on_menuitem_branch_pull_activate": self.on_menuitem_branch_pull_activate,
182
 
                "on_menuitem_branch_update_activate": self.on_menuitem_branch_update_activate,                
183
 
                "on_menuitem_branch_tags_activate": self.on_menuitem_branch_tags_activate,
184
 
                "on_menuitem_branch_status_activate": self.on_menuitem_branch_status_activate,
185
 
                "on_menuitem_branch_missing_revisions_activate": self.on_menuitem_branch_missing_revisions_activate,
186
 
                "on_menuitem_branch_conflicts_activate": self.on_menuitem_branch_conflicts_activate,
187
 
                "on_menuitem_stats_diff_activate": self.on_menuitem_stats_diff_activate,
188
 
                "on_menuitem_stats_log_activate": self.on_menuitem_stats_log_activate,
189
 
                "on_menuitem_stats_infos_activate": self.on_menuitem_stats_infos_activate,
190
 
                "on_toolbutton_refresh_clicked": self.on_menuitem_view_refresh_activate,
191
 
                "on_toolbutton_log_clicked": self.on_menuitem_stats_log_activate,
192
 
                #"on_menutoolbutton_diff_clicked": self.on_menuitem_stats_diff_activate,
193
 
                "on_toolbutton_diff_clicked": self.on_menuitem_stats_diff_activate,
194
 
                "on_toolbutton_commit_clicked": self.on_menuitem_branch_commit_activate,
195
 
                "on_toolbutton_pull_clicked": self.on_menuitem_branch_pull_activate,
196
 
                "on_toolbutton_push_clicked": self.on_menuitem_branch_push_activate,
197
 
                "on_toolbutton_update_clicked": self.on_menuitem_branch_update_activate,
198
 
                "on_treeview_right_button_press_event": self.on_treeview_right_button_press_event,
199
 
                "on_treeview_right_row_activated": self.on_treeview_right_row_activated,
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,
202
 
                "on_treeview_left_row_activated": self.on_treeview_left_row_activated,
203
 
                "on_button_location_up_clicked": self.on_button_location_up_clicked,
204
 
                "on_button_location_jump_clicked": self.on_button_location_jump_clicked,
205
 
                "on_entry_location_key_press_event": self.on_entry_location_key_press_event,
206
 
                "on_checkbutton_history_toggled": self.on_checkbutton_history_toggled,
207
 
                "on_entry_history_revno_key_press_event": self.on_entry_history_revno_key_press_event,
208
 
                "on_button_history_browse_clicked": self.on_button_history_browse_clicked
209
 
            }
210
 
        
211
 
        # Connect the signals to the handlers
212
 
        self.toplevel.signal_autoconnect(dic)
 
115
        self.check_history = self.window.checkbutton_history
 
116
        self.entry_history = self.window.entry_history_revno
 
117
        self.button_history = self.window.button_history_browse
213
118
        
214
119
        self._just_started = True
215
120
        
222
127
        self.window.move(x, y)
223
128
        # Apply paned position
224
129
        pos = self.pref.get_preference('paned_position', 'int')
225
 
        self.hpaned_main.set_position(pos)
226
 
        
227
 
        # Apply menu to the toolbutton
228
 
        #menubutton = self.toplevel.get_widget('menutoolbutton_diff')
229
 
        #menubutton.set_menu(handler.menu.toolbar_diff)
 
130
        self.window.hpaned_main.set_position(pos)
230
131
        
231
132
        # Now we can show the window
232
133
        self.window.show()
238
139
            self.combobox_drive.show()
239
140
            self.gen_hard_selector()
240
141
        
 
142
        # Acceptable errors when loading files/folders in the treeviews
 
143
        self.acceptable_errors = (errno.ENOENT, errno.ELOOP)
 
144
        
241
145
        self._load_left()
242
146
 
243
147
        # Apply menu state
244
 
        self.menuitem_view_show_hidden_files.set_active(self.pref.get_preference('dotted_files', 'bool'))
245
 
        self.menuitem_view_show_ignored_files.set_active(self.pref.get_preference('ignored_files', 'bool'))
 
148
        self.window.mb_view_showhidden.set_active(self.pref.get_preference('dotted_files', 'bool'))
 
149
        self.window.mb_view_showignored.set_active(self.pref.get_preference('ignored_files', 'bool'))
246
150
 
247
151
        # We're starting local
248
152
        self.remote = False
375
279
        else:
376
280
            self.check_history.set_sensitive(True)
377
281
        
378
 
        self.statusbar.push(self.context_id, path)
 
282
        self.window.statusbar.push(self.context_id, path)
379
283
        self.entry_location.set_text(path)
380
284
        self.path = path
381
285
        return True
442
346
            # History Mode deactivated
443
347
            self.entry_history.set_sensitive(False)
444
348
            self.button_history.set_sensitive(False)
 
349
            
 
350
            # Return right window to normal view by acting like we jump to it
 
351
            self.on_button_location_jump_clicked(widget)
445
352
    
446
353
    @show_bzr_error
447
354
    def on_entry_history_revno_key_press_event(self, widget, event):
467
374
    
468
375
    def on_menuitem_add_files_activate(self, widget):
469
376
        """ Add file(s)... menu handler. """
470
 
        from add import OliveAdd
471
 
        add = OliveAdd(self.wt, self.wtpath, self.get_selected_right())
472
 
        add.display()
473
 
    
 
377
        from bzrlib.plugins.gtk.olive.add import AddDialog
 
378
        add = AddDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
379
        response = add.run()
 
380
        add.destroy()
 
381
        if response == gtk.RESPONSE_OK:
 
382
            self.refresh_right()
 
383
 
474
384
    def on_menuitem_branch_get_activate(self, widget):
475
385
        """ Branch/Get... menu handler. """
476
386
        from bzrlib.plugins.gtk.branch import BranchDialog
508
418
    @show_bzr_error
509
419
    def on_menuitem_branch_commit_activate(self, widget):
510
420
        """ Branch/Commit... menu handler. """
511
 
#     def __init__(self, wt, wtpath, notbranch, selected=None, parent=None):
512
421
        selected = self.get_selected_right()
513
422
        if selected:
514
423
            selected = os.path.join(self.wtpath, selected)
541
450
                         _i18n('Please commit or revert the changes before merging.'))
542
451
        else:
543
452
            parent_branch_path = self.wt.branch.get_parent()
544
 
            merge = MergeDialog(self.wt, self.wtpath,default_branch_path=parent_branch_path )
545
 
            merge.display()
 
453
            merge = MergeDialog(self.wt, self.wtpath, parent_branch_path, self.window)
 
454
            response = merge.run()
 
455
            merge.destroy()
 
456
            if response == gtk.RESPONSE_OK:
 
457
                self.refresh_right()
546
458
 
547
459
    @show_bzr_error
548
460
    def on_menuitem_branch_missing_revisions_activate(self, widget):
644
556
    @show_bzr_error
645
557
    def on_menuitem_branch_revert_activate(self, widget):
646
558
        """ Branch/Revert all changes menu handler. """
647
 
        ret = self.wt.revert([])
 
559
        ret = self.wt.revert(None)
648
560
        if ret:
649
561
            warning_dialog(_i18n('Conflicts detected'),
650
562
                           _i18n('Please have a look at the working tree before continuing.'))
716
628
    
717
629
    def on_menuitem_file_make_directory_activate(self, widget):
718
630
        """ File/Make directory... menu handler. """
719
 
        from mkdir import OliveMkdir
720
 
        mkdir = OliveMkdir(self.wt, self.wtpath)
721
 
        mkdir.display()
 
631
        from bzrlib.plugins.gtk.olive.mkdir import MkdirDialog
 
632
        mkdir = MkdirDialog(self.wt, self.wtpath, self.window)
 
633
        response = mkdir.run()
 
634
        mkdir.destroy()
 
635
        if response == gtk.RESPONSE_OK:
 
636
            self.refresh_right()
722
637
    
723
638
    def on_menuitem_file_move_activate(self, widget):
724
639
        """ File/Move... menu handler. """
725
 
        from move import OliveMove
726
 
        move = OliveMove(self.wt, self.wtpath, self.get_selected_right())
727
 
        move.display()
 
640
        from bzrlib.plugins.gtk.olive.move import MoveDialog
 
641
        move = MoveDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
642
        response = move.run()
 
643
        move.destroy()
 
644
        if response == gtk.RESPONSE_OK:
 
645
            self.refresh_right()
728
646
    
729
647
    def on_menuitem_file_rename_activate(self, widget):
730
648
        """ File/Rename... menu handler. """
731
 
        from rename import OliveRename
732
 
        rename = OliveRename(self.wt, self.wtpath, self.get_selected_right())
733
 
        rename.display()
 
649
        from bzrlib.plugins.gtk.olive.rename import RenameDialog
 
650
        rename = RenameDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
651
        response = rename.run()
 
652
        rename.destroy()
 
653
        if response == gtk.RESPONSE_OK:
 
654
            self.refresh_right()
734
655
 
735
656
    def on_menuitem_remove_file_activate(self, widget):
736
657
        """ Remove (unversion) selected file. """
737
 
        from remove import OliveRemoveDialog
738
 
        remove = OliveRemoveDialog(self.wt, self.wtpath,
 
658
        from bzrlib.plugins.gtk.olive.remove import RemoveDialog
 
659
        remove = RemoveDialog(self.wt, self.wtpath,
739
660
                                   selected=self.get_selected_right(),
740
661
                                   parent=self.window)
741
662
        response = remove.run()
758
679
    
759
680
    def on_menuitem_stats_infos_activate(self, widget):
760
681
        """ Statistics/Informations... menu handler. """
761
 
        from info import OliveInfo
 
682
        from bzrlib.plugins.gtk.olive.info import InfoDialog
762
683
        if self.remote:
763
 
            info = OliveInfo(self.remote_branch)
 
684
            info = InfoDialog(self.remote_branch)
764
685
        else:
765
 
            info = OliveInfo(self.wt.branch)
 
686
            info = InfoDialog(self.wt.branch)
766
687
        info.display()
767
688
    
768
689
    def on_menuitem_stats_log_activate(self, widget):
773
694
        else:
774
695
            branch = self.remote_branch
775
696
 
776
 
        window = branchwin.BranchWindow(branch, branch.last_revision(), None, parent=self.window)
 
697
        window = branchwin.BranchWindow(branch, [branch.last_revision()], None, 
 
698
                                        parent=self.window)
777
699
        window.show()
778
700
    
779
701
    def on_menuitem_view_refresh_activate(self, widget):
919
841
    
920
842
    def on_window_main_delete_event(self, widget, event=None):
921
843
        """ Do some stuff before exiting. """
922
 
        width, height = self.window_main.get_size()
 
844
        width, height = self.window.get_size()
923
845
        self.pref.set_preference('window_width', width)
924
846
        self.pref.set_preference('window_height', height)
925
 
        x, y = self.window_main.get_position()
 
847
        x, y = self.window.get_position()
926
848
        self.pref.set_preference('window_x', x)
927
849
        self.pref.set_preference('window_y', y)
928
850
        self.pref.set_preference('paned_position',
929
 
                                 self.hpaned_main.get_position())
 
851
                                 self.window.hpaned_main.get_position())
930
852
        
931
853
        self.pref.write()
932
 
        self.window_main.destroy()
 
854
        self.window.destroy()
933
855
        
934
856
    def _load_left(self):
935
857
        """ Load data into the left panel. (Bookmarks) """
941
863
        
942
864
        # Add them to the TreeStore
943
865
        titer = treestore.append(None, [_i18n('Bookmarks'), None])
944
 
        for item in bookmarks:
945
 
            title = self.pref.get_bookmark_title(item)
946
 
            treestore.append(titer, [title, item])
 
866
 
 
867
        # Get titles and sort by title
 
868
        bookmarks = [[self.pref.get_bookmark_title(item), item] for item in bookmarks]
 
869
        bookmarks.sort()
 
870
        for title_item in bookmarks:
 
871
            treestore.append(titer, title_item)
947
872
        
948
873
        # Create the column and add it to the TreeView
949
874
        self.treeview_left.set_model(treestore)
997
922
            try:
998
923
                statinfo = os.stat(self.path + os.sep + item)
999
924
            except OSError, e:
1000
 
                if e.errno == 40:
 
925
                if e.errno in self.acceptable_errors:
1001
926
                    continue
1002
927
                else:
1003
928
                    raise
1064
989
            try:
1065
990
                statinfo = os.stat(self.path + os.sep + item)
1066
991
            except OSError, e:
1067
 
                if e.errno == 40:
 
992
                if e.errno in self.acceptable_errors:
1068
993
                    continue
1069
994
                else:
1070
995
                    raise
1155
1080
 
1156
1081
    def set_statusbar(self, message):
1157
1082
        """ Set the statusbar message. """
1158
 
        self.statusbar.push(self.context_id, message)
 
1083
        self.window.statusbar.push(self.context_id, message)
1159
1084
    
1160
1085
    def clear_statusbar(self):
1161
1086
        """ Clean the last message from the statusbar. """
1162
 
        self.statusbar.pop(self.context_id)
 
1087
        self.window.statusbar.pop(self.context_id)
1163
1088
    
1164
1089
    def set_sensitivity(self):
1165
1090
        """ Set menu and toolbar sensitivity. """
1166
1091
        if not self.remote:
1167
 
            # We're local
1168
 
            self.menuitem_branch_init.set_sensitive(self.notbranch)
1169
 
            self.menuitem_branch_get.set_sensitive(self.notbranch)
1170
 
            self.menuitem_branch_checkout.set_sensitive(self.notbranch)
1171
 
            self.menuitem_branch_pull.set_sensitive(not self.notbranch)
1172
 
            self.menuitem_branch_push.set_sensitive(not self.notbranch)
1173
 
            self.menuitem_branch_update.set_sensitive(not self.notbranch)
1174
 
            self.menuitem_branch_revert.set_sensitive(not self.notbranch)
1175
 
            self.menuitem_branch_merge.set_sensitive(not self.notbranch)
1176
 
            self.menuitem_branch_commit.set_sensitive(not self.notbranch)
1177
 
            self.menuitem_branch_tags.set_sensitive(not self.notbranch)
1178
 
            self.menuitem_branch_status.set_sensitive(not self.notbranch)
1179
 
            self.menuitem_branch_missing.set_sensitive(not self.notbranch)
1180
 
            self.menuitem_branch_conflicts.set_sensitive(not self.notbranch)
1181
 
            self.menuitem_stats.set_sensitive(not self.notbranch)
1182
 
            self.menuitem_stats_diff.set_sensitive(not self.notbranch)
1183
 
            self.menuitem_add_files.set_sensitive(not self.notbranch)
1184
 
            self.menuitem_remove_files.set_sensitive(not self.notbranch)
1185
 
            self.menuitem_file_make_directory.set_sensitive(not self.notbranch)
1186
 
            self.menuitem_file_rename.set_sensitive(not self.notbranch)
1187
 
            self.menuitem_file_move.set_sensitive(not self.notbranch)
1188
 
            self.menuitem_file_annotate.set_sensitive(not self.notbranch)
1189
 
            #self.menutoolbutton_diff.set_sensitive(True)
1190
 
            self.toolbutton_diff.set_sensitive(not self.notbranch)
1191
 
            self.toolbutton_log.set_sensitive(not self.notbranch)
1192
 
            self.toolbutton_commit.set_sensitive(not self.notbranch)
1193
 
            self.toolbutton_pull.set_sensitive(not self.notbranch)
1194
 
            self.toolbutton_push.set_sensitive(not self.notbranch)
1195
 
            self.toolbutton_update.set_sensitive(not self.notbranch)
 
1092
            self.window.set_view_to_localbranch(self.notbranch)
1196
1093
        else:
1197
 
            # We're remote
1198
 
            self.menuitem_branch_init.set_sensitive(False)
1199
 
            self.menuitem_branch_get.set_sensitive(True)
1200
 
            self.menuitem_branch_checkout.set_sensitive(True)
1201
 
            self.menuitem_branch_pull.set_sensitive(False)
1202
 
            self.menuitem_branch_push.set_sensitive(False)
1203
 
            self.menuitem_branch_update.set_sensitive(False)
1204
 
            self.menuitem_branch_revert.set_sensitive(False)
1205
 
            self.menuitem_branch_merge.set_sensitive(False)
1206
 
            self.menuitem_branch_commit.set_sensitive(False)
1207
 
            self.menuitem_branch_tags.set_sensitive(True)
1208
 
            self.menuitem_branch_status.set_sensitive(False)
1209
 
            self.menuitem_branch_missing.set_sensitive(False)
1210
 
            self.menuitem_branch_conflicts.set_sensitive(False)
1211
 
            self.menuitem_stats.set_sensitive(True)
1212
 
            self.menuitem_stats_diff.set_sensitive(False)
1213
 
            self.menuitem_add_files.set_sensitive(False)
1214
 
            self.menuitem_remove_files.set_sensitive(False)
1215
 
            self.menuitem_file_make_directory.set_sensitive(False)
1216
 
            self.menuitem_file_rename.set_sensitive(False)
1217
 
            self.menuitem_file_move.set_sensitive(False)
1218
 
            self.menuitem_file_annotate.set_sensitive(False)
1219
 
            #self.menutoolbutton_diff.set_sensitive(True)
1220
 
            self.toolbutton_diff.set_sensitive(False)
1221
 
            self.toolbutton_log.set_sensitive(True)
1222
 
            self.toolbutton_commit.set_sensitive(False)
1223
 
            self.toolbutton_pull.set_sensitive(False)
1224
 
            self.toolbutton_push.set_sensitive(False)
1225
 
            self.toolbutton_update.set_sensitive(False)
 
1094
            self.window.set_view_to_remotebranch()
1226
1095
    
1227
1096
    def refresh_left(self):
1228
1097
        """ Refresh the bookmark list. """
1239
1108
 
1240
1109
        # Add them to the TreeStore
1241
1110
        titer = treestore.append(None, [_i18n('Bookmarks'), None])
1242
 
        for item in bookmarks:
1243
 
            title = self.pref.get_bookmark_title(item)
1244
 
            treestore.append(titer, [title, item])
1245
1111
 
 
1112
        # Get titles and sort by title
 
1113
        bookmarks = [[self.pref.get_bookmark_title(item), item] for item in bookmarks]
 
1114
        bookmarks.sort()
 
1115
        for title_item in bookmarks:
 
1116
            treestore.append(titer, title_item)
 
1117
        
1246
1118
        # Add the TreeStore to the TreeView
1247
1119
        self.treeview_left.set_model(treestore)
1248
1120
 
1302
1174
                try:
1303
1175
                    statinfo = os.stat(self.path + os.sep + item)
1304
1176
                except OSError, e:
1305
 
                    if e.errno == 40:
 
1177
                    if e.errno in self.acceptable_errors:
1306
1178
                        continue
1307
1179
                    else:
1308
1180
                        raise
1371
1243
                try:
1372
1244
                    statinfo = os.stat(self.path + os.sep + item)
1373
1245
                except OSError, e:
1374
 
                    if e.errno == 40:
 
1246
                    if e.errno in self.acceptable_errors:
1375
1247
                        continue
1376
1248
                    else:
1377
1249
                        raise
1480
1352
            if sys.platform == 'win32':
1481
1353
                print "pyWin32 modules needed to run Olive on Win32."
1482
1354
                sys.exit(1)
1483
 
            else:
1484
 
                pass
1485
1355
        
1486
1356
        driveletters = []
1487
1357
        for drive in string.ascii_uppercase:
1488
 
            if win32file.GetDriveType(drive+':') == win32file.DRIVE_FIXED:
 
1358
            if win32file.GetDriveType(drive+':') == win32file.DRIVE_FIXED or\
 
1359
                win32file.GetDriveType(drive+':') == win32file.DRIVE_REMOTE:
1489
1360
                driveletters.append(drive+':')
1490
1361
        return driveletters
1491
1362
    
1724
1595
                return self._get_default(option)
1725
1596
            except KeyError:
1726
1597
                return None
1727