/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

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