X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftags%2Fstable%2Fsrc%2Fgtkmm%2Fapp.cpp;h=673bfc46da6b47eaecee59ba362ebb440eed4420;hb=a42ee14a3397a3fbb31d14e6eece4236620ae2db;hp=033e285f9065253b80d95e8a98bf553f85245a63;hpb=f6184c2a9c2245aae802c31c8f3300e1b744359c;p=synfig.git diff --git a/synfig-studio/tags/stable/src/gtkmm/app.cpp b/synfig-studio/tags/stable/src/gtkmm/app.cpp index 033e285..673bfc4 100644 --- a/synfig-studio/tags/stable/src/gtkmm/app.cpp +++ b/synfig-studio/tags/stable/src/gtkmm/app.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 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 @@ -352,7 +353,7 @@ public: } virtual bool - amount_complete(int current, int total) + amount_complete(int /*current*/, int /*total*/) { while(studio::App::events_pending())studio::App::iteration(false); return true; @@ -458,7 +459,15 @@ int v_key_check(const char* key, U32* serial, U32 appid) } +#ifdef _WIN32 +# ifdef LICENSE_KEY_REQUIRED int check_license(String basedir) +# else +int check_license(String /*basedir*/) +# endif +#else +int check_license(String /*basedir*/) +#endif { #ifdef LICENSE_KEY_REQUIRED String key; @@ -749,7 +758,7 @@ init_ui_manager() DEFINE_ACTION("quality-09", _("Use Quality Level 9")); DEFINE_ACTION("quality-10", _("Use Quality Level 10")); DEFINE_ACTION("play", _("Play")); - DEFINE_ACTION("pause", _("Pause")); + // DEFINE_ACTION("pause", _("Pause")); DEFINE_ACTION("stop", _("Stop")); DEFINE_ACTION("toggle-grid-show", _("Toggle Grid Show")); DEFINE_ACTION("toggle-grid-snap", _("Toggle Grid Snap")); @@ -877,7 +886,7 @@ init_ui_manager() " " " " " " -" " +//" " " " " " " " @@ -906,8 +915,6 @@ init_ui_manager() " " " " " " - " " - " " " " " " " " @@ -920,6 +927,8 @@ init_ui_manager() //" " //" " " " +" " +" " " " " " " " @@ -1032,16 +1041,30 @@ init_ui_manager() 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")); + ACCEL("//play", "p"); ACCEL("//seek-begin","Home"); ACCEL("//seek-end","End"); - ACCEL("//state-normal","a"); - ACCEL("//state-rotate","s"); - ACCEL("//state-scale","d"); - ACCEL("//state-bline","b"); - ACCEL("//state-fill","f"); - ACCEL("//state-eyedrop","e"); - ACCEL("//state-gradient","g"); - ACCEL("//state-zoom","z"); + + ACCEL("//state-normal", "a"); + ACCEL("//state-smooth_move", "v"); + ACCEL("//state-scale", "d"); + ACCEL("//state-rotate", "s"); + + ACCEL("//state-bline", "b"); + ACCEL("//state-circle", "c"); + ACCEL("//state-rectangle", "r"); + ACCEL("//state-gradient", "g"); + + ACCEL("//state-eyedrop", "e"); + ACCEL("//state-fill", "f"); + ACCEL("//state-zoom", "z"); + ACCEL("//state-polygon", "p"); + + ACCEL("//state-draw", "w"); + ACCEL("//state-sketch", "k"); + ACCEL("//state-width", "t"); + ACCEL("//state-mirror", "m"); + ACCEL("//canvas-zoom-fit","z"); #undef ACCEL @@ -1226,15 +1249,16 @@ App::App(int *argc, char ***argv): state_manager->add_state(&state_zoom); - // Disabled this tool because it should be - // considered deprecated. Use the bline tool instead. - if(getenv("SYNFIG_ENABLE_POLYGON")) state_manager->add_state(&state_polygon); + // Enabled - it's useful to be able to work with polygons without tangent ducks getting in the way. + // I know we can switch tangent ducks off, but why not allow this kind of layer as well? + if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon); - // These tools are disabled by default for now, - // because they tend to confuse users. - if(getenv("SYNFIG_ENABLE_DRAW" )) state_manager->add_state(&state_draw); - if(getenv("SYNFIG_ENABLE_SKETCH")) state_manager->add_state(&state_sketch); - if(getenv("SYNFIG_ENABLE_WIDTH" )) state_manager->add_state(&state_width); + // Enabled for now. Let's see whether they're good enough yet. + if(!getenv("SYNFIG_DISABLE_DRAW" )) state_manager->add_state(&state_draw); + if(!getenv("SYNFIG_DISABLE_SKETCH" )) state_manager->add_state(&state_sketch); + + // Disabled by default - it doesn't work properly? + if(getenv("SYNFIG_ENABLE_WIDTH" )) state_manager->add_state(&state_width); studio_init_cb.task("Init ModPalette..."); module_list_.push_back(new ModPalette()); module_list_.back()->start(); @@ -1496,19 +1520,7 @@ App::load_settings() //if(!synfigapp::Main::settings().load_from_file(filename)) { gamma.set_gamma(1.0/2.2); - synfigapp::Main::settings().set_value("dock.dialog.1.comp_selector","1"); - synfigapp::Main::settings().set_value("dock.dialog.1.contents","navigator - info pal_edit pal_browse - tool_options history canvases - layers groups"); - synfigapp::Main::settings().set_value("dock.dialog.1.contents_size","225 167 207"); - synfigapp::Main::settings().set_value("dock.dialog.1.pos","1057 32"); - synfigapp::Main::settings().set_value("dock.dialog.1.size","208 1174"); - synfigapp::Main::settings().set_value("dock.dialog.2.comp_selector","0"); - synfigapp::Main::settings().set_value("dock.dialog.2.contents","params children keyframes | timetrack curves meta_data"); - synfigapp::Main::settings().set_value("dock.dialog.2.contents_size","263"); - synfigapp::Main::settings().set_value("dock.dialog.2.pos","0 973"); - synfigapp::Main::settings().set_value("dock.dialog.2.size","1045 235"); - synfigapp::Main::settings().set_value("pref.distance_system","pt"); - synfigapp::Main::settings().set_value("pref.use_colorspace_gamma","1"); - synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); + reset_initial_window_configuration(); } } setlocale(LC_NUMERIC,old_locale); @@ -1519,6 +1531,24 @@ App::load_settings() } } +void +App::reset_initial_window_configuration() +{ + synfigapp::Main::settings().set_value("dock.dialog.1.comp_selector","1"); + synfigapp::Main::settings().set_value("dock.dialog.1.contents","navigator - info pal_edit pal_browse - tool_options history canvases - layers groups"); + synfigapp::Main::settings().set_value("dock.dialog.1.contents_size","225 167 207"); + synfigapp::Main::settings().set_value("dock.dialog.1.pos","1057 32"); + synfigapp::Main::settings().set_value("dock.dialog.1.size","208 1174"); + synfigapp::Main::settings().set_value("dock.dialog.2.comp_selector","0"); + synfigapp::Main::settings().set_value("dock.dialog.2.contents","params children keyframes | timetrack curves meta_data"); + synfigapp::Main::settings().set_value("dock.dialog.2.contents_size","263"); + synfigapp::Main::settings().set_value("dock.dialog.2.pos","0 973"); + synfigapp::Main::settings().set_value("dock.dialog.2.size","1045 235"); + synfigapp::Main::settings().set_value("pref.distance_system","pt"); + synfigapp::Main::settings().set_value("pref.use_colorspace_gamma","1"); + synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); +} + bool App::shutdown_request(GdkEventAny*) { @@ -1614,8 +1644,8 @@ App::show_setup() dialog_setup->show(); } -gint Signal_Open_Ok(GtkWidget *widget, int *val){*val=1;return 0;} -gint Signal_Open_Cancel(GtkWidget *widget, int *val){*val=2;return 0;} +gint Signal_Open_Ok(GtkWidget */*widget*/, int *val){*val=1;return 0;} +gint Signal_Open_Cancel(GtkWidget */*widget*/, int *val){*val=2;return 0;} //#ifdef WIN32 //#define USE_WIN32_FILE_DIALOGS 1 @@ -1678,13 +1708,17 @@ App::dialog_open_file(const std::string &title, std::string &filename) synfig::String prev_path; if(!_preferences.get_value("curr_path",prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_OPEN); dialog->set_current_folder(prev_path); - dialog->add_button(Gtk::StockID("gtk-ok"),GTK_RESPONSE_ACCEPT); - dialog->add_button(Gtk::StockID("gtk-cancel"),GTK_RESPONSE_CANCEL); + dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); if(!filename.empty()) - dialog->set_filename(filename); + 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(); delete dialog; @@ -1704,7 +1738,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) if(basename(filename)==filename) { - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),(prev_path+ETL_DIRECTORY_SEPERATOR).c_str()); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),(prev_path+ETL_DIRECTORY_SEPARATOR).c_str()); } else gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),dirname(filename).c_str()); @@ -1742,7 +1776,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) bool App::dialog_save_file(const std::string &title, std::string &filename) { -#ifdef USE_WIN32_FILE_DIALOGS +#if USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; GdkWindow *gdkWinPtr=toolbox->get_window()->gobj(); @@ -1780,6 +1814,7 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(GetSaveFileName(&ofn)) { filename=szFilename; + _preferences.set_value("curr_path",dirname(filename)); return true; } return false; @@ -1787,82 +1822,31 @@ App::dialog_save_file(const std::string &title, std::string &filename) synfig::String prev_path; if(!_preferences.get_value("curr_path",prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); dialog->set_current_folder(prev_path); - dialog->add_button(Gtk::StockID("gtk-ok"),GTK_RESPONSE_ACCEPT); - dialog->add_button(Gtk::StockID("gtk-cancel"),GTK_RESPONSE_CANCEL); + dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + dialog->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); if(!filename.empty()) - dialog->set_filename(filename); - if(dialog->run()==GTK_RESPONSE_ACCEPT) { - filename=dialog->get_filename(); - delete dialog; - return true; - } - delete dialog; - return false; -// return dialog_open_file(title, filename); -#endif -} - -bool -App::dialog_saveas_file(const std::string &title, std::string &filename) -{ -#if USE_WIN32_FILE_DIALOGS - static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; - - GdkWindow *gdkWinPtr=toolbox->get_window()->gobj(); - HINSTANCE hInstance=static_cast(GetModuleHandle(NULL)); - HWND hWnd=static_cast(GDK_WINDOW_HWND(gdkWinPtr)); - - ofn.lStructSize=sizeof(OPENFILENAME); - ofn.hwndOwner = hWnd; - ofn.hInstance = hInstance; - ofn.lpstrFilter = szFilter; -// ofn.lpstrCustomFilter=NULL; -// ofn.nMaxCustFilter=0; -// ofn.nFilterIndex=0; -// ofn.lpstrFile=NULL; - ofn.nMaxFile=MAX_PATH; -// ofn.lpstrFileTitle=NULL; -// ofn.lpstrInitialDir=NULL; -// ofn.lpstrTitle=NULL; - ofn.Flags=OFN_OVERWRITEPROMPT; -// ofn.nFileOffset=0; -// ofn.nFileExtension=0; - ofn.lpstrDefExt=TEXT("sif"); -// ofn.lCustData = 0l; - ofn.lpfnHook=NULL; -// ofn.lpTemplateName=NULL; - - CHAR szFilename[MAX_PATH]; - CHAR szTitle[500]; - strcpy(szFilename,filename.c_str()); - strcpy(szTitle,title.c_str()); - - ofn.lpstrFile=szFilename; - ofn.lpstrFileTitle=szTitle; - - if(GetSaveFileName(&ofn)) { - filename=szFilename; - return true; + 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); + + // if the file doesn't exist, put its name into the filename box + struct stat s; + if(stat(full_path.c_str(),&s) == -1 && errno == ENOENT) + dialog->set_current_name(basename(filename)); } - return false; -#else - synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) - prev_path="."; - - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); - dialog->set_current_folder(prev_path); - dialog->add_button(Gtk::StockID("gtk-ok"),GTK_RESPONSE_ACCEPT); - dialog->add_button(Gtk::StockID("gtk-cancel"),GTK_RESPONSE_CANCEL); - if(!filename.empty()) - dialog->set_filename(filename); if(dialog->run()==GTK_RESPONSE_ACCEPT) { filename=dialog->get_filename(); delete dialog; + _preferences.set_value("curr_path",dirname(filename)); return true; } delete dialog; @@ -1975,6 +1959,9 @@ App::open(std::string filename) return open_as(filename,filename); } +// this is called from autorecover.cpp: +// App::open_as(get_shadow_file_name(filename),filename) +// other than that, 'filename' and 'as' are the same bool App::open_as(std::string filename,std::string as) { @@ -2030,9 +2017,9 @@ void App::new_instance() { handle canvas=synfig::Canvas::create(); - canvas->set_name(strprintf("Untitled%d",Instance::get_count())); + canvas->set_name(strprintf("%s%d", DEFAULT_FILENAME_PREFIX, Instance::get_count()+1)); - String file_name(strprintf("untitled%d.sif",Instance::get_count())); + String file_name(strprintf("%s%d.sifz", DEFAULT_FILENAME_PREFIX, Instance::get_count()+1)); canvas->rend_desc().set_frame_rate(24.0); canvas->rend_desc().set_time_start(0.0);