1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31
import olive.backend.fileops as fileops
32
import olive.backend.errors as errors
34
from launch import launch
37
""" This class is responsible for building the context menus. """
38
def __init__(self, gladefile, comm, dialog):
40
if sys.platform == 'win32':
41
self.uifile = os.path.dirname(sys.executable) + "/share/olive/cmenu.ui"
43
self.uifile = "/usr/share/olive/cmenu.ui"
45
if not os.path.exists(self.uifile):
46
# Load from current directory if not installed
47
self.uifile = "cmenu.ui"
49
if not os.path.exists(self.uifile):
51
print _('UI description file cannot be found.')
54
self.gladefile = gladefile
58
# Create the file list context menu
59
self.ui = gtk.UIManager()
61
self.actiongroup = gtk.ActionGroup('context')
62
self.actiongroup.add_actions([('add', gtk.STOCK_ADD,
64
_('Add the selected file'),
66
('remove', gtk.STOCK_REMOVE,
68
_('Remove the selected file'),
70
('open', gtk.STOCK_OPEN,
72
_('Open the selected file'),
76
_('Commit the changes'),
80
_('Show the diff of the file'),
84
_('Bookmark current location'),
86
('edit_bookmark', gtk.STOCK_EDIT,
88
_('Edit the selected bookmark'),
90
('remove_bookmark', gtk.STOCK_REMOVE,
92
_('Remove the selected bookmark'),
93
self.remove_bookmark),
94
('open_folder', gtk.STOCK_OPEN,
95
_('Open Folder'), None,
96
_('Open bookmark folder in Nautilus'),
98
('diff_selected', None,
99
_('Selected...'), None,
100
_('Show the differences of the selected file'),
104
_('Show the differences of all files'),
108
self.ui.insert_action_group(self.actiongroup, 0)
109
self.ui.add_ui_from_file(self.uifile)
111
self.cmenu_right = self.ui.get_widget('/context_right')
112
self.cmenu_left = self.ui.get_widget('/context_left')
113
self.toolbar_diff = self.ui.get_widget('/toolbar_diff')
116
commit_menu = self.ui.get_widget('/context_right/commit')
117
commit_image = self.comm.menuitem_branch_commit.get_image()
118
commit_pixbuf = commit_image.get_pixbuf()
119
commit_icon = gtk.Image()
120
commit_icon.set_from_pixbuf(commit_pixbuf)
121
commit_menu.set_image(commit_icon)
122
diff_menu = self.ui.get_widget('/context_right/diff')
123
diff_image = self.comm.menuitem_stats_diff.get_image()
124
diff_pixbuf = diff_image.get_pixbuf()
125
diff_icon = gtk.Image()
126
diff_icon.set_from_pixbuf(diff_pixbuf)
127
diff_menu.set_image(diff_icon)
129
def right_context_menu(self):
130
return self.cmenu_right
132
def left_context_menu(self):
133
return self.cmenu_left
135
def add_file(self, action):
136
""" Right context menu -> Add """
137
# Add only the selected file
138
directory = self.comm.get_path()
139
filename = self.comm.get_selected_right()
142
self.dialog.error_dialog(_('No file was selected'),
143
_('Please select a file from the list,\nor choose the other option.'))
147
fileops.add([directory + '/' + filename])
148
except errors.NotBranchError:
149
self.dialog.error_dialog(_('Directory is not a branch'),
150
_('You can perform this action only in a branch.'))
155
self.comm.refresh_right()
157
def remove_file(self, action):
158
""" Right context menu -> Remove """
159
# Remove only the selected file
160
directory = self.comm.get_path()
161
filename = self.comm.get_selected_right()
164
self.dialog.error_dialog(_('No file was selected'),
165
_('Please select a file from the list,\nor choose the other option.'))
169
fileops.remove([directory + '/' + filename])
170
except errors.NotBranchError:
171
self.dialog.error_dialog(_('Directory is not a branch'),
172
_('You can perform this action only in a branch.'))
174
except errors.NotVersionedError:
175
self.dialog.error_dialog(_('File not versioned'),
176
_('The selected file is not versioned.'))
181
self.comm.refresh_right()
183
def open_file(self, action):
184
""" Right context menu -> Open """
185
# Open only the selected file
186
filename = self.comm.get_selected_right()
189
self.dialog.error_dialog(_('No file was selected'),
190
_('Please select a file from the list,\nor choose the other option.'))
194
self.comm.set_path(os.path.split(self.comm.get_path())[0])
196
fullpath = self.comm.get_path() + os.sep + filename
197
if os.path.isdir(fullpath):
198
# selected item is an existant directory
199
self.comm.set_path(fullpath)
203
self.comm.refresh_right()
205
def commit(self, action):
206
""" Right context menu -> Commit """
207
from commit import OliveCommit
208
commit = OliveCommit(self.gladefile, self.comm, self.dialog)
211
def diff(self, action):
212
""" Right context menu -> Diff """
213
from diff import OliveDiff
214
diff = OliveDiff(self.gladefile, self.comm, self.dialog)
217
def bookmark(self, action):
218
""" Right context menu -> Bookmark """
219
if self.comm.pref.add_bookmark(self.comm.get_path()):
220
self.dialog.info_dialog(_('Bookmark successfully added'),
221
_('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
223
self.dialog.warning_dialog(_('Location already bookmarked'),
224
_('The current directory is already bookmarked.\nSee the left panel for reference.'))
226
self.comm.refresh_left()
228
def edit_bookmark(self, action):
229
""" Left context menu -> Edit """
230
from bookmark import OliveBookmark
232
if self.comm.get_selected_left() != None:
233
bookmark = OliveBookmark(self.gladefile, self.comm, self.dialog)
236
def remove_bookmark(self, action):
237
""" Left context menu -> Remove """
239
if self.comm.get_selected_left() != None:
240
self.comm.pref.remove_bookmark(self.comm.get_selected_left())
241
self.comm.refresh_left()
243
def open_folder(self, action):
244
""" Left context menu -> Open Folder """
245
path = self.comm.get_selected_left()
250
def diff_selected(self, action):
251
""" Diff toolbutton -> Selected... """
252
print "DEBUG: not implemented."
254
def diff_all(self, action):
255
""" Diff toolbutton -> All... """
256
from diff import OliveDiff
257
diff = OliveDiff(self.gladefile, self.comm, self.dialog)