28
28
import bzrlib.errors as errors
30
from bzrlib.plugins.gtk.dialog import error_dialog, warning_dialog
31
from guifiles import GLADEFILENAME
29
from bzrlib.workingtree import WorkingTree
31
from olive import gladefile
35
34
""" Display the Remove file(s) dialog and perform the needed actions. """
36
def __init__(self, wt, wtpath, selected=[]):
37
36
""" Initialize the Remove file(s) dialog. """
38
self.glade = gtk.glade.XML(GLADEFILENAME, 'window_remove')
37
self.glade = gtk.glade.XML(gladefile, 'window_remove')
40
39
self.window = self.glade.get_widget('window_remove')
46
45
# Connect the signals to the handlers
47
46
self.glade.signal_autoconnect(dic)
51
self.selected = selected
54
49
""" Display the Remove file(s) dialog. """
55
50
self.window.show_all()
58
52
def remove(self, widget):
59
53
radio_selected = self.glade.get_widget('radiobutton_remove_selected')
60
54
radio_new = self.glade.get_widget('radiobutton_remove_new')
56
directory = self.comm.get_path()
62
58
if radio_selected.get_active():
63
59
# Remove only the selected file
64
filename = self.selected
60
filename = self.comm.get_selected_right()
66
62
if filename is None:
67
63
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)
64
_('Please select a file from the list,\nor choose the other option.'))
68
wt, path = WorkingTree.open_containing(directory + '/' + filename)
70
except errors.NotBranchError:
71
error_dialog(_('Directory is not a branch'),
72
_('You can perform this action only in a branch.'))
74
except errors.NotVersionedError:
75
error_dialog(_('File not versioned'),
76
_('The selected file is not versioned.'))
74
78
elif radio_new.get_active():
75
79
# Remove added files recursively
76
added = self.wt.changes_from(self.wt.basis_tree()).added
81
wt, path = WorkingTree.open_containing(directory)
82
except errors.NotBranchError:
83
error_dialog(_('Directory is not a branch'),
84
_('You can perform this action only in a branch.'))
87
added = wt.changes_from(wt.basis_tree()).added
77
88
file_list = sorted([f[0] for f in added], reverse=True)
78
89
if len(file_list) == 0:
79
warning_dialog(_('No matching files'),
80
_('No added files were found in the working tree.'))
90
dialog.warning_dialog(_('No matching files'),
91
_('No added files were found in the working tree.'))
82
self.wt.remove(file_list)
86
97
def close(self, widget=None):
87
98
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)