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, dialog):
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')
40
# Communication object
41
45
self.window = self.glade.get_widget('window_remove')
47
51
# Connect the signals to the handlers
48
52
self.glade.signal_autoconnect(dic)
52
self.selected = selected
55
55
""" Display the Remove file(s) dialog. """
56
56
self.window.show_all()
59
58
def remove(self, widget):
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
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)
75
88
elif radio_new.get_active():
76
89
# 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.'))
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)
83
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()
87
110
def close(self, widget=None):
88
111
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)