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.dialog import error_dialog, warning_dialog
31
from guifiles import GLADEFILENAME
30
import olive.backend.errors as errors
31
import olive.backend.fileops as fileops
35
34
""" Display the Remove file(s) dialog and perform the needed actions. """
36
def __init__(self, wt, wtpath, selected=[]):
35
def __init__(self, gladefile, comm, dialog):
37
36
""" Initialize the Remove file(s) dialog. """
38
self.glade = gtk.glade.XML(GLADEFILENAME, 'window_remove')
37
self.gladefile = gladefile
38
self.glade = gtk.glade.XML(self.gladefile, 'window_remove')
40
# Communication object
40
45
self.window = self.glade.get_widget('window_remove')
46
51
# Connect the signals to the handlers
47
52
self.glade.signal_autoconnect(dic)
51
self.selected = selected
54
55
""" Display the Remove file(s) dialog. """
55
56
self.window.show_all()
58
58
def remove(self, widget):
59
59
radio_selected = self.glade.get_widget('radiobutton_remove_selected')
60
60
radio_new = self.glade.get_widget('radiobutton_remove_new')
62
directory = self.comm.get_path()
64
self.comm.set_busy(self.window)
62
65
if radio_selected.get_active():
63
66
# Remove only the selected file
64
filename = self.selected
67
filename = self.comm.get_selected_right()
66
69
if filename is None:
67
error_dialog(_('No file was selected'),
68
_('Please select a file from the list,\nor choose the other option.'))
71
fullpath = self.wt.abspath(os.path.join(self.wtpath, filename))
73
self.wt.remove(fullpath)
70
self.dialog.error_dialog(_('No file was selected'),
71
_('Please select a file from the list,\nor choose the other option.'))
75
fileops.remove([directory + '/' + filename])
76
except errors.NotBranchError:
77
self.dialog.error_dialog(_('Directory is not a branch'),
78
_('You can perform this action only in a branch.'))
79
self.comm.set_busy(self.window, False)
81
except errors.NotVersionedError:
82
self.dialog.error_dialog(_('File not versioned'),
83
_('The selected file is not versioned.'))
84
self.comm.set_busy(self.window, False)
74
88
elif radio_new.get_active():
75
89
# Remove added files recursively
76
added = self.wt.changes_from(self.wt.basis_tree()).added
77
file_list = sorted([f[0] for f in added], reverse=True)
78
if len(file_list) == 0:
79
warning_dialog(_('No matching files'),
80
_('No added files were found in the working tree.'))
91
fileops.remove([directory], True)
92
except errors.NotBranchError:
93
self.dialog.error_dialog(_('Directory is not a branch'),
94
_('You can perform this action only in a branch.'))
95
self.comm.set_busy(self.window, False)
82
self.wt.remove(file_list)
97
except errors.NoMatchingFiles:
98
dialog.warning_dialog(_('No matching files'),
99
_('No added files were found in the working tree.'))
100
self.comm.set_busy(self.window, False)
104
# This should really never happen.
108
self.comm.refresh_right()
86
110
def close(self, widget=None):
87
111
self.window.destroy()
89
class OliveRemoveDialog(gtk.Dialog):
90
""" This class wraps the old Remove window into a gtk.Dialog. """
92
def __init__(self, wt, wtpath, selected=[], parent=None):
93
""" Initialize the Remove file(s) dialog. """
94
gtk.Dialog.__init__(self, title="Remove files - Olive",
97
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
102
self.selected = selected
105
self._label = gtk.Label(_("Which file(s) do you want to remove?"))
106
self._radio_selected = gtk.RadioButton(None, _("Selected only"), False)
107
self._radio_added = gtk.RadioButton(self._radio_selected, _("All files with status 'added'"), False)
108
self._button_remove = gtk.Button(_("_Remove"), use_underline=True)
110
self._button_remove.connect('clicked', self._on_remove_clicked)
112
self.vbox.pack_start(self._label)
113
self.vbox.pack_end(self._radio_added)
114
self.vbox.pack_end(self._radio_selected)
116
self.action_area.pack_end(self._button_remove)
118
self.vbox.set_spacing(3)
122
def _on_remove_clicked(self, button):
123
""" Remove button clicked handler. """
124
if self._radio_selected.get_active():
125
# Remove only the selected file
126
filename = self.selected
129
error_dialog(_('No file was selected'),
130
_('Please select a file from the list,\nor choose the other option.'))
133
self.wt.remove(os.path.join(self.wtpath, filename))
134
elif self._radio_added.get_active():
135
# Remove added files recursively
136
added = self.wt.changes_from(self.wt.basis_tree()).added
137
file_list = sorted([f[0] for f in added], reverse=True)
138
if len(file_list) == 0:
139
warning_dialog(_('No matching files'),
140
_('No added files were found in the working tree.'))
142
self.wt.remove(file_list)
144
self.response(gtk.RESPONSE_OK)