/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>
2
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.
7
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.
12
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
26
    import gtk.glade
27
except:
28
    sys.exit(1)
29
30
import olive.backend.commit as commit
31
import olive.backend.errors as errors
32
33
class OlivePush:
34
    """ Display Push dialog and perform the needed actions. """
35
    def __init__(self, gladefile, comm):
36
        """ Initialize the Push dialog. """
37
        self.gladefile = gladefile
38
        self.glade = gtk.glade.XML(self.gladefile, 'window_push')
39
        
40
        self.comm = comm
41
        
42
        self.window = self.glade.get_widget('window_push')
43
        
44
        # Dictionary for signal_autoconnect
45
        dic = { "on_button_push_push_clicked": self.push,
46
                "on_button_push_cancel_clicked": self.close,
47
                "on_radiobutton_push_stored_toggled": self.stored_toggled,
48
                "on_radiobutton_push_specific_toggled": self.specific_toggled, }
49
        
50
        # Connect the signals to the handlers
51
        self.glade.signal_autoconnect(dic)
52
        
53
        # Get some useful widgets
54
        self.entry_location = self.glade.get_widget('entry_push_location')
55
        self.check_remember = self.glade.get_widget('checkbutton_push_remember')
56
        self.check_overwrite = self.glade.get_widget('checkbutton_push_overwrite')
57
        self.check_create = self.glade.get_widget('checkbutton_push_create')
58
    
59
    def display(self):
60
        """ Display the Push dialog. """
61
        self.window.show()
62
    
63
    def stored_toggled(self, widget):
64
        if widget.get_active():
65
            self.entry_location.hide()
66
            self.check_remember.hide()
67
            self.check_overwrite.hide()
68
            self.check_create.hide()
69
        else:
70
            self.entry_location.show()
71
            self.check_remember.show()
72
            self.check_overwrite.show()
73
            self.check_create.show()
74
    
75
    def specific_toggled(self, widget):
76
        if widget.get_active():
77
            self.entry_location.show()
78
            self.check_remember.show()
79
            self.check_overwrite.show()
80
            self.check_create.show()
81
        else:
82
            self.entry_location.hide()
83
            self.check_remember.hide()
84
            self.check_overwrite.hide()
85
            self.check_create.hide()
86
    
87
    def push(self, widget):
88
        from dialog import OliveDialog
89
        dialog = OliveDialog(self.gladefile)
90
        
91
        radio_stored = self.glade.get_widget('radiobutton_push_stored')
92
        radio_specific = self.glade.get_widget('radiobutton_push_specific')
93
        
94
        if radio_stored.get_active():
95
            try:
96
                commit.push(self.comm.get_path())
97
            except errors.NotBranchError:
98
                dialog.error_dialog('Directory is not a branch.')
99
                return
100
            except errors.NoLocationKnown:
101
                dialog.error_dialog('No location known.')
102
                return
103
            except errors.NonExistingParent, errmsg:
104
                dialog.error_dialog('Parent directory doesn\'t exist: %s', errmsg)
105
                return
106
            except errors.DivergedBranchesError:
107
                dialog.error_dialog('Branches have been diverged.')
108
                return
109
            except:
110
                raise
111
        elif radio_specific.get_active():
112
            location = self.entry_location.get_text()
113
            if location == '':
114
                dialog.error_dialog('No location specified.')
115
                return
116
            
117
            try:
0.8.21 by Szilveszter Farkas (Phanatic)
2006-07-25 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
118
                revs = commit.push(self.comm.get_path(), location,
119
                                   self.check_remember.get_active(),
120
                                   self.check_overwrite.get_active(),
121
                                   self.check_create.get_active())
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
122
            except errors.NotBranchError:
123
                dialog.error_dialog('Directory is not a branch.')
124
                return
125
            except errors.NonExistingParent, errmsg:
126
                dialog.error_dialog('Parent directory doesn\'t exist: %s', errmsg)
127
                return
128
            except errors.DivergedBranchesError:
129
                dialog.error_dialog('Branches have been diverged.')
130
                return
131
            except errors.PathPrefixNotCreated:
132
                dialog.error_dialog('Path prefix couldn\'t be created.')
133
                return
134
            except:
135
                raise
136
        else:
137
            # This should really never happen
138
            pass
139
        
140
        self.close()
0.8.21 by Szilveszter Farkas (Phanatic)
2006-07-25 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
141
        dialog.info_dialog('%d revision(s) pushed.' % revs)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
142
    
143
    def close(self, widget=None):
144
        self.window.destroy()