/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: Curtis Hovey
  • Date: 2011-07-31 16:50:29 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110731165029-9gixuqypi3lwapzm
Removed import_pygtk because gi does not impicitly call Main(). Inlined checks for gtk availablility.

Show diffs side-by-side

added added

removed removed

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