source: libi4uc/i4ucdocumentspresenter.vala @ 8884b7871bd5444d3a505a7d2b9075a69deae9ed

Revision 8884b7871bd5444d3a505a7d2b9075a69deae9ed, 4.1 KB checked in by Matias De la Puente <mfpuente.ar@…>, 3 years ago (diff)

Add document preferences action

  • Property mode set to 100644
Line 
1/* i4ucdocumentspresenter.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 */
21using Gee;
22
23public class I4uc.DocumentsPresenter : GLib.Object
24{
25        private DocumentsViewIface _view;
26        private DocumentPageViewFactory _page_view_factory;
27        private DocumentPreferencesPageViewFactory _preferences_page_view_factory;
28        private ArrayList <DocumentPagePresenter> _page_presenters = new ArrayList <DocumentPagePresenter> ();
29        private DocumentPagePresenter _page_presenter_selected;
30        private DocumentPreferencesPagePresenter _preferences_page_presenter;
31       
32        public DocumentsPresenter (DocumentsViewIface view, DocumentPageViewFactory page_view_factory, DocumentPreferencesPageViewFactory preferences_page_view_factory)
33        {
34                _view = view;
35                _page_view_factory = page_view_factory;
36                _preferences_page_view_factory = preferences_page_view_factory;
37               
38                //configure view
39                _view.save_sensitive = false;
40                _view.save_as_sensitive = false;
41               
42                //connect view signals
43                _page_view_factory.unselected_page.connect (on_unselected_page_view);
44                _view.new_clicked.connect (on_new_clicked);
45                _view.save_clicked.connect (on_save_clicked);
46                _view.save_as_clicked.connect (on_save_as_clicked);
47                _view.document_preferences_clicked.connect (on_preferences_clicked);
48        }
49       
50        private void on_unselected_page_view ()
51        {
52                _page_presenter_selected = null;
53                _view.save_sensitive = false;
54                _view.save_as_sensitive = false;
55        }
56       
57        private void on_page_presenter_selected (DocumentPagePresenter page_presenter)
58        {
59                _view.save_sensitive = page_presenter.can_save;
60                _view.save_as_sensitive = true;
61                _page_presenter_selected = page_presenter;
62        }
63       
64        private void on_remove_page_presenter (DocumentPagePresenter page_presenter)
65        {
66                _page_view_factory.remove_page (page_presenter.view);
67                _page_presenters.remove (page_presenter);
68        }
69       
70        private void on_new_clicked ()
71        {
72                var title = _("Unsaved file %i");
73                int i = 0;
74                while (get_page_view_from_title (title.printf (++i)) != null)
75                        ;
76                var page_view = _page_view_factory.create_page ();
77                page_view.title = title.printf (i);
78                page_view.tab_title = title.printf (i);
79                page_view.tab_tooltip = "<b>%s</b> %s".printf (_("Name:"), title.printf (i));
80                page_view.tab_image = Gtk.STOCK_NEW;
81               
82                var page_presenter = new DocumentPagePresenter (page_view);
83                page_presenter.is_new = true;
84                page_presenter.selected.connect (on_page_presenter_selected);
85                page_presenter.remove_document.connect (on_remove_page_presenter);
86                _page_presenters.add (page_presenter);
87               
88                _page_view_factory.add_page (page_view);
89                _page_view_factory.show_page (page_view);
90        }
91       
92        private void on_save_clicked ()
93        {
94                _page_presenter_selected.save ();
95        }
96       
97        private void on_save_as_clicked ()
98        {
99                _page_presenter_selected.save_as ();
100        }
101       
102        private void on_preferences_clicked ()
103        {
104                if (_preferences_page_presenter == null)
105                {
106                        var page_view = _preferences_page_view_factory.create_page ();
107                        _preferences_page_presenter = new DocumentPreferencesPagePresenter (page_view, _page_presenters);
108                        _preferences_page_view_factory.add_page (page_view);
109                        _preferences_page_presenter.view.close_clicked.connect ((view) => {
110                                _preferences_page_view_factory.remove_page (view);
111                                _preferences_page_presenter = null;
112                        });
113                }
114                _preferences_page_view_factory.show_page (_preferences_page_presenter.view);
115        }
116       
117        private DocumentPageViewIface? get_page_view_from_title (string title)
118        {
119                foreach (var page_presenter in _page_presenters)
120                        if (page_presenter.view.title == title)
121                                return page_presenter.view;
122                return null;
123        }
124}
Note: See TracBrowser for help on using the repository browser.