/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 commit.py

  • Committer: Jasper Groenewegen
  • Date: 2008-07-27 12:01:40 UTC
  • mfrom: (576.3.2 improve-merge)
  • mto: This revision was merged to the branch mainline in revision 579.
  • Revision ID: colbrac@xs4all.nl-20080727120140-1agdlzkc9fumjk5f
Merge merge dialog improvements

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
 
17
import os.path
 
18
import re
 
19
 
17
20
try:
18
21
    import pygtk
19
22
    pygtk.require("2.0")
24
27
import gobject
25
28
import pango
26
29
 
27
 
import os.path
28
 
import re
29
 
 
30
30
from bzrlib import errors, osutils
31
31
from bzrlib.trace import mutter
32
32
from bzrlib.util import bencode
33
33
 
34
 
from dialog import error_dialog, question_dialog
35
 
from errors import show_bzr_error
 
34
from bzrlib.plugins.gtk import _i18n
 
35
from bzrlib.plugins.gtk.dialog import question_dialog
 
36
from bzrlib.plugins.gtk.errors import show_bzr_error
36
37
 
37
38
try:
38
39
    import dbus
104
105
                                  parent=parent,
105
106
                                  flags=0,
106
107
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
107
 
        self._question_dialog = question_dialog
108
108
 
109
109
        self._wt = wt
110
110
        # TODO: Do something with this value, it is used by Olive
164
164
        store = self._files_store
165
165
        self._treeview_files.set_model(None)
166
166
 
167
 
        added = _('added')
168
 
        removed = _('removed')
169
 
        renamed = _('renamed')
170
 
        renamed_and_modified = _('renamed and modified')
171
 
        modified = _('modified')
172
 
        kind_changed = _('kind changed')
 
167
        added = _i18n('added')
 
168
        removed = _i18n('removed')
 
169
        renamed = _i18n('renamed')
 
170
        renamed_and_modified = _i18n('renamed and modified')
 
171
        modified = _i18n('modified')
 
172
        kind_changed = _i18n('kind changed')
173
173
 
174
174
        # The store holds:
175
175
        # [file_id, real path, checkbox, display path, changes type, message]
176
 
        # _iter_changes returns:
 
176
        # iter_changes returns:
177
177
        # (file_id, (path_in_source, path_in_target),
178
178
        #  changed_content, versioned, parent, name, kind,
179
179
        #  executable)
186
186
        self._wt.lock_read()
187
187
        self._basis_tree.lock_read()
188
188
        try:
189
 
            from diff import _iter_changes_to_status
 
189
            from diff import iter_changes_to_status
190
190
            for (file_id, real_path, change_type, display_path
191
 
                ) in _iter_changes_to_status(self._basis_tree, self._wt):
 
191
                ) in iter_changes_to_status(self._basis_tree, self._wt):
192
192
                if self._selected and real_path != self._selected:
193
193
                    enabled = False
194
194
                else:
227
227
            return
228
228
        if have_dbus:
229
229
            bus = dbus.SystemBus()
230
 
            proxy_obj = bus.get_object('org.freedesktop.NetworkManager',
231
 
                                       '/org/freedesktop/NetworkManager')
 
230
            try:
 
231
                proxy_obj = bus.get_object('org.freedesktop.NetworkManager',
 
232
                                           '/org/freedesktop/NetworkManager')
 
233
            except dbus.DBusException:
 
234
                mutter("networkmanager not available.")
 
235
                self._check_local.show()
 
236
                return
 
237
            
232
238
            dbus_iface = dbus.Interface(proxy_obj,
233
239
                                        'org.freedesktop.NetworkManager')
234
240
            try:
251
257
            self._enable_per_file_commits = True
252
258
        if not self._enable_per_file_commits:
253
259
            self._file_message_expander.hide()
254
 
            self._global_message_label.set_markup(_('<b>Commit Message</b>'))
 
260
            self._global_message_label.set_markup(_i18n('<b>Commit Message</b>'))
255
261
 
256
262
    def _compute_delta(self):
257
263
        self._delta = self._wt.changes_from(self._basis_tree)
296
302
                            gtk.gdk.CONTROL_MASK, 0, self._on_accel_next)
297
303
        self.add_accel_group(group)
298
304
 
 
305
        # ignore the escape key (avoid closing the window)
 
306
        self.connect_object('close', self.emit_stop_by_name, 'close')
 
307
 
299
308
    def _construct_left_pane(self):
300
309
        self._left_pane_box = gtk.VBox(homogeneous=False, spacing=5)
301
310
        self._construct_file_list()
302
311
        self._construct_pending_list()
303
312
 
304
 
        self._check_local = gtk.CheckButton(_("_Only commit locally"),
 
313
        self._check_local = gtk.CheckButton(_i18n("_Only commit locally"),
305
314
                                            use_underline=True)
306
315
        self._left_pane_box.pack_end(self._check_local, False, False)
307
316
        self._check_local.set_active(False)
328
337
        self._hpane.pack2(self._right_pane_table, resize=True, shrink=True)
329
338
 
330
339
    def _construct_action_pane(self):
331
 
        self._button_commit = gtk.Button(_("Comm_it"), use_underline=True)
 
340
        self._button_commit = gtk.Button(_i18n("Comm_it"), use_underline=True)
332
341
        self._button_commit.connect('clicked', self._on_commit_clicked)
333
342
        self._button_commit.set_flags(gtk.CAN_DEFAULT)
334
343
        self._button_commit.show()
354
363
 
355
364
    def _construct_file_list(self):
356
365
        self._files_box = gtk.VBox(homogeneous=False, spacing=0)
357
 
        file_label = gtk.Label(_('Files'))
 
366
        file_label = gtk.Label(_i18n('Files'))
358
367
        # file_label.show()
359
368
        self._files_box.pack_start(file_label, expand=False)
360
369
 
361
370
        self._commit_all_files_radio = gtk.RadioButton(
362
 
            None, _("Commit all changes"))
 
371
            None, _i18n("Commit all changes"))
363
372
        self._files_box.pack_start(self._commit_all_files_radio, expand=False)
364
373
        self._commit_all_files_radio.show()
365
374
        self._commit_all_files_radio.connect('toggled',
366
375
            self._toggle_commit_selection)
367
376
        self._commit_selected_radio = gtk.RadioButton(
368
 
            self._commit_all_files_radio, _("Only commit selected changes"))
 
377
            self._commit_all_files_radio, _i18n("Only commit selected changes"))
369
378
        self._files_box.pack_start(self._commit_selected_radio, expand=False)
370
379
        self._commit_selected_radio.show()
371
380
        self._commit_selected_radio.connect('toggled',
372
381
            self._toggle_commit_selection)
373
382
        if self._pending:
374
 
            self._commit_all_files_radio.set_label(_('Commit all changes*'))
 
383
            self._commit_all_files_radio.set_label(_i18n('Commit all changes*'))
375
384
            self._commit_all_files_radio.set_sensitive(False)
376
385
            self._commit_selected_radio.set_sensitive(False)
377
386
 
404
413
        crt.set_property('activatable', not bool(self._pending))
405
414
        crt.connect("toggled", self._toggle_commit, self._files_store)
406
415
        if self._pending:
407
 
            name = _('Commit*')
 
416
            name = _i18n('Commit*')
408
417
        else:
409
 
            name = _('Commit')
 
418
            name = _i18n('Commit')
410
419
        commit_col = gtk.TreeViewColumn(name, crt, active=2)
411
420
        commit_col.set_visible(False)
412
421
        self._treeview_files.append_column(commit_col)
413
 
        self._treeview_files.append_column(gtk.TreeViewColumn(_('Path'),
 
422
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Path'),
414
423
                                           gtk.CellRendererText(), text=3))
415
 
        self._treeview_files.append_column(gtk.TreeViewColumn(_('Type'),
 
424
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Type'),
416
425
                                           gtk.CellRendererText(), text=4))
417
426
        self._treeview_files.connect('cursor-changed',
418
427
                                     self._on_treeview_files_cursor_changed)
445
454
 
446
455
        pending_message = gtk.Label()
447
456
        pending_message.set_markup(
448
 
            _('<i>* Cannot select specific files when merging</i>'))
 
457
            _i18n('<i>* Cannot select specific files when merging</i>'))
449
458
        self._pending_box.pack_start(pending_message, expand=False, padding=5)
450
459
        pending_message.show()
451
460
 
452
 
        pending_label = gtk.Label(_('Pending Revisions'))
 
461
        pending_label = gtk.Label(_i18n('Pending Revisions'))
453
462
        self._pending_box.pack_start(pending_label, expand=False, padding=0)
454
463
        pending_label.show()
455
464
 
471
480
                                 )
472
481
        self._pending_store = liststore
473
482
        self._treeview_pending.set_model(liststore)
474
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Date'),
 
483
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Date'),
475
484
                                             gtk.CellRendererText(), text=1))
476
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Committer'),
 
485
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Committer'),
477
486
                                             gtk.CellRendererText(), text=2))
478
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Summary'),
 
487
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Summary'),
479
488
                                             gtk.CellRendererText(), text=3))
480
489
 
481
490
    def _construct_diff_view(self):
485
494
        #       decide that we really don't ever want to display it, we should
486
495
        #       actually remove it, and other references to it, along with the
487
496
        #       tests that it is set properly.
488
 
        self._diff_label = gtk.Label(_('Diff for whole tree'))
 
497
        self._diff_label = gtk.Label(_i18n('Diff for whole tree'))
489
498
        self._diff_label.set_alignment(0, 0)
490
499
        self._right_pane_table.set_row_spacing(self._right_pane_table_row, 0)
491
500
        self._add_to_right_table(self._diff_label, 1, False)
509
518
        self._file_message_text_view.set_accepts_tab(False)
510
519
        self._file_message_text_view.show()
511
520
 
512
 
        self._file_message_expander = gtk.Expander(_('File commit message'))
 
521
        self._file_message_expander = gtk.Expander(_i18n('File commit message'))
513
522
        self._file_message_expander.set_expanded(True)
514
523
        self._file_message_expander.add(scroller)
515
524
        self._add_to_right_table(self._file_message_expander, 1, False)
516
525
        self._file_message_expander.show()
517
526
 
518
527
    def _construct_global_message(self):
519
 
        self._global_message_label = gtk.Label(_('Global Commit Message'))
520
 
        self._global_message_label.set_markup(_('<b>Global Commit Message</b>'))
 
528
        self._global_message_label = gtk.Label(_i18n('Global Commit Message'))
 
529
        self._global_message_label.set_markup(
 
530
            _i18n('<b>Global Commit Message</b>'))
521
531
        self._global_message_label.set_alignment(0, 0)
522
532
        self._right_pane_table.set_row_spacing(self._right_pane_table_row, 0)
523
533
        self._add_to_right_table(self._global_message_label, 1, False)
543
553
 
544
554
        if selection is not None:
545
555
            path, display_path = model.get(selection, 1, 3)
546
 
            self._diff_label.set_text(_('Diff for ') + display_path)
 
556
            self._diff_label.set_text(_i18n('Diff for ') + display_path)
547
557
            if path is None:
548
558
                self._diff_view.show_diff(None)
549
559
            else:
590
600
        text_buffer = self._file_message_text_view.get_buffer()
591
601
        file_id, display_path, message = self._files_store.get(selection, 0, 3, 5)
592
602
        if file_id is None: # Whole tree
593
 
            self._file_message_expander.set_label(_('File commit message'))
 
603
            self._file_message_expander.set_label(_i18n('File commit message'))
594
604
            self._file_message_expander.set_expanded(False)
595
605
            self._file_message_expander.set_sensitive(False)
596
606
            text_buffer.set_text('')
597
607
            self._last_selected_file = None
598
608
        else:
599
 
            self._file_message_expander.set_label(_('Commit message for ')
 
609
            self._file_message_expander.set_label(_i18n('Commit message for ')
600
610
                                                  + display_path)
601
611
            self._file_message_expander.set_expanded(True)
602
612
            self._file_message_expander.set_sensitive(True)
640
650
        message = self._get_global_commit_message()
641
651
 
642
652
        if message == '':
643
 
            response = self._question_dialog(
644
 
                            _('Commit with an empty message?'),
645
 
                            _('You can describe your commit intent in the message.'))
 
653
            response = question_dialog(
 
654
                _i18n('Commit with an empty message?'),
 
655
                _i18n('You can describe your commit intent in the message.'),
 
656
                parent=self)
646
657
            if response == gtk.RESPONSE_NO:
647
658
                # Kindly give focus to message area
648
659
                self._global_message_text_view.grab_focus()
660
671
        #       entirely, since there isn't a way for them to add the unknown
661
672
        #       files at this point.
662
673
        for path in self._wt.unknowns():
663
 
            response = self._question_dialog(
664
 
                _("Commit with unknowns?"),
665
 
                _("Unknown files exist in the working tree. Commit anyway?"))
 
674
            response = question_dialog(
 
675
                _i18n("Commit with unknowns?"),
 
676
                _i18n("Unknown files exist in the working tree. Commit anyway?"),
 
677
                parent=self)
 
678
                # Doesn't set a parent for the dialog..
666
679
            if response == gtk.RESPONSE_NO:
667
680
                return
668
681
            break
679
692
                       specific_files=specific_files,
680
693
                       revprops=revprops)
681
694
        except errors.PointlessCommit:
682
 
            response = self._question_dialog(
683
 
                                _('Commit with no changes?'),
684
 
                                _('There are no changes in the working tree.'
685
 
                                  ' Do you want to commit anyway?'))
 
695
            response = question_dialog(
 
696
                _i18n('Commit with no changes?'),
 
697
                _i18n('There are no changes in the working tree.'
 
698
                      ' Do you want to commit anyway?'),
 
699
                parent=self)
686
700
            if response == gtk.RESPONSE_YES:
687
701
                rev_id = self._wt.commit(message,
688
702
                               allow_pointless=True,