/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: Jasper Groenewegen
  • Date: 2008-07-27 12:01:40 UTC
  • mfrom: (576.3.2 improve-merge)
  • mto: This revision was merged to the branch mainline in revision 579.
  • Revision ID: colbrac@xs4all.nl-20080727120140-1agdlzkc9fumjk5f
Merge merge dialog improvements

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
23
23
        pass
24
24
 
25
25
import gtk
26
 
import gtk.glade
27
26
 
28
27
import bzrlib.errors as errors
29
 
from bzrlib.workingtree import WorkingTree
30
 
 
31
 
from olive import gladefile
32
 
 
33
 
class OliveRemove:
34
 
    """ Display the Remove file(s) dialog and perform the needed actions. """
35
 
    def __init__(self):
 
28
 
 
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
 
32
 
 
33
 
 
34
class RemoveDialog(gtk.Dialog):
 
35
    """ This class wraps the old Remove window into a gtk.Dialog. """
 
36
    
 
37
    def __init__(self, wt, wtpath, selected='', parent=None):
36
38
        """ Initialize the Remove file(s) dialog. """
37
 
        self.glade = gtk.glade.XML(gladefile, 'window_remove')
38
 
        
39
 
        self.window = self.glade.get_widget('window_remove')
40
 
        
41
 
        # Dictionary for signal_autoconnect
42
 
        dic = { "on_button_remove_remove_clicked": self.remove,
43
 
                "on_button_remove_cancel_clicked": self.close }
44
 
        
45
 
        # Connect the signals to the handlers
46
 
        self.glade.signal_autoconnect(dic)
47
 
 
48
 
    def display(self):
49
 
        """ Display the Remove file(s) dialog. """
50
 
        self.window.show_all()
51
 
        
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')
55
 
        
56
 
        directory = self.comm.get_path()
57
 
        
58
 
        if radio_selected.get_active():
 
39
        gtk.Dialog.__init__(self, title="Olive - Remove files",
 
40
                                  parent=parent,
 
41
                                  flags=0,
 
42
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
 
43
        
 
44
        # Get arguments
 
45
        self.wt = wt
 
46
        self.wtpath = wtpath
 
47
        self.selected = selected
 
48
        
 
49
        # Create widgets
 
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)
 
54
        
 
55
        self._button_remove.connect('clicked', self._on_remove_clicked)
 
56
        
 
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)
 
62
        
 
63
        self.vbox.show_all()
 
64
        
 
65
    @show_bzr_error
 
66
    def _on_remove_clicked(self, button):
 
67
        """ Remove button clicked handler. """
 
68
        if self._radio_selected.get_active():
59
69
            # Remove only the selected file
60
 
            filename = self.comm.get_selected_right()
 
70
            filename = self.selected
61
71
            
62
72
            if filename is None:
63
 
                error_dialog(_('No file was selected'),
64
 
                                         _('Please select a file from the list,\nor choose the other option.'))
 
73
                error_dialog(_i18n('No file was selected'),
 
74
                             _i18n('Please select a file from the list,\nor choose the other option.'))
65
75
                return
66
76
            
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
78
 
        elif radio_new.get_active():
 
77
            self.wt.remove(os.path.join(self.wtpath, filename))
 
78
        elif self._radio_added.get_active():
79
79
            # 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
 
80
            added = self.wt.changes_from(self.wt.basis_tree()).added
88
81
            file_list = sorted([f[0] for f in added], reverse=True)
89
82
            if len(file_list) == 0:
90
 
                dialog.warning_dialog(_('No matching files'),
91
 
                                      _('No added files were found in the working tree.'))
 
83
                warning_dialog(_i18n('No matching files'),
 
84
                               _i18n('No added files were found in the working tree.'))
92
85
                return
93
 
            wt.remove(file_list)
 
86
            self.wt.remove(file_list)
94
87
        
95
 
        self.close()
96
 
    
97
 
    def close(self, widget=None):
98
 
        self.window.destroy()
 
88
        self.response(gtk.RESPONSE_OK)