/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
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.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
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.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
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.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
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
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
17
import os
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
18
19
try:
20
    import pygtk
21
    pygtk.require("2.0")
22
except:
23
    pass
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
24
25
import gtk
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
26
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
27
from errors import show_bzr_error
28
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
29
from bzrlib.branch import Branch
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
30
from bzrlib.config import GlobalConfig
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
31
import bzrlib.errors as errors
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
32
153 by Jelmer Vernooij
Fix references to dialog.
33
from dialog import error_dialog, info_dialog
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
34
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
35
from history import UrlHistory
195.7.1 by Szilveszter Farkas (Phanatic)
Add bookmarked locations to the branch history.
36
from olive import Preferences
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
37
38
class BranchDialog(gtk.Dialog):
39
    """ New implementation of the Branch dialog. """
40
    def __init__(self, path=None, parent=None):
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
41
        """ Initialize the Branch dialog. """
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
42
        gtk.Dialog.__init__(self, title="Branch - Olive",
43
                                  parent=parent,
44
                                  flags=0,
45
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
46
        
47
        # Get arguments
48
        self.path = path
49
        
50
        # Create the widgets
51
        self._button_branch = gtk.Button(_("_Branch"), use_underline=True)
52
        self._button_revision = gtk.Button('')
53
        self._image_browse = gtk.Image()
54
        self._filechooser = gtk.FileChooserButton(_("Please select a folder"))
55
        self._combo = gtk.ComboBoxEntry()
56
        self._label_location = gtk.Label(_("Branch location:"))
57
        self._label_destination = gtk.Label(_("Destination:"))
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
58
        self._label_nick = gtk.Label(_("Branck nick:"))
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
59
        self._label_revision = gtk.Label(_("Revision:"))
60
        self._hbox_revision = gtk.HBox()
61
        self._entry_revision = gtk.Entry()
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
62
        self._entry_nick = gtk.Entry()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
63
        
64
        # Set callbacks
65
        self._button_branch.connect('clicked', self._on_branch_clicked)
66
        self._button_revision.connect('clicked', self._on_revision_clicked)
195.5.1 by Szilveszter Farkas (Phanatic)
Scan the branch only if the entry has lost the focus. (Fixed: #93653)
67
        self._combo.child.connect('focus-out-event', self._on_combo_changed)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
68
        
69
        # Create the table and pack the widgets into it
70
        self._table = gtk.Table(rows=3, columns=2)
71
        self._table.attach(self._label_location, 0, 1, 0, 1)
72
        self._table.attach(self._label_destination, 0, 1, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
73
        self._table.attach(self._label_nick, 0, 1, 2, 3)
74
        self._table.attach(self._label_revision, 0, 1, 3, 4)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
75
        self._table.attach(self._combo, 1, 2, 0, 1)
76
        self._table.attach(self._filechooser, 1, 2, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
77
        self._table.attach(self._entry_nick, 1, 2, 2, 3)
78
        self._table.attach(self._hbox_revision, 1, 2, 3, 4)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
79
        
80
        # Set properties
81
        self._image_browse.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
82
        self._button_revision.set_image(self._image_browse)
83
        self._button_revision.set_sensitive(False)
84
        self._filechooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
85
        self._label_location.set_alignment(0, 0.5)
86
        self._label_destination.set_alignment(0, 0.5)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
87
        self._label_nick.set_alignment(0, 0.5)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
88
        self._label_revision.set_alignment(0, 0.5)
89
        self._table.set_row_spacings(3)
90
        self._table.set_col_spacings(3)
91
        self.vbox.set_spacing(3)
92
        if self.path is not None:
93
            self._filechooser.set_filename(self.path)
94
        
95
        # Pack some widgets
96
        self._hbox_revision.pack_start(self._entry_revision, True, True)
97
        self._hbox_revision.pack_start(self._button_revision, False, False)
98
        self.vbox.add(self._table)
99
        self.action_area.pack_end(self._button_branch)
100
        
101
        # Show the dialog
102
        self.vbox.show_all()
103
        
104
        # Build branch history
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
105
        self._history = UrlHistory(GlobalConfig(), 'branch_history')
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
106
        self._build_history()
107
    
108
    def _build_history(self):
109
        """ Build up the branch history. """
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
110
        self._combo_model = gtk.ListStore(str)
195.7.1 by Szilveszter Farkas (Phanatic)
Add bookmarked locations to the branch history.
111
        
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
112
        for item in self._history.get_entries():
113
            self._combo_model.append([ item ])
195.7.1 by Szilveszter Farkas (Phanatic)
Add bookmarked locations to the branch history.
114
        
115
        pref = Preferences()
116
        for item in pref.get_bookmarks():
117
            self._combo_model.append([ item ])
118
        
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
119
        self._combo.set_model(self._combo_model)
120
        self._combo.set_text_column(0)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
121
    
122
    def _get_last_revno(self):
123
        """ Get the revno of the last revision (if any). """
124
        location = self._combo.get_child().get_text()
125
        try:
126
            br = Branch.open(location)
127
        except:
128
            return None
129
        else:
130
            return br.revno()
131
    
132
    def _on_revision_clicked(self, button):
133
        """ Browse for revision button clicked handler. """
134
        from revbrowser import RevisionBrowser
135
        
136
        location = self._combo.get_child().get_text()
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
137
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
138
        try:
139
            br = Branch.open(location)
140
        except:
141
            return
142
        else:
143
            revb = RevisionBrowser(br, self)
144
            response = revb.run()
145
            if response != gtk.RESPONSE_NONE:
146
                revb.hide()
147
        
148
                if response == gtk.RESPONSE_OK:
149
                    if revb.selected_revno is not None:
150
                        self._entry_revision.set_text(revb.selected_revno)
151
            
152
                revb.destroy()
153
    
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
154
    @show_bzr_error
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
155
    def _on_branch_clicked(self, button):
156
        """ Branch button clicked handler. """
157
        location = self._combo.get_child().get_text()
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
158
        if location is '':
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
159
            error_dialog(_('Missing branch location'),
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
160
                         _('You must specify a branch location.'))
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
161
            return
162
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
163
        destination = self._filechooser.get_filename()
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
164
        try:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
165
            revno = int(self._entry_revision.get_text())
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
166
        except:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
167
            revno = None
168
        
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
169
        nick = self._entry_nick.get_text()
170
        if nick is '':
171
            nick = os.path.basename(location.rstrip("/\\"))
172
        
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
173
        br_from = Branch.open(location)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
174
        
175
        br_from.lock_read()
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
176
        try:
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
177
            from bzrlib.transport import get_transport
178
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
179
            revision_id = br_from.get_rev_id(revno)
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
180
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
181
            basis_dir = None
182
            
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
183
            to_location = destination + os.sep + nick
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
184
            to_transport = get_transport(to_location)
185
            
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
186
            to_transport.mkdir('.')
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
187
            
188
            try:
189
                # preserve whatever source format we have.
190
                dir = br_from.bzrdir.sprout(to_transport.base,
191
                                            revision_id,
192
                                            basis_dir)
193
                branch = dir.open_branch()
194
                revs = branch.revno()
195
            except errors.NoSuchRevision:
196
                to_transport.delete_tree('.')
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
197
                raise
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
198
        finally:
199
            br_from.unlock()
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
200
                
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
201
        self._history.add_entry(location)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
202
        info_dialog(_('Branching successful'),
203
                    _('%d revision(s) branched.') % revs)
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
204
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
205
        self.response(gtk.RESPONSE_OK)
206
    
195.5.1 by Szilveszter Farkas (Phanatic)
Scan the branch only if the entry has lost the focus. (Fixed: #93653)
207
    def _on_combo_changed(self, widget, event):
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
208
        """ We try to get the last revision if focus lost. """
209
        rev = self._get_last_revno()
210
        if rev is None:
211
            self._entry_revision.set_text(_('N/A'))
212
            self._button_revision.set_sensitive(False)
213
        else:
214
            self._entry_revision.set_text(str(rev))
215
            self._button_revision.set_sensitive(True)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
216
            if self._entry_nick.get_text() == '':
217
                self._entry_nick.set_text(os.path.basename(self._combo.get_child().get_text().rstrip("/\\")))