14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
from gi.repository import Gtk
20
from gi.repository import GObject
22
28
from bzrlib.config import GlobalConfig
23
from bzrlib.plugins.gtk.i18n import _i18n
24
from bzrlib.plugins.gtk.dialog import (
30
class ConflictsDialog(Gtk.Dialog):
29
from bzrlib.plugins.gtk import _i18n
31
from dialog import error_dialog, warning_dialog
34
class ConflictsDialog(gtk.Dialog):
31
35
""" This dialog displays the list of conflicts. """
33
37
def __init__(self, wt, parent=None):
34
38
""" Initialize the Conflicts dialog. """
35
super(ConflictsDialog, self).__init__(
36
title="Conflicts - Olive", parent=parent, flags=0,
37
buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL))
39
gtk.Dialog.__init__(self, title="Conflicts - Olive",
42
buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CANCEL))
42
47
# Create the widgets
43
self._scrolledwindow = Gtk.ScrolledWindow()
44
self._treeview = Gtk.TreeView()
45
self._label_diff3 = Gtk.Label(label=_i18n("External utility:"))
46
self._entry_diff3 = Gtk.Entry()
47
self._image_diff3 = Gtk.Image()
48
self._button_diff3 = Gtk.Button()
49
self._hbox_diff3 = Gtk.HBox()
48
self._scrolledwindow = gtk.ScrolledWindow()
49
self._treeview = gtk.TreeView()
50
self._label_diff3 = gtk.Label(_i18n("External utility:"))
51
self._entry_diff3 = gtk.Entry()
52
self._image_diff3 = gtk.Image()
53
self._button_diff3 = gtk.Button()
54
self._hbox_diff3 = gtk.HBox()
52
57
self._button_diff3.connect('clicked', self._on_diff3_clicked)
55
self._scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC,
56
Gtk.PolicyType.AUTOMATIC)
57
self._image_diff3.set_from_stock(Gtk.STOCK_APPLY, Gtk.IconSize.BUTTON)
60
self._scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC,
62
self._image_diff3.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
58
63
self._button_diff3.set_image(self._image_diff3)
59
64
self._entry_diff3.set_text(self._get_diff3())
60
65
self._hbox_diff3.set_spacing(3)
61
content_area = self.get_content_area()
62
content_area.set_spacing(3)
66
self.vbox.set_spacing(3)
63
67
self.set_default_size(400, 300)
66
self._hbox_diff3.pack_start(self._label_diff3, False, False, 0)
67
self._hbox_diff3.pack_start(self._entry_diff3, True, True, 0)
68
self._hbox_diff3.pack_start(self._button_diff3, False, False, 0)
70
self._hbox_diff3.pack_start(self._label_diff3, False, False)
71
self._hbox_diff3.pack_start(self._entry_diff3, True, True)
72
self._hbox_diff3.pack_start(self._button_diff3, False, False)
69
73
self._scrolledwindow.add(self._treeview)
70
content_area.pack_start(self._scrolledwindow, True, True, 0)
71
content_area.pack_start(self._hbox_diff3, False, False, 0)
74
self.vbox.pack_start(self._scrolledwindow, True, True)
75
self.vbox.pack_start(self._hbox_diff3, False, False)
73
77
# Create the conflict list
74
78
self._create_conflicts()
77
content_area.show_all()
79
83
def _get_diff3(self):
80
84
""" Get the specified diff3 utility. Default is meld. """
81
85
config = GlobalConfig()
87
91
def _set_diff3(self, cmd):
88
92
""" Set the default diff3 utility to cmd. """
89
93
config = GlobalConfig()
90
94
config.set_user_option('gconflicts_diff3', cmd)
92
96
def _create_conflicts(self):
93
97
""" Construct the list of conflicts. """
94
98
if len(self.wt.conflicts()) == 0:
95
self.model = Gtk.ListStore(GObject.TYPE_STRING)
99
self.model = gtk.ListStore(gobject.TYPE_STRING)
96
100
self._treeview.set_model(self.model)
97
self._treeview.append_column(Gtk.TreeViewColumn(_i18n('Conflicts'),
98
Gtk.CellRendererText(), text=0))
99
self._treeview.set_headers_visible(False)
101
self._treeview.append_column(gtk.TreeViewColumn(_i18n('Conflicts'),
102
gtk.CellRendererText(), text=0))
103
self._treeview.set_headers_visible(False)
100
104
self.model.append([ _i18n("No conflicts in working tree.") ])
101
105
self._button_diff3.set_sensitive(False)
103
self.model = Gtk.ListStore(GObject.TYPE_STRING,
107
self.model = gtk.ListStore(gobject.TYPE_STRING,
106
110
self._treeview.set_model(self.model)
107
self._treeview.append_column(Gtk.TreeViewColumn(_i18n('Path'),
108
Gtk.CellRendererText(), text=0))
109
self._treeview.append_column(Gtk.TreeViewColumn(_i18n('Type'),
110
Gtk.CellRendererText(), text=1))
111
self._treeview.append_column(gtk.TreeViewColumn(_i18n('Path'),
112
gtk.CellRendererText(), text=0))
113
self._treeview.append_column(gtk.TreeViewColumn(_i18n('Type'),
114
gtk.CellRendererText(), text=1))
111
115
self._treeview.set_search_column(0)
112
116
for conflict in self.wt.conflicts():
113
117
if conflict.typestring == 'path conflict':
130
134
t = _i18n("deleting parent")
132
136
t = _i18n("unknown type of conflict")
134
self.model.append([ conflict.path, t, conflict.typestring ])
138
self.model.append([ conflict.path, t, conflict.typestring ])
136
140
def _get_selected_file(self):
137
141
""" Return the selected conflict's filename. """
138
142
treeselection = self._treeview.get_selection()
139
143
(model, iter) = treeselection.get_selected()
144
148
return model.get_value(iter, 0)
146
150
def _get_selected_type(self):
147
151
""" Return the type of the selected conflict. """
148
152
treeselection = self._treeview.get_selection()
149
153
(model, iter) = treeselection.get_selected()
154
158
return model.get_value(iter, 2)
156
160
def _on_diff3_clicked(self, widget):
157
161
""" Launch external utility to resolve conflicts. """
158
162
self._set_diff3(self._entry_diff3.get_text())