/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to olive/remove.py

  • Committer: Jelmer Vernooij
  • Date: 2007-02-01 15:50:40 UTC
  • Revision ID: jelmer@samba.org-20070201155040-3hq4mfbxs99kzazy
add framework for tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
16
16
 
17
 
import sys
 
17
import os
18
18
 
19
19
try:
20
20
    import pygtk
26
26
import gtk.glade
27
27
 
28
28
import bzrlib.errors as errors
29
 
from bzrlib.workingtree import WorkingTree
30
 
 
31
 
from olive import gladefile
 
29
 
 
30
from dialog import error_dialog, warning_dialog
 
31
from guifiles import GLADEFILENAME
 
32
 
32
33
 
33
34
class OliveRemove:
34
35
    """ Display the Remove file(s) dialog and perform the needed actions. """
35
 
    def __init__(self):
 
36
    def __init__(self, wt, wtpath, selected=[]):
36
37
        """ Initialize the Remove file(s) dialog. """
37
 
        self.glade = gtk.glade.XML(gladefile, 'window_remove')
 
38
        self.glade = gtk.glade.XML(GLADEFILENAME, 'window_remove')
38
39
        
39
40
        self.window = self.glade.get_widget('window_remove')
40
41
        
44
45
        
45
46
        # Connect the signals to the handlers
46
47
        self.glade.signal_autoconnect(dic)
 
48
        
 
49
        self.wt = wt
 
50
        self.wtpath = wtpath
 
51
        self.selected = selected
47
52
 
48
53
    def display(self):
49
54
        """ Display the Remove file(s) dialog. """
50
55
        self.window.show_all()
51
56
        
 
57
    @show_bzr_error
52
58
    def remove(self, widget):
53
59
        radio_selected = self.glade.get_widget('radiobutton_remove_selected')
54
60
        radio_new = self.glade.get_widget('radiobutton_remove_new')
55
61
        
56
 
        directory = self.comm.get_path()
57
 
        
58
62
        if radio_selected.get_active():
59
63
            # Remove only the selected file
60
 
            filename = self.comm.get_selected_right()
 
64
            filename = self.selected
61
65
            
62
66
            if filename is None:
63
67
                error_dialog(_('No file was selected'),
64
 
                                         _('Please select a file from the list,\nor choose the other option.'))
65
 
                return
66
 
            
67
 
            try:
68
 
                wt, path = WorkingTree.open_containing(directory + '/' + filename)
69
 
                wt.remove(path)
70
 
            except errors.NotBranchError:
71
 
                error_dialog(_('Directory is not a branch'),
72
 
                                         _('You can perform this action only in a branch.'))
73
 
                return
74
 
            except errors.NotVersionedError:
75
 
                error_dialog(_('File not versioned'),
76
 
                                         _('The selected file is not versioned.'))
77
 
                return
 
68
                             _('Please select a file from the list,\nor choose the other option.'))
 
69
                return
 
70
            
 
71
            fullpath = self.wt.abspath(os.path.join(self.wtpath, filename))
 
72
            
 
73
            self.wt.remove(fullpath)
78
74
        elif radio_new.get_active():
79
75
            # Remove added files recursively
80
 
            try:
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.'))
85
 
                return
86
 
            
87
 
            added = wt.changes_from(wt.basis_tree()).added
 
76
            added = self.wt.changes_from(self.wt.basis_tree()).added
88
77
            file_list = sorted([f[0] for f in added], reverse=True)
89
78
            if len(file_list) == 0:
90
 
                dialog.warning_dialog(_('No matching files'),
91
 
                                      _('No added files were found in the working tree.'))
 
79
                warning_dialog(_('No matching files'),
 
80
                               _('No added files were found in the working tree.'))
92
81
                return
93
 
            wt.remove(file_list)
 
82
            self.wt.remove(file_list)
94
83
        
95
84
        self.close()
96
85
    
97
86
    def close(self, widget=None):
98
87
        self.window.destroy()
 
88
 
 
89
class OliveRemoveDialog(gtk.Dialog):
 
90
    """ This class wraps the old Remove window into a gtk.Dialog. """
 
91
    
 
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",
 
95
                                  parent=parent,
 
96
                                  flags=0,
 
97
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
 
98
        
 
99
        # Get arguments
 
100
        self.wt = wt
 
101
        self.wtpath = wtpath
 
102
        self.selected = selected
 
103
        
 
104
        # Create widgets
 
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)
 
109
        
 
110
        self._button_remove.connect('clicked', self._on_remove_clicked)
 
111
        
 
112
        self.vbox.pack_start(self._label)
 
113
        self.vbox.pack_end(self._radio_added)
 
114
        self.vbox.pack_end(self._radio_selected)
 
115
        
 
116
        self.action_area.pack_end(self._button_remove)
 
117
        
 
118
        self.vbox.set_spacing(3)
 
119
        self.vbox.show_all()
 
120
        
 
121
    @show_bzr_error
 
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
 
127
            
 
128
            if filename is None:
 
129
                error_dialog(_('No file was selected'),
 
130
                             _('Please select a file from the list,\nor choose the other option.'))
 
131
                return
 
132
            
 
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.'))
 
141
                return
 
142
            self.wt.remove(file_list)
 
143
        
 
144
        self.response(gtk.RESPONSE_OK)