X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fapp.cpp;h=6c185a45eee75d65ba2c25de451e955f535e09ce;hb=78432386722217ddba2ba0597a96ad5d81e069ca;hp=504d0a061c12c1c759386f5b7ed6313a9e3d071a;hpb=63e709f66d50c124cc0ece2325f4773ac4ae7b20;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index 504d0a0..6c185a4 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef HAVE_SYS_ERRNO_H #include @@ -268,7 +269,7 @@ namespace studio { bool really_delete_widget(Gtk::Widget *widget) { - synfig::info("really delete %p", (void*)widget); + // synfig::info("really delete %p", (void*)widget); delete widget; return false; } @@ -279,7 +280,7 @@ really_delete_widget(Gtk::Widget *widget) void delete_widget(Gtk::Widget *widget) { - synfig::info("delete %p", (void*)widget); + // synfig::info("delete %p", (void*)widget); Glib::signal_timeout().connect(sigc::bind(sigc::ptr_fun(&really_delete_widget), widget), 50); } @@ -568,6 +569,7 @@ init_ui_manager() menus_action_group->add( Gtk::Action::create("menu-layer", _("_Layer")) ); menus_action_group->add( Gtk::Action::create("menu-duck-mask", _("Show/Hide Ducks")) ); menus_action_group->add( Gtk::Action::create("menu-preview-quality", _("Preview Quality")) ); + menus_action_group->add( Gtk::Action::create("menu-lowres-pixel", _("Low-Res Pixel Size")) ); menus_action_group->add( Gtk::Action::create("menu-layer-new", _("New Layer")) ); menus_action_group->add( Gtk::Action::create("menu-keyframe", _("Keyframe")) ); menus_action_group->add( Gtk::Action::create("menu-group", _("Group")) ); @@ -591,6 +593,7 @@ init_ui_manager() DEFINE_ACTION2("keyframe-properties", Gtk::StockID("gtk-properties"), _("Keyframe Properties")); DEFINE_ACTION("about", Gtk::StockID("synfig-about")); + DEFINE_ACTION("new", Gtk::Stock::NEW); DEFINE_ACTION("open", Gtk::Stock::OPEN); DEFINE_ACTION("save", Gtk::Stock::SAVE); DEFINE_ACTION("save-as", Gtk::Stock::SAVE_AS); @@ -607,6 +610,7 @@ init_ui_manager() DEFINE_ACTION("options", _("Options")); DEFINE_ACTION("close", _("Close View")); DEFINE_ACTION("close-document", _("Close Document")); + DEFINE_ACTION("quit", Gtk::Stock::QUIT); DEFINE_ACTION("undo", Gtk::StockID("gtk-undo")); @@ -635,6 +639,21 @@ init_ui_manager() DEFINE_ACTION("quality-08", _("Use Quality Level 8")); DEFINE_ACTION("quality-09", _("Use Quality Level 9")); DEFINE_ACTION("quality-10", _("Use Quality Level 10")); + DEFINE_ACTION("lowres-pixel-2", _("Set Low-Res pixel size to 2")); + DEFINE_ACTION("lowres-pixel-3", _("Set Low-Res pixel size to 3")); + DEFINE_ACTION("lowres-pixel-4", _("Set Low-Res pixel size to 4")); + DEFINE_ACTION("lowres-pixel-5", _("Set Low-Res pixel size to 5")); + DEFINE_ACTION("lowres-pixel-6", _("Set Low-Res pixel size to 6")); + DEFINE_ACTION("lowres-pixel-8", _("Set Low-Res pixel size to 8")); + DEFINE_ACTION("lowres-pixel-10", _("Set Low-Res pixel size to 10")); + DEFINE_ACTION("lowres-pixel-12", _("Set Low-Res pixel size to 12")); + DEFINE_ACTION("lowres-pixel-15", _("Set Low-Res pixel size to 15")); + DEFINE_ACTION("lowres-pixel-20", _("Set Low-Res pixel size to 20")); + DEFINE_ACTION("lowres-pixel-24", _("Set Low-Res pixel size to 24")); + DEFINE_ACTION("lowres-pixel-30", _("Set Low-Res pixel size to 30")); + DEFINE_ACTION("lowres-pixel-40", _("Set Low-Res pixel size to 40")); + DEFINE_ACTION("lowres-pixel-60", _("Set Low-Res pixel size to 60")); + DEFINE_ACTION("lowres-pixel-120", _("Set Low-Res pixel size to 120")); DEFINE_ACTION("play", _("Play")); // DEFINE_ACTION("pause", _("Pause")); DEFINE_ACTION("stop", _("Stop")); @@ -709,6 +728,8 @@ init_ui_manager() " " " " " " +" " +" " " " " " " " @@ -727,6 +748,7 @@ init_ui_manager() " " " " " " +" " " " " " " " @@ -763,6 +785,23 @@ init_ui_manager() " " " " " " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " " " " " //" " @@ -919,7 +958,7 @@ init_ui_manager() ACCEL2(Gtk::AccelKey(',',Gdk::CONTROL_MASK,"//seek-prev-frame")); ACCEL2(Gtk::AccelKey('>',Gdk::CONTROL_MASK,"//seek-next-second")); ACCEL2(Gtk::AccelKey('<',Gdk::CONTROL_MASK,"//seek-prev-second")); - ACCEL2(Gtk::AccelKey('o',Gdk::CONTROL_MASK,"//toggle-onion-skin")); + ACCEL2(Gtk::AccelKey('o',Gdk::MOD1_MASK,"//toggle-onion-skin")); ACCEL("//play", "p"); ACCEL("//seek-begin","Home"); ACCEL("//seek-end","End"); @@ -1180,15 +1219,21 @@ App::App(int *argc, char ***argv): // Look for any files given on the command line, // and load them if found. + bool opened_any = false; for(;*argc>=1;(*argc)--) if((*argv)[*argc] && (*argv)[*argc][0]!='-') { studio_init_cb.task(_("Loading files...")); about_window.hide(); open((*argv)[*argc]); + opened_any = true; about_window.show(); } + // if no file was specified to be opened, create a new document to help new users get started more easily + if (!opened_any && !getenv("SYNFIG_DISABLE_AUTOMATIC_DOCUMENT_CREATION")) + new_instance(); + studio_init_cb.task(_("Done.")); studio_init_cb.amount_complete(10000,10000); @@ -1217,7 +1262,8 @@ App::~App() selected_instance=0; // Unload all of the modules - for(;!module_list_.empty();module_list_.pop_back()); + for(;!module_list_.empty();module_list_.pop_back()) + ; delete state_manager; @@ -1530,8 +1576,10 @@ static OPENFILENAME ofn={}; #endif bool -App::dialog_open_file(const std::string &title, std::string &filename) +App::dialog_open_file(const std::string &title, std::string &filename, std::string preference) { + info("App::dialog_open_file('%s', '%s', '%s')", title.c_str(), filename.c_str(), preference.c_str()); + #ifdef USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; @@ -1576,26 +1624,36 @@ App::dialog_open_file(const std::string &title, std::string &filename) #else synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) - prev_path="."; + + if(!_preferences.get_value(preference, prev_path)) + prev_path = "."; + prev_path = absolute_path(prev_path); - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_OPEN); + Gtk::FileChooserDialog *dialog = new Gtk::FileChooserDialog(title, Gtk::FILE_CHOOSER_ACTION_OPEN); + dialog->set_current_folder(prev_path); dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); - if(!filename.empty()) - if (is_absolute_path(filename)) - dialog->set_filename(filename); - else - dialog->set_filename(prev_path + ETL_DIRECTORY_SEPARATOR + filename); - if(dialog->run()==GTK_RESPONSE_ACCEPT) { - filename=dialog->get_filename(); + + if (filename.empty()) + dialog->set_filename(prev_path); + else if (is_absolute_path(filename)) + dialog->set_filename(filename); + else + dialog->set_filename(prev_path + ETL_DIRECTORY_SEPARATOR + filename); + + if(dialog->run() == GTK_RESPONSE_ACCEPT) { + filename = dialog->get_filename(); + info("Saving preference %s = '%s' in App::dialog_open_file()", preference.c_str(), dirname(filename).c_str()); + _preferences.set_value(preference, dirname(filename)); delete dialog; return true; } + delete dialog; return false; + /* GtkWidget *ok; @@ -1630,7 +1688,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) if(val==1) { filename=gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileselection)); - _preferences.set_value("curr_path",dirname(filename)); + _preferences.set_value(preference,dirname(filename)); } else { @@ -1644,8 +1702,10 @@ App::dialog_open_file(const std::string &title, std::string &filename) } bool -App::dialog_save_file(const std::string &title, std::string &filename) +App::dialog_save_file(const std::string &title, std::string &filename, std::string preference) { + info("App::dialog_save_file('%s', '%s', '%s')", title.c_str(), filename.c_str(), preference.c_str()); + #if USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; @@ -1684,27 +1744,34 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(GetSaveFileName(&ofn)) { filename=szFilename; - _preferences.set_value("curr_path",dirname(filename)); + _preferences.set_value(preference,dirname(filename)); return true; } return false; #else synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) + + if(!_preferences.get_value(preference, prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); + Gtk::FileChooserDialog *dialog = new Gtk::FileChooserDialog(title, Gtk::FILE_CHOOSER_ACTION_SAVE); + dialog->set_current_folder(prev_path); dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); - if(!filename.empty()) + + if (filename.empty()) + dialog->set_filename(prev_path); + else { std::string full_path; if (is_absolute_path(filename)) full_path = filename; else full_path = prev_path + ETL_DIRECTORY_SEPARATOR + filename; + // select the file if it exists dialog->set_filename(full_path); @@ -1713,15 +1780,17 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(stat(full_path.c_str(),&s) == -1 && errno == ENOENT) dialog->set_current_name(basename(filename)); } - if(dialog->run()==GTK_RESPONSE_ACCEPT) { - filename=dialog->get_filename(); + + if(dialog->run() == GTK_RESPONSE_ACCEPT) { + 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)); delete dialog; - _preferences.set_value("curr_path",dirname(filename)); return true; } + delete dialog; return false; -// return dialog_open_file(title, filename); #endif } @@ -1877,8 +1946,6 @@ App::open_as(std::string filename,std::string as) return false; } - _preferences.set_value("curr_path",dirname(as)); - return true; } @@ -1893,7 +1960,7 @@ App::new_instance() canvas->rend_desc().set_frame_rate(24.0); canvas->rend_desc().set_time_start(0.0); - canvas->rend_desc().set_time_end(00.0); + canvas->rend_desc().set_time_end(5.0); canvas->rend_desc().set_x_res(DPI2DPM(72.0f)); canvas->rend_desc().set_y_res(DPI2DPM(72.0f)); canvas->rend_desc().set_tl(Vector(-4,2.25)); @@ -1906,7 +1973,7 @@ App::new_instance() handle instance = Instance::create(canvas); - if (!getenv("SYNFIG_DISABLE_NEW_CANVAS_EDIT_PROPERTIES")) + if (getenv("SYNFIG_ENABLE_NEW_CANVAS_EDIT_PROPERTIES")) instance->find_canvas_view(canvas)->canvas_properties.present(); } @@ -1915,7 +1982,7 @@ App::dialog_open() { string filename="*.sif"; - while(dialog_open_file("Open", filename)) + while(dialog_open_file("Open", filename, ANIMATION_DIR_PREFERENCE)) { // If the filename still has wildcards, then we should // continue looking for the file we want