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