28
28
import bzrlib.errors as errors
29
from dialog import error_dialog
29
from bzrlib.workingtree import WorkingTree
31
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog
32
from bzrlib.plugins.gtk.errors import show_bzr_error
33
from bzrlib.plugins.gtk.annotate.gannotate import GAnnotateWindow
34
from bzrlib.plugins.gtk.annotate.config import GAnnotateConfig
35
from bzrlib.plugins.gtk.diff import DiffWindow
31
36
from launch import launch
37
from olive import Preferences
34
40
""" This class is responsible for building the context menus. """
41
def __init__(self, path, selected, app=None):
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"
43
from guifiles import UIFILENAME
45
self.uifile = UIFILENAME
48
self.pref = Preferences()
42
if not os.path.exists(self.uifile):
43
# Load from current directory if not installed
44
self.uifile = "cmenu.ui"
46
if not os.path.exists(self.uifile):
48
print _('UI description file cannot be found.')
52
self.selected = selected
51
55
# Create the file list context menu
52
56
self.ui = gtk.UIManager()
104
132
self.cmenu_right = self.ui.get_widget('/context_right')
105
133
self.cmenu_left = self.ui.get_widget('/context_left')
106
134
self.toolbar_diff = self.ui.get_widget('/toolbar_diff')
135
self.cmenu_remote = self.ui.get_widget('/context_remote')
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)
138
# TODO: do it without using deprecated comm
139
#commit_menu = self.ui.get_widget('/context_right/commit')
140
#commit_image = self.comm.menuitem_branch_commit.get_image()
141
#commit_pixbuf = commit_image.get_pixbuf()
142
#commit_icon = gtk.Image()
143
#commit_icon.set_from_pixbuf(commit_pixbuf)
144
#commit_menu.set_image(commit_icon)
145
#diff_menu = self.ui.get_widget('/context_right/diff')
146
#diff_image = self.comm.menuitem_stats_diff.get_image()
147
#diff_pixbuf = diff_image.get_pixbuf()
148
#diff_icon = gtk.Image()
149
#diff_icon.set_from_pixbuf(diff_pixbuf)
150
#diff_menu.set_image(diff_icon)
122
152
def right_context_menu(self):
123
153
return self.cmenu_right
125
155
def left_context_menu(self):
126
156
return self.cmenu_left
158
def remote_context_menu(self):
159
return self.cmenu_remote
128
162
def add_file(self, action):
129
163
""" Right context menu -> Add """
130
166
# Add only the selected file
131
directory = self.comm.get_path()
132
filename = self.comm.get_selected_right()
167
directory = self.path
168
filename = self.selected
134
170
if filename is None:
135
171
error_dialog(_('No file was selected'),
136
172
_('Please select a file from the list,\nor choose the other option.'))
175
bzrlib.add.smart_add([os.path.join(directory, filename)])
178
def annotate(self, action):
179
""" Right context menu -> Annotate """
180
directory = self.path
181
filename = self.selected
184
error_dialog(_('No file was selected'),
185
_('Please select a file from the list.'))
188
wt, path = WorkingTree.open_containing(os.path.join(directory, filename))
191
file_id = wt.path2id(wt.relpath(os.path.join(directory, filename)))
193
window = GAnnotateWindow(all=False, plain=False)
194
window.set_title(os.path.join(directory, filename) + " - Annotate")
195
config = GAnnotateConfig(window)
140
bzrlib.add.smart_add([directory + '/' + filename])
141
except errors.NotBranchError:
142
error_dialog(_('Directory is not a branch'),
143
_('You can perform this action only in a branch.'))
146
self.comm.refresh_right()
199
window.annotate(wt, branch, file_id)
148
204
def remove_file(self, action):
149
205
""" Right context menu -> Remove """
150
206
# Remove only the selected file
151
directory = self.comm.get_path()
152
filename = self.comm.get_selected_right()
207
directory = self.path
208
filename = self.selected
154
210
if filename is None:
155
211
error_dialog(_('No file was selected'),
156
212
_('Please select a file from the list,\nor choose the other option.'))
160
wt, path = WorkingTree.open_containing(directory+'/'+filename)
163
except errors.NotBranchError:
164
error_dialog(_('Directory is not a branch'),
165
_('You can perform this action only in a branch.'))
167
except errors.NotVersionedError:
168
error_dialog(_('File not versioned'),
169
_('The selected file is not versioned.'))
172
self.comm.refresh_right()
215
wt, path = WorkingTree.open_containing(os.path.join(directory, filename))
217
self.app.set_path(self.path)
218
self.app.refresh_right()
220
def rename_file(self, action):
221
""" Right context menu -> Rename """
222
from rename import OliveRename
223
wt = WorkingTree.open_containing(self.path + os.sep + self.selected)[0]
224
rename = OliveRename(wt, wt.relpath(self.path), self.selected)
174
227
def open_file(self, action):
175
228
""" Right context menu -> Open """
176
229
# Open only the selected file
177
filename = self.comm.get_selected_right()
230
filename = self.selected
179
232
if filename is None:
180
233
error_dialog(_('No file was selected'),
181
_('Please select a file from the list,\nor choose the other option.'))
234
_('Please select a file from the list,\nor choose the other option.'))
184
237
if filename == '..':
185
self.comm.set_path(os.path.split(self.comm.get_path())[0])
238
# TODO: how to enter a directory?
187
fullpath = self.comm.get_path() + os.sep + filename
241
fullpath = self.path + os.sep + filename
188
242
if os.path.isdir(fullpath):
189
243
# selected item is an existant directory
190
self.comm.set_path(fullpath)
244
# TODO: how to enter a directory?
194
self.comm.refresh_right()
249
def revert(self, action):
250
""" Right context menu -> Revert """
251
wt, path = WorkingTree.open_containing(self.path)
252
ret = wt.revert([os.path.join(path, self.selected)])
254
warning_dialog(_('Conflicts detected'),
255
_('Please have a look at the working tree before continuing.'))
257
info_dialog(_('Revert successful'),
258
_('All files reverted to last revision.'))
259
self.app.refresh_right()
196
261
def commit(self, action):
197
262
""" Right context menu -> Commit """
198
from commit import OliveCommit
199
wt, path = WorkingTree.open_containing(self.comm.get_path())
200
commit = OliveCommit(wt, path)
263
from commit import CommitDialog
266
wt, path = WorkingTree.open_containing(self.path)
268
except NotBranchError, e:
271
commit = CommitDialog(wt, path, not branch, self.selected)
272
response = commit.run()
273
if response != gtk.RESPONSE_NONE:
276
if response == gtk.RESPONSE_OK:
277
self.app.refresh_right()
203
282
def diff(self, action):
204
283
""" Right context menu -> Diff """
205
from diff import OliveDiff
206
diff = OliveDiff(self.comm)
284
wt = WorkingTree.open_containing(self.path)[0]
285
window = DiffWindow()
286
parent_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
287
window.set_diff(wt.branch.nick, wt, parent_tree)
288
window.set_file(wt.relpath(self.path + os.sep + self.selected))
209
291
def bookmark(self, action):
210
292
""" Right context menu -> Bookmark """
211
if self.comm.pref.add_bookmark(self.comm.get_path()):
293
if self.pref.add_bookmark(self.path):
212
294
info_dialog(_('Bookmark successfully added'),
213
_('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
295
_('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
215
298
warning_dialog(_('Location already bookmarked'),
216
_('The current directory is already bookmarked.\nSee the left panel for reference.'))
299
_('The current directory is already bookmarked.\nSee the left panel for reference.'))
218
self.comm.refresh_left()
301
self.app.refresh_left()
220
303
def edit_bookmark(self, action):
221
304
""" Left context menu -> Edit """
222
from bookmark import OliveBookmark
224
if self.comm.get_selected_left() != None:
225
bookmark = OliveBookmark(self.comm)
305
from bookmark import BookmarkDialog
307
if self.selected != None:
308
bookmark = BookmarkDialog(self.selected, self.app.window)
309
response = bookmark.run()
311
if response != gtk.RESPONSE_NONE:
314
if response == gtk.RESPONSE_OK:
315
self.app.refresh_left()
228
319
def remove_bookmark(self, action):
229
320
""" Left context menu -> Remove """
231
if self.comm.get_selected_left() != None:
232
self.comm.pref.remove_bookmark(self.comm.get_selected_left())
233
self.comm.refresh_left()
322
if self.selected != None:
323
self.pref.remove_bookmark(self.selected)
326
self.app.refresh_left()
235
328
def open_folder(self, action):
236
329
""" Left context menu -> Open Folder """
237
path = self.comm.get_selected_left()