/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:
257
257
            self._enable_per_file_commits = True
258
258
        if not self._enable_per_file_commits:
259
259
            self._file_message_expander.hide()
260
 
            self._global_message_label.set_markup(_('<b>Commit Message</b>'))
 
260
            self._global_message_label.set_markup(_i18n('<b>Commit Message</b>'))
261
261
 
262
262
    def _compute_delta(self):
263
263
        self._delta = self._wt.changes_from(self._basis_tree)
302
302
                            gtk.gdk.CONTROL_MASK, 0, self._on_accel_next)
303
303
        self.add_accel_group(group)
304
304
 
 
305
        # ignore the escape key (avoid closing the window)
 
306
        self.connect_object('close', self.emit_stop_by_name, 'close')
 
307
 
305
308
    def _construct_left_pane(self):
306
309
        self._left_pane_box = gtk.VBox(homogeneous=False, spacing=5)
307
310
        self._construct_file_list()
308
311
        self._construct_pending_list()
309
312
 
310
 
        self._check_local = gtk.CheckButton(_("_Only commit locally"),
 
313
        self._check_local = gtk.CheckButton(_i18n("_Only commit locally"),
311
314
                                            use_underline=True)
312
315
        self._left_pane_box.pack_end(self._check_local, False, False)
313
316
        self._check_local.set_active(False)
334
337
        self._hpane.pack2(self._right_pane_table, resize=True, shrink=True)
335
338
 
336
339
    def _construct_action_pane(self):
337
 
        self._button_commit = gtk.Button(_("Comm_it"), use_underline=True)
 
340
        self._button_commit = gtk.Button(_i18n("Comm_it"), use_underline=True)
338
341
        self._button_commit.connect('clicked', self._on_commit_clicked)
339
342
        self._button_commit.set_flags(gtk.CAN_DEFAULT)
340
343
        self._button_commit.show()
360
363
 
361
364
    def _construct_file_list(self):
362
365
        self._files_box = gtk.VBox(homogeneous=False, spacing=0)
363
 
        file_label = gtk.Label(_('Files'))
 
366
        file_label = gtk.Label(_i18n('Files'))
364
367
        # file_label.show()
365
368
        self._files_box.pack_start(file_label, expand=False)
366
369
 
367
370
        self._commit_all_files_radio = gtk.RadioButton(
368
 
            None, _("Commit all changes"))
 
371
            None, _i18n("Commit all changes"))
369
372
        self._files_box.pack_start(self._commit_all_files_radio, expand=False)
370
373
        self._commit_all_files_radio.show()
371
374
        self._commit_all_files_radio.connect('toggled',
372
375
            self._toggle_commit_selection)
373
376
        self._commit_selected_radio = gtk.RadioButton(
374
 
            self._commit_all_files_radio, _("Only commit selected changes"))
 
377
            self._commit_all_files_radio, _i18n("Only commit selected changes"))
375
378
        self._files_box.pack_start(self._commit_selected_radio, expand=False)
376
379
        self._commit_selected_radio.show()
377
380
        self._commit_selected_radio.connect('toggled',
378
381
            self._toggle_commit_selection)
379
382
        if self._pending:
380
 
            self._commit_all_files_radio.set_label(_('Commit all changes*'))
 
383
            self._commit_all_files_radio.set_label(_i18n('Commit all changes*'))
381
384
            self._commit_all_files_radio.set_sensitive(False)
382
385
            self._commit_selected_radio.set_sensitive(False)
383
386
 
410
413
        crt.set_property('activatable', not bool(self._pending))
411
414
        crt.connect("toggled", self._toggle_commit, self._files_store)
412
415
        if self._pending:
413
 
            name = _('Commit*')
 
416
            name = _i18n('Commit*')
414
417
        else:
415
 
            name = _('Commit')
 
418
            name = _i18n('Commit')
416
419
        commit_col = gtk.TreeViewColumn(name, crt, active=2)
417
420
        commit_col.set_visible(False)
418
421
        self._treeview_files.append_column(commit_col)
419
 
        self._treeview_files.append_column(gtk.TreeViewColumn(_('Path'),
 
422
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Path'),
420
423
                                           gtk.CellRendererText(), text=3))
421
 
        self._treeview_files.append_column(gtk.TreeViewColumn(_('Type'),
 
424
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Type'),
422
425
                                           gtk.CellRendererText(), text=4))
423
426
        self._treeview_files.connect('cursor-changed',
424
427
                                     self._on_treeview_files_cursor_changed)
451
454
 
452
455
        pending_message = gtk.Label()
453
456
        pending_message.set_markup(
454
 
            _('<i>* Cannot select specific files when merging</i>'))
 
457
            _i18n('<i>* Cannot select specific files when merging</i>'))
455
458
        self._pending_box.pack_start(pending_message, expand=False, padding=5)
456
459
        pending_message.show()
457
460
 
458
 
        pending_label = gtk.Label(_('Pending Revisions'))
 
461
        pending_label = gtk.Label(_i18n('Pending Revisions'))
459
462
        self._pending_box.pack_start(pending_label, expand=False, padding=0)
460
463
        pending_label.show()
461
464
 
477
480
                                 )
478
481
        self._pending_store = liststore
479
482
        self._treeview_pending.set_model(liststore)
480
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Date'),
 
483
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Date'),
481
484
                                             gtk.CellRendererText(), text=1))
482
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Committer'),
 
485
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Committer'),
483
486
                                             gtk.CellRendererText(), text=2))
484
 
        self._treeview_pending.append_column(gtk.TreeViewColumn(_('Summary'),
 
487
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Summary'),
485
488
                                             gtk.CellRendererText(), text=3))
486
489
 
487
490
    def _construct_diff_view(self):
491
494
        #       decide that we really don't ever want to display it, we should
492
495
        #       actually remove it, and other references to it, along with the
493
496
        #       tests that it is set properly.
494
 
        self._diff_label = gtk.Label(_('Diff for whole tree'))
 
497
        self._diff_label = gtk.Label(_i18n('Diff for whole tree'))
495
498
        self._diff_label.set_alignment(0, 0)
496
499
        self._right_pane_table.set_row_spacing(self._right_pane_table_row, 0)
497
500
        self._add_to_right_table(self._diff_label, 1, False)
515
518
        self._file_message_text_view.set_accepts_tab(False)
516
519
        self._file_message_text_view.show()
517
520
 
518
 
        self._file_message_expander = gtk.Expander(_('File commit message'))
 
521
        self._file_message_expander = gtk.Expander(_i18n('File commit message'))
519
522
        self._file_message_expander.set_expanded(True)
520
523
        self._file_message_expander.add(scroller)
521
524
        self._add_to_right_table(self._file_message_expander, 1, False)
522
525
        self._file_message_expander.show()
523
526
 
524
527
    def _construct_global_message(self):
525
 
        self._global_message_label = gtk.Label(_('Global Commit Message'))
526
 
        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>'))
527
531
        self._global_message_label.set_alignment(0, 0)
528
532
        self._right_pane_table.set_row_spacing(self._right_pane_table_row, 0)
529
533
        self._add_to_right_table(self._global_message_label, 1, False)
549
553
 
550
554
        if selection is not None:
551
555
            path, display_path = model.get(selection, 1, 3)
552
 
            self._diff_label.set_text(_('Diff for ') + display_path)
 
556
            self._diff_label.set_text(_i18n('Diff for ') + display_path)
553
557
            if path is None:
554
558
                self._diff_view.show_diff(None)
555
559
            else:
596
600
        text_buffer = self._file_message_text_view.get_buffer()
597
601
        file_id, display_path, message = self._files_store.get(selection, 0, 3, 5)
598
602
        if file_id is None: # Whole tree
599
 
            self._file_message_expander.set_label(_('File commit message'))
 
603
            self._file_message_expander.set_label(_i18n('File commit message'))
600
604
            self._file_message_expander.set_expanded(False)
601
605
            self._file_message_expander.set_sensitive(False)
602
606
            text_buffer.set_text('')
603
607
            self._last_selected_file = None
604
608
        else:
605
 
            self._file_message_expander.set_label(_('Commit message for ')
 
609
            self._file_message_expander.set_label(_i18n('Commit message for ')
606
610
                                                  + display_path)
607
611
            self._file_message_expander.set_expanded(True)
608
612
            self._file_message_expander.set_sensitive(True)
646
650
        message = self._get_global_commit_message()
647
651
 
648
652
        if message == '':
649
 
            response = self._question_dialog(
650
 
                            _('Commit with an empty message?'),
651
 
                            _('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)
652
657
            if response == gtk.RESPONSE_NO:
653
658
                # Kindly give focus to message area
654
659
                self._global_message_text_view.grab_focus()
666
671
        #       entirely, since there isn't a way for them to add the unknown
667
672
        #       files at this point.
668
673
        for path in self._wt.unknowns():
669
 
            response = self._question_dialog(
670
 
                _("Commit with unknowns?"),
671
 
                _("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..
672
679
            if response == gtk.RESPONSE_NO:
673
680
                return
674
681
            break
685
692
                       specific_files=specific_files,
686
693
                       revprops=revprops)
687
694
        except errors.PointlessCommit:
688
 
            response = self._question_dialog(
689
 
                                _('Commit with no changes?'),
690
 
                                _('There are no changes in the working tree.'
691
 
                                  ' 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)
692
700
            if response == gtk.RESPONSE_YES:
693
701
                rev_id = self._wt.commit(message,
694
702
                               allow_pointless=True,