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
30
from olive.backend.info import is_branch
31
import olive.backend.errors as errors
33
from dialog import OliveDialog
34
from menu import OliveMenu
37
""" Signal handler class for Olive. """
38
def __init__(self, gladefile, comm):
39
self.gladefile = gladefile
42
self.dialog = OliveDialog(self.gladefile)
44
self.menu = OliveMenu(self.gladefile, self.comm, self.dialog)
46
def on_about_activate(self, widget):
49
def on_menuitem_add_files_activate(self, widget):
50
""" Add file(s)... menu handler. """
51
from add import OliveAdd
52
add = OliveAdd(self.gladefile, self.comm, self.dialog)
55
def on_menuitem_branch_get_activate(self, widget):
56
""" Branch/Get... menu handler. """
57
from branch import OliveBranch
58
branch = OliveBranch(self.gladefile, self.comm, self.dialog)
61
def on_menuitem_branch_checkout_activate(self, widget):
62
""" Branch/Checkout... menu handler. """
63
from checkout import OliveCheckout
64
checkout = OliveCheckout(self.gladefile, self.comm, self.dialog)
67
def on_menuitem_branch_commit_activate(self, widget):
68
""" Branch/Commit... menu handler. """
69
from commit import OliveCommit
70
commit = OliveCommit(self.gladefile, self.comm, self.dialog)
73
def on_menuitem_branch_pull_activate(self, widget):
74
""" Branch/Pull menu handler. """
75
import olive.backend.update as update
77
self.comm.set_busy(self.comm.window_main)
80
ret = update.pull(self.comm.get_path())
81
except errors.NotBranchError:
82
self.dialog.error_dialog(_('Directory is not a branch'),
83
_('You can perform this action only in a branch.'))
84
except errors.NoLocationKnown:
85
self.dialog.error_dialog(_('Parent location is unknown'),
86
_('Pulling is not possible until there is no parent location.'))
88
self.dialog.info_dialog(_('Pull successful'),
89
_('%d revision(s) pulled.') % ret)
91
self.comm.set_busy(self.comm.window_main, False)
93
def on_menuitem_branch_push_activate(self, widget):
94
""" Branch/Push... menu handler. """
95
from push import OlivePush
96
push = OlivePush(self.gladefile, self.comm, self.dialog)
99
def on_menuitem_branch_status_activate(self, widget):
100
""" Branch/Status... menu handler. """
101
from status import OliveStatus
102
status = OliveStatus(self.gladefile, self.comm, self.dialog)
105
def on_menuitem_branch_initialize_activate(self, widget):
106
""" Initialize current directory. """
107
import olive.backend.init as init
110
init.init(self.comm.get_path())
111
except errors.AlreadyBranchError, errmsg:
112
self.dialog.error_dialog(_('Directory is already a branch'),
113
_('The current directory (%s) is already a branch.\nYou can start using it, or initialize another directory.') % errmsg)
114
except errors.BranchExistsWithoutWorkingTree, errmsg:
115
self.dialog.error_dialog(_('Branch without a working tree'),
116
_('The current directory (%s)\nis a branch without a working tree.') % errmsg)
120
self.dialog.info_dialog(_('Ininialize successful'),
121
_('Directory successfully initialized.'))
122
self.comm.refresh_right()
124
def on_menuitem_file_make_directory_activate(self, widget):
125
""" File/Make directory... menu handler. """
126
from mkdir import OliveMkdir
127
mkdir = OliveMkdir(self.gladefile, self.comm, self.dialog)
130
def on_menuitem_file_move_activate(self, widget):
131
""" File/Move... menu handler. """
132
from move import OliveMove
133
move = OliveMove(self.gladefile, self.comm, self.dialog)
136
def on_menuitem_file_rename_activate(self, widget):
137
""" File/Rename... menu handler. """
138
from rename import OliveRename
139
rename = OliveRename(self.gladefile, self.comm, self.dialog)
142
def on_menuitem_remove_file_activate(self, widget):
143
""" Remove (unversion) selected file. """
144
from remove import OliveRemove
145
remove = OliveRemove(self.gladefile, self.comm, self.dialog)
148
def on_menuitem_stats_diff_activate(self, widget):
149
""" Statistics/Differences... menu handler. """
150
from diff import OliveDiff
151
diff = OliveDiff(self.gladefile, self.comm, self.dialog)
154
def on_menuitem_stats_infos_activate(self, widget):
155
""" Statistics/Informations... menu handler. """
156
from info import OliveInfo
157
info = OliveInfo(self.gladefile, self.comm, self.dialog)
160
def on_menuitem_stats_log_activate(self, widget):
161
""" Statistics/Log... menu handler. """
162
from log import OliveLog
163
log = OliveLog(self.gladefile, self.comm, self.dialog)
166
def on_menuitem_view_refresh_activate(self, widget):
167
""" View/Refresh menu handler. """
168
# Refresh the left pane
169
self.comm.refresh_left()
170
# Refresh the right pane
171
self.comm.refresh_right()
173
def on_menuitem_view_show_hidden_files_activate(self, widget):
174
""" View/Show hidden files menu handler. """
175
if widget.get_active():
177
self.comm.pref.set_preference('dotted_files', True)
178
self.comm.pref.refresh()
179
self.comm.refresh_right()
181
# Do not show hidden files
182
self.comm.pref.set_preference('dotted_files', False)
183
self.comm.pref.refresh()
184
self.comm.refresh_right()
186
def on_treeview_left_button_press_event(self, widget, event):
187
""" Occurs when somebody right-clicks in the bookmark list. """
188
if event.button == 3:
189
self.menu.left_context_menu().popup(None, None, None, 0,
192
def on_treeview_left_row_activated(self, treeview, path, view_column):
193
""" Occurs when somebody double-clicks or enters an item in the
195
self.comm.set_busy(treeview)
197
newdir = self.comm.get_selected_left()
198
self.comm.set_path(newdir)
200
self.comm.refresh_right()
202
self.comm.set_busy(treeview, False)
204
def on_treeview_right_button_press_event(self, widget, event):
205
""" Occurs when somebody right-clicks in the file list. """
206
if event.button == 3:
208
m_add = self.menu.ui.get_widget('/context_right/add')
209
m_remove = self.menu.ui.get_widget('/context_right/remove')
210
m_commit = self.menu.ui.get_widget('/context_right/commit')
211
m_diff = self.menu.ui.get_widget('/context_right/diff')
212
# check if we're in a branch
213
if not is_branch(self.comm.get_path()):
214
m_add.set_sensitive(False)
215
m_remove.set_sensitive(False)
216
m_commit.set_sensitive(False)
217
m_diff.set_sensitive(False)
219
m_add.set_sensitive(True)
220
m_remove.set_sensitive(True)
221
m_commit.set_sensitive(True)
222
m_diff.set_sensitive(True)
223
self.menu.right_context_menu().popup(None, None, None, 0,
226
def on_treeview_right_row_activated(self, treeview, path, view_column):
227
""" Occurs when somebody double-clicks or enters an item in the
231
newdir = self.comm.get_selected_right()
234
self.comm.set_path(os.path.split(self.comm.get_path())[0])
236
fullpath = self.comm.get_path() + '/' + newdir
237
if os.path.isdir(fullpath):
238
# selected item is an existant directory
239
self.comm.set_path(fullpath)
241
if sys.platform == 'win32':
242
# open the file with the default application
243
os.startfile(fullpath)
245
# TODO: support other OSes
246
print "DEBUG: double-click on non-Win32 platforms not supported."
248
self.comm.refresh_right()
250
def on_window_main_delete_event(self, widget, event=None):
251
""" Do some stuff before exiting. """
252
width, height = self.comm.window_main.get_size()
253
self.comm.pref.set_preference('window_width', width)
254
self.comm.pref.set_preference('window_height', height)
255
x, y = self.comm.window_main.get_position()
256
self.comm.pref.set_preference('window_x', x)
257
self.comm.pref.set_preference('window_y', y)
258
self.comm.pref.set_preference('paned_position',
259
self.comm.hpaned_main.get_position())
261
self.comm.pref.write()
262
self.comm.window_main.destroy()
264
def not_implemented(self, widget):
265
""" Display a Not implemented error message. """
266
self.dialog.error_dialog(_('We feel sorry'),
267
_('This feature is not yet implemented.'))