27
28
import bzrlib.errors as errors
29
from bzrlib.plugins.gtk import _i18n
30
from bzrlib.plugins.gtk.dialog import error_dialog, warning_dialog
31
from bzrlib.plugins.gtk.errors import show_bzr_error
34
class RemoveDialog(gtk.Dialog):
35
""" This class wraps the old Remove window into a gtk.Dialog. """
37
def __init__(self, wt, wtpath, selected='', parent=None):
29
from bzrlib.workingtree import WorkingTree
31
from olive import gladefile
34
""" Display the Remove file(s) dialog and perform the needed actions. """
38
36
""" Initialize the Remove file(s) dialog. """
39
gtk.Dialog.__init__(self, title="Olive - Remove files",
42
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
47
self.selected = selected
50
self._label = gtk.Label(_i18n("Which file(s) do you want to remove?"))
51
self._radio_selected = gtk.RadioButton(None, _i18n("Selected: %s"%self.selected), False)
52
self._radio_added = gtk.RadioButton(self._radio_selected, _i18n("All files with status 'added'"), False)
53
self._button_remove = gtk.Button(stock=gtk.STOCK_REMOVE)
55
self._button_remove.connect('clicked', self._on_remove_clicked)
57
self.vbox.add(self._label)
58
self.vbox.add(self._radio_selected)
59
self.vbox.add(self._radio_added)
60
self.vbox.set_spacing(3)
61
self.action_area.pack_end(self._button_remove)
66
def _on_remove_clicked(self, button):
67
""" Remove button clicked handler. """
68
if self._radio_selected.get_active():
37
self.glade = gtk.glade.XML(gladefile, 'window_remove')
39
self.window = self.glade.get_widget('window_remove')
41
# Dictionary for signal_autoconnect
42
dic = { "on_button_remove_remove_clicked": self.remove,
43
"on_button_remove_cancel_clicked": self.close }
45
# Connect the signals to the handlers
46
self.glade.signal_autoconnect(dic)
49
""" Display the Remove file(s) dialog. """
50
self.window.show_all()
52
def remove(self, widget):
53
radio_selected = self.glade.get_widget('radiobutton_remove_selected')
54
radio_new = self.glade.get_widget('radiobutton_remove_new')
56
directory = self.comm.get_path()
58
if radio_selected.get_active():
69
59
# Remove only the selected file
70
filename = self.selected
60
filename = self.comm.get_selected_right()
72
62
if filename is None:
73
error_dialog(_i18n('No file was selected'),
74
_i18n('Please select a file from the list,\nor choose the other option.'))
63
error_dialog(_('No file was selected'),
64
_('Please select a file from the list,\nor choose the other option.'))
77
self.wt.remove(os.path.join(self.wtpath, filename))
78
elif self._radio_added.get_active():
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.'))
78
elif radio_new.get_active():
79
79
# Remove added files recursively
80
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
81
88
file_list = sorted([f[0] for f in added], reverse=True)
82
89
if len(file_list) == 0:
83
warning_dialog(_i18n('No matching files'),
84
_i18n('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.'))
86
self.wt.remove(file_list)
88
self.response(gtk.RESPONSE_OK)
97
def close(self, widget=None):