source: libi4uc/i4ucprojectspresenter.vala @ 5452df4c299a03ae559077907e7eb49e148cd60e

Revision 5452df4c299a03ae559077907e7eb49e148cd60e, 10.3 KB checked in by Matias De la Puente <mfpuente.ar@…>, 3 years ago (diff)

Fix open method of Builder, Programmer and Project

They shouldn't return a bool, instead throw a proper error

  • Property mode set to 100644
Line 
1/* i4ucprojectspresenter.vala
2 *
3 * Copyright (C) 2010  Matias De la Puente
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 *
18 * Author:
19 *      Matias De la Puente <mfpuente.ar@gmail.com>
20 */
21
22public class I4uc.ProjectsPresenter : GLib.Object
23{
24        private ProjectsViewIface _view;
25        private DocumentsPresenter _documents_presenter;
26        private ProjectsSidePagePresenter _side_page_presenter;
27        private ProfileBuilder _profile_builder = new ProfileBuilder ();
28
29        public ProjectsPresenter (ProjectsViewIface view, DocumentsPresenter documents_presenter)
30        {
31                _view = view;
32                _documents_presenter = documents_presenter;
33
34                _side_page_presenter = new ProjectsSidePagePresenter (_view.side_page_view, _documents_presenter);
35
36                //Configure view
37                _view.add_file_sensitive = false;
38                _view.remove_file_from_project_sensitive = false;
39                _view.remove_file_from_profile_sensitive = false;
40                _view.add_profile_sensitive = false;
41                _view.remove_profile_sensitive = false;
42                _view.build_profile_sensitive = false;
43                _view.stop_sensitive = false;
44                _view.clean_profile_sensitive = false;
45                _view.close_sensitive = false;
46                _view.build_log_page.tab_title = _("Build process");
47                _view.build_log_page.tab_image = TabImage.BUILDER;
48
49                //Connect view signals
50                _view.new_clicked.connect (on_new_clicked);
51                _view.open_clicked.connect (on_open_clicked);
52                _view.open_recent_clicked.connect ((uri) => open_project (uri));
53                _view.add_file_clicked.connect (on_add_file_clicked);
54                _view.remove_file_from_project_clicked.connect (on_remove_file_from_project_clicked);
55                _view.remove_file_from_profile_clicked.connect (on_remove_file_from_profile_clicked);
56                _view.add_profile_clicked.connect (on_add_profile_clicked);
57                _view.remove_profile_clicked.connect (on_remove_profile_clicked);
58                _view.build_profile_clicked.connect (on_build_profile_clicked);
59                _view.stop_clicked.connect (on_stop_clicked);
60                _view.clean_profile_clicked.connect (on_clean_profile_clicked);
61                _view.close_clicked.connect (on_close_clicked);
62                _view.side_page_view.project_changed.connect (on_project_changed);
63                _view.side_page_view.profile_selected.connect (on_profile_selected);
64                _view.side_page_view.file_selected.connect (on_file_selected);
65                _profile_builder.notify["is-building"].connect (on_profile_builder_is_building);
66                _profile_builder.new_message.connect (on_profile_builder_new_message);
67                _profile_builder.command_initiated.connect (on_profile_builder_command_initiated);
68                _profile_builder.command_finished.connect (on_profile_builder_command_finished);
69        }
70
71        public void open_project (string project_uri)
72        {
73                var project = new Project ();
74                try
75                {
76                        project.open (project_uri);
77                        _side_page_presenter.add_project (project);
78                        _view.add_recent (project_uri);
79                }
80                catch (GLib.Error e)
81                {
82                        _view.show_error_message (_("Error trying to open <<%s>>: %s").printf (project_uri, e.message));
83                }
84        }
85
86        public void close_all_projects ()
87        {
88                _side_page_presenter.remove_all_projects ();
89        }
90
91        private void on_new_clicked ()
92        {
93                string project_uri;
94                string project_name;
95                Gee.List<string> authors;
96                if (_view.show_new_dialog (out project_uri, out project_name, out authors) == Gtk.ResponseType.OK)
97                {
98                        var project = new Project ();
99                        project.name = project_name;
100                        project.authors.add_all (authors);
101
102                        var main_profile = new ProjectProfile ();
103                        main_profile.name = "main";
104                        project.profiles["main"] = main_profile;
105
106                        project.save (project_uri);
107                        _view.add_recent (project_uri);
108                        _side_page_presenter.add_project (project);
109                }
110        }
111
112        private void on_open_clicked ()
113        {
114                var folder_uri = I4uc.Settings.instance.working_folder;
115                Gee.List<string> projects;
116                _view.show_open_dialog (ref folder_uri, out projects);
117                I4uc.Settings.instance.working_folder = folder_uri;
118                foreach (var project in projects)
119                        open_project (project);
120        }
121
122        private void on_add_file_clicked ()
123        {
124                var current_project = _side_page_presenter.current_project;
125                var dialog_presenter = new AddFileDialogPresenter (_view.create_add_file_dialog_view (), current_project);
126                string file;
127                Gee.List<string> profiles;
128                if (dialog_presenter.run (out file, out profiles))
129                {
130                        if (!(file in current_project.files))
131                                current_project.files.add (file);
132                        foreach (var profile in profiles)
133                                if (!(file in current_project.profiles[profile].files))
134                                        current_project.profiles[profile].files.add (file);
135                        current_project.save ();
136                        _side_page_presenter.update_current_project ();
137                        _documents_presenter.open_document (current_project.get_file_uri (file));
138                }
139        }
140
141        private void on_remove_file_from_project_clicked ()
142        {
143                var current_project = _side_page_presenter.current_project;
144                var current_file = _view.side_page_view.current_file;
145                var message = _("Do you want to remove the file <<%s>> from %s project?").printf (current_file, current_project.name);
146                if (_view.show_yes_no_message (message, false) != Gtk.ResponseType.YES)
147                        return;
148                foreach (var profile in current_project.profiles.values)
149                        if (current_file in profile.files)
150                                profile.files.remove (current_file);
151                current_project.files.remove (current_file);
152                current_project.save ();
153                _side_page_presenter.update_current_project ();
154        }
155
156        private void on_remove_file_from_profile_clicked ()
157        {
158                var current_project = _side_page_presenter.current_project;
159                var current_profile = _view.side_page_view.current_profile;
160                var current_file = _view.side_page_view.current_file;
161                var message = _("Do you want to remove the file <<%s>> from %s profile?").printf (current_file, current_profile);
162                if (_view.show_yes_no_message (message, false) != Gtk.ResponseType.YES)
163                        return;
164                current_project.profiles[current_profile].files.remove (current_file);
165                current_project.save ();
166                _side_page_presenter.update_current_project ();
167        }
168
169        private void on_add_profile_clicked ()
170        {
171                var current_project = _side_page_presenter.current_project;
172                var dialog_presenter = new AddProfileDialogPresenter (_view.create_add_profile_dialog_view (), current_project);
173                if (dialog_presenter.run ())
174                        _side_page_presenter.update_current_project ();
175        }
176
177        private void on_remove_profile_clicked ()
178        {
179                var current_project = _side_page_presenter.current_project;
180                var current_profile = _view.side_page_view.current_profile;
181                var message = _("Do you want to remove the profile <<%s>> from %s project?").printf (current_profile, current_project.name);
182                if (_view.show_yes_no_message (message, false) != Gtk.ResponseType.YES)
183                        return;
184                current_project.profiles.remove (current_profile);
185                current_project.save ();
186                _side_page_presenter.update_current_project ();
187        }
188       
189        private void on_build_profile_clicked ()
190        {
191                var current_project = _side_page_presenter.current_project;
192                var current_profile = current_project.profiles[_view.side_page_view.current_profile];
193                var message = _("The %s of the profile isn't selected");
194               
195                if (current_profile.builder_id == "")
196                {
197                        _view.show_error_message (message.printf (_("builder")));
198                        return;
199                }
200                if (current_profile.device_type == "")
201                {
202                        _view.show_error_message (message.printf (_("device type")));
203                        return;
204                }
205                if (current_profile.device == "")
206                {
207                        _view.show_error_message (message.printf (_("device")));
208                        return;
209                }
210               
211                _profile_builder.project = current_project;
212                _profile_builder.profile = current_profile.name;
213                _view.show_build_log_page ();
214               
215                try
216                {
217                        _profile_builder.build ();
218                }
219                catch (GLib.Error e)
220                {
221                        _view.show_error_message (_("Error trying to build profile %s: %s").printf (current_profile.name, e.message));
222                }
223        }
224       
225        private void on_stop_clicked ()
226        {
227                _profile_builder.stop ();
228        }
229
230        private void on_clean_profile_clicked ()
231        {
232                var current_project = _side_page_presenter.current_project;
233                var current_profile = current_project.profiles[_view.side_page_view.current_profile];
234               
235                if (current_profile.builder_id == "")
236                        return;
237               
238                _profile_builder.project = current_project;
239                _profile_builder.profile = current_profile.name;
240               
241                try
242                {
243                        _profile_builder.clean ();
244                }
245                catch (GLib.Error e)
246                {
247                        _view.show_error_message (_("Error trying to clean profile %s: %s").printf (current_profile.name, e.message));
248                }
249        }
250       
251        private void on_close_clicked ()
252        {
253                _side_page_presenter.remove_project (_side_page_presenter.current_project);
254        }
255
256        private void on_project_changed ()
257        {
258                var project_selected = _side_page_presenter.current_project != null;
259                _view.add_file_sensitive = project_selected;
260                _view.add_profile_sensitive = project_selected;
261                _view.close_sensitive = project_selected;
262        }
263
264        private void on_profile_selected ()
265        {
266                var profile_selected = _view.side_page_view.current_profile != null;
267                var file_selected = _view.side_page_view.current_file != null;
268                _view.remove_file_from_profile_sensitive = profile_selected && file_selected;
269                _view.remove_profile_sensitive = profile_selected;
270                _view.build_profile_sensitive = profile_selected && !_profile_builder.is_building;
271                _view.clean_profile_sensitive = profile_selected && !_profile_builder.is_building;
272        }
273
274        private void on_file_selected ()
275        {
276                var profile_selected = _view.side_page_view.current_profile != null;
277                var file_selected = _view.side_page_view.current_file != null;
278                _view.remove_file_from_project_sensitive = file_selected;
279                _view.remove_file_from_profile_sensitive = profile_selected && file_selected;
280        }
281       
282        private void on_profile_builder_is_building ()
283        {
284                var is_building = _profile_builder.is_building;
285                _view.build_profile_sensitive = !is_building;
286                _view.stop_sensitive = is_building;
287        }
288       
289        private void on_profile_builder_new_message (string message)
290        {
291                _view.build_log_page.add_line ("<b>" + message + "</b>");
292        }
293       
294        private void on_profile_builder_command_initiated (string command)
295        {
296                _view.build_log_page.add_line ("\t" + command);
297        }
298       
299        private void on_profile_builder_command_finished (string output)
300        {
301                foreach (var line in output.split ("\n"))
302                        _view.build_log_page.add_line ("\t\t" + line);
303        }
304}
Note: See TracBrowser for help on using the repository browser.