/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/menu.py

  • Committer: Aaron Bentley
  • Date: 2007-01-17 06:42:55 UTC
  • mto: This revision was merged to the branch mainline in revision 129.
  • Revision ID: aaron.bentley@utoronto.ca-20070117064255-x4gznz5e0lyjq3gk
Remove usused span selector

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
2
 
 
 
2
#
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.
7
 
 
 
7
#
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.
12
 
 
 
12
#
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")
23
23
except:
24
24
    pass
25
 
try:
26
 
    import gtk
27
 
    import gtk.glade
28
 
except:
29
 
    sys.exit(1)
30
 
 
31
 
import olive.backend.fileops as fileops
32
 
import olive.backend.errors as errors
 
25
 
 
26
import gtk
 
27
 
 
28
import bzrlib.errors as errors
 
29
from bzrlib.workingtree import WorkingTree
 
30
 
 
31
from dialog import error_dialog, info_dialog, warning_dialog
 
32
from launch import launch
 
33
from olive import OlivePreferences, DiffWindow
33
34
 
34
35
class OliveMenu:
35
36
    """ This class is responsible for building the context menus. """
36
 
    def __init__(self, gladefile, comm, dialog):
 
37
    def __init__(self, path, selected, app=None):
37
38
        # Load the UI file
38
 
        self.uifile = "/usr/share/olive/cmenu.ui"
39
 
        if not os.path.exists(self.uifile):
40
 
            # Load from current directory if not installed
41
 
            self.uifile = "cmenu.ui"
 
39
        from guifiles import UIFILENAME
 
40
 
 
41
        self.uifile = UIFILENAME
 
42
 
 
43
        # Preferences handler
 
44
        self.pref = OlivePreferences()
42
45
        
43
 
        self.gladefile = gladefile
44
 
        self.comm = comm
45
 
        self.dialog = dialog
 
46
        # Set default values
 
47
        self.path = path
 
48
        self.selected = selected
 
49
        self.app = app
46
50
        
47
51
        # Create the file list context menu
48
52
        self.ui = gtk.UIManager()
49
53
        
50
54
        self.actiongroup = gtk.ActionGroup('context')
51
55
        self.actiongroup.add_actions([('add', gtk.STOCK_ADD,
52
 
                                       'Add', None,
53
 
                                       'Add the selected file',
 
56
                                       _('Add'), None,
 
57
                                       _('Add the selected file'),
54
58
                                       self.add_file),
55
59
                                      ('remove', gtk.STOCK_REMOVE,
56
 
                                       'Remove', None,
57
 
                                       'Remove the selected file',
 
60
                                       _('Remove'), None,
 
61
                                       _('Remove the selected file'),
58
62
                                       self.remove_file),
 
63
                                      ('rename', None,
 
64
                                       _('Rename'), None,
 
65
                                       _('Rename the selected file'),
 
66
                                       self.rename_file),
 
67
                                      ('open', gtk.STOCK_OPEN,
 
68
                                       _('Open'), None,
 
69
                                       _('Open the selected file'),
 
70
                                       self.open_file),
59
71
                                      ('commit', None,
60
 
                                       'Commit', None,
61
 
                                       'Commit the changes',
 
72
                                       _('Commit'), None,
 
73
                                       _('Commit the changes'),
62
74
                                       self.commit),
63
75
                                      ('diff', None,
64
 
                                       'Diff', None,
65
 
                                       'Show the diff of the file',
 
76
                                       _('Diff'), None,
 
77
                                       _('Show the diff of the file'),
66
78
                                       self.diff),
67
 
                                      ('log', None,
68
 
                                       'Log', None,
69
 
                                       'Show the log of the file',
70
 
                                       self.log),
71
79
                                      ('bookmark', None,
72
 
                                       'Bookmark', None,
73
 
                                       'Bookmark current location',
 
80
                                       _('Bookmark'), None,
 
81
                                       _('Bookmark current location'),
74
82
                                       self.bookmark),
 
83
                                      ('edit_bookmark', gtk.STOCK_EDIT,
 
84
                                       _('Edit'), None,
 
85
                                       _('Edit the selected bookmark'),
 
86
                                       self.edit_bookmark),
75
87
                                      ('remove_bookmark', gtk.STOCK_REMOVE,
76
 
                                       'Remove', None,
77
 
                                       'Remove the selected bookmark',
78
 
                                       self.remove_bookmark)
 
88
                                       _('Remove'), None,
 
89
                                       _('Remove the selected bookmark'),
 
90
                                       self.remove_bookmark),
 
91
                                      ('open_folder', gtk.STOCK_OPEN,
 
92
                                       _('Open Folder'), None,
 
93
                                       _('Open bookmark folder in Nautilus'),
 
94
                                       self.open_folder),
 
95
                                      ('diff_selected', None,
 
96
                                       _('Selected...'), None,
 
97
                                       _('Show the differences of the selected file'),
 
98
                                       self.diff_selected),
 
99
                                      ('diff_all', None,
 
100
                                       _('All...'), None,
 
101
                                       _('Show the differences of all files'),
 
102
                                       self.diff_all)
79
103
                                     ])
80
104
        
81
105
        self.ui.insert_action_group(self.actiongroup, 0)
82
106
        self.ui.add_ui_from_file(self.uifile)
83
107
        
84
108
        self.cmenu_right = self.ui.get_widget('/context_right')
85
 
        
86
109
        self.cmenu_left = self.ui.get_widget('/context_left')
 
110
        self.toolbar_diff = self.ui.get_widget('/toolbar_diff')
87
111
        
88
112
        # Set icons
89
 
        commit_menu = self.ui.get_widget('/context_right/commit')
90
 
        commit_image = self.comm.menuitem_branch_commit.get_image()
91
 
        commit_pixbuf = commit_image.get_pixbuf()
92
 
        commit_icon = gtk.Image()
93
 
        commit_icon.set_from_pixbuf(commit_pixbuf)
94
 
        commit_menu.set_image(commit_icon)
95
 
        diff_menu = self.ui.get_widget('/context_right/diff')
96
 
        diff_image = self.comm.menuitem_stats_diff.get_image()
97
 
        diff_pixbuf = diff_image.get_pixbuf()
98
 
        diff_icon = gtk.Image()
99
 
        diff_icon.set_from_pixbuf(diff_pixbuf)
100
 
        diff_menu.set_image(diff_icon)
101
 
        log_menu = self.ui.get_widget('/context_right/log')
102
 
        log_image = self.comm.menuitem_stats_log.get_image()
103
 
        log_pixbuf = log_image.get_pixbuf()
104
 
        log_icon = gtk.Image()
105
 
        log_icon.set_from_pixbuf(log_pixbuf)
106
 
        log_menu.set_image(log_icon)
 
113
        # TODO: do it without using deprecated comm
 
114
        #commit_menu = self.ui.get_widget('/context_right/commit')
 
115
        #commit_image = self.comm.menuitem_branch_commit.get_image()
 
116
        #commit_pixbuf = commit_image.get_pixbuf()
 
117
        #commit_icon = gtk.Image()
 
118
        #commit_icon.set_from_pixbuf(commit_pixbuf)
 
119
        #commit_menu.set_image(commit_icon)
 
120
        #diff_menu = self.ui.get_widget('/context_right/diff')
 
121
        #diff_image = self.comm.menuitem_stats_diff.get_image()
 
122
        #diff_pixbuf = diff_image.get_pixbuf()
 
123
        #diff_icon = gtk.Image()
 
124
        #diff_icon.set_from_pixbuf(diff_pixbuf)
 
125
        #diff_menu.set_image(diff_icon)
107
126
 
108
127
    def right_context_menu(self):
109
128
        return self.cmenu_right
113
132
    
114
133
    def add_file(self, action):
115
134
        """ Right context menu -> Add """
 
135
        import bzrlib.add
 
136
        
116
137
        # Add only the selected file
117
 
        directory = self.comm.get_path()
118
 
        filename = self.comm.get_selected_right()
 
138
        directory = self.path
 
139
        filename = self.selected
119
140
            
120
141
        if filename is None:
121
 
            self.dialog.error_dialog('No file was selected',
122
 
                                     'Please select a file from the list,\nor choose the other option.')
 
142
            error_dialog(_('No file was selected'),
 
143
                         _('Please select a file from the list,\nor choose the other option.'))
123
144
            return
124
145
        
125
146
        try:
126
 
            fileops.add([directory + '/' + filename])
 
147
            bzrlib.add.smart_add([os.path.join(directory, filename)])
127
148
        except errors.NotBranchError:
128
 
            self.dialog.error_dialog('Directory is not a branch',
129
 
                                     'You can perform this action only in a branch.')
 
149
            error_dialog(_('Directory is not a branch'),
 
150
                         _('You can perform this action only in a branch.'))
130
151
            return
131
 
        except:
132
 
            raise
133
 
        
134
 
        self.comm.refresh_right()
135
152
    
136
153
    def remove_file(self, action):
137
154
        """ Right context menu -> Remove """
138
155
        # Remove only the selected file
139
 
        directory = self.comm.get_path()
140
 
        filename = self.comm.get_selected_right()
 
156
        directory = self.path
 
157
        filename = self.selected
141
158
        
142
159
        if filename is None:
143
 
            self.dialog.error_dialog('No file was selected',
144
 
                                     'Please select a file from the list,\nor choose the other option.')
 
160
            error_dialog(_('No file was selected'),
 
161
                         _('Please select a file from the list,\nor choose the other option.'))
145
162
            return
146
163
        
147
164
        try:
148
 
            fileops.remove([directory + '/' + filename])
 
165
            wt, path = WorkingTree.open_containing(os.path.join(directory, filename))
 
166
            wt.remove(path)
 
167
 
149
168
        except errors.NotBranchError:
150
 
            self.dialog.error_dialog('Directory is not a branch',
151
 
                                     'You can perform this action only in a branch.')
 
169
            error_dialog(_('Directory is not a branch'),
 
170
                         _('You can perform this action only in a branch.'))
152
171
            return
153
172
        except errors.NotVersionedError:
154
 
            self.dialog.error_dialog('File not versioned',
155
 
                                     'The selected file is not versioned.')
 
173
            error_dialog(_('File not versioned'),
 
174
                         _('The selected file is not versioned.'))
156
175
            return
157
 
        except:
158
 
            raise
 
176
 
 
177
        self.app.set_path(self.path)
 
178
        self.app.refresh_right()
 
179
 
 
180
    def rename_file(self, action):
 
181
        """ Right context menu -> Rename """
 
182
        from rename import OliveRename
 
183
        wt = WorkingTree.open_containing(self.path + os.sep + self.selected)[0]
 
184
        rename = OliveRename(wt, wt.relpath(self.path), self.selected)
 
185
        rename.display()
 
186
    
 
187
    def open_file(self, action):
 
188
        """ Right context menu -> Open """
 
189
        # Open only the selected file
 
190
        filename = self.selected
159
191
        
160
 
        self.comm.refresh_right()
 
192
        if filename is None:
 
193
            error_dialog(_('No file was selected'),
 
194
                         _('Please select a file from the list,\nor choose the other option.'))
 
195
            return
 
196
 
 
197
        if filename == '..':
 
198
            # TODO: how to enter a directory?
 
199
            return
 
200
        else:
 
201
            fullpath = self.path + os.sep + filename
 
202
            if os.path.isdir(fullpath):
 
203
                # selected item is an existant directory
 
204
                # TODO: how to enter a directory?
 
205
                return
 
206
            else:
 
207
                launch(fullpath) 
161
208
 
162
209
    def commit(self, action):
163
210
        """ Right context menu -> Commit """
164
 
        from commit import OliveCommit
165
 
        commit = OliveCommit(self.gladefile, self.comm, self.dialog)
 
211
        from commit import CommitDialog
 
212
        branch = None
 
213
        try:
 
214
            wt, path = WorkingTree.open_containing(self.path)
 
215
            branch = wt.branch
 
216
        except NotBranchError, e:
 
217
            path = e.path
 
218
        commit = CommitDialog(wt, path, not branch)
166
219
        commit.display()
167
220
    
168
221
    def diff(self, action):
169
222
        """ Right context menu -> Diff """
170
 
        from diff import OliveDiff
171
 
        diff = OliveDiff(self.gladefile, self.comm, self.dialog)
172
 
        diff.display()
173
 
    
174
 
    def log(self, action):
175
 
        """ Right context menu -> Log """
176
 
        from log import OliveLog
177
 
        log = OliveLog(self.gladefile, self.comm, self.dialog)
178
 
        log.display()
 
223
        try:
 
224
            wt = WorkingTree.open_containing(self.path)[0]
 
225
        except errors.NotBranchError:
 
226
            error_dialog(_('File is not in a branch'),
 
227
                         _('The selected file is not in a branch.'))
 
228
            return
 
229
        
 
230
        window = DiffWindow()
 
231
        parent_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
 
232
        window.set_diff(wt.branch.nick, wt, parent_tree)
 
233
        try:
 
234
            window.set_file(wt.relpath(self.path + os.sep + self.selected))
 
235
        except errors.NoSuchFile:
 
236
            pass
 
237
        window.show()
179
238
    
180
239
    def bookmark(self, action):
181
240
        """ Right context menu -> Bookmark """
182
 
        if self.comm.pref.add_bookmark(self.comm.get_path()):
183
 
            self.dialog.info_dialog('Bookmark successfully added',
184
 
                                    'The current directory was bookmarked. You can reach\nit by selecting it from the left panel.')
 
241
        if self.pref.add_bookmark(self.path):
 
242
            info_dialog(_('Bookmark successfully added'),
 
243
                        _('The current directory was bookmarked. You can reach\nit by selecting it from the left panel.'))
 
244
            self.pref.write()
185
245
        else:
186
 
            self.dialog.warning_dialog('Location already bookmarked'
187
 
                                       'The current directory is already bookmarked.\nSee the left panel for reference.')
188
 
        
189
 
        self.comm.refresh_left()
 
246
            warning_dialog(_('Location already bookmarked'),
 
247
                           _('The current directory is already bookmarked.\nSee the left panel for reference.'))
 
248
        
 
249
        self.app.refresh_left()
 
250
 
 
251
    def edit_bookmark(self, action):
 
252
        """ Left context menu -> Edit """
 
253
        from bookmark import OliveBookmarkDialog
 
254
        
 
255
        if self.selected != None:
 
256
            bookmark = OliveBookmarkDialog(self.selected, self.app.window)
 
257
            response = bookmark.run()
 
258
            
 
259
            if response != gtk.RESPONSE_NONE:
 
260
                bookmark.hide()
 
261
        
 
262
                if response == gtk.RESPONSE_OK:
 
263
                    self.app.refresh_left()
 
264
            
 
265
                bookmark.destroy()
190
266
 
191
267
    def remove_bookmark(self, action):
192
268
        """ Left context menu -> Remove """
193
 
        self.comm.pref.remove_bookmark(self.comm.get_selected_left())
194
 
        
195
 
        self.comm.refresh_left()
 
269
        
 
270
        if self.selected != None:
 
271
            self.pref.remove_bookmark(self.selected)
 
272
            self.pref.write()
 
273
        
 
274
        self.app.refresh_left()
 
275
    
 
276
    def open_folder(self, action):
 
277
        """ Left context menu -> Open Folder """
 
278
        path = self.selected
 
279
 
 
280
        if path != None:
 
281
            launch(path)
 
282
    
 
283
    def diff_selected(self, action):
 
284
        """ Diff toolbutton -> Selected... """
 
285
        print "DEBUG: not implemented."
 
286
    
 
287
    def diff_all(self, action):
 
288
        """ Diff toolbutton -> All... """
 
289
        from diff import OliveDiff
 
290
        diff = OliveDiff(self.comm)
 
291
        diff.display()