/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: Curtis Hovey
  • Date: 2011-09-05 03:44:26 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110905034426-p98pxnay9rmzkr99
Fix the initializer for many classes.
Replace Gtk.Dialog.vbox with .get_content_area().

Show diffs side-by-side

added added

removed removed

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