1 /* === S Y N F I G ========================================================= */
6 ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
8 ** This package is free software; you can redistribute it and/or
9 ** modify it under the terms of the GNU General Public License as
10 ** published by the Free Software Foundation; either version 2 of
11 ** the License, or (at your option) any later version.
13 ** This package is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 ** General Public License for more details.
19 ** === N O T E S ===========================================================
21 ** ========================================================================= */
23 /* === H E A D E R S ======================================================= */
35 #include <ETL/stringf>
37 #include <gtkmm/image.h>
38 #include <gdkmm/pixbufloader.h>
39 #include <gtkmm/button.h>
40 #include <gtkmm/label.h>
41 #include <gtkmm/fixed.h>
43 #include <synfig/general.h>
52 using namespace studio;
54 /* === M A C R O S ========================================================= */
57 #define VERSION "unknown"
58 #define PACKAGE "synfigstudio"
64 # define IMAGE_DIR "share\\pixmaps"
69 # define IMAGE_DIR "/usr/local/share/pixmaps"
73 # define IMAGE_EXT "png"
76 /* === G L O B A L S ======================================================= */
77 extern const guint gtk_major_version;
78 extern const guint gtk_minor_version;
79 extern const guint gtk_micro_version;
80 extern const guint gtk_binary_age;
81 extern const guint gtk_interface_age;
83 /* === P R O C E D U R E S ================================================= */
85 class studio::AboutProgress : public synfig::ProgressCallback
91 AboutProgress(About &about):about(about) { }
93 virtual bool task(const std::string &task)
97 about.tasklabel->set_label(task);
98 about.tasklabel->show();
105 while(studio::App::events_pending())studio::App::iteration(false);
109 virtual bool error(const std::string &task)
113 about.tasklabel->set_label(_("ERROR:")+task);
114 about.tasklabel->show();
121 while(studio::App::events_pending())studio::App::iteration(false);
125 virtual bool warning(const std::string &task)
129 about.tasklabel->set_label(_("WARNING:")+task);
130 about.tasklabel->show();
137 while(studio::App::events_pending())studio::App::iteration(false);
141 virtual bool amount_complete(int current, int total)
143 if(about.progressbar)
145 about.progressbar->set_fraction((float)current/(float)total);
146 about.progressbar->show();
149 cerr<<current<<'/'<<total<<endl;
151 while(studio::App::events_pending())studio::App::iteration(false);
154 }; // END of class AboutProgress
156 /* === M E T H O D S ======================================================= */
159 Gtk::Window(Gtk::WINDOW_POPUP),
160 can_self_destruct(true)
162 int image_w=300,image_h=350;
164 std::string imagepath;
166 imagepath=App::get_base_path()+ETL_DIRECTORY_SEPERATOR+IMAGE_DIR;
170 char* synfig_root=getenv("SYNFIG_ROOT");
172 imagepath=synfig_root;
173 imagepath+=ETL_DIRECTORY_SEPERATOR;
175 imagepath+="share/pixmaps";
177 imagepath+=ETL_DIRECTORY_SEPERATOR;
181 Gtk::Image *Logo = manage(new class Gtk::Image());
182 Logo->set(imagepath+"about_dialog."IMAGE_EXT);
183 Logo->set_size_request(image_w,image_h);
184 Logo->set_alignment(0.5,0.5);
185 Logo->set_padding(0,0);
187 // Create the Copyright Label
188 Gtk::Label *CopyrightLabel = manage(new class Gtk::Label(SYNFIG_COPYRIGHT));
189 CopyrightLabel->set_size_request(image_w,24);
190 CopyrightLabel->set_alignment(0.5,0.5);
191 CopyrightLabel->set_padding(0,0);
192 CopyrightLabel->set_justify(Gtk::JUSTIFY_CENTER);
193 CopyrightLabel->set_line_wrap(false);
195 // Create the Version information label
196 Gtk::Label *VersionLabel = manage(new class Gtk::Label("Version"));
197 VersionLabel->set_size_request(image_w,80);
198 VersionLabel->set_flags(Gtk::CAN_FOCUS);
199 VersionLabel->set_alignment(0.5,0.5);
200 VersionLabel->set_padding(0,0);
201 VersionLabel->set_justify(Gtk::JUSTIFY_CENTER);
202 VersionLabel->set_line_wrap(false);
204 // Set the version label to contain the correct information
206 ver+="Version "VERSION" ("__DATE__" "__TIME__")\n";
207 ver+="Using Synfig ";
208 ver+=synfig::get_version();
210 ver+=strprintf(" and GNU G++ %d.%d.%d",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);
213 ver+=strprintf("\nGtk+ %d.%d.%d",gtk_major_version,gtk_minor_version,gtk_micro_version);
216 ver+="\nDEBUG BUILD";
218 VersionLabel->set_text(ver);
220 // Create the image that will be used on the close button
221 Gtk::Image *image2 = manage(new class Gtk::Image(Gtk::StockID("gtk-close"), Gtk::IconSize(4)));
222 image2->set_alignment(0.5,0.5);
223 image2->set_padding(0,0);
225 // Create the close button, and attach the image to it
226 CloseButton = manage(new class Gtk::Button());
227 CloseButton->set_size_request(24,24);
228 CloseButton->set_flags(Gtk::CAN_FOCUS);
229 _tooltips.set_tip(*CloseButton, "Close", "");
230 CloseButton->set_relief(Gtk::RELIEF_NONE);
231 CloseButton->add(*image2);
233 // Create the progress bar
234 progressbar = manage(new class Gtk::ProgressBar());
235 progressbar->set_size_request(image_w,24);
237 // Create the current task label
238 tasklabel = manage(new class Gtk::Label());
239 tasklabel->set_size_request(image_w,24);
240 tasklabel->set_use_underline(false);
242 // Create the Gtk::Fixed container and put all of the widgets into it
243 Gtk::Fixed *fixed1 = manage(new class Gtk::Fixed());
244 fixed1->put(*Logo, 0, 0);
245 fixed1->put(*CopyrightLabel, 0, image_h-25);
246 fixed1->put(*CloseButton, image_w-24, 0);
247 fixed1->put(*VersionLabel, 0, image_h-90);
248 fixed1->put(*progressbar, 0, image_h+24);
249 fixed1->put(*tasklabel, 0, image_h);
251 // Set up the parameters for this pop-up window
252 set_title("Synfig Studio "VERSION);
254 property_window_position().set_value(Gtk::WIN_POS_CENTER);
255 set_resizable(false);
258 // show everything off
260 CopyrightLabel->show();
263 VersionLabel->show();
266 // Connect relevant signals
267 CloseButton->signal_clicked().connect(sigc::mem_fun(*this, &About::close));
269 cb=new AboutProgress(*this);
280 if(can_self_destruct)
285 About::set_can_self_destruct(bool x)
294 synfig::ProgressCallback *
295 About::get_callback()