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
21
21
pygtk.require("2.0")
28
import bzrlib.errors as errors
30
from bzrlib.plugins.gtk import _i18n
31
from bzrlib.plugins.gtk.dialog import error_dialog, warning_dialog
32
from guifiles import GLADEFILENAME
30
import olive.backend.errors as errors
31
import olive.backend.fileops as fileops
36
34
""" Display the Remove file(s) dialog and perform the needed actions. """
37
def __init__(self, wt, wtpath, selected=[]):
35
def __init__(self, gladefile, comm):
38
36
""" Initialize the Remove file(s) dialog. """
39
self.glade = gtk.glade.XML(GLADEFILENAME, 'window_remove')
37
self.gladefile = gladefile
38
self.glade = gtk.glade.XML(self.gladefile, 'window_remove')
41
42
self.window = self.glade.get_widget('window_remove')
47
48
# Connect the signals to the handlers
48
49
self.glade.signal_autoconnect(dic)
52
self.selected = selected
55
52
""" Display the Remove file(s) dialog. """
56
53
self.window.show_all()
59
55
def remove(self, widget):
56
from dialog import OliveDialog
57
dialog = OliveDialog(self.gladefile)
60
59
radio_selected = self.glade.get_widget('radiobutton_remove_selected')
61
60
radio_new = self.glade.get_widget('radiobutton_remove_new')
62
directory = self.comm.get_path()
64
self.comm.set_busy(self.window)
63
65
if radio_selected.get_active():
64
66
# Remove only the selected file
65
filename = self.selected
67
filename = self.comm.get_selected_right()
67
69
if filename is None:
68
error_dialog(_i18n('No file was selected'),
69
_i18n('Please select a file from the list,\nor choose the other option.'))
72
fullpath = self.wt.abspath(os.path.join(self.wtpath, filename))
74
self.wt.remove(fullpath)
70
dialog.error_dialog('No file was selected.')
74
fileops.remove([directory + '/' + filename])
75
except errors.NotBranchError:
76
dialog.error_dialog('The directory is not a branch.')
77
self.comm.set_busy(self.window, False)
79
except errors.NotVersionedError:
80
dialog.error_dialog('Selected file is not versioned.')
81
self.comm.set_busy(self.window, False)
75
85
elif radio_new.get_active():
76
# Remove added files recursively
77
added = self.wt.changes_from(self.wt.basis_tree()).added
78
file_list = sorted([f[0] for f in added], reverse=True)
79
if len(file_list) == 0:
80
warning_dialog(_i18n('No matching files'),
81
_i18n('No added files were found in the working tree.'))
86
# Add unknown files recursively
88
fileops.remove([directory], True)
89
except errors.NotBranchError:
90
dialog.error_dialog('The directory is not a branch.')
91
self.comm.set_busy(self.window, False)
83
self.wt.remove(file_list)
93
except errors.NoMatchingFiles:
94
dialog.warning_dialog('No matching files were found.')
95
self.comm.set_busy(self.window, False)
99
# This should really never happen.
103
self.comm.refresh_right()
87
105
def close(self, widget=None):
88
106
self.window.destroy()
90
class OliveRemoveDialog(gtk.Dialog):
91
""" This class wraps the old Remove window into a gtk.Dialog. """
93
def __init__(self, wt, wtpath, selected=[], parent=None):
94
""" Initialize the Remove file(s) dialog. """
95
gtk.Dialog.__init__(self, title="Remove files - Olive",
98
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
103
self.selected = selected
106
self._label = gtk.Label(_i18n("Which file(s) do you want to remove?"))
107
self._radio_selected = gtk.RadioButton(None, _i18n("Selected only"), False)
108
self._radio_added = gtk.RadioButton(self._radio_selected, _i18n("All files with status 'added'"), False)
109
self._button_remove = gtk.Button(_i18n("_Remove"), use_underline=True)
111
self._button_remove.connect('clicked', self._on_remove_clicked)
113
self.vbox.pack_start(self._label)
114
self.vbox.pack_end(self._radio_added)
115
self.vbox.pack_end(self._radio_selected)
117
self.action_area.pack_end(self._button_remove)
119
self.vbox.set_spacing(3)
123
def _on_remove_clicked(self, button):
124
""" Remove button clicked handler. """
125
if self._radio_selected.get_active():
126
# Remove only the selected file
127
filename = self.selected
130
error_dialog(_i18n('No file was selected'),
131
_i18n('Please select a file from the list,\nor choose the other option.'))
134
self.wt.remove(os.path.join(self.wtpath, filename))
135
elif self._radio_added.get_active():
136
# Remove added files recursively
137
added = self.wt.changes_from(self.wt.basis_tree()).added
138
file_list = sorted([f[0] for f in added], reverse=True)
139
if len(file_list) == 0:
140
warning_dialog(_i18n('No matching files'),
141
_i18n('No added files were found in the working tree.'))
143
self.wt.remove(file_list)
145
self.response(gtk.RESPONSE_OK)