/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 18:53:25 UTC
  • mto: This revision was merged to the branch mainline in revision 563.
  • Revision ID: colbrac@xs4all.nl-20080720185325-c9dsrex9xzleh5wq
Change locationbar bits (event signals, handling)
Change key-press-event's to activate's
Automatically switch to selected history view (fixes LP:144963)

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
408
312
            if response == gtk.RESPONSE_OK:
409
313
                if revb.selected_revno is not None:
410
314
                    self.entry_history.set_text(revb.selected_revno)
 
315
                    self.on_entry_history_revno_activate()
411
316
            
412
317
            revb.destroy()
413
318
    
438
343
            # History Mode activated
439
344
            self.entry_history.set_sensitive(True)
440
345
            self.button_history.set_sensitive(True)
 
346
            if self.entry_history.get_text() != "":
 
347
                self.on_entry_history_revno_activate()
441
348
        else:
442
349
            # History Mode deactivated
443
350
            self.entry_history.set_sensitive(False)
444
351
            self.button_history.set_sensitive(False)
 
352
            
 
353
            # Return right window to normal view by acting like we jump to it
 
354
            self.on_button_location_jump_clicked(widget)
445
355
    
446
356
    @show_bzr_error
447
 
    def on_entry_history_revno_key_press_event(self, widget, event):
 
357
    def on_entry_history_revno_activate(self, widget=None):
448
358
        """ 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'):
450
 
            # Return was hit, so we have to load that specific revision
451
 
            # Emulate being remote, so inventory should be used
452
 
            path = self.get_path()
453
 
            if not self.remote:
454
 
                self.remote = True
455
 
                self.remote_branch = self.wt.branch
456
 
            
457
 
            revno = int(self.entry_history.get_text())
458
 
            self.remote_revision = self.remote_branch.get_rev_id(revno)
459
 
            if self.set_path(path, True):
460
 
                self.refresh_right()
461
 
    
462
 
    def on_entry_location_key_press_event(self, widget, event):
463
 
        """ 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'):
465
 
            # Return was hit, so we have to jump
466
 
            self.on_button_location_jump_clicked(widget)
467
 
    
 
359
        path = self.get_path()
 
360
        if not self.remote:
 
361
            self.remote = True
 
362
            self.remote_branch = self.wt.branch
 
363
        
 
364
        revno = int(self.entry_history.get_text())
 
365
        self.remote_revision = self.remote_branch.get_rev_id(revno)
 
366
        if self.set_path(path, True):
 
367
            self.refresh_right()
 
368
 
468
369
    def on_menuitem_add_files_activate(self, widget):
469
370
        """ 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
 
    
 
371
        from bzrlib.plugins.gtk.olive.add import AddDialog
 
372
        add = AddDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
373
        response = add.run()
 
374
        add.destroy()
 
375
        if response == gtk.RESPONSE_OK:
 
376
            self.refresh_right()
 
377
 
474
378
    def on_menuitem_branch_get_activate(self, widget):
475
379
        """ Branch/Get... menu handler. """
476
380
        from bzrlib.plugins.gtk.branch import BranchDialog
508
412
    @show_bzr_error
509
413
    def on_menuitem_branch_commit_activate(self, widget):
510
414
        """ Branch/Commit... menu handler. """
511
 
#     def __init__(self, wt, wtpath, notbranch, selected=None, parent=None):
512
415
        selected = self.get_selected_right()
513
416
        if selected:
514
417
            selected = os.path.join(self.wtpath, selected)
541
444
                         _i18n('Please commit or revert the changes before merging.'))
542
445
        else:
543
446
            parent_branch_path = self.wt.branch.get_parent()
544
 
            merge = MergeDialog(self.wt, self.wtpath,default_branch_path=parent_branch_path )
545
 
            merge.display()
 
447
            merge = MergeDialog(self.wt, self.wtpath, parent_branch_path, self.window)
 
448
            response = merge.run()
 
449
            merge.destroy()
 
450
            if response == gtk.RESPONSE_OK:
 
451
                self.refresh_right()
546
452
 
547
453
    @show_bzr_error
548
454
    def on_menuitem_branch_missing_revisions_activate(self, widget):
644
550
    @show_bzr_error
645
551
    def on_menuitem_branch_revert_activate(self, widget):
646
552
        """ Branch/Revert all changes menu handler. """
647
 
        ret = self.wt.revert([])
 
553
        ret = self.wt.revert(None)
648
554
        if ret:
649
555
            warning_dialog(_i18n('Conflicts detected'),
650
556
                           _i18n('Please have a look at the working tree before continuing.'))
716
622
    
717
623
    def on_menuitem_file_make_directory_activate(self, widget):
718
624
        """ File/Make directory... menu handler. """
719
 
        from mkdir import OliveMkdir
720
 
        mkdir = OliveMkdir(self.wt, self.wtpath)
721
 
        mkdir.display()
 
625
        from bzrlib.plugins.gtk.olive.mkdir import MkdirDialog
 
626
        mkdir = MkdirDialog(self.wt, self.wtpath, self.window)
 
627
        response = mkdir.run()
 
628
        mkdir.destroy()
 
629
        if response == gtk.RESPONSE_OK:
 
630
            self.refresh_right()
722
631
    
723
632
    def on_menuitem_file_move_activate(self, widget):
724
633
        """ File/Move... menu handler. """
725
 
        from move import OliveMove
726
 
        move = OliveMove(self.wt, self.wtpath, self.get_selected_right())
727
 
        move.display()
 
634
        from bzrlib.plugins.gtk.olive.move import MoveDialog
 
635
        move = MoveDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
636
        response = move.run()
 
637
        move.destroy()
 
638
        if response == gtk.RESPONSE_OK:
 
639
            self.refresh_right()
728
640
    
729
641
    def on_menuitem_file_rename_activate(self, widget):
730
642
        """ File/Rename... menu handler. """
731
 
        from rename import OliveRename
732
 
        rename = OliveRename(self.wt, self.wtpath, self.get_selected_right())
733
 
        rename.display()
 
643
        from bzrlib.plugins.gtk.olive.rename import RenameDialog
 
644
        rename = RenameDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
 
645
        response = rename.run()
 
646
        rename.destroy()
 
647
        if response == gtk.RESPONSE_OK:
 
648
            self.refresh_right()
734
649
 
735
650
    def on_menuitem_remove_file_activate(self, widget):
736
651
        """ Remove (unversion) selected file. """
737
 
        from remove import OliveRemoveDialog
738
 
        remove = OliveRemoveDialog(self.wt, self.wtpath,
 
652
        from bzrlib.plugins.gtk.olive.remove import RemoveDialog
 
653
        remove = RemoveDialog(self.wt, self.wtpath,
739
654
                                   selected=self.get_selected_right(),
740
655
                                   parent=self.window)
741
656
        response = remove.run()
758
673
    
759
674
    def on_menuitem_stats_infos_activate(self, widget):
760
675
        """ Statistics/Informations... menu handler. """
761
 
        from info import OliveInfo
 
676
        from bzrlib.plugins.gtk.olive.info import InfoDialog
762
677
        if self.remote:
763
 
            info = OliveInfo(self.remote_branch)
 
678
            info = InfoDialog(self.remote_branch)
764
679
        else:
765
 
            info = OliveInfo(self.wt.branch)
 
680
            info = InfoDialog(self.wt.branch)
766
681
        info.display()
767
682
    
768
683
    def on_menuitem_stats_log_activate(self, widget):
773
688
        else:
774
689
            branch = self.remote_branch
775
690
 
776
 
        window = branchwin.BranchWindow(branch, branch.last_revision(), None, parent=self.window)
 
691
        window = branchwin.BranchWindow(branch, [branch.last_revision()], None, 
 
692
                                        parent=self.window)
777
693
        window.show()
778
694
    
779
695
    def on_menuitem_view_refresh_activate(self, widget):
919
835
    
920
836
    def on_window_main_delete_event(self, widget, event=None):
921
837
        """ Do some stuff before exiting. """
922
 
        width, height = self.window_main.get_size()
 
838
        width, height = self.window.get_size()
923
839
        self.pref.set_preference('window_width', width)
924
840
        self.pref.set_preference('window_height', height)
925
 
        x, y = self.window_main.get_position()
 
841
        x, y = self.window.get_position()
926
842
        self.pref.set_preference('window_x', x)
927
843
        self.pref.set_preference('window_y', y)
928
844
        self.pref.set_preference('paned_position',
929
 
                                 self.hpaned_main.get_position())
 
845
                                 self.window.hpaned_main.get_position())
930
846
        
931
847
        self.pref.write()
932
 
        self.window_main.destroy()
 
848
        self.window.destroy()
933
849
        
934
850
    def _load_left(self):
935
851
        """ Load data into the left panel. (Bookmarks) """
941
857
        
942
858
        # Add them to the TreeStore
943
859
        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])
 
860
 
 
861
        # Get titles and sort by title
 
862
        bookmarks = [[self.pref.get_bookmark_title(item), item] for item in bookmarks]
 
863
        bookmarks.sort()
 
864
        for title_item in bookmarks:
 
865
            treestore.append(titer, title_item)
947
866
        
948
867
        # Create the column and add it to the TreeView
949
868
        self.treeview_left.set_model(treestore)
997
916
            try:
998
917
                statinfo = os.stat(self.path + os.sep + item)
999
918
            except OSError, e:
1000
 
                if e.errno == 40:
 
919
                if e.errno in self.acceptable_errors:
1001
920
                    continue
1002
921
                else:
1003
922
                    raise
1064
983
            try:
1065
984
                statinfo = os.stat(self.path + os.sep + item)
1066
985
            except OSError, e:
1067
 
                if e.errno == 40:
 
986
                if e.errno in self.acceptable_errors:
1068
987
                    continue
1069
988
                else:
1070
989
                    raise
1155
1074
 
1156
1075
    def set_statusbar(self, message):
1157
1076
        """ Set the statusbar message. """
1158
 
        self.statusbar.push(self.context_id, message)
 
1077
        self.window.statusbar.push(self.context_id, message)
1159
1078
    
1160
1079
    def clear_statusbar(self):
1161
1080
        """ Clean the last message from the statusbar. """
1162
 
        self.statusbar.pop(self.context_id)
 
1081
        self.window.statusbar.pop(self.context_id)
1163
1082
    
1164
1083
    def set_sensitivity(self):
1165
1084
        """ Set menu and toolbar sensitivity. """
1166
1085
        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)
 
1086
            self.window.set_view_to_localbranch(self.notbranch)
1196
1087
        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)
 
1088
            self.window.set_view_to_remotebranch()
1226
1089
    
1227
1090
    def refresh_left(self):
1228
1091
        """ Refresh the bookmark list. """
1239
1102
 
1240
1103
        # Add them to the TreeStore
1241
1104
        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
1105
 
 
1106
        # Get titles and sort by title
 
1107
        bookmarks = [[self.pref.get_bookmark_title(item), item] for item in bookmarks]
 
1108
        bookmarks.sort()
 
1109
        for title_item in bookmarks:
 
1110
            treestore.append(titer, title_item)
 
1111
        
1246
1112
        # Add the TreeStore to the TreeView
1247
1113
        self.treeview_left.set_model(treestore)
1248
1114
 
1302
1168
                try:
1303
1169
                    statinfo = os.stat(self.path + os.sep + item)
1304
1170
                except OSError, e:
1305
 
                    if e.errno == 40:
 
1171
                    if e.errno in self.acceptable_errors:
1306
1172
                        continue
1307
1173
                    else:
1308
1174
                        raise
1371
1237
                try:
1372
1238
                    statinfo = os.stat(self.path + os.sep + item)
1373
1239
                except OSError, e:
1374
 
                    if e.errno == 40:
 
1240
                    if e.errno in self.acceptable_errors:
1375
1241
                        continue
1376
1242
                    else:
1377
1243
                        raise
1480
1346
            if sys.platform == 'win32':
1481
1347
                print "pyWin32 modules needed to run Olive on Win32."
1482
1348
                sys.exit(1)
1483
 
            else:
1484
 
                pass
1485
1349
        
1486
1350
        driveletters = []
1487
1351
        for drive in string.ascii_uppercase:
1488
 
            if win32file.GetDriveType(drive+':') == win32file.DRIVE_FIXED:
 
1352
            if win32file.GetDriveType(drive+':') == win32file.DRIVE_FIXED or\
 
1353
                win32file.GetDriveType(drive+':') == win32file.DRIVE_REMOTE:
1489
1354
                driveletters.append(drive+':')
1490
1355
        return driveletters
1491
1356
    
1724
1589
                return self._get_default(option)
1725
1590
            except KeyError:
1726
1591
                return None
1727