/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 merge.py

Add options to viz treeview to not show the line graph, and to only show the main line.
Set the revision browser to use these options.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
    pass
24
24
 
25
25
import gtk
 
26
import gtk.glade
26
27
 
27
28
from bzrlib.branch import Branch
28
29
import bzrlib.errors as errors
29
30
 
30
 
from bzrlib.plugins.gtk import _i18n, icon_path
31
 
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog
32
 
from bzrlib.plugins.gtk.errors import show_bzr_error
33
 
 
34
 
 
35
 
class MergeDialog(gtk.Dialog):
 
31
from dialog import error_dialog, info_dialog, warning_dialog
 
32
from errors import show_bzr_error
 
33
from olive.guifiles import GLADEFILENAME
 
34
 
 
35
 
 
36
class MergeDialog:
36
37
    """ Display the Merge dialog and perform the needed actions. """
37
 
    
38
 
    def __init__(self, wt, wtpath, default_branch_path=None, parent=None):
 
38
    def __init__(self, wt, wtpath,default_branch_path=None):
39
39
        """ Initialize the Merge dialog. """
40
 
        gtk.Dialog.__init__(self, title="Merge changes",
41
 
                                  parent=parent,
42
 
                                  flags=0,
43
 
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
44
 
        self.set_icon_from_file(icon_path("bzr-icon-64.png"))
45
 
        # Get arguments
 
40
        self.glade = gtk.glade.XML(GLADEFILENAME, 'window_merge', 'olive-gtk')
 
41
        
 
42
        self.window = self.glade.get_widget('window_merge')
 
43
        
 
44
        # Dictionary for signal_autoconnect
 
45
        dic = { "on_button_merge_merge_clicked": self.merge,
 
46
                "on_button_merge_cancel_clicked": self.close,
 
47
                "on_button_merge_open_clicked": self.open }
 
48
        
 
49
        # Connect the signals to the handlers
 
50
        self.glade.signal_autoconnect(dic)
 
51
 
46
52
        self.wt = wt
47
53
        self.wtpath = wtpath
48
 
        self.default_branch_path = default_branch_path
49
 
        self.parent_window = parent
50
 
        
51
 
        # Create widgets
52
 
        self._hbox = gtk.HBox()
53
 
        self._source = gtk.HBox()
54
 
        self._label_merge_from = gtk.Label(_i18n("Merge from"))
55
 
        self._combo_source = gtk.combo_box_new_text()
56
 
        for entry in [_i18n("Folder"),_i18n("Custom Location")]:
57
 
            self._combo_source.append_text(entry)
58
 
        self._combo_source.connect("changed", self._on_combo_changed)
59
 
        self._button_merge = gtk.Button(_i18n("_Merge"))
60
 
        self._button_merge_icon = gtk.Image()
61
 
        self._button_merge_icon.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
62
 
        self._button_merge.set_image(self._button_merge_icon)
63
 
        self._button_merge.connect('clicked', self._on_merge_clicked)
64
 
        
65
 
        # Add widgets to dialog
66
 
        self.vbox.pack_start(self._hbox, False, False, 0)
67
 
        self._hbox.add(self._label_merge_from)
68
 
        self._hbox.add(self._combo_source)
69
 
        self._hbox.set_spacing(5)
70
 
        self.action_area.pack_end(self._button_merge)
71
 
        
72
 
        if self.default_branch_path and os.path.isdir(
73
 
                            self.default_branch_path.partition('file://')[2]):
74
 
            self.directory = self.default_branch_path.partition('file://')[2]
75
 
            self._combo_source.set_active(0)
76
 
        elif self.default_branch_path:
77
 
            self._combo_source.set_active(1)
78
 
        else:
79
 
            # If no default_branch_path give, default to folder source with current folder
80
 
            self._combo_source.set_active(0)
81
 
        self.vbox.show_all()
82
 
    
83
 
    def _on_folder_source(self):
84
 
        """ Merge from folder, create a filechooser dialog and button """
85
 
        self._source = gtk.HBox()
86
 
        self._filechooser_dialog = gtk.FileChooserDialog(title="Please select a folder",
87
 
                                    parent=self.parent_window,
88
 
                                    action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
89
 
                                    buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
90
 
                                             gtk.STOCK_OPEN, gtk.RESPONSE_OK))
91
 
        self._filechooser_dialog.set_default_response(gtk.RESPONSE_OK)
92
 
        self._filechooser = gtk.FileChooserButton(self._filechooser_dialog)
93
 
        self._filechooser.show()
94
 
        directory = getattr(self, 'directory', None)
95
 
        if not directory:
96
 
            directory = os.path.dirname(self.wt.abspath(self.wtpath))
97
 
        self._filechooser_dialog.set_current_folder(directory)
98
 
        self._source.pack_start(self._filechooser, True, True, 0)
99
 
        self.vbox.pack_start(self._source, True, True, 5)
100
 
        self._source.show()
101
 
    
102
 
    def _on_custom_source(self):
103
 
        """ Merge from a custom source (can be folder, remote, etc), create entry """
104
 
        self._source = gtk.HBox()
105
 
        self._custom_entry = gtk.Entry()
106
 
        if self.default_branch_path:
107
 
            self._custom_entry.set_text(self.default_branch_path)
108
 
        self._custom_entry.connect("activate", self._on_merge_clicked)
109
 
        self._custom_entry.show()
110
 
        self._source.pack_start(self._custom_entry, True, True, 0)
111
 
        self.vbox.pack_start(self._source, True, True, 5)
112
 
        self._source.show()
113
 
    
114
 
    def _on_combo_changed(self, widget):
115
 
        merge_source = self._combo_source.get_active()
116
 
        self._source.destroy()
117
 
        if merge_source == 0:
118
 
            # Merge from folder
119
 
            self._on_folder_source()
120
 
        elif merge_source == 1:
121
 
            # Merge from custom
122
 
            self._on_custom_source()
123
 
    
 
54
        
 
55
        # Get some widgets
 
56
        self.entry = self.glade.get_widget('entry_merge')
 
57
        if default_branch_path:
 
58
            self.entry.set_text(default_branch_path)
 
59
 
 
60
    def display(self):
 
61
        """ Display the Add file(s) dialog. """
 
62
        self.window.show_all()
 
63
 
124
64
    @show_bzr_error
125
 
    def _on_merge_clicked(self, widget):
126
 
        merge_source = self._combo_source.get_active()
127
 
        if merge_source == 0:
128
 
            branch = self._filechooser.get_filename()
129
 
        elif merge_source == 1:
130
 
            branch = self._custom_entry.get_text()
 
65
    def merge(self, widget):
 
66
        branch = self.entry.get_text()
131
67
        if branch == "":
132
 
            error_dialog(_i18n('Branch not given'),
133
 
                         _i18n('Please specify a branch to merge from.'))
 
68
            error_dialog(_('Branch not given'),
 
69
                         _('Please specify a branch to merge from.'))
134
70
            return
135
71
 
136
72
        other_branch = Branch.open_containing(branch)[0]
138
74
        try:
139
75
            conflicts = self.wt.merge_from_branch(other_branch)
140
76
        except errors.BzrCommandError, errmsg:
141
 
            error_dialog(_i18n('Bazaar command error'), str(errmsg))
 
77
            error_dialog(_('Bazaar command error'), str(errmsg))
142
78
            return
143
79
        
 
80
        self.close()
144
81
        if conflicts == 0:
145
82
            # No conflicts found.
146
 
            info_dialog(_i18n('Merge successful'),
147
 
                        _i18n('All changes applied successfully.'))
 
83
            info_dialog(_('Merge successful'),
 
84
                        _('All changes applied successfully.'))
148
85
        else:
149
86
            # There are conflicts to be resolved.
150
 
            warning_dialog(_i18n('Conflicts encountered'),
151
 
                           _i18n('Please resolve the conflicts manually before committing.'))
152
 
        
153
 
        self.response(gtk.RESPONSE_OK)
 
87
            warning_dialog(_('Conflicts encountered'),
 
88
                           _('Please resolve the conflicts manually before committing.'))
 
89
    
 
90
    def open(self, widget):
 
91
        fcd = gtk.FileChooserDialog(title="Please select a folder",
 
92
                                    parent=self.window,
 
93
                                    action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
 
94
                                    buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
 
95
                                             gtk.STOCK_OPEN, gtk.RESPONSE_OK))
 
96
        fcd.set_default_response(gtk.RESPONSE_OK)
 
97
        
 
98
        if fcd.run() == gtk.RESPONSE_OK:
 
99
            self.entry.set_text(fcd.get_filename())
 
100
        
 
101
        fcd.destroy()
 
102
        
 
103
    def close(self, widget=None):
 
104
        self.window.destroy()