/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to checkout.py

Add options to viz treeview to not show the line graph, and to only show the main line.
Set the revision browser to use these options.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import os
18
18
 
19
 
from gi.repository import GObject
20
 
from gi.repository import Gtk
 
19
try:
 
20
    import pygtk
 
21
    pygtk.require("2.0")
 
22
except:
 
23
    pass
 
24
 
 
25
import gtk
 
26
 
 
27
from errors import show_bzr_error
21
28
 
22
29
from bzrlib.branch import Branch
23
30
from bzrlib.config import GlobalConfig
24
31
 
25
 
from bzrlib.plugins.gtk.dialog import error_dialog
26
 
from bzrlib.plugins.gtk.errors import show_bzr_error
27
 
from bzrlib.plugins.gtk.history import UrlHistory
28
 
from bzrlib.plugins.gtk.i18n import _i18n
29
 
 
30
 
 
31
 
class CheckoutDialog(Gtk.Dialog):
 
32
from dialog import error_dialog
 
33
 
 
34
from history import UrlHistory
 
35
from olive import Preferences
 
36
 
 
37
class CheckoutDialog(gtk.Dialog):
32
38
    """ New implementation of the Checkout dialog. """
33
 
 
34
39
    def __init__(self, path=None, parent=None, remote_path=None):
35
40
        """ Initialize the Checkout dialog. """
36
 
        super(CheckoutDialog, self).__init__(
37
 
            title="Checkout - Olive", parent=parent, flags=0,
38
 
            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL))
39
 
 
 
41
        gtk.Dialog.__init__(self, title="Checkout - Olive",
 
42
                                  parent=parent,
 
43
                                  flags=0,
 
44
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
 
45
        
40
46
        # Get arguments
41
47
        self.path = path
42
 
 
 
48
        
43
49
        # Create the widgets
44
 
        self._button_checkout = Gtk.Button(_i18n("Check_out"), use_underline=True)
45
 
        self._button_revision = Gtk.Button('')
46
 
        self._image_browse = Gtk.Image()
47
 
        self._filechooser = Gtk.FileChooserButton(_i18n("Please select a folder"))
48
 
        self._combo = Gtk.ComboBox.new_with_entry()
49
 
        self._label_location = Gtk.Label(label=_i18n("Branch location:"))
50
 
        self._label_destination = Gtk.Label(label=_i18n("Destination:"))
51
 
        self._label_nick = Gtk.Label(label=_i18n("Branch nick:"))
52
 
        self._label_revision = Gtk.Label(label=_i18n("Revision:"))
53
 
        self._hbox_revision = Gtk.HBox()
54
 
        self._entry_revision = Gtk.Entry()
55
 
        self._entry_nick = Gtk.Entry()
56
 
        self._check_lightweight = Gtk.CheckButton(_i18n("_Lightweight checkout"),
 
50
        self._button_checkout = gtk.Button(_("Check_out"), use_underline=True)
 
51
        self._button_revision = gtk.Button('')
 
52
        self._image_browse = gtk.Image()
 
53
        self._filechooser = gtk.FileChooserButton(_("Please select a folder"))
 
54
        self._combo = gtk.ComboBoxEntry()
 
55
        self._label_location = gtk.Label(_("Branch location:"))
 
56
        self._label_destination = gtk.Label(_("Destination:"))
 
57
        self._label_nick = gtk.Label(_("Branck nick:"))
 
58
        self._label_revision = gtk.Label(_("Revision:"))
 
59
        self._hbox_revision = gtk.HBox()
 
60
        self._entry_revision = gtk.Entry()
 
61
        self._entry_nick = gtk.Entry()
 
62
        self._check_lightweight = gtk.CheckButton(_("_Lightweight checkout"),
57
63
                                                  use_underline=True)
58
 
 
 
64
        
59
65
        # Set callbacks
60
66
        self._button_checkout.connect('clicked', self._on_checkout_clicked)
61
67
        self._button_revision.connect('clicked', self._on_revision_clicked)
62
 
        self._combo.get_child().connect('focus-out-event', self._on_combo_changed)
63
 
 
 
68
        self._combo.child.connect('focus-out-event', self._on_combo_changed)
 
69
        
64
70
        # Create the table and pack the widgets into it
65
 
        self._table = Gtk.Table(rows=3, columns=2)
 
71
        self._table = gtk.Table(rows=3, columns=2)
66
72
        self._table.attach(self._label_location, 0, 1, 0, 1)
67
73
        self._table.attach(self._label_destination, 0, 1, 1, 2)
68
74
        self._table.attach(self._label_nick, 0, 1, 2, 3)
72
78
        self._table.attach(self._entry_nick, 1, 2, 2, 3)
73
79
        self._table.attach(self._hbox_revision, 1, 2, 3, 4)
74
80
        self._table.attach(self._check_lightweight, 1, 2, 4, 5)
75
 
 
 
81
        
76
82
        # Set properties
77
 
        self._image_browse.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON)
 
83
        self._image_browse.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
78
84
        self._button_revision.set_image(self._image_browse)
79
85
        self._button_revision.set_sensitive(False)
80
 
        self._filechooser.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
 
86
        self._filechooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
81
87
        self._label_location.set_alignment(0, 0.5)
82
88
        self._label_destination.set_alignment(0, 0.5)
83
89
        self._label_nick.set_alignment(0, 0.5)
84
90
        self._label_revision.set_alignment(0, 0.5)
85
91
        self._table.set_row_spacings(3)
86
92
        self._table.set_col_spacings(3)
87
 
        self.get_content_area().set_spacing(3)
 
93
        self.vbox.set_spacing(3)
88
94
        if self.path is not None:
89
95
            self._filechooser.set_filename(self.path)
90
96
        if remote_path is not None:
91
 
            self._combo.get_child().set_text(remote_path)
92
 
 
 
97
            self._combo.child.set_text(remote_path)
 
98
        
93
99
        # Pack some widgets
94
 
        self._hbox_revision.pack_start(self._entry_revision, True, True, 0)
95
 
        self._hbox_revision.pack_start(self._button_revision, False, False, 0)
96
 
        self.get_content_area().add(self._table)
97
 
        self.action_area.pack_end(self._button_checkout, False, False, 0)
98
 
 
 
100
        self._hbox_revision.pack_start(self._entry_revision, True, True)
 
101
        self._hbox_revision.pack_start(self._button_revision, False, False)
 
102
        self.vbox.add(self._table)
 
103
        self.action_area.pack_end(self._button_checkout)
 
104
        
99
105
        # Show the dialog
100
 
        self.get_content_area().show_all()
101
 
 
 
106
        self.vbox.show_all()
 
107
        
102
108
        # Build checkout history
103
109
        self._history = UrlHistory(GlobalConfig(), 'branch_history')
104
110
        self._build_history()
105
 
 
 
111
    
106
112
    def _build_history(self):
107
113
        """ Build up the checkout history. """
108
 
        self._combo_model = Gtk.ListStore(str)
109
 
 
 
114
        self._combo_model = gtk.ListStore(str)
 
115
        
110
116
        for item in self._history.get_entries():
111
117
            self._combo_model.append([ item ])
112
 
 
 
118
        
 
119
        pref = Preferences()
 
120
        for item in pref.get_bookmarks():
 
121
            self._combo_model.append([ item ])
 
122
        
113
123
        self._combo.set_model(self._combo_model)
114
 
        self._combo.set_entry_text_column(0)
115
 
 
 
124
        self._combo.set_text_column(0)
 
125
    
116
126
    def _get_last_revno(self):
117
127
        """ Get the revno of the last revision (if any). """
118
128
        location = self._combo.get_child().get_text()
122
132
            return None
123
133
        else:
124
134
            return br.revno()
125
 
 
 
135
    
126
136
    def _on_revision_clicked(self, button):
127
137
        """ Browse for revision button clicked handler. """
128
138
        from revbrowser import RevisionBrowser
129
 
 
 
139
        
130
140
        location = self._combo.get_child().get_text()
131
 
 
 
141
        
132
142
        try:
133
143
            br = Branch.open(location)
134
144
        except:
136
146
        else:
137
147
            revb = RevisionBrowser(br, self)
138
148
            response = revb.run()
139
 
            if response != Gtk.ResponseType.NONE:
 
149
            if response != gtk.RESPONSE_NONE:
140
150
                revb.hide()
141
 
 
142
 
                if response == Gtk.ResponseType.OK:
 
151
        
 
152
                if response == gtk.RESPONSE_OK:
143
153
                    if revb.selected_revno is not None:
144
154
                        self._entry_revision.set_text(revb.selected_revno)
145
 
 
 
155
            
146
156
                revb.destroy()
147
 
 
 
157
    
148
158
    @show_bzr_error
149
159
    def _on_checkout_clicked(self, button):
150
160
        """ Checkout button clicked handler. """
151
161
        location = self._combo.get_child().get_text()
152
162
        if location is '':
153
 
            error_dialog(_i18n('Missing branch location'),
154
 
                         _i18n('You must specify a branch location.'))
 
163
            error_dialog(_('Missing branch location'),
 
164
                         _('You must specify a branch location.'))
155
165
            return
156
 
 
 
166
        
157
167
        destination = self._filechooser.get_filename()
158
168
        try:
159
169
            revno = int(self._entry_revision.get_text())
160
170
        except:
161
171
            revno = None
162
 
 
 
172
        
163
173
        nick = self._entry_nick.get_text()
164
174
        if nick is '':
165
175
            nick = os.path.basename(location.rstrip("/\\"))
166
 
 
 
176
        
167
177
        br_from = Branch.open(location)
168
 
 
 
178
        
169
179
        revision_id = br_from.get_rev_id(revno)
170
180
        lightweight = self._check_lightweight.get_active()
171
181
        to_location = destination + os.sep + nick
172
 
 
 
182
        
173
183
        os.mkdir(to_location)
174
 
 
 
184
        
175
185
        br_from.create_checkout(to_location, revision_id, lightweight)
176
 
 
 
186
        
177
187
        self._history.add_entry(location)
178
 
 
179
 
        self.response(Gtk.ResponseType.OK)
180
 
 
 
188
        
 
189
        self.response(gtk.RESPONSE_OK)
 
190
    
181
191
    def _on_combo_changed(self, widget, event):
182
192
        """ We try to get the last revision if focus lost. """
183
193
        rev = self._get_last_revno()
184
194
        if rev is None:
185
 
            self._entry_revision.set_text(_i18n('N/A'))
 
195
            self._entry_revision.set_text(_('N/A'))
186
196
            self._button_revision.set_sensitive(False)
187
197
        else:
188
198
            self._entry_revision.set_text(str(rev))