1
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
22
pygtk.require("2.0")
28
import bzrlib.errors as errors
29
from dialog import error_dialog
31
from launch import launch
31
import olive.backend.fileops as fileops
32
import olive.backend.errors as errors
34
from commit import OliveCommit
35
from diff import OliveDiff
34
38
""" This class is responsible for building the context menus. """
39
def __init__(self, gladefile, comm, dialog):
37
if sys.platform == 'win32':
38
self.uifile = os.path.dirname(sys.executable) + "/share/olive/cmenu.ui"
40
self.uifile = "/usr/share/olive/cmenu.ui"
41
self.uifile = "/usr/share/olive/cmenu.ui"
42
42
if not os.path.exists(self.uifile):
43
43
# Load from current directory if not installed
44
44
self.uifile = "cmenu.ui"
46
if not os.path.exists(self.uifile):
48
print _('UI description file cannot be found.')
46
self.gladefile = gladefile
51
50
# Create the file list context menu
52
51
self.ui = gtk.UIManager()
54
53
self.actiongroup = gtk.ActionGroup('context')
55
54
self.actiongroup.add_actions([('add', gtk.STOCK_ADD,
57
_('Add the selected file'),
56
'Add the selected file',
59
58
('remove', gtk.STOCK_REMOVE,
61
_('Remove the selected file'),
60
'Remove the selected file',
63
('open', gtk.STOCK_OPEN,
65
_('Open the selected file'),
69
_('Commit the changes'),
62
('commit', gtk.STOCK_REDO,
73
_('Show the diff of the file'),
68
'Show the diff of the file',
72
'Show the log of the file',
77
_('Bookmark current location'),
76
'Bookmark current location',
79
('edit_bookmark', gtk.STOCK_EDIT,
81
_('Edit the selected bookmark'),
83
78
('remove_bookmark', gtk.STOCK_REMOVE,
85
_('Remove the selected bookmark'),
86
self.remove_bookmark),
87
('open_folder', gtk.STOCK_OPEN,
88
_('Open Folder'), None,
89
_('Open bookmark folder in Nautilus'),
91
('diff_selected', None,
92
_('Selected...'), None,
93
_('Show the differences of the selected file'),
97
_('Show the differences of all files'),
80
'Remove the selected bookmark',
101
84
self.ui.insert_action_group(self.actiongroup, 0)
102
85
self.ui.add_ui_from_file(self.uifile)
104
87
self.cmenu_right = self.ui.get_widget('/context_right')
105
89
self.cmenu_left = self.ui.get_widget('/context_left')
106
self.toolbar_diff = self.ui.get_widget('/toolbar_diff')
109
commit_menu = self.ui.get_widget('/context_right/commit')
110
commit_image = self.comm.menuitem_branch_commit.get_image()
111
commit_pixbuf = commit_image.get_pixbuf()
112
commit_icon = gtk.Image()
113
commit_icon.set_from_pixbuf(commit_pixbuf)
114
commit_menu.set_image(commit_icon)
115
diff_menu = self.ui.get_widget('/context_right/diff')
116
diff_image = self.comm.menuitem_stats_diff.get_image()
117
diff_pixbuf = diff_image.get_pixbuf()
118
diff_icon = gtk.Image()
119
diff_icon.set_from_pixbuf(diff_pixbuf)
120
diff_menu.set_image(diff_icon)
122
91
def right_context_menu(self):
123
92
return self.cmenu_right
132
101
filename = self.comm.get_selected_right()
134
103
if filename is None:
135
error_dialog(_('No file was selected'),
136
_('Please select a file from the list,\nor choose the other option.'))
104
self.dialog.error_dialog('No file was selected.')
140
bzrlib.add.smart_add([directory + '/' + filename])
108
fileops.add([directory + '/' + filename])
141
109
except errors.NotBranchError:
142
error_dialog(_('Directory is not a branch'),
143
_('You can perform this action only in a branch.'))
110
self.dialog.error_dialog('The directory is not a branch.')
146
115
self.comm.refresh_right()
152
121
filename = self.comm.get_selected_right()
154
123
if filename is None:
155
error_dialog(_('No file was selected'),
156
_('Please select a file from the list,\nor choose the other option.'))
124
self.dialog.error_dialog('No file was selected.')
160
wt, path = WorkingTree.open_containing(directory+'/'+filename)
128
fileops.remove([directory + '/' + filename])
163
129
except errors.NotBranchError:
164
error_dialog(_('Directory is not a branch'),
165
_('You can perform this action only in a branch.'))
130
self.dialog.error_dialog('The directory is not a branch.')
167
132
except errors.NotVersionedError:
168
error_dialog(_('File not versioned'),
169
_('The selected file is not versioned.'))
172
self.comm.refresh_right()
174
def open_file(self, action):
175
""" Right context menu -> Open """
176
# Open only the selected file
177
filename = self.comm.get_selected_right()
180
error_dialog(_('No file was selected'),
181
_('Please select a file from the list,\nor choose the other option.'))
185
self.comm.set_path(os.path.split(self.comm.get_path())[0])
187
fullpath = self.comm.get_path() + os.sep + filename
188
if os.path.isdir(fullpath):
189
# selected item is an existant directory
190
self.comm.set_path(fullpath)
133
self.dialog.error_dialog('Selected file is not versioned.')
194
138
self.comm.refresh_right()
196
140
def commit(self, action):
197
141
""" Right context menu -> Commit """
198
from commit import OliveCommit
199
wt, path = WorkingTree.open_containing(self.comm.get_path())
200
commit = OliveCommit(wt, path)
142
commit = OliveCommit(self.gladefile, self.comm)
203
145
def diff(self, action):
204
146
""" Right context menu -> Diff """
205
from diff import OliveDiff
206
diff = OliveDiff(self.comm)
147
diff = OliveDiff(self.gladefile, self.comm)
150
def log(self, action):
151
""" Right context menu -> Log """
152
self.dialog.error_dialog('This feature is not yet implemented.')
209
154
def bookmark(self, action):
210
155
""" Right context menu -> Bookmark """
211
156
if self.comm.pref.add_bookmark(self.comm.get_path()):
212
info_dialog(_('Bookmark successfully added'),
213
_('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
157
self.dialog.info_dialog('Bookmark successfully added.')
215
warning_dialog(_('Location already bookmarked'),
216
_('The current directory is already bookmarked.\nSee the left panel for reference.'))
159
self.dialog.warning_dialog('Location already bookmarked.')
218
161
self.comm.refresh_left()
220
def edit_bookmark(self, action):
221
""" Left context menu -> Edit """
222
from bookmark import OliveBookmark
224
if self.comm.get_selected_left() != None:
225
bookmark = OliveBookmark(self.comm)
228
163
def remove_bookmark(self, action):
229
164
""" Left context menu -> Remove """
165
self.comm.pref.remove_bookmark(self.comm.get_selected_left())
231
if self.comm.get_selected_left() != None:
232
self.comm.pref.remove_bookmark(self.comm.get_selected_left())
233
self.comm.refresh_left()
235
def open_folder(self, action):
236
""" Left context menu -> Open Folder """
237
path = self.comm.get_selected_left()
242
def diff_selected(self, action):
243
""" Diff toolbutton -> Selected... """
244
print "DEBUG: not implemented."
246
def diff_all(self, action):
247
""" Diff toolbutton -> All... """
248
from diff import OliveDiff
249
diff = OliveDiff(self.comm)
167
self.comm.refresh_left()