/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/move.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:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
import os
18
 
import sys
19
18
 
20
19
try:
21
20
    import pygtk
24
23
    pass
25
24
 
26
25
import gtk
27
 
import gtk.glade
28
26
 
29
27
import bzrlib.errors as errors
30
 
 
31
 
from olive import gladefile
32
 
 
33
 
class OliveMove:
 
28
from bzrlib.workingtree import WorkingTree
 
29
 
 
30
from bzrlib.plugins.gtk import _i18n
 
31
from bzrlib.plugins.gtk.dialog import error_dialog
 
32
from bzrlib.plugins.gtk.errors import show_bzr_error
 
33
 
 
34
 
 
35
class MoveDialog(gtk.Dialog):
34
36
    """ Display the Move dialog and perform the needed actions. """
35
 
    def __init__(self, comm):
 
37
    
 
38
    def __init__(self, wt, wtpath, selected, parent=None):
36
39
        """ Initialize the Move dialog. """
37
 
        self.glade = gtk.glade.XML(gladefile, 'window_move', 'olive-gtk')
38
 
        
39
 
        # Communication object
40
 
        self.comm = comm
41
 
        
42
 
        self.window = self.glade.get_widget('window_move')
43
 
        
44
 
        # Dictionary for signal_autoconnect
45
 
        dic = { "on_button_move_move_clicked": self.move,
46
 
                "on_button_move_cancel_clicked": self.close }
47
 
        
48
 
        # Connect the signals to the handlers
49
 
        self.glade.signal_autoconnect(dic)
50
 
        
51
 
        # Set FileChooser directory
52
 
        self.filechooser = self.glade.get_widget('filechooserbutton_move')
53
 
        self.filechooser.set_filename(self.comm.get_path())
54
 
 
55
 
    def display(self):
56
 
        """ Display the Move dialog. """
57
 
        self.window.show_all()
58
 
 
59
 
    def move(self, widget):
 
40
        gtk.Dialog.__init__(self, title="Olive - Move",
 
41
                                  parent=parent,
 
42
                                  flags=0,
 
43
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
 
44
        
 
45
        # Get arguments
 
46
        self.wt = wt
 
47
        self.wtpath = wtpath
 
48
        self.selected = selected
 
49
        
 
50
        if self.selected is None:
 
51
            self.selected = ""
 
52
        
 
53
        if self.wtpath == "":
 
54
            directory = os.path.dirname(self.wt.abspath(self.selected))
 
55
        else:
 
56
            directory = os.path.dirname(self.wt.abspath(self.wtpath + os.sep + self.selected))
 
57
        
 
58
        # Create widgets
 
59
        self._hbox = gtk.HBox()
 
60
        self._label_move_to = gtk.Label(_i18n("Move to"))
 
61
        self._filechooser_dialog = gtk.FileChooserDialog(title="Please select a folder",
 
62
                                    parent=self.window,
 
63
                                    action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
 
64
                                    buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
 
65
                                             gtk.STOCK_OPEN, gtk.RESPONSE_OK))
 
66
        self._filechooser_dialog.set_default_response(gtk.RESPONSE_OK)
 
67
        self.filechooser = gtk.FileChooserButton(self._filechooser_dialog)
 
68
        self._button_move = gtk.Button(_i18n("_Move"))
 
69
        self._button_move_icon = gtk.Image()
 
70
        self._button_move_icon.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
 
71
        self._button_move.set_image(self._button_move_icon)
 
72
        
 
73
        self._button_move.connect('clicked', self._on_move_clicked)
 
74
        
 
75
        # Set location
 
76
        self._filechooser_dialog.set_current_folder(directory)
 
77
        
 
78
        # Add widgets to dialog
 
79
        self.vbox.add(self._hbox)
 
80
        self._hbox.add(self._label_move_to)
 
81
        self._hbox.add(self.filechooser)
 
82
        self._hbox.set_spacing(5)
 
83
        self.action_area.pack_end(self._button_move)
 
84
        
 
85
        self.vbox.show_all()
 
86
 
 
87
    @show_bzr_error
 
88
    def _on_move_clicked(self, widget):
60
89
        destination = self.filechooser.get_filename()
61
 
 
62
 
        filename = self.comm.get_selected_right()
 
90
        
 
91
        if destination == None:
 
92
            error_dialog(_i18n('No folder was selected'),
 
93
                         _i18n('Please select a folder to move the selected file to'))
 
94
            return
 
95
        
 
96
        filename = self.selected
63
97
            
64
98
        if filename is None:
65
 
            error_dialog(_('No file was selected'),
66
 
                                     _('Please select a file from the list to proceed.'))
 
99
            error_dialog(_i18n('No file was selected'),
 
100
                         _i18n('Please select a file from the list to proceed.'))
67
101
            return
68
102
        
69
 
        source = self.comm.get_path() + '/' + filename
 
103
        source = os.path.join(self.wtpath, filename)
70
104
        
71
105
        # Move the file to a directory
72
 
        try:
73
 
            wt1, path1 = WorkingTree.open_containing(source)
74
 
            wt2, path2 = WorkingTree.open_containing(destination)
75
 
            if wt1.base != wt2.base:
76
 
                error_dialog(_('Not the same branch'),
77
 
                                         _('The destination is not in the same branch.'))
78
 
                return
79
 
 
80
 
            wt1.move([source], destination)
81
 
        except errors.NotBranchError:
82
 
            error_dialog(_('File is not in a branch'),
83
 
                                     _('The selected file is not in a branch.'))
 
106
        wt1, path1 = WorkingTree.open_containing(self.wt.abspath(source))
 
107
        wt2, path2 = WorkingTree.open_containing(destination)
 
108
        if wt1.basedir != wt2.basedir:
 
109
            error_dialog(_i18n('Not the same branch'),
 
110
                         _i18n('The destination is not in the same branch.'))
84
111
            return
85
112
 
86
 
        self.close()
87
 
        self.comm.refresh_right()
88
 
    
89
 
    def close(self, widget=None):
90
 
        self.window.destroy()
 
113
        wt1.move([source], wt1.relpath(destination))
 
114
        
 
115
        self.response(gtk.RESPONSE_OK)