/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
        import bzrlib.ui as ui
89
        from olive.backend.ui import GtkUIFactory
90
        ui.ui_factory = GtkUIFactory()
91
        
92
        from dialog import OliveDialog
93
        dialog = OliveDialog(self.gladefile)
94
        
95
        radio_stored = self.glade.get_widget('radiobutton_push_stored')
96
        radio_specific = self.glade.get_widget('radiobutton_push_specific')
97
        
98
        if radio_stored.get_active():
99
            try:
100
                commit.push(self.comm.get_path())
101
            except errors.NotBranchError:
102
                dialog.error_dialog('Directory is not a branch.')
103
                return
104
            except errors.NoLocationKnown:
105
                dialog.error_dialog('No location known.')
106
                return
107
            except errors.NonExistingParent, errmsg:
108
                dialog.error_dialog('Parent directory doesn\'t exist: %s', errmsg)
109
                return
110
            except errors.DivergedBranchesError:
111
                dialog.error_dialog('Branches have been diverged.')
112
                return
113
            except:
114
                raise
115
        elif radio_specific.get_active():
116
            location = self.entry_location.get_text()
117
            if location == '':
118
                dialog.error_dialog('No location specified.')
119
                return
120
            
121
            try:
122
                commit.push(self.comm.get_path(), location,
123
                            self.check_remember.get_active(),
124
                            self.check_overwrite.get_active(),
125
                            self.check_create.get_active())
126
            except errors.NotBranchError:
127
                dialog.error_dialog('Directory is not a branch.')
128
                return
129
            except errors.NonExistingParent, errmsg:
130
                dialog.error_dialog('Parent directory doesn\'t exist: %s', errmsg)
131
                return
132
            except errors.DivergedBranchesError:
133
                dialog.error_dialog('Branches have been diverged.')
134
                return
135
            except errors.PathPrefixNotCreated:
136
                dialog.error_dialog('Path prefix couldn\'t be created.')
137
                return
138
            except:
139
                raise
140
        else:
141
            # This should really never happen
142
            pass
143
        
144
        self.close()
145
    
146
    def close(self, widget=None):
147
        self.window.destroy()