/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 diff.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:
10
10
 
11
11
from cStringIO import StringIO
12
12
 
13
 
import pygtk
14
 
pygtk.require("2.0")
15
 
import gtk
16
 
import pango
 
13
from gi.repository import Gtk
 
14
from gi.repository import Pango
17
15
import os
18
16
import re
19
17
import sys
24
22
    from elementtree.ElementTree import Element, SubElement, tostring
25
23
 
26
24
try:
27
 
    import gtksourceview2
 
25
    from gi.repository import GtkSource
28
26
    have_gtksourceview = True
29
27
except ImportError:
30
28
    have_gtksourceview = False
31
29
try:
32
 
    import gconf
 
30
    from gi.repository import GConf
33
31
    have_gconf = True
34
32
except ImportError:
35
33
    have_gconf = False
66
64
    pass
67
65
 
68
66
 
69
 
class DiffFileView(gtk.ScrolledWindow):
 
67
class DiffFileView(Gtk.ScrolledWindow):
70
68
    """Window for displaying diffs from a diff file"""
71
69
 
72
70
    def __init__(self):
73
 
        gtk.ScrolledWindow.__init__(self)
 
71
        GObject.GObject.__init__(self)
74
72
        self.construct()
75
73
        self._diffs = {}
76
74
 
77
75
    def construct(self):
78
 
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
79
 
        self.set_shadow_type(gtk.SHADOW_IN)
 
76
        self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
 
77
        self.set_shadow_type(Gtk.ShadowType.IN)
80
78
 
81
79
        if have_gtksourceview:
82
 
            self.buffer = gtksourceview2.Buffer()
83
 
            slm = gtksourceview2.LanguageManager()
84
 
            guess_language = getattr(gtksourceview2.LanguageManager, 
 
80
            self.buffer = GtkSource.Buffer()
 
81
            slm = GtkSource.LanguageManager()
 
82
            guess_language = getattr(GtkSource.LanguageManager, 
85
83
                "guess_language", fallback_guess_language)
86
84
            gsl = guess_language(slm, content_type="text/x-patch")
87
85
            if have_gconf:
90
88
            self.buffer.set_language(gsl)
91
89
            self.buffer.set_highlight_syntax(True)
92
90
 
93
 
            self.sourceview = gtksourceview2.View(self.buffer)
 
91
            self.sourceview = GtkSource.View(self.buffer)
94
92
        else:
95
 
            self.buffer = gtk.TextBuffer()
96
 
            self.sourceview = gtk.TextView(self.buffer)
 
93
            self.buffer = Gtk.TextBuffer()
 
94
            self.sourceview = Gtk.TextView(self.buffer)
97
95
 
98
96
        self.sourceview.set_editable(False)
99
 
        self.sourceview.modify_font(pango.FontDescription("Monospace"))
 
97
        self.sourceview.modify_font(Pango.FontDescription("Monospace"))
100
98
        self.add(self.sourceview)
101
99
        self.sourceview.show()
102
100
 
106
104
 
107
105
        This method needs the gconf module.
108
106
 
109
 
        :param buf: a gtksourceview2.Buffer object.
 
107
        :param buf: a GtkSource.Buffer object.
110
108
        """
111
109
        GEDIT_SCHEME_PATH = '/apps/gedit-2/preferences/editor/colors/scheme'
112
110
        GEDIT_USER_STYLES_PATH = os.path.expanduser('~/.gnome2/gedit/styles')
113
111
 
114
 
        client = gconf.client_get_default()
 
112
        client = GConf.Client.get_default()
115
113
        style_scheme_name = client.get_string(GEDIT_SCHEME_PATH)
116
114
        if style_scheme_name is not None:
117
 
            style_scheme_mgr = gtksourceview2.StyleSchemeManager()
 
115
            style_scheme_mgr = GtkSource.StyleSchemeManager()
118
116
            style_scheme_mgr.append_search_path(GEDIT_USER_STYLES_PATH)
119
117
            
120
118
            style_scheme = style_scheme_mgr.get_scheme(style_scheme_name)
128
126
 
129
127
        Both ~/.colordiffrc and ~/.colordiffrc.bzr-gtk are read.
130
128
 
131
 
        :param buf: a "Diff" gtksourceview2.Buffer object.
 
129
        :param buf: a "Diff" GtkSource.Buffer object.
132
130
        """
133
 
        scheme_manager = gtksourceview2.StyleSchemeManager()
 
131
        scheme_manager = GtkSource.StyleSchemeManager()
134
132
        style_scheme = scheme_manager.get_scheme('colordiff')
135
133
        
136
134
        # if style scheme not found, we'll generate it from colordiffrc
284
282
        self.buffer.set_text(decoded.encode('UTF-8'))
285
283
 
286
284
 
287
 
class DiffWidget(gtk.HPaned):
 
285
class DiffWidget(Gtk.HPaned):
288
286
    """Diff widget
289
287
 
290
288
    """
292
290
        super(DiffWidget, self).__init__()
293
291
 
294
292
        # The file hierarchy: a scrollable treeview
295
 
        scrollwin = gtk.ScrolledWindow()
296
 
        scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
297
 
        scrollwin.set_shadow_type(gtk.SHADOW_IN)
 
293
        scrollwin = Gtk.ScrolledWindow()
 
294
        scrollwin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
 
295
        scrollwin.set_shadow_type(Gtk.ShadowType.IN)
298
296
        self.pack1(scrollwin)
299
297
        scrollwin.show()
300
298
        
301
 
        self.model = gtk.TreeStore(str, str)
302
 
        self.treeview = gtk.TreeView(self.model)
 
299
        self.model = Gtk.TreeStore(str, str)
 
300
        self.treeview = Gtk.TreeView(self.model)
303
301
        self.treeview.set_headers_visible(False)
304
302
        self.treeview.set_search_column(1)
305
303
        self.treeview.connect("cursor-changed", self._treeview_cursor_cb)
306
304
        scrollwin.add(self.treeview)
307
305
        self.treeview.show()
308
306
 
309
 
        cell = gtk.CellRendererText()
 
307
        cell = Gtk.CellRendererText()
310
308
        cell.set_property("width-chars", 20)
311
 
        column = gtk.TreeViewColumn()
312
 
        column.pack_start(cell, expand=True)
 
309
        column = Gtk.TreeViewColumn()
 
310
        column.pack_start(cell, True, True, 0)
313
311
        column.add_attribute(cell, "text", 0)
314
312
        self.treeview.append_column(column)
315
313
 
403
401
    def _on_wraplines_toggled(self, widget=None, wrap=False):
404
402
        """Callback for when the wrap lines checkbutton is toggled"""
405
403
        if wrap or widget.get_active():
406
 
            self.diff_view.sourceview.set_wrap_mode(gtk.WRAP_WORD)
 
404
            self.diff_view.sourceview.set_wrap_mode(Gtk.WrapMode.WORD)
407
405
        else:
408
 
            self.diff_view.sourceview.set_wrap_mode(gtk.WRAP_NONE)
 
406
            self.diff_view.sourceview.set_wrap_mode(Gtk.WrapMode.NONE)
409
407
 
410
408
class DiffWindow(Window):
411
409
    """Diff window.
429
427
 
430
428
    def construct(self, operations):
431
429
        """Construct the window contents."""
432
 
        self.vbox = gtk.VBox()
 
430
        self.vbox = Gtk.VBox()
433
431
        self.add(self.vbox)
434
432
        self.vbox.show()
435
433
        self.diff = DiffWidget()
444
442
        
445
443
    
446
444
    def _get_menu_bar(self):
447
 
        menubar = gtk.MenuBar()
 
445
        menubar = Gtk.MenuBar()
448
446
        # View menu
449
 
        mb_view = gtk.MenuItem(_i18n("_View"))
450
 
        mb_view_menu = gtk.Menu()
451
 
        mb_view_wrapsource = gtk.CheckMenuItem(_i18n("Wrap _Long Lines"))
 
447
        mb_view = Gtk.MenuItem(_i18n("_View"))
 
448
        mb_view_menu = Gtk.Menu()
 
449
        mb_view_wrapsource = Gtk.CheckMenuItem(_i18n("Wrap _Long Lines"))
452
450
        mb_view_wrapsource.connect('activate', self.diff._on_wraplines_toggled)
453
451
        mb_view_wrapsource.show()
454
452
        mb_view_menu.append(mb_view_wrapsource)
466
464
        """
467
465
        if operations is None:
468
466
            return None
469
 
        hbox = gtk.HButtonBox()
470
 
        hbox.set_layout(gtk.BUTTONBOX_START)
 
467
        hbox = Gtk.HButtonBox()
 
468
        hbox.set_layout(Gtk.ButtonBoxStyle.START)
471
469
        for title, method in operations:
472
 
            merge_button = gtk.Button(title)
 
470
            merge_button = Gtk.Button(title)
473
471
            merge_button.show()
474
 
            merge_button.set_relief(gtk.RELIEF_NONE)
 
472
            merge_button.set_relief(Gtk.ReliefStyle.NONE)
475
473
            merge_button.connect("clicked", method)
476
474
            hbox.pack_start(merge_button, expand=False, fill=True)
477
475
        hbox.show()
478
476
        return hbox
479
477
 
480
478
    def _get_merge_target(self):
481
 
        d = gtk.FileChooserDialog('Merge branch', self,
482
 
                                  gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
483
 
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
484
 
                                           gtk.STOCK_CANCEL,
485
 
                                           gtk.RESPONSE_CANCEL,))
 
479
        d = Gtk.FileChooserDialog('Merge branch', self,
 
480
                                  Gtk.FileChooserAction.SELECT_FOLDER,
 
481
                                  buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
 
482
                                           Gtk.STOCK_CANCEL,
 
483
                                           Gtk.ResponseType.CANCEL,))
486
484
        try:
487
485
            result = d.run()
488
 
            if result != gtk.RESPONSE_OK:
 
486
            if result != Gtk.ResponseType.OK:
489
487
                raise SelectCancelled()
490
488
            return d.get_current_folder_uri()
491
489
        finally:
505
503
        error_dialog('Error', str(e))
506
504
 
507
505
    def _get_save_path(self, basename):
508
 
        d = gtk.FileChooserDialog('Save As', self,
509
 
                                  gtk.FILE_CHOOSER_ACTION_SAVE,
510
 
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
511
 
                                           gtk.STOCK_CANCEL,
512
 
                                           gtk.RESPONSE_CANCEL,))
 
506
        d = Gtk.FileChooserDialog('Save As', self,
 
507
                                  Gtk.FileChooserAction.SAVE,
 
508
                                  buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
 
509
                                           Gtk.STOCK_CANCEL,
 
510
                                           Gtk.ResponseType.CANCEL,))
513
511
        d.set_current_name(basename)
514
512
        try:
515
513
            result = d.run()
516
 
            if result != gtk.RESPONSE_OK:
 
514
            if result != Gtk.ResponseType.OK:
517
515
                raise SelectCancelled()
518
516
            return urlutils.local_path_from_url(d.get_uri())
519
517
        finally: