/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: Daniel Schierbeck
  • Date: 2007-10-14 15:54:57 UTC
  • mto: This revision was merged to the branch mainline in revision 317.
  • Revision ID: daniel.schierbeck@gmail.com-20071014155457-m3ek29p4ima8ev7d
Added the new Window base class.

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
21
21
    pygtk.require("2.0")
22
22
except:
23
 
    pass
 
23
        pass
 
24
 
24
25
import gtk
25
26
import gtk.glade
26
27
 
27
28
import bzrlib.errors as errors
28
 
from bzrlib.workingtree import WorkingTree
29
 
 
30
 
from olive import gladefile
 
29
 
 
30
from bzrlib.plugins.gtk.dialog import error_dialog, warning_dialog
 
31
from guifiles import GLADEFILENAME
 
32
 
31
33
 
32
34
class OliveRemove:
33
35
    """ Display the Remove file(s) dialog and perform the needed actions. """
34
 
    def __init__(self, comm):
 
36
    def __init__(self, wt, wtpath, selected=[]):
35
37
        """ Initialize the Remove file(s) dialog. """
36
 
        self.glade = gtk.glade.XML(gladefile, 'window_remove')
37
 
        
38
 
        # Communication object
39
 
        self.comm = comm
 
38
        self.glade = gtk.glade.XML(GLADEFILENAME, 'window_remove')
40
39
        
41
40
        self.window = self.glade.get_widget('window_remove')
42
41
        
46
45
        
47
46
        # Connect the signals to the handlers
48
47
        self.glade.signal_autoconnect(dic)
 
48
        
 
49
        self.wt = wt
 
50
        self.wtpath = wtpath
 
51
        self.selected = selected
49
52
 
50
53
    def display(self):
51
54
        """ Display the Remove file(s) dialog. """
52
55
        self.window.show_all()
53
56
        
 
57
    @show_bzr_error
54
58
    def remove(self, widget):
55
59
        radio_selected = self.glade.get_widget('radiobutton_remove_selected')
56
60
        radio_new = self.glade.get_widget('radiobutton_remove_new')
57
61
        
58
 
        directory = self.comm.get_path()
59
 
        
60
 
        self.comm.set_busy(self.window)
61
62
        if radio_selected.get_active():
62
63
            # Remove only the selected file
63
 
            filename = self.comm.get_selected_right()
 
64
            filename = self.selected
64
65
            
65
66
            if filename is None:
66
67
                error_dialog(_('No file was selected'),
67
 
                                         _('Please select a file from the list,\nor choose the other option.'))
68
 
                self.comm.set_busy(self.window, False)
69
 
                return
70
 
            
71
 
            try:
72
 
                wt, path = WorkingTree.open_containing(directory + '/' + filename)
73
 
                wt.remove(path)
74
 
            except errors.NotBranchError:
75
 
                error_dialog(_('Directory is not a branch'),
76
 
                                         _('You can perform this action only in a branch.'))
77
 
                self.comm.set_busy(self.window, False)
78
 
                return
79
 
            except errors.NotVersionedError:
80
 
                error_dialog(_('File not versioned'),
81
 
                                         _('The selected file is not versioned.'))
82
 
                self.comm.set_busy(self.window, False)
83
 
                return
84
 
            except:
85
 
                raise
 
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)
86
74
        elif radio_new.get_active():
87
75
            # Remove added files recursively
88
 
            try:
89
 
                wt, path = WorkingTree.open_containing(directory)
90
 
            except errors.NotBranchError:
91
 
                error_dialog(_('Directory is not a branch'),
92
 
                                         _('You can perform this action only in a branch.'))
93
 
                self.comm.set_busy(self.window, False)
94
 
                return
95
 
            
96
 
            added = wt.changes_from(wt.basis_tree()).added
 
76
            added = self.wt.changes_from(self.wt.basis_tree()).added
97
77
            file_list = sorted([f[0] for f in added], reverse=True)
98
78
            if len(file_list) == 0:
99
 
                dialog.warning_dialog(_('No matching files'),
100
 
                                      _('No added files were found in the working tree.'))
101
 
                self.comm.set_busy(self.window, False)
 
79
                warning_dialog(_('No matching files'),
 
80
                               _('No added files were found in the working tree.'))
102
81
                return
103
 
            wt.remove(file_list)
104
 
        else:
105
 
            # This should really never happen.
106
 
            pass
 
82
            self.wt.remove(file_list)
107
83
        
108
84
        self.close()
109
 
        self.comm.refresh_right()
110
85
    
111
86
    def close(self, widget=None):
112
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)