/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
32
import olive.backend.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
        
0.10.2 by Richard Ferguson
Fixed push dialog to not hide/show widgets
70
        # Set initial state
71
        self.entry_location.set_sensitive(0)
72
        self.check_remember.set_sensitive(0)
73
        self.check_create.set_sensitive(0)
74
		
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
75
        # Get stored location
0.8.45 by Szilveszter Farkas (Phanatic)
Some bugs fixed in the Push dialog; added TODO items.
76
        self.notbranch = False
77
        try:
78
            loc = info.get_push_location(self.comm.get_path())
79
        except errors.NotBranchError:
80
            self.notbranch = True
81
            return
82
83
        if loc is not None:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
84
            self.entry_stored.set_text(loc)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
85
    
86
    def display(self):
87
        """ Display the Push dialog. """
0.8.45 by Szilveszter Farkas (Phanatic)
Some bugs fixed in the Push dialog; added TODO items.
88
        if self.notbranch:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
89
            self.dialog.error_dialog(_('Directory is not a branch'),
90
                                     _('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.
91
            self.close()
92
        else:
93
            self.window.show()
94
            self.width, self.height = self.window.get_size()
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
95
    
96
    def stored_toggled(self, widget):
97
        if widget.get_active():
0.10.2 by Richard Ferguson
Fixed push dialog to not hide/show widgets
98
            self.entry_stored.set_sensitive(1)
99
            self.entry_location.set_sensitive(0)
100
            self.check_remember.set_sensitive(0)
101
            self.check_create.set_sensitive(0)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
102
        else:
0.10.2 by Richard Ferguson
Fixed push dialog to not hide/show widgets
103
            self.entry_stored.set_sensitive(0)
104
            self.entry_location.set_sensitive(1)
105
            self.check_remember.set_sensitive(1)
106
            self.check_create.set_sensitive(1)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
107
    
108
    def specific_toggled(self, widget):
109
        if widget.get_active():
0.10.2 by Richard Ferguson
Fixed push dialog to not hide/show widgets
110
            self.entry_stored.set_sensitive(0)
111
            self.entry_location.set_sensitive(1)
112
            self.check_remember.set_sensitive(1)
113
            self.check_create.set_sensitive(1)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
114
        else:
0.10.2 by Richard Ferguson
Fixed push dialog to not hide/show widgets
115
            self.entry_stored.set_sensitive(1)
116
            self.entry_location.set_sensitive(0)
117
            self.check_remember.set_sensitive(0)
118
            self.check_create.set_sensitive(0)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
119
    
120
    def push(self, widget):
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
121
        revs = 0
122
        self.comm.set_busy(self.window)
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
123
        if self.radio_stored.get_active():
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
124
            try:
0.8.27 by Szilveszter Farkas (Phanatic)
Push dialog now displays stored location
125
                revs = commit.push(self.comm.get_path(),
126
                                   overwrite=self.check_overwrite.get_active())
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
127
            except errors.NotBranchError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
128
                self.dialog.error_dialog(_('Directory is not a branch'),
129
                                         _('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>
130
                return
131
            except errors.NoLocationKnown:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
132
                self.dialog.error_dialog(_('Push location is unknown'),
133
                                         _('Please specify a location manually.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
134
                return
135
            except errors.NonExistingParent, errmsg:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
136
                self.dialog.error_dialog(_('Non existing parent directory'),
137
                                         _("The parent directory (%s)\ndoesn't exist.") % errmsg)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
138
                return
139
            except errors.DivergedBranchesError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
140
                self.dialog.error_dialog(_('Branches have been diverged'),
141
                                         _('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>
142
                return
143
            except:
144
                raise
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
145
        elif self.radio_specific.get_active():
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
146
            location = self.entry_location.get_text()
147
            if location == '':
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
148
                self.dialog.error_dialog(_('No location specified'),
149
                                         _('Please specify a location or use the default.'))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
150
                return
151
            
152
            try:
0.8.21 by Szilveszter Farkas (Phanatic)
2006-07-25 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
153
                revs = commit.push(self.comm.get_path(), location,
154
                                   self.check_remember.get_active(),
155
                                   self.check_overwrite.get_active(),
156
                                   self.check_create.get_active())
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
157
            except errors.NotBranchError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
158
                self.dialog.error_dialog(_('Directory is not a branch'),
159
                                         _('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
160
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
161
                return
162
            except errors.NonExistingParent, errmsg:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
163
                self.dialog.error_dialog(_('Non existing parent directory'),
164
                                         _("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
165
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
166
                return
167
            except errors.DivergedBranchesError:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
168
                self.dialog.error_dialog(_('Branches have been diverged'),
169
                                         _('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
170
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
171
                return
172
            except errors.PathPrefixNotCreated:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
173
                self.dialog.error_dialog(_('Path prefix not created'),
174
                                         _("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
175
                self.comm.set_busy(self.window, False)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
176
                return
177
            except:
178
                raise
179
        else:
180
            # This should really never happen
181
            pass
182
        
0.8.23 by Szilveszter Farkas (Phanatic)
Visual feedback when Olive is busy; follow bzr API changes; commit dialog update
183
        self.close()
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
184
        self.dialog.info_dialog(_('Push successful'),
185
                                _('%d revision(s) pushed.') % revs)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
186
    
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
187
    def test(self, widget):
188
        """ Test if write access possible. """
189
        import re
190
        _urlRE = re.compile(r'^(?P<proto>[^:/\\]+)://(?P<path>.*)$')
191
        
192
        if self.radio_stored.get_active():
193
            url = self.entry_stored.get_text()
194
        elif self.radio_specific.get_active():
195
            url = self.entry_location.get_text()
196
        
197
        m = _urlRE.match(url)
198
        if m:
199
            proto = m.groupdict()['proto']
0.8.59 by Szilveszter Farkas (Phanatic)
Added README; some small fixes.
200
            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.
201
                # have write acces (most probably)
202
                self.image_test.set_from_stock(gtk.STOCK_YES, 4)
0.8.71 by Szilveszter Farkas (Phanatic)
Merge from Richard Ferguson's development branch.
203
                self.label_test.set_markup(_('<b>Write access is probably available</b>'))
0.8.58 by Szilveszter Farkas (Phanatic)
Added Test write access functionality to the Push dialog.
204
            else:
205
                # no write access
206
                self.image_test.set_from_stock(gtk.STOCK_NO, 4)
207
                self.label_test.set_markup(_('<b>No write access</b>'))
208
        else:
209
            # couldn't determine
210
            self.image_test.set_from_stock(gtk.STOCK_DIALOG_QUESTION, 4)
211
            self.label_test.set_markup(_('<b>Could not determine</b>'))
212
    
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
213
    def close(self, widget=None):
214
        self.window.destroy()