/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
2
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
7
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
12
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
import sys
18
19
try:
20
    import pygtk
21
    pygtk.require("2.0")
22
except:
23
    pass
24
try:
25
    import gtk
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
26
    import gtk.gdk
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
27
    import gtk.glade
28
except:
29
    sys.exit(1)
30
31
import olive.backend.commit as commit
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
32
import bzrlib.errors as errors
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
33
import olive.backend.info as info
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
34
35
class OlivePush:
36
    """ Display Push dialog and perform the needed actions. """
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
37
    def __init__(self, gladefile, comm, dialog):
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
38
        """ Initialize the Push dialog. """
39
        self.gladefile = gladefile
40
        self.glade = gtk.glade.XML(self.gladefile, 'window_push')
41
        
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
42
        # Communication object
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
43
        self.comm = comm
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
44
        # Dialog object
45
        self.dialog = dialog
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
46
        
47
        self.window = self.glade.get_widget('window_push')
48
        
49
        # Dictionary for signal_autoconnect
50
        dic = { "on_button_push_push_clicked": self.push,
51
                "on_button_push_cancel_clicked": self.close,
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
52
                "on_button_push_test_clicked": self.test,
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
53
                "on_radiobutton_push_stored_toggled": self.stored_toggled,
54
                "on_radiobutton_push_specific_toggled": self.specific_toggled, }
55
        
56
        # Connect the signals to the handlers
57
        self.glade.signal_autoconnect(dic)
58
        
59
        # Get some useful widgets
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
60
        self.radio_stored = self.glade.get_widget('radiobutton_push_stored')
61
        self.radio_specific = self.glade.get_widget('radiobutton_push_specific')
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
62
        self.entry_stored = self.glade.get_widget('entry_push_stored')
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
63
        self.entry_location = self.glade.get_widget('entry_push_location')
64
        self.check_remember = self.glade.get_widget('checkbutton_push_remember')
65
        self.check_overwrite = self.glade.get_widget('checkbutton_push_overwrite')
66
        self.check_create = self.glade.get_widget('checkbutton_push_create')
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
67
        self.label_test = self.glade.get_widget('label_push_test')
68
        self.image_test = self.glade.get_widget('image_push_test')
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
69
        
70
        # Get stored location
0.8.45 by Szilveszter Farkas (Phanatic)
Some bugs fixed in the Push dialog; added TODO items.
71
        self.notbranch = False
72
        try:
73
            loc = info.get_push_location(self.comm.get_path())
74
        except errors.NotBranchError:
75
            self.notbranch = True
76
            return
77
78
        if loc is not None:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
79
            self.entry_stored.set_text(loc)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
80
    
81
    def display(self):
82
        """ Display the Push dialog. """
0.8.45 by Szilveszter Farkas (Phanatic)
Some bugs fixed in the Push dialog; added TODO items.
83
        if self.notbranch:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
84
            self.dialog.error_dialog(_('Directory is not a branch'),
85
                                     _('You can perform this action only in a branch.'))
0.8.45 by Szilveszter Farkas (Phanatic)
Some bugs fixed in the Push dialog; added TODO items.
86
            self.close()
87
        else:
88
            self.window.show()
89
            self.width, self.height = self.window.get_size()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
90
    
91
    def stored_toggled(self, widget):
92
        if widget.get_active():
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
93
            self.entry_stored.show()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
94
            self.entry_location.hide()
95
            self.check_remember.hide()
96
            self.check_create.hide()
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
97
            self.window.resize(self.width, self.height)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
98
        else:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
99
            self.entry_stored.hide()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
100
            self.entry_location.show()
101
            self.check_remember.show()
102
            self.check_create.show()
103
    
104
    def specific_toggled(self, widget):
105
        if widget.get_active():
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
106
            self.entry_stored.hide()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
107
            self.entry_location.show()
108
            self.check_remember.show()
109
            self.check_create.show()
110
        else:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
111
            self.entry_stored.show()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
112
            self.entry_location.hide()
113
            self.check_remember.hide()
114
            self.check_create.hide()
115
    
116
    def push(self, widget):
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
117
        revs = 0
118
        self.comm.set_busy(self.window)
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
119
        if self.radio_stored.get_active():
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
120
            try:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
121
                revs = commit.push(self.comm.get_path(),
122
                                   overwrite=self.check_overwrite.get_active())
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
123
            except errors.NotBranchError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
124
                self.dialog.error_dialog(_('Directory is not a branch'),
125
                                         _('You can perform this action only in a branch.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
126
                return
127
            except errors.NoLocationKnown:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
128
                self.dialog.error_dialog(_('Push location is unknown'),
129
                                         _('Please specify a location manually.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
130
                return
131
            except errors.NonExistingParent, errmsg:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
132
                self.dialog.error_dialog(_('Non existing parent directory'),
133
                                         _("The parent directory (%s)\ndoesn't exist.") % errmsg)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
134
                return
135
            except errors.DivergedBranchesError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
136
                self.dialog.error_dialog(_('Branches have been diverged'),
137
                                         _('You cannot push if branches have diverged. Use the\noverwrite option if you want to push anyway.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
138
                return
139
            except:
140
                raise
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
141
        elif self.radio_specific.get_active():
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
142
            location = self.entry_location.get_text()
143
            if location == '':
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
144
                self.dialog.error_dialog(_('No location specified'),
145
                                         _('Please specify a location or use the default.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
146
                return
147
            
148
            try:
0.8.21 by Szilveszter Farkas (Phanatic)
2006-07-25 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
149
                revs = commit.push(self.comm.get_path(), location,
150
                                   self.check_remember.get_active(),
151
                                   self.check_overwrite.get_active(),
152
                                   self.check_create.get_active())
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
153
            except errors.NotBranchError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
154
                self.dialog.error_dialog(_('Directory is not a branch'),
155
                                         _('You can perform this action only in a branch.'))
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
156
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
157
                return
158
            except errors.NonExistingParent, errmsg:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
159
                self.dialog.error_dialog(_('Non existing parent directory'),
160
                                         _("The parent directory (%s)\ndoesn't exist.") % errmsg)
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
161
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
162
                return
163
            except errors.DivergedBranchesError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
164
                self.dialog.error_dialog(_('Branches have been diverged'),
165
                                         _('You cannot push if branches have diverged. Use the\noverwrite option if you want to push anyway.'))
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
166
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
167
                return
168
            except errors.PathPrefixNotCreated:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
169
                self.dialog.error_dialog(_('Path prefix not created'),
170
                                         _("The path leading up to the specified location couldn't\nbe created."))
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
171
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
172
                return
173
            except:
174
                raise
175
        else:
176
            # This should really never happen
177
            pass
178
        
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
179
        self.close()
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
180
        self.dialog.info_dialog(_('Push successful'),
181
                                _('%d revision(s) pushed.') % revs)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
182
    
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
183
    def test(self, widget):
184
        """ Test if write access possible. """
185
        import re
186
        _urlRE = re.compile(r'^(?P<proto>[^:/\\]+)://(?P<path>.*)$')
187
        
188
        if self.radio_stored.get_active():
189
            url = self.entry_stored.get_text()
190
        elif self.radio_specific.get_active():
191
            url = self.entry_location.get_text()
192
        
193
        m = _urlRE.match(url)
194
        if m:
195
            proto = m.groupdict()['proto']
0.8.59 by Szilveszter Farkas (Phanatic)
Added README; some small fixes.
196
            if (proto == 'sftp') or (proto == 'file') or (proto == 'ftp'):
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
197
                # have write acces (most probably)
198
                self.image_test.set_from_stock(gtk.STOCK_YES, 4)
199
                self.label_test.set_markup(_('<b>Write access is available most probably</b>'))
200
            else:
201
                # no write access
202
                self.image_test.set_from_stock(gtk.STOCK_NO, 4)
203
                self.label_test.set_markup(_('<b>No write access</b>'))
204
        else:
205
            # couldn't determine
206
            self.image_test.set_from_stock(gtk.STOCK_DIALOG_QUESTION, 4)
207
            self.label_test.set_markup(_('<b>Could not determine</b>'))
208
    
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
209
    def close(self, widget=None):
210
        self.window.destroy()