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
93
self.pref = Preferences()
95
96
# Initialize the statusbar
96
self.statusbar = self.toplevel.get_widget('statusbar')
97
self.context_id = self.statusbar.get_context_id('olive')
100
self.window_main = self.toplevel.get_widget('window_main')
102
self.hpaned_main = self.toplevel.get_widget('hpaned_main')
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')
100
self.treeview_left = self.window.treeview_left
101
self.treeview_right = self.window.treeview_right
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)
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
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')
157
self.vbox_main_right = self.toplevel.get_widget('vbox_main_right')
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
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
214
119
self._just_started = True
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()
442
349
# History Mode deactivated
443
350
self.entry_history.set_sensitive(False)
444
351
self.button_history.set_sensitive(False)
353
# Return right window to normal view by acting like we jump to it
354
self.on_button_location_jump_clicked(widget)
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()
455
self.remote_branch = self.wt.branch
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):
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)
359
path = self.get_path()
362
self.remote_branch = self.wt.branch
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):
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())
371
from bzrlib.plugins.gtk.olive.add import AddDialog
372
add = AddDialog(self.wt, self.wtpath, self.get_selected_right(), self.window)
375
if response == gtk.RESPONSE_OK:
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
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)
625
from bzrlib.plugins.gtk.olive.mkdir import MkdirDialog
626
mkdir = MkdirDialog(self.wt, self.wtpath, self.window)
627
response = mkdir.run()
629
if response == gtk.RESPONSE_OK:
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())
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()
638
if response == gtk.RESPONSE_OK:
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())
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()
647
if response == gtk.RESPONSE_OK:
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()
796
712
self.refresh_right()
798
714
def on_treeview_left_button_press_event(self, widget, event):
799
""" Occurs when somebody right-clicks in the bookmark list. """
800
if event.button == 3:
801
# Don't show context with nothing selected
802
if self.get_selected_left() == None:
806
from menu import OliveMenu
807
menu = OliveMenu(path=self.get_path(),
808
selected=self.get_selected_left(),
811
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):
715
""" Occurs when somebody clicks in the bookmark list. """
716
treepathpos = widget.get_path_at_pos(int(event.x), int(event.y))
717
treeselection = widget.get_selection()
718
if treepathpos is not None:
719
treeselection.select_path(treepathpos[0])
720
if event.button == 1:
721
newdir = self.get_selected_left()
725
if self.set_path(newdir):
727
elif event.button == 3:
728
# Don't show context with nothing selected
729
if self.get_selected_left() == None:
733
from menu import OliveMenu
734
menu = OliveMenu(path=self.get_path(),
735
selected=self.get_selected_left(),
738
menu.left_context_menu().popup(None, None, None, 0,
741
if treeselection is not None:
742
treeselection.unselect_all()
828
744
def on_treeview_left_row_activated(self, treeview, path, view_column):
829
745
""" Occurs when somebody double-clicks or enters an item in the
861
789
m_open.set_sensitive(False)
862
790
m_add.set_sensitive(False)
863
791
m_remove.set_sensitive(False)
792
m_remove_and_delete.set_sensitive(False)
864
793
m_rename.set_sensitive(False)
865
794
m_revert.set_sensitive(False)
866
795
m_commit.set_sensitive(False)
867
796
m_annotate.set_sensitive(False)
868
797
m_diff.set_sensitive(False)
799
if treepathpos is None:
800
m_open.set_sensitive(False)
801
m_add.set_sensitive(False)
802
m_remove.set_sensitive(False)
803
m_remove_and_delete.set_sensitive(False)
804
m_rename.set_sensitive(False)
805
m_annotate.set_sensitive(False)
806
m_diff.set_sensitive(False)
807
m_revert.set_sensitive(False)
809
m_open.set_sensitive(True)
810
m_add.set_sensitive(True)
811
m_remove.set_sensitive(True)
812
m_remove_and_delete.set_sensitive(True)
813
m_rename.set_sensitive(True)
814
m_annotate.set_sensitive(True)
815
m_diff.set_sensitive(True)
816
m_revert.set_sensitive(True)
817
m_commit.set_sensitive(True)
818
except bzrerrors.NotBranchError:
819
if treepathpos is None:
820
m_open.set_sensitive(False)
870
822
m_open.set_sensitive(True)
871
m_add.set_sensitive(True)
872
m_remove.set_sensitive(True)
873
m_rename.set_sensitive(True)
874
m_revert.set_sensitive(True)
875
m_commit.set_sensitive(True)
876
m_annotate.set_sensitive(True)
877
m_diff.set_sensitive(True)
878
except bzrerrors.NotBranchError:
879
m_open.set_sensitive(True)
880
823
m_add.set_sensitive(False)
881
824
m_remove.set_sensitive(False)
825
m_remove_and_delete.set_sensitive(False)
882
826
m_rename.set_sensitive(False)
883
827
m_revert.set_sensitive(False)
884
828
m_commit.set_sensitive(False)
1156
1103
def set_statusbar(self, message):
1157
1104
""" Set the statusbar message. """
1158
self.statusbar.push(self.context_id, message)
1105
self.window.statusbar.push(self.context_id, message)
1160
1107
def clear_statusbar(self):
1161
1108
""" Clean the last message from the statusbar. """
1162
self.statusbar.pop(self.context_id)
1109
self.window.statusbar.pop(self.context_id)
1164
1111
def set_sensitivity(self):
1165
1112
""" Set menu and toolbar sensitivity. """
1166
1113
if not self.remote:
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)
1114
self.window.set_view_to_localbranch(self.notbranch)
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)
1116
self.window.set_view_to_remotebranch()
1227
1118
def refresh_left(self):
1228
1119
""" Refresh the bookmark list. """