1 //  Copyright (C) 2007, 2008, 2009, 2010, 2014, 2020 Ben Asselstine
2 //
3 //  This program is free software; you can redistribute it and/or modify
4 //  it under the terms of the GNU General Public License as published by
5 //  the Free Software Foundation; either version 3 of the License, or
6 //  (at your option) any later version.
7 //
8 //  This program is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 //  GNU Library General Public License for more details.
12 //
13 //  You should have received a copy of the GNU General Public License
14 //  along with this program; if not, write to the Free Software
15 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 //  02110-1301, USA.
17 
18 #include <config.h>
19 
20 #include <gtkmm.h>
21 #include <sigc++/functors/mem_fun.h>
22 
23 #include "shieldset-info-dialog.h"
24 #include "shieldsetlist.h"
25 
26 #include "ucompose.hpp"
27 #include "defs.h"
28 #include "File.h"
29 
30 #define method(x) sigc::mem_fun(*this, &ShieldSetInfoDialog::x)
31 
ShieldSetInfoDialog(Gtk::Window & parent,Shieldset * s)32 ShieldSetInfoDialog::ShieldSetInfoDialog(Gtk::Window &parent, Shieldset *s)
33  : LwEditorDialog(parent, "shieldset-info-dialog.ui")
34 {
35   d_shieldset = s;
36   dialog->set_title(_("Shield Set Properties"));
37 
38   xml->get_widget("close_button", close_button);
39   xml->get_widget("status_label", status_label);
40   xml->get_widget("location_label", location_label);
41   xml->get_widget("name_entry", name_entry);
42   xml->get_widget("small_width_spinbutton", small_width_spinbutton);
43   xml->get_widget("small_height_spinbutton", small_height_spinbutton);
44   xml->get_widget("medium_width_spinbutton", medium_width_spinbutton);
45   xml->get_widget("medium_height_spinbutton", medium_height_spinbutton);
46   xml->get_widget("large_width_spinbutton", large_width_spinbutton);
47   xml->get_widget("large_height_spinbutton", large_height_spinbutton);
48   xml->get_widget("fit_button", fit_button);
49   fit_button->signal_clicked().connect (method(on_fit_pressed));
50 
51   small_width_spinbutton->set_value (s->getSmallWidth ());
52   small_width_spinbutton->signal_changed().connect
53     (method(on_small_width_changed));
54   small_height_spinbutton->set_value (s->getSmallHeight ());
55   small_height_spinbutton->signal_changed().connect
56     (method(on_small_height_changed));
57   medium_width_spinbutton->set_value (s->getMediumWidth ());
58   medium_width_spinbutton->signal_changed().connect
59     (method(on_medium_width_changed));
60   medium_height_spinbutton->set_value (s->getMediumHeight ());
61   medium_height_spinbutton->signal_changed().connect
62     (method(on_medium_height_changed));
63   large_width_spinbutton->set_value (s->getLargeWidth ());
64   large_width_spinbutton->signal_changed().connect
65     (method(on_large_width_changed));
66   large_height_spinbutton->set_value (s->getLargeHeight ());
67   large_height_spinbutton->signal_changed().connect
68     (method(on_large_height_changed));
69 
70   name_entry->set_text (d_shieldset->getName ());
71   location_label->property_label () =
72     d_shieldset->getDirectory ().empty () ? "" :
73     d_shieldset->getConfigurationFile (true);
74 
75   name_entry->signal_changed().connect (method(on_name_changed));
76 
77   xml->get_widget("copyright_textview", copyright_textview);
78   copyright_textview->get_buffer()->set_text(d_shieldset->getCopyright());
79   copyright_textview->get_buffer()->signal_changed().connect
80     (method(on_copyright_changed));
81   xml->get_widget("license_textview", license_textview);
82   license_textview->get_buffer()->set_text(d_shieldset->getLicense());
83   license_textview->get_buffer()->signal_changed().connect
84     (method(on_license_changed));
85   xml->get_widget("description_textview", description_textview);
86   description_textview->get_buffer()->set_text(d_shieldset->getInfo());
87   description_textview->get_buffer()->signal_changed().connect
88     (method(on_description_changed));
89   xml->get_widget("notebook", notebook);
90   on_name_changed ();
91   d_changed = false;
92 }
93 
on_name_changed()94 void ShieldSetInfoDialog::on_name_changed()
95 {
96   d_changed = true;
97   d_shieldset->setName (String::utrim (name_entry->get_text ()));
98   close_button->set_sensitive (File::sanify (d_shieldset->getName ()) != "");
99 
100   Glib::ustring file =
101     Shieldsetlist::getInstance()->lookupConfigurationFileByName(d_shieldset);
102   if (file != "" && file != d_shieldset->getConfigurationFile (true))
103     status_label->set_text (_("That name is already in use."));
104   else
105     status_label->set_text ("");
106 }
107 
run()108 bool ShieldSetInfoDialog::run()
109 {
110     dialog->show_all();
111     dialog->run();
112     dialog->hide ();
113     return d_changed;
114 }
115 
on_copyright_changed()116 void ShieldSetInfoDialog::on_copyright_changed ()
117 {
118   d_changed = true;
119   d_shieldset->setCopyright(copyright_textview->get_buffer()->get_text());
120 }
121 
on_license_changed()122 void ShieldSetInfoDialog::on_license_changed ()
123 {
124   d_changed = true;
125   d_shieldset->setLicense(license_textview->get_buffer()->get_text());
126 }
127 
on_description_changed()128 void ShieldSetInfoDialog::on_description_changed ()
129 {
130   d_changed = true;
131   d_shieldset->setInfo(description_textview->get_buffer()->get_text());
132 }
133 
~ShieldSetInfoDialog()134 ShieldSetInfoDialog::~ShieldSetInfoDialog()
135 {
136   notebook->property_show_tabs () = false;
137 }
138 
on_small_width_changed()139 void ShieldSetInfoDialog::on_small_width_changed ()
140 {
141   d_changed = true;
142   d_shieldset->setSmallWidth (small_width_spinbutton->get_value ());
143 }
144 
on_small_height_changed()145 void ShieldSetInfoDialog::on_small_height_changed ()
146 {
147   d_changed = true;
148   d_shieldset->setSmallHeight (small_height_spinbutton->get_value ());
149 }
150 
on_medium_width_changed()151 void ShieldSetInfoDialog::on_medium_width_changed ()
152 {
153   d_changed = true;
154   d_shieldset->setMediumWidth (medium_width_spinbutton->get_value ());
155 }
156 
on_medium_height_changed()157 void ShieldSetInfoDialog::on_medium_height_changed ()
158 {
159   d_changed = true;
160   d_shieldset->setMediumHeight (medium_height_spinbutton->get_value ());
161 }
162 
on_large_width_changed()163 void ShieldSetInfoDialog::on_large_width_changed ()
164 {
165   d_changed = true;
166   d_shieldset->setLargeWidth (large_width_spinbutton->get_value ());
167 }
168 
on_large_height_changed()169 void ShieldSetInfoDialog::on_large_height_changed ()
170 {
171   d_changed = true;
172   d_shieldset->setLargeHeight (large_height_spinbutton->get_value ());
173 }
174 
on_fit_pressed()175 void ShieldSetInfoDialog::on_fit_pressed ()
176 {
177   d_changed = true;
178   d_shieldset->setHeightsAndWidthsFromImages();
179   small_width_spinbutton->set_value ((double)d_shieldset->getSmallWidth());
180   small_height_spinbutton->set_value ((double)d_shieldset->getSmallHeight());
181   medium_width_spinbutton->set_value ((double)d_shieldset->getMediumWidth());
182   medium_height_spinbutton->set_value ((double)d_shieldset->getMediumHeight());
183   large_width_spinbutton->set_value ((double)d_shieldset->getLargeWidth());
184   large_height_spinbutton->set_value ((double)d_shieldset->getLargeHeight());
185 }
186