/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: Jelmer Vernooij
  • Date: 2011-03-14 20:12:19 UTC
  • Revision ID: jelmer@samba.org-20110314201219-wo692nzwywu6mevh
Fix formatting, imports.

Show diffs side-by-side

added added

removed removed

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