/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: Jelmer Vernooij
  • Date: 2011-04-10 18:44:39 UTC
  • mto: This revision was merged to the branch mainline in revision 730.
  • Revision ID: jelmer@samba.org-20110410184439-g7hqaacexqtviq13
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import re
18
18
 
19
 
from gi.repository import Gtk
20
 
from gi.repository import GObject
21
 
from gi.repository import Pango
 
19
try:
 
20
    import pygtk
 
21
    pygtk.require("2.0")
 
22
except:
 
23
    pass
 
24
 
 
25
import gtk
 
26
import gobject
 
27
import pango
22
28
 
23
29
from bzrlib import (
24
30
    errors,
103
109
    return fixed_newline.decode('utf-8')
104
110
 
105
111
 
106
 
class CommitDialog(Gtk.Dialog):
 
112
class CommitDialog(gtk.Dialog):
107
113
    """Implementation of Commit."""
108
114
 
109
115
    def __init__(self, wt, selected=None, parent=None):
110
 
        GObject.GObject.__init__(self, title="Commit to %s" % wt.basedir,
 
116
        gtk.Dialog.__init__(self, title="Commit to %s" % wt.basedir,
111
117
                            parent=parent, flags=0,)
112
118
        self.connect('delete-event', self._on_delete_window)
113
119
        self._question_dialog = question_dialog
114
120
 
115
 
        self.set_type_hint(Gdk.WindowTypeHint.NORMAL)
 
121
        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)
116
122
 
117
123
        self._wt = wt
118
124
        # TODO: Do something with this value, it is used by Olive
280
286
        """Build up the dialog widgets."""
281
287
        # The primary pane which splits it into left and right (adjustable)
282
288
        # sections.
283
 
        self._hpane = Gtk.HPaned()
 
289
        self._hpane = gtk.HPaned()
284
290
 
285
291
        self._construct_left_pane()
286
292
        self._construct_right_pane()
287
293
        self._construct_action_pane()
288
294
 
289
 
        self.vbox.pack_start(self._hpane, True, True, 0)
 
295
        self.vbox.pack_start(self._hpane)
290
296
        self._hpane.show()
291
297
        self.set_focus(self._global_message_text_view)
292
298
 
311
317
        self._hpane.set_position(300)
312
318
 
313
319
    def _construct_accelerators(self):
314
 
        group = Gtk.AccelGroup()
315
 
        group.connect_group(Gdk.keyval_from_name('N'),
316
 
                            Gdk.EventMask.CONTROL_MASK, 0, self._on_accel_next)
 
320
        group = gtk.AccelGroup()
 
321
        group.connect_group(gtk.gdk.keyval_from_name('N'),
 
322
                            gtk.gdk.CONTROL_MASK, 0, self._on_accel_next)
317
323
        self.add_accel_group(group)
318
324
 
319
325
        # ignore the escape key (avoid closing the window)
320
326
        self.connect_object('close', self.emit_stop_by_name, 'close')
321
327
 
322
328
    def _construct_left_pane(self):
323
 
        self._left_pane_box = Gtk.VBox(homogeneous=False, spacing=5)
 
329
        self._left_pane_box = gtk.VBox(homogeneous=False, spacing=5)
324
330
        self._construct_file_list()
325
331
        self._construct_pending_list()
326
332
 
327
 
        self._check_local = Gtk.CheckButton(_i18n("_Only commit locally"),
 
333
        self._check_local = gtk.CheckButton(_i18n("_Only commit locally"),
328
334
                                            use_underline=True)
329
335
        self._left_pane_box.pack_end(self._check_local, False, False)
330
336
        self._check_local.set_active(False)
339
345
        # commit, and 1 for file commit, and it looked good. But I don't seem
340
346
        # to have a way to do that with the gtk boxes... :( (Which is extra
341
347
        # weird since wx uses gtk on Linux...)
342
 
        self._right_pane_table = Gtk.Table(rows=10, columns=1, homogeneous=False)
 
348
        self._right_pane_table = gtk.Table(rows=10, columns=1, homogeneous=False)
343
349
        self._right_pane_table.set_row_spacings(5)
344
350
        self._right_pane_table.set_col_spacings(5)
345
351
        self._right_pane_table_row = 0
351
357
        self._hpane.pack2(self._right_pane_table, resize=True, shrink=True)
352
358
 
353
359
    def _construct_action_pane(self):
354
 
        self._button_cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL)
 
360
        self._button_cancel = gtk.Button(stock=gtk.STOCK_CANCEL)
355
361
        self._button_cancel.connect('clicked', self._on_cancel_clicked)
356
362
        self._button_cancel.show()
357
363
        self.action_area.pack_end(self._button_cancel)
358
 
        self._button_commit = Gtk.Button(_i18n("Comm_it"), use_underline=True)
 
364
        self._button_commit = gtk.Button(_i18n("Comm_it"), use_underline=True)
359
365
        self._button_commit.connect('clicked', self._on_commit_clicked)
360
 
        self._button_commit.set_can_default(True)
 
366
        self._button_commit.set_flags(gtk.CAN_DEFAULT)
361
367
        self._button_commit.show()
362
368
        self.action_area.pack_end(self._button_commit)
363
369
        self._button_commit.grab_default()
371
377
        """
372
378
        end_row = self._right_pane_table_row + weight
373
379
        options = 0
374
 
        expand_opts = Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK
 
380
        expand_opts = gtk.EXPAND | gtk.FILL | gtk.SHRINK
375
381
        if expanding:
376
382
            options = expand_opts
377
383
        self._right_pane_table.attach(widget, 0, 1,
380
386
        self._right_pane_table_row = end_row
381
387
 
382
388
    def _construct_file_list(self):
383
 
        self._files_box = Gtk.VBox(homogeneous=False, spacing=0)
384
 
        file_label = Gtk.Label(label=_i18n('Files'))
 
389
        self._files_box = gtk.VBox(homogeneous=False, spacing=0)
 
390
        file_label = gtk.Label(_i18n('Files'))
385
391
        # file_label.show()
386
 
        self._files_box.pack_start(file_label, False, True, 0)
 
392
        self._files_box.pack_start(file_label, expand=False)
387
393
 
388
 
        self._commit_all_files_radio = Gtk.RadioButton(
 
394
        self._commit_all_files_radio = gtk.RadioButton(
389
395
            None, _i18n("Commit all changes"))
390
 
        self._files_box.pack_start(self._commit_all_files_radio, False, True, 0)
 
396
        self._files_box.pack_start(self._commit_all_files_radio, expand=False)
391
397
        self._commit_all_files_radio.show()
392
398
        self._commit_all_files_radio.connect('toggled',
393
399
            self._toggle_commit_selection)
394
 
        self._commit_selected_radio = Gtk.RadioButton(
 
400
        self._commit_selected_radio = gtk.RadioButton(
395
401
            self._commit_all_files_radio, _i18n("Only commit selected changes"))
396
 
        self._files_box.pack_start(self._commit_selected_radio, False, True, 0)
 
402
        self._files_box.pack_start(self._commit_selected_radio, expand=False)
397
403
        self._commit_selected_radio.show()
398
404
        self._commit_selected_radio.connect('toggled',
399
405
            self._toggle_commit_selection)
402
408
            self._commit_all_files_radio.set_sensitive(False)
403
409
            self._commit_selected_radio.set_sensitive(False)
404
410
 
405
 
        scroller = Gtk.ScrolledWindow()
406
 
        scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
407
 
        self._treeview_files = Gtk.TreeView()
 
411
        scroller = gtk.ScrolledWindow()
 
412
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
413
        self._treeview_files = gtk.TreeView()
408
414
        self._treeview_files.show()
409
415
        scroller.add(self._treeview_files)
410
 
        scroller.set_shadow_type(Gtk.ShadowType.IN)
 
416
        scroller.set_shadow_type(gtk.SHADOW_IN)
411
417
        scroller.show()
412
418
        self._files_box.pack_start(scroller,
413
419
                                   expand=True, fill=True)
414
420
        self._files_box.show()
415
 
        self._left_pane_box.pack_start(self._files_box, True, True, 0)
 
421
        self._left_pane_box.pack_start(self._files_box)
416
422
 
417
423
        # Keep note that all strings stored in a ListStore must be UTF-8
418
424
        # strings. GTK does not support directly setting and restoring Unicode
419
425
        # objects.
420
 
        liststore = Gtk.ListStore(
421
 
            GObject.TYPE_STRING,  # [0] file_id
422
 
            GObject.TYPE_STRING,  # [1] real path
423
 
            GObject.TYPE_BOOLEAN, # [2] checkbox
424
 
            GObject.TYPE_STRING,  # [3] display path
425
 
            GObject.TYPE_STRING,  # [4] changes type
426
 
            GObject.TYPE_STRING,  # [5] commit message
 
426
        liststore = gtk.ListStore(
 
427
            gobject.TYPE_STRING,  # [0] file_id
 
428
            gobject.TYPE_STRING,  # [1] real path
 
429
            gobject.TYPE_BOOLEAN, # [2] checkbox
 
430
            gobject.TYPE_STRING,  # [3] display path
 
431
            gobject.TYPE_STRING,  # [4] changes type
 
432
            gobject.TYPE_STRING,  # [5] commit message
427
433
            )
428
434
        self._files_store = liststore
429
435
        self._treeview_files.set_model(liststore)
430
 
        crt = Gtk.CellRendererToggle()
 
436
        crt = gtk.CellRendererToggle()
431
437
        crt.set_property('activatable', not bool(self._pending))
432
438
        crt.connect("toggled", self._toggle_commit, self._files_store)
433
439
        if self._pending:
434
440
            name = _i18n('Commit*')
435
441
        else:
436
442
            name = _i18n('Commit')
437
 
        commit_col = Gtk.TreeViewColumn(name, crt, active=2)
 
443
        commit_col = gtk.TreeViewColumn(name, crt, active=2)
438
444
        commit_col.set_visible(False)
439
445
        self._treeview_files.append_column(commit_col)
440
 
        self._treeview_files.append_column(Gtk.TreeViewColumn(_i18n('Path'),
441
 
                                           Gtk.CellRendererText(), text=3))
442
 
        self._treeview_files.append_column(Gtk.TreeViewColumn(_i18n('Type'),
443
 
                                           Gtk.CellRendererText(), text=4))
 
446
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Path'),
 
447
                                           gtk.CellRendererText(), text=3))
 
448
        self._treeview_files.append_column(gtk.TreeViewColumn(_i18n('Type'),
 
449
                                           gtk.CellRendererText(), text=4))
444
450
        self._treeview_files.connect('cursor-changed',
445
451
                                     self._on_treeview_files_cursor_changed)
446
452
 
467
473
    def _construct_pending_list(self):
468
474
        # Pending information defaults to hidden, we put it all in 1 box, so
469
475
        # that we can show/hide all of them at once
470
 
        self._pending_box = Gtk.VBox()
 
476
        self._pending_box = gtk.VBox()
471
477
        self._pending_box.hide()
472
478
 
473
 
        pending_message = Gtk.Label()
 
479
        pending_message = gtk.Label()
474
480
        pending_message.set_markup(
475
481
            _i18n('<i>* Cannot select specific files when merging</i>'))
476
482
        self._pending_box.pack_start(pending_message, expand=False, padding=5)
477
483
        pending_message.show()
478
484
 
479
 
        pending_label = Gtk.Label(label=_i18n('Pending Revisions'))
 
485
        pending_label = gtk.Label(_i18n('Pending Revisions'))
480
486
        self._pending_box.pack_start(pending_label, expand=False, padding=0)
481
487
        pending_label.show()
482
488
 
483
 
        scroller = Gtk.ScrolledWindow()
484
 
        scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
485
 
        self._treeview_pending = Gtk.TreeView()
 
489
        scroller = gtk.ScrolledWindow()
 
490
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
491
        self._treeview_pending = gtk.TreeView()
486
492
        scroller.add(self._treeview_pending)
487
 
        scroller.set_shadow_type(Gtk.ShadowType.IN)
 
493
        scroller.set_shadow_type(gtk.SHADOW_IN)
488
494
        scroller.show()
489
495
        self._pending_box.pack_start(scroller,
490
496
                                     expand=True, fill=True, padding=5)
491
497
        self._treeview_pending.show()
492
 
        self._left_pane_box.pack_start(self._pending_box, True, True, 0)
 
498
        self._left_pane_box.pack_start(self._pending_box)
493
499
 
494
 
        liststore = Gtk.ListStore(GObject.TYPE_STRING, # revision_id
495
 
                                  GObject.TYPE_STRING, # date
496
 
                                  GObject.TYPE_STRING, # committer
497
 
                                  GObject.TYPE_STRING, # summary
 
500
        liststore = gtk.ListStore(gobject.TYPE_STRING, # revision_id
 
501
                                  gobject.TYPE_STRING, # date
 
502
                                  gobject.TYPE_STRING, # committer
 
503
                                  gobject.TYPE_STRING, # summary
498
504
                                 )
499
505
        self._pending_store = liststore
500
506
        self._treeview_pending.set_model(liststore)
501
 
        self._treeview_pending.append_column(Gtk.TreeViewColumn(_i18n('Date'),
502
 
                                             Gtk.CellRendererText(), text=1))
503
 
        self._treeview_pending.append_column(Gtk.TreeViewColumn(_i18n('Committer'),
504
 
                                             Gtk.CellRendererText(), text=2))
505
 
        self._treeview_pending.append_column(Gtk.TreeViewColumn(_i18n('Summary'),
506
 
                                             Gtk.CellRendererText(), text=3))
 
507
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Date'),
 
508
                                             gtk.CellRendererText(), text=1))
 
509
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Committer'),
 
510
                                             gtk.CellRendererText(), text=2))
 
511
        self._treeview_pending.append_column(gtk.TreeViewColumn(_i18n('Summary'),
 
512
                                             gtk.CellRendererText(), text=3))
507
513
 
508
514
    def _construct_diff_view(self):
509
515
        from bzrlib.plugins.gtk.diff import DiffView
512
518
        #       decide that we really don't ever want to display it, we should
513
519
        #       actually remove it, and other references to it, along with the
514
520
        #       tests that it is set properly.
515
 
        self._diff_label = Gtk.Label(label=_i18n('Diff for whole tree'))
 
521
        self._diff_label = gtk.Label(_i18n('Diff for whole tree'))
516
522
        self._diff_label.set_alignment(0, 0)
517
523
        self._right_pane_table.set_row_spacing(self._right_pane_table_row, 0)
518
524
        self._add_to_right_table(self._diff_label, 1, False)
523
529
        self._diff_view.show()
524
530
 
525
531
    def _construct_file_message(self):
526
 
        scroller = Gtk.ScrolledWindow()
527
 
        scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
 
532
        scroller = gtk.ScrolledWindow()
 
533
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
528
534
 
529
 
        self._file_message_text_view = Gtk.TextView()
 
535
        self._file_message_text_view = gtk.TextView()
530
536
        scroller.add(self._file_message_text_view)
531
 
        scroller.set_shadow_type(Gtk.ShadowType.IN)
 
537
        scroller.set_shadow_type(gtk.SHADOW_IN)
532
538
        scroller.show()
533
539
 
534
 
        self._file_message_text_view.modify_font(Pango.FontDescription("Monospace"))
535
 
        self._file_message_text_view.set_wrap_mode(Gtk.WrapMode.WORD)
 
540
        self._file_message_text_view.modify_font(pango.FontDescription("Monospace"))
 
541
        self._file_message_text_view.set_wrap_mode(gtk.WRAP_WORD)
536
542
        self._file_message_text_view.set_accepts_tab(False)
537
543
        self._file_message_text_view.show()
538
544
 
539
 
        self._file_message_expander = Gtk.Expander(_i18n('File commit message'))
 
545
        self._file_message_expander = gtk.Expander(_i18n('File commit message'))
540
546
        self._file_message_expander.set_expanded(True)
541
547
        self._file_message_expander.add(scroller)
542
548
        self._add_to_right_table(self._file_message_expander, 1, False)
543
549
        self._file_message_expander.show()
544
550
 
545
551
    def _construct_global_message(self):
546
 
        self._global_message_label = Gtk.Label(label=_i18n('Global Commit Message'))
 
552
        self._global_message_label = gtk.Label(_i18n('Global Commit Message'))
547
553
        self._global_message_label.set_markup(
548
554
            _i18n('<b>Global Commit Message</b>'))
549
555
        self._global_message_label.set_alignment(0, 0)
552
558
        # Can we remove the spacing between the label and the box?
553
559
        self._global_message_label.show()
554
560
 
555
 
        scroller = Gtk.ScrolledWindow()
556
 
        scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
 
561
        scroller = gtk.ScrolledWindow()
 
562
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
557
563
 
558
 
        self._global_message_text_view = Gtk.TextView()
 
564
        self._global_message_text_view = gtk.TextView()
559
565
        self._set_global_commit_message(self._saved_commit_messages_manager.get()[0])
560
 
        self._global_message_text_view.modify_font(Pango.FontDescription("Monospace"))
 
566
        self._global_message_text_view.modify_font(pango.FontDescription("Monospace"))
561
567
        scroller.add(self._global_message_text_view)
562
 
        scroller.set_shadow_type(Gtk.ShadowType.IN)
 
568
        scroller.set_shadow_type(gtk.SHADOW_IN)
563
569
        scroller.show()
564
570
        self._add_to_right_table(scroller, 2, True)
565
 
        self._file_message_text_view.set_wrap_mode(Gtk.WrapMode.WORD)
 
571
        self._file_message_text_view.set_wrap_mode(gtk.WRAP_WORD)
566
572
        self._file_message_text_view.set_accepts_tab(False)
567
573
        self._global_message_text_view.show()
568
574
 
683
689
                _i18n('Commit cancelled'),
684
690
                _i18n('Do you want to save your commit messages ?'),
685
691
                parent=self)
686
 
            if response == Gtk.ResponseType.NO:
 
692
            if response == gtk.RESPONSE_NO:
687
693
                 # save nothing and destroy old comments if any
688
694
                mgr = SavedCommitMessagesManager()
689
695
        mgr.save(self._wt, self._wt.branch)
690
 
        self.response(Gtk.ResponseType.CANCEL) # close window
 
696
        self.response(gtk.RESPONSE_CANCEL) # close window
691
697
 
692
698
    @show_bzr_error
693
699
    def _on_commit_clicked(self, button):
702
708
                _i18n('Commit with an empty message?'),
703
709
                _i18n('You can describe your commit intent in the message.'),
704
710
                parent=self)
705
 
            if response == Gtk.ResponseType.NO:
 
711
            if response == gtk.RESPONSE_NO:
706
712
                # Kindly give focus to message area
707
713
                self._global_message_text_view.grab_focus()
708
714
                return
724
730
                _i18n("Unknown files exist in the working tree. Commit anyway?"),
725
731
                parent=self)
726
732
                # Doesn't set a parent for the dialog..
727
 
            if response == Gtk.ResponseType.NO:
 
733
            if response == gtk.RESPONSE_NO:
728
734
                return
729
735
            break
730
736
 
745
751
                _i18n('There are no changes in the working tree.'
746
752
                      ' Do you want to commit anyway?'),
747
753
                parent=self)
748
 
            if response == Gtk.ResponseType.YES:
 
754
            if response == gtk.RESPONSE_YES:
749
755
                rev_id = self._wt.commit(message,
750
756
                               allow_pointless=True,
751
757
                               strict=False,
755
761
        self.committed_revision_id = rev_id
756
762
        # destroy old comments if any
757
763
        SavedCommitMessagesManager().save(self._wt, self._wt.branch)
758
 
        self.response(Gtk.ResponseType.OK)
 
764
        self.response(gtk.RESPONSE_OK)
759
765
 
760
766
    def _get_global_commit_message(self):
761
767
        buf = self._global_message_text_view.get_buffer()