/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-08-27 18:35:08 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110827183508-ugqbp58na4mtt1no
Updated the pixbuf calls to gtk3.

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
41
39
    urlutils,
42
40
    workingtree,
43
41
)
44
 
from bzrlib.diff import show_diff_trees, internal_diff
 
42
from bzrlib.diff import show_diff_trees
45
43
from bzrlib.patches import parse_patches
46
44
from bzrlib.trace import warning
47
 
from bzrlib.plugins.gtk import _i18n
 
45
from bzrlib.plugins.gtk.dialog import (
 
46
    error_dialog,
 
47
    info_dialog,
 
48
    warning_dialog,
 
49
    )
 
50
from bzrlib.plugins.gtk.i18n import _i18n
48
51
from bzrlib.plugins.gtk.window import Window
49
 
from dialog import error_dialog, info_dialog, warning_dialog
50
52
 
51
53
 
52
54
def fallback_guess_language(slm, content_type):
62
64
    pass
63
65
 
64
66
 
65
 
class DiffFileView(gtk.ScrolledWindow):
 
67
class DiffFileView(Gtk.ScrolledWindow):
66
68
    """Window for displaying diffs from a diff file"""
67
69
 
68
70
    def __init__(self):
69
 
        gtk.ScrolledWindow.__init__(self)
 
71
        Gtk.ScrolledWindow.__init__(self)
70
72
        self.construct()
71
73
        self._diffs = {}
72
74
 
73
75
    def construct(self):
74
 
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
75
 
        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)
76
78
 
77
79
        if have_gtksourceview:
78
 
            self.buffer = gtksourceview2.Buffer()
79
 
            slm = gtksourceview2.LanguageManager()
80
 
            guess_language = getattr(gtksourceview2.LanguageManager, 
81
 
                "guess_language", fallback_guess_language)
82
 
            gsl = guess_language(slm, content_type="text/x-patch")
 
80
            self.buffer = GtkSource.Buffer()
 
81
            lang_manager = GtkSource.LanguageManager.get_default()
 
82
            language = lang_manager.guess_language(None, "text/x-patch")
83
83
            if have_gconf:
84
84
                self.apply_gedit_colors(self.buffer)
85
85
            self.apply_colordiff_colors(self.buffer)
86
 
            self.buffer.set_language(gsl)
 
86
            self.buffer.set_language(language)
87
87
            self.buffer.set_highlight_syntax(True)
88
88
 
89
 
            self.sourceview = gtksourceview2.View(self.buffer)
 
89
            self.sourceview = GtkSource.View(buffer=self.buffer)
90
90
        else:
91
 
            self.buffer = gtk.TextBuffer()
92
 
            self.sourceview = gtk.TextView(self.buffer)
 
91
            self.buffer = Gtk.TextBuffer()
 
92
            self.sourceview = Gtk.TextView(self.buffer)
93
93
 
94
94
        self.sourceview.set_editable(False)
95
 
        self.sourceview.modify_font(pango.FontDescription("Monospace"))
 
95
        self.sourceview.modify_font(Pango.FontDescription("Monospace"))
96
96
        self.add(self.sourceview)
97
97
        self.sourceview.show()
98
98
 
102
102
 
103
103
        This method needs the gconf module.
104
104
 
105
 
        :param buf: a gtksourceview2.Buffer object.
 
105
        :param buf: a GtkSource.Buffer object.
106
106
        """
107
107
        GEDIT_SCHEME_PATH = '/apps/gedit-2/preferences/editor/colors/scheme'
108
108
        GEDIT_USER_STYLES_PATH = os.path.expanduser('~/.gnome2/gedit/styles')
109
109
 
110
 
        client = gconf.client_get_default()
 
110
        client = GConf.Client.get_default()
111
111
        style_scheme_name = client.get_string(GEDIT_SCHEME_PATH)
112
112
        if style_scheme_name is not None:
113
 
            style_scheme_mgr = gtksourceview2.StyleSchemeManager()
 
113
            style_scheme_mgr = GtkSource.StyleSchemeManager()
114
114
            style_scheme_mgr.append_search_path(GEDIT_USER_STYLES_PATH)
115
115
            
116
116
            style_scheme = style_scheme_mgr.get_scheme(style_scheme_name)
124
124
 
125
125
        Both ~/.colordiffrc and ~/.colordiffrc.bzr-gtk are read.
126
126
 
127
 
        :param buf: a "Diff" gtksourceview2.Buffer object.
 
127
        :param buf: a "Diff" GtkSource.Buffer object.
128
128
        """
129
 
        scheme_manager = gtksourceview2.StyleSchemeManager()
 
129
        scheme_manager = GtkSource.StyleSchemeManager()
130
130
        style_scheme = scheme_manager.get_scheme('colordiff')
131
131
        
132
132
        # if style scheme not found, we'll generate it from colordiffrc
280
280
        self.buffer.set_text(decoded.encode('UTF-8'))
281
281
 
282
282
 
283
 
class DiffWidget(gtk.HPaned):
 
283
class DiffWidget(Gtk.HPaned):
284
284
    """Diff widget
285
285
 
286
286
    """
288
288
        super(DiffWidget, self).__init__()
289
289
 
290
290
        # The file hierarchy: a scrollable treeview
291
 
        scrollwin = gtk.ScrolledWindow()
292
 
        scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
293
 
        scrollwin.set_shadow_type(gtk.SHADOW_IN)
 
291
        scrollwin = Gtk.ScrolledWindow()
 
292
        scrollwin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
 
293
        scrollwin.set_shadow_type(Gtk.ShadowType.IN)
294
294
        self.pack1(scrollwin)
295
295
        scrollwin.show()
296
296
        
297
 
        self.model = gtk.TreeStore(str, str)
298
 
        self.treeview = gtk.TreeView(self.model)
 
297
        self.model = Gtk.TreeStore(str, str)
 
298
        self.treeview = Gtk.TreeView(model=self.model)
299
299
        self.treeview.set_headers_visible(False)
300
300
        self.treeview.set_search_column(1)
301
301
        self.treeview.connect("cursor-changed", self._treeview_cursor_cb)
302
302
        scrollwin.add(self.treeview)
303
303
        self.treeview.show()
304
304
 
305
 
        cell = gtk.CellRendererText()
 
305
        cell = Gtk.CellRendererText()
306
306
        cell.set_property("width-chars", 20)
307
 
        column = gtk.TreeViewColumn()
308
 
        column.pack_start(cell, expand=True)
 
307
        column = Gtk.TreeViewColumn()
 
308
        column.pack_start(cell, True)
309
309
        column.add_attribute(cell, "text", 0)
310
310
        self.treeview.append_column(column)
311
311
 
382
382
                    break
383
383
        if tv_path is None:
384
384
            raise errors.NoSuchFile(file_path)
385
 
        self.treeview.set_cursor(tv_path)
 
385
        self.treeview.set_cursor(tv_path, None, False)
386
386
        self.treeview.scroll_to_cell(tv_path)
387
387
 
388
388
    def _treeview_cursor_cb(self, *args):
399
399
    def _on_wraplines_toggled(self, widget=None, wrap=False):
400
400
        """Callback for when the wrap lines checkbutton is toggled"""
401
401
        if wrap or widget.get_active():
402
 
            self.diff_view.sourceview.set_wrap_mode(gtk.WRAP_WORD)
 
402
            self.diff_view.sourceview.set_wrap_mode(Gtk.WrapMode.WORD)
403
403
        else:
404
 
            self.diff_view.sourceview.set_wrap_mode(gtk.WRAP_NONE)
 
404
            self.diff_view.sourceview.set_wrap_mode(Gtk.WrapMode.NONE)
405
405
 
406
406
class DiffWindow(Window):
407
407
    """Diff window.
425
425
 
426
426
    def construct(self, operations):
427
427
        """Construct the window contents."""
428
 
        self.vbox = gtk.VBox()
 
428
        self.vbox = Gtk.VBox()
429
429
        self.add(self.vbox)
430
430
        self.vbox.show()
431
431
        self.diff = DiffWidget()
440
440
        
441
441
    
442
442
    def _get_menu_bar(self):
443
 
        menubar = gtk.MenuBar()
 
443
        menubar = Gtk.MenuBar()
444
444
        # View menu
445
 
        mb_view = gtk.MenuItem(_i18n("_View"))
446
 
        mb_view_menu = gtk.Menu()
447
 
        mb_view_wrapsource = gtk.CheckMenuItem(_i18n("Wrap _Long Lines"))
 
445
        mb_view = Gtk.MenuItem(label=_i18n("_View"))
 
446
        mb_view_menu = Gtk.Menu()
 
447
        mb_view_wrapsource = Gtk.CheckMenuItem(
 
448
            label=_i18n("Wrap _Long Lines"))
448
449
        mb_view_wrapsource.connect('activate', self.diff._on_wraplines_toggled)
449
450
        mb_view_wrapsource.show()
450
451
        mb_view_menu.append(mb_view_wrapsource)
462
463
        """
463
464
        if operations is None:
464
465
            return None
465
 
        hbox = gtk.HButtonBox()
466
 
        hbox.set_layout(gtk.BUTTONBOX_START)
 
466
        hbox = Gtk.HButtonBox()
 
467
        hbox.set_layout(Gtk.ButtonBoxStyle.START)
467
468
        for title, method in operations:
468
 
            merge_button = gtk.Button(title)
 
469
            merge_button = Gtk.Button(title)
469
470
            merge_button.show()
470
 
            merge_button.set_relief(gtk.RELIEF_NONE)
 
471
            merge_button.set_relief(Gtk.ReliefStyle.NONE)
471
472
            merge_button.connect("clicked", method)
472
473
            hbox.pack_start(merge_button, expand=False, fill=True)
473
474
        hbox.show()
474
475
        return hbox
475
476
 
476
477
    def _get_merge_target(self):
477
 
        d = gtk.FileChooserDialog('Merge branch', self,
478
 
                                  gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
479
 
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
480
 
                                           gtk.STOCK_CANCEL,
481
 
                                           gtk.RESPONSE_CANCEL,))
 
478
        d = Gtk.FileChooserDialog('Merge branch', self,
 
479
                                  Gtk.FileChooserAction.SELECT_FOLDER,
 
480
                                  buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
 
481
                                           Gtk.STOCK_CANCEL,
 
482
                                           Gtk.ResponseType.CANCEL,))
482
483
        try:
483
484
            result = d.run()
484
 
            if result != gtk.RESPONSE_OK:
 
485
            if result != Gtk.ResponseType.OK:
485
486
                raise SelectCancelled()
486
487
            return d.get_current_folder_uri()
487
488
        finally:
501
502
        error_dialog('Error', str(e))
502
503
 
503
504
    def _get_save_path(self, basename):
504
 
        d = gtk.FileChooserDialog('Save As', self,
505
 
                                  gtk.FILE_CHOOSER_ACTION_SAVE,
506
 
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
507
 
                                           gtk.STOCK_CANCEL,
508
 
                                           gtk.RESPONSE_CANCEL,))
 
505
        d = Gtk.FileChooserDialog('Save As', self,
 
506
                                  Gtk.FileChooserAction.SAVE,
 
507
                                  buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
 
508
                                           Gtk.STOCK_CANCEL,
 
509
                                           Gtk.ResponseType.CANCEL,))
509
510
        d.set_current_name(basename)
510
511
        try:
511
512
            result = d.run()
512
 
            if result != gtk.RESPONSE_OK:
 
513
            if result != Gtk.ResponseType.OK:
513
514
                raise SelectCancelled()
514
515
            return urlutils.local_path_from_url(d.get_uri())
515
516
        finally: