X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fapp.cpp;h=d0ebe92a2236e4931a34f573e9851ac90aea7915;hb=207785229d58cdebc3012076596fdc255dcf9879;hp=4a312edf2f673a8bae58e8ef80e6749cd4c00f13;hpb=65e74a7098d70d3e4235bebb7a4fd69199b3bb4e;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index 4a312ed..d0ebe92 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -6,7 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -52,6 +52,7 @@ #include #include +#include #include "app.h" #include "about.h" @@ -85,6 +86,7 @@ #include "devicetracker.h" #include "dialog_tooloptions.h" +#include "widget_enum.h" #include "autorecover.h" @@ -260,6 +262,8 @@ std::list< etl::handle< studio::Module > > module_list_; bool studio::App::use_colorspace_gamma=true; bool studio::App::single_threaded=false; +bool studio::App::restrict_radius_ducks=false; +String studio::App::browser_command("firefox"); static int max_recent_files_=25; int studio::App::get_max_recent_files() { return max_recent_files_; } @@ -480,6 +484,16 @@ public: value=strprintf("%i",App::auto_recover->get_timeout()); return true; } + if(key=="restrict_radius_ducks") + { + value=strprintf("%i",(int)App::restrict_radius_ducks); + return true; + } + if(key=="browser_command") + { + value=App::browser_command; + return true; + } return synfigapp::Settings::get_value(key,value); } @@ -536,6 +550,17 @@ public: App::single_threaded=i; return true; } + if(key=="restrict_radius_ducks") + { + int i(atoi(value.c_str())); + App::restrict_radius_ducks=i; + return true; + } + if(key=="browser_command") + { + App::browser_command=value; + return true; + } return synfigapp::Settings::set_value(key,value); } @@ -550,6 +575,8 @@ public: ret.push_back("use_colorspace_gamma"); ret.push_back("single_threaded"); ret.push_back("auto_recover_backup_interval"); + ret.push_back("restrict_radius_ducks"); + ret.push_back("browser_command"); return ret; } }; @@ -1450,6 +1477,7 @@ App::reset_initial_window_configuration() synfigapp::Main::settings().set_value("pref.distance_system","pt"); synfigapp::Main::settings().set_value("pref.use_colorspace_gamma","1"); synfigapp::Main::settings().set_value("pref.single_threaded","0"); + synfigapp::Main::settings().set_value("pref.restrict_radius_ducks","0"); synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); } @@ -1750,6 +1778,24 @@ App::dialog_save_file(const std::string &title, std::string &filename, std::stri dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); + Widget_Enum *file_type_enum = 0; + if (preference == ANIMATION_DIR_PREFERENCE) + { + file_type_enum = manage(new Widget_Enum()); + file_type_enum->set_param_desc(ParamDesc().set_hint("enum") + .add_enum_value(synfig::RELEASE_VERSION_0_61_08, "0.61.08", strprintf("0.61.08 (%s)", _("current"))) + .add_enum_value(synfig::RELEASE_VERSION_0_61_07, "0.61.07", "0.61.07") + .add_enum_value(synfig::RELEASE_VERSION_0_61_06, "0.61.06", strprintf("0.61.06 %s", _("and older")))); + file_type_enum->set_value(RELEASE_VERSION_END-1); // default to the most recent version + + Gtk::HBox *hbox = manage(new Gtk::HBox); + hbox->pack_start(*manage(new Gtk::Label(_("File Format Version: "))),Gtk::PACK_SHRINK,0); + hbox->pack_start(*file_type_enum,Gtk::PACK_EXPAND_WIDGET,0); + hbox->show_all(); + + dialog->set_extra_widget(*hbox); + } + if (filename.empty()) dialog->set_filename(prev_path); else @@ -1770,6 +1816,8 @@ App::dialog_save_file(const std::string &title, std::string &filename, std::stri } if(dialog->run() == GTK_RESPONSE_ACCEPT) { + if (preference == ANIMATION_DIR_PREFERENCE) + set_file_version(synfig::ReleaseVersion(file_type_enum->get_value())); filename = dialog->get_filename(); info("Saving preference %s = '%s' in App::dialog_save_file()", preference.c_str(), dirname(filename).c_str()); _preferences.set_value(preference, dirname(filename)); @@ -1845,6 +1893,43 @@ App::dialog_not_implemented() dialog.run(); } +void +App::dialog_help() +{ + if (!open_url("http://www.synfig.org/Documentation")) + { + Gtk::MessageDialog dialog(_("Documentation"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_CLOSE, true); + dialog.set_secondary_text(_("Documentation for Synfig Studio is available on the website:\n\nhttp://www.synfig.org/Documentation")); + dialog.set_title(_("Help")); + dialog.run(); + } +} + +bool +App::open_url(const std::string &url) +{ +#ifdef WIN32 + return ShellExecute(GetDesktopWindow(), "open", url.c_str(), NULL, NULL, SW_SHOW); +#else // WIN32 + gchar* argv[3] = {strdup(browser_command.c_str()), strdup(url.c_str()), NULL}; + + GError* gerror = NULL; + gboolean retval; + retval = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &gerror); + free(argv[0]); + free(argv[1]); + + if (!retval) + { + error(_("Could not execute specified web browser: %s"), gerror->message); + g_error_free(gerror); + return false; + } + + return true; +#endif // WIN32 +} + bool App::dialog_entry(const std::string &title, const std::string &message,std::string &text) { @@ -1970,9 +2055,10 @@ App::new_instance() } void -App::dialog_open() +App::dialog_open(string filename) { - string filename="*.sif"; + if (filename.empty()) + filename="*.sif"; while(dialog_open_file("Open", filename, ANIMATION_DIR_PREFERENCE)) {