X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fapp.cpp;h=c45d4c3cf71c609f3ef2465bdfbaffdcee572cc3;hb=c3ad95144d148602f672e95ddda1f18fc35502f8;hp=e1d1a6ebef2516f8bf74a8ecb8a1d57e26918d03;hpb=6ee1233ccd00e071d9a1b1f305d980ed91bd1939;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index e1d1a6e..c45d4c3 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -2,7 +2,7 @@ /*! \file app.cpp ** \brief writeme ** -** $Id: app.cpp,v 1.11 2005/03/24 21:47:28 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley @@ -136,8 +136,10 @@ using namespace studio; #ifndef SYNFIG_USER_APP_DIR #ifdef __APPLE__ #define SYNFIG_USER_APP_DIR "Library/Synfig" -#else +#elif defined(_WIN32) #define SYNFIG_USER_APP_DIR "Synfig" +#else +#define SYNFIG_USER_APP_DIR ".synfig" #endif #endif @@ -277,11 +279,11 @@ public: ); Gtk::Label label(message); label.show(); - + dialog.get_vbox()->pack_start(label); dialog.add_button(Gtk::StockID("gtk-yes"),RESPONSE_YES); dialog.add_button(Gtk::StockID("gtk-no"),RESPONSE_NO); - + dialog.set_default_response(dflt); dialog.show(); return (Response)dialog.run(); @@ -295,12 +297,12 @@ public: ); Gtk::Label label(message); label.show(); - + dialog.get_vbox()->pack_start(label); dialog.add_button(Gtk::StockID("gtk-yes"),RESPONSE_YES); dialog.add_button(Gtk::StockID("gtk-no"),RESPONSE_NO); dialog.add_button(Gtk::StockID("gtk-cancel"),RESPONSE_CANCEL); - + dialog.set_default_response(dflt); dialog.show(); return (Response)dialog.run(); @@ -314,11 +316,11 @@ public: ); Gtk::Label label(message); label.show(); - + dialog.get_vbox()->pack_start(label); dialog.add_button(Gtk::StockID("gtk-ok"),RESPONSE_OK); dialog.add_button(Gtk::StockID("gtk-cancel"),RESPONSE_CANCEL); - + dialog.set_default_response(dflt); dialog.show(); return (Response)dialog.run(); @@ -334,17 +336,8 @@ public: virtual bool error(const std::string &err) - { - Gtk::Dialog dialog( - "Error", // Title - true, // Modal - true // use_separator - ); - Gtk::Label label(err); - label.show(); - - dialog.get_vbox()->pack_start(label); - dialog.add_button(Gtk::StockID("gtk-ok"),RESPONSE_OK); + { + Gtk::MessageDialog dialog(err, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true); dialog.show(); dialog.run(); return true; @@ -359,7 +352,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; @@ -400,11 +393,11 @@ int v_unwind_key(V_KeyUnwound* unwound, const char* key) int i; unwound->element.serial=0; unwound->element.checksum=0; - + for(i=0;i<16;i++) { U8 data; - + switch(key[i]) { case '0': data=0; break; @@ -437,13 +430,13 @@ int v_key_check(const char* key, U32* serial, U32 appid) V_KeyUnwound unwound_key; U32 appid_mask_a=hash_U32(appid); U32 appid_mask_b=hash_U32(appid_mask_a); - + if(!v_unwind_key(&unwound_key, key)) { // Invalid characters in key return 0; } - + // Undo obfuscation pass { @@ -455,17 +448,25 @@ int v_key_check(const char* key, U32* serial, U32 appid) unwound_key.raw[endian_fix(i)]^=(next>>24); } } - + unwound_key.element.serial^=appid_mask_a; unwound_key.element.checksum^=appid_mask_b; *serial=unwound_key.element.serial; - + return unwound_key.element.checksum==hash_U32(unwound_key.element.serial); } +#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; @@ -475,8 +476,8 @@ int check_license(String basedir) license_file="/usr/local/etc/.synfiglicense"; #else license_file=basedir+"\\etc\\.synfiglicense"; -#endif - +#endif + try { key=Glib::file_get_contents(license_file); } catch (Glib::FileError) { } @@ -486,7 +487,7 @@ int check_license(String basedir) while(!v_key_check(key.c_str(),&serial,0xdeadbeef)) { key.clear(); - + if(!App::dialog_entry( _("Synfig Studio Authentication"), _("Please enter your license key below. You will not\nbe able to use this software without a valid license key."), @@ -494,7 +495,7 @@ int check_license(String basedir) )) throw String("No License"); } - + FILE* file=fopen(license_file.c_str(),"w"); if(file) { @@ -508,7 +509,7 @@ int check_license(String basedir) return serial; #else return 1; -#endif +#endif } /* @@ -541,7 +542,7 @@ studio::add_action_group_to_top(Glib::RefPtr ui_manager, Glib DEBUGPOINT(); std::list > prev_groups(ui_manager->get_action_groups()); std::list >::reverse_iterator iter; - + DEBUGPOINT(); for(iter=prev_groups.rbegin();iter!=prev_groups.rend();++iter) { @@ -554,7 +555,7 @@ studio::add_action_group_to_top(Glib::RefPtr ui_manager, Glib } DEBUGPOINT(); ui_manager->insert_action_group(group,0); - + DEBUGPOINT(); for(;!prev_groups.empty();prev_groups.pop_front()) { @@ -604,16 +605,16 @@ public: value=strprintf("%i",App::auto_recover->get_timeout()); return true; } - + return synfigapp::Settings::get_value(key,value); } - + virtual bool set_value(const synfig::String& key,const synfig::String& value) { if(key=="gamma") { float r,g,b,blk; - + strscanf(value,"%f %f %f %f", &r, &g, @@ -622,7 +623,7 @@ public: ); App::gamma.set_all(r,g,b,blk); - + return true; } if(key=="time_format") @@ -654,10 +655,10 @@ public: App::distance_system=Distance::ident_system(value);; return true; } - + return synfigapp::Settings::set_value(key,value); } - + virtual KeyList get_key_list()const { KeyList ret(synfigapp::Settings::get_key_list()); @@ -681,7 +682,7 @@ init_ui_manager() Glib::RefPtr toolbox_action_group = Gtk::ActionGroup::create("toolbox"); Glib::RefPtr actions_action_group = Gtk::ActionGroup::create(); - + menus_action_group->add( Gtk::Action::create("menu-file", "_File") ); menus_action_group->add( Gtk::Action::create("menu-edit", "_Edit") ); menus_action_group->add( Gtk::Action::create("menu-view", "_View") ); @@ -705,7 +706,7 @@ init_ui_manager() iter->second.local_name,iter->second.local_name )); } - + #define DEFINE_ACTION(x,stock) { Glib::RefPtr action( Gtk::Action::create(x, stock) ); /*action->set_sensitive(false);*/ actions_action_group->add(action); } #define DEFINE_ACTION2(x,stock,label) { Glib::RefPtr action( Gtk::Action::create(x, stock,label,label) ); /*action->set_sensitive(false);*/ actions_action_group->add(action); } #define DEFINE_ACTION_SIG(group,x,stock,sig) { Glib::RefPtr action( Gtk::Action::create(x, stock) ); /*action->set_sensitive(false);*/ group->add(action,sig); } @@ -791,11 +792,11 @@ init_ui_manager() // Set up synfigapp actions /*{ synfigapp::Action::Book::iterator iter; - + for(iter=synfigapp::Action::book().begin();iter!=synfigapp::Action::book().end();++iter) { Gtk::StockID stock_id; - + if(!(iter->second.category&synfigapp::Action::CATEGORY_HIDDEN)) { //Gtk::Image* image(manage(new Gtk::Image())); @@ -809,7 +810,7 @@ init_ui_manager() //else if(iter->second.task=="duplicate") stock_id=Gtk::Stock::COPY; else if(iter->second.task=="remove") stock_id=Gtk::Stock::DELETE; else stock_id=Gtk::StockID("synfig-"+iter->second.task); - + actions_action_group->add(Gtk::Action::create( "action-"+iter->second.name, stock_id, @@ -913,8 +914,6 @@ init_ui_manager() " " " " " " - " " - " " " " " " " " @@ -927,6 +926,8 @@ init_ui_manager() //" " //" " " " +" " +" " " " " " " " @@ -971,8 +972,18 @@ init_ui_manager() } // Add default keyboard accelerators -#define ACCEL(path,accel) { Gtk::AccelKey accel_key(accel,path); Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(),accel_key.get_mod()); } -#define ACCEL2(accel) { Gtk::AccelKey accel_key(accel); Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(),accel_key.get_mod()); } +#define ACCEL(path,accel) \ + { \ + Gtk::AccelKey accel_key(accel,path); \ + Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(), accel_key.get_mod()); \ + } + +#define ACCEL2(accel) \ + { \ + Gtk::AccelKey accel_key(accel); \ + Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(), accel_key.get_mod()); \ + } + ACCEL("//select-all-ducks","a"); ACCEL("//unselect-all-layers","d"); ACCEL("//render","F9"); @@ -991,7 +1002,6 @@ init_ui_manager() ACCEL("//mask-width-ducks", "5"); ACCEL("//mask-angle-ducks", "6"); - ACCEL2(Gtk::AccelKey(GDK_Page_Up,Gdk::SHIFT_MASK,"//action-layer_raise")); ACCEL2(Gtk::AccelKey(GDK_Page_Down,Gdk::SHIFT_MASK,"//action-layer_lower")); @@ -1032,16 +1042,29 @@ init_ui_manager() ACCEL2(Gtk::AccelKey('o',Gdk::CONTROL_MASK,"//toggle-onion-skin")); 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 } @@ -1056,11 +1079,11 @@ App::App(int *argc, char ***argv): IconControler(etl::dirname((*argv)[0])) { app_base_path_=etl::dirname(etl::dirname((*argv)[0])); - + int serial_; serial_=check_license(app_base_path_); - - + + ui_interface_=new GlobalUIInterface(); gdk_rgb_init(); @@ -1068,7 +1091,7 @@ App::App(int *argc, char ***argv): Glib::thread_init(); distance_system=Distance::SYSTEM_UNITS; - + if(mkdir(get_user_app_directory().c_str(),ACCESSPERMS)<0) { if(errno!=EEXIST) @@ -1078,21 +1101,21 @@ App::App(int *argc, char ***argv): { synfig::info("Created directory \"%s\"",get_user_app_directory().c_str()); } - - + + ipc=new IPC(); - + try { if(!SYNFIG_CHECK_VERSION()) { cerr<<"FATAL: Synfig Version Mismatch"<(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); } catch(...) @@ -1128,13 +1151,13 @@ App::App(int *argc, char ***argv): // add the preferences to the settings synfigapp::Main::settings().add_domain(&_preferences,"pref"); - + try { studio_init_cb.task("Init UI Manager..."); App::ui_manager_=studio::UIManager::create(); init_ui_manager(); - + studio_init_cb.task("Init Dock Manager..."); dock_manager=new studio::DockManager(); @@ -1175,11 +1198,11 @@ App::App(int *argc, char ***argv): studio_init_cb.task("Init Children..."); dock_children=new studio::Dock_Children(); dock_manager->register_dockable(*dock_children); - + studio_init_cb.task("Init Info..."); dock_info = new studio::Dock_Info(); dock_manager->register_dockable(*dock_info); - + studio_init_cb.task("Init Navigator..."); dock_navigator = new studio::Dock_Navigator(); dock_manager->register_dockable(*dock_navigator); @@ -1195,8 +1218,8 @@ App::App(int *argc, char ***argv): studio_init_cb.task("Init Layer Groups..."); dock_layer_groups = new studio::Dock_LayerGroups(); dock_manager->register_dockable(*dock_layer_groups); - - + + studio_init_cb.task("Init Color Dialog..."); dialog_color=new studio::Dialog_Color(); @@ -1213,26 +1236,27 @@ App::App(int *argc, char ***argv): state_manager->add_state(&state_rotate); state_manager->add_state(&state_bline); - - + + state_manager->add_state(&state_circle); state_manager->add_state(&state_rectangle); state_manager->add_state(&state_gradient); state_manager->add_state(&state_eyedrop); state_manager->add_state(&state_fill); - + 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); - - // 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 - 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); + + // 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(); @@ -1243,9 +1267,11 @@ App::App(int *argc, char ***argv): studio_init_cb.task("Init Setup Dialog..."); dialog_setup=new studio::Dialog_Setup(); - + studio_init_cb.task("Init Input Dialog..."); dialog_input=new Gtk::InputDialog(); + dialog_input->get_close_button()->signal_clicked().connect( sigc::mem_fun( *dialog_input, &Gtk::InputDialog::hide ) ); + dialog_input->get_save_button()->signal_clicked().connect( sigc::ptr_fun(studio::App::dialog_not_implemented) ); studio_init_cb.task("Init auto recovery..."); auto_recover=new AutoRecover(); @@ -1254,16 +1280,16 @@ App::App(int *argc, char ***argv): studio_init_cb.task("Loading Settings..."); load_settings(); studio_init_cb.task("Checking auto-recover..."); - + studio_init_cb.amount_complete(9900,10000); - + if(auto_recover->recovery_needed()) { about_window.hide(); if( get_ui_interface()->yes_no( "Auto Recovery", - "SYNFIG Studio seems to have crashed\n" + "Synfig Studio seems to have crashed\n" "before you could save all your files.\n" "Would you like to re-open those files\n" "and recover your unsaved changes?" @@ -1276,7 +1302,7 @@ App::App(int *argc, char ***argv): } else get_ui_interface()->error( - _("SYNFIG Studio has attempted to recover\n" + _("Synfig Studio has attempted to recover\n" "from a previous crash. The files that it has\n" "recovered are NOT YET SAVED. It would be a good\n" "idea to review them and save them now.") @@ -1284,7 +1310,7 @@ App::App(int *argc, char ***argv): } about_window.show(); } - + // Look for any files given on the command line, // and load them if found. for(;*argc>=1;(*argc)--) @@ -1295,10 +1321,10 @@ App::App(int *argc, char ***argv): open((*argv)[*argc]); about_window.show(); } - + studio_init_cb.task("Done."); studio_init_cb.amount_complete(10000,10000); - + toolbox->present(); } catch(...) @@ -1316,27 +1342,27 @@ App::~App() save_settings(); synfigapp::Main::settings().remove_domain("pref"); - + selected_instance=0; // Unload all of the modules for(;!module_list_.empty();module_list_.pop_back()); - + delete state_manager; delete ipc; - + delete auto_recover; toolbox->hide(); -// studio::App::iteration(false); - +// studio::App::iteration(false); + delete toolbox; - -// studio::App::iteration(false); -// studio::App::iteration(false); +// studio::App::iteration(false); + +// studio::App::iteration(false); delete dialog_setup; @@ -1371,18 +1397,18 @@ App::add_recent_file(const std::string &file_name) std::string filename(file_name); assert(!filename.empty()); - + if(filename.empty()) return; - + // Toss out any "hidden" files if(basename(filename)[0]=='.') return; - + // If we aren't an absolute path, turn outselves into one if(!is_absolute_path(filename)) filename=absolute_path(filename); - + list::iterator iter; // Check to see if the file is already on the list. // If it is, then remove it from the list @@ -1393,16 +1419,16 @@ App::add_recent_file(const std::string &file_name) break; } - + // Push the filename to the front of the list recent_files.push_front(filename); - + // Clean out the files at the end of the list. while(recent_files.size()>(unsigned)get_max_recent_files()) recent_files.pop_back(); - + signal_recent_files_changed_(); - + return; } @@ -1437,22 +1463,22 @@ App::save_settings() std::string filename=get_config_file("recentfiles"); std::ofstream file(filename.c_str()); - + if(!file) { synfig::warning("Unable to save %s",filename.c_str()); break; } - + list::reverse_iterator iter; - + for(iter=recent_files.rbegin();iter!=recent_files.rend();iter++) file<<*iter<task("Quit Request"); if(Busy::count) { @@ -1585,18 +1611,18 @@ App::quit() return; } } -*/ - +*/ + // This next line causes things to crash for some reason - //(*iter)->close(); + //(*iter)->close(); } - + shutdown_in_progress=true; instance_list.clear(); while(studio::App::events_pending())studio::App::iteration(false); - + Gtk::Main::quit(); auto_recover->normal_shutdown(); @@ -1610,8 +1636,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 @@ -1624,7 +1650,7 @@ static OPENFILENAME ofn={}; #ifdef WIN32 #include #endif - + bool App::dialog_open_file(const std::string &title, std::string &filename) { @@ -1634,7 +1660,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) 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; @@ -1654,31 +1680,31 @@ App::dialog_open_file(const std::string &title, std::string &filename) // 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(GetOpenFileName(&ofn)) { filename=szFilename; return true; } 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_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(dialog->run()==GTK_RESPONSE_ACCEPT) { @@ -1689,18 +1715,18 @@ App::dialog_open_file(const std::string &title, std::string &filename) delete dialog; return false; /* - + GtkWidget *ok; GtkWidget *cancel; int val=0; - + GtkWidget *fileselection; fileselection = gtk_file_selection_new(title.c_str()); - + 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_SEPERATOR).c_str()); } else gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),dirname(filename).c_str()); @@ -1710,15 +1736,15 @@ App::dialog_open_file(const std::string &title, std::string &filename) ok=GTK_FILE_SELECTION(fileselection)->ok_button; cancel=GTK_FILE_SELECTION(fileselection)->cancel_button; - gtk_signal_connect(GTK_OBJECT(ok),"clicked",GTK_SIGNAL_FUNC(Signal_Open_Ok),&val); - gtk_signal_connect(GTK_OBJECT(cancel),"clicked",GTK_SIGNAL_FUNC(Signal_Open_Cancel),&val); + gtk_signal_connect(GTK_OBJECT(ok),"clicked",GTK_SIGNAL_FUNC(Signal_Open_Ok),&val); + gtk_signal_connect(GTK_OBJECT(cancel),"clicked",GTK_SIGNAL_FUNC(Signal_Open_Cancel),&val); gtk_widget_show(fileselection); while(!val) - iteration(); - - + iteration(); + + if(val==1) { filename=gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileselection)); @@ -1740,11 +1766,11 @@ App::dialog_save_file(const std::string &title, std::string &filename) { #ifdef 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; @@ -1764,15 +1790,15 @@ App::dialog_save_file(const std::string &title, std::string &filename) // 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; @@ -1783,11 +1809,11 @@ 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="."; - + 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) { @@ -1806,11 +1832,11 @@ 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; @@ -1830,15 +1856,15 @@ App::dialog_saveas_file(const std::string &title, std::string &filename) // 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; @@ -1849,11 +1875,11 @@ App::dialog_saveas_file(const std::string &title, std::string &filename) 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); + 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) { @@ -1870,16 +1896,8 @@ App::dialog_saveas_file(const std::string &title, std::string &filename) void App::dialog_error_blocking(const std::string &title, const std::string &message) { - Gtk::Dialog dialog( - title, // Title - true, // Modal - true // use_separator - ); - Gtk::Label label(message); - label.show(); - - dialog.get_vbox()->pack_start(label); - dialog.add_button(Gtk::StockID("gtk-ok"),1); + Gtk::MessageDialog dialog(message, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true); + dialog.set_title(title); dialog.show(); dialog.run(); } @@ -1887,16 +1905,8 @@ App::dialog_error_blocking(const std::string &title, const std::string &message) void App::dialog_warning_blocking(const std::string &title, const std::string &message) { - Gtk::Dialog dialog( - title, // Title - true, // Modal - true // use_separator - ); - Gtk::Label label(message); - label.show(); - - dialog.get_vbox()->pack_start(label); - dialog.add_button(Gtk::StockID("gtk-ok"),1); + Gtk::MessageDialog dialog(message, false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_CLOSE, true); + dialog.set_title(title); dialog.show(); dialog.run(); } @@ -1911,7 +1921,7 @@ App::dialog_yes_no(const std::string &title, const std::string &message) ); Gtk::Label label(message); label.show(); - + dialog.get_vbox()->pack_start(label); dialog.add_button(Gtk::StockID("gtk-yes"),1); dialog.add_button(Gtk::StockID("gtk-no"),0); @@ -1943,7 +1953,7 @@ App::dialog_not_implemented() { Gtk::MessageDialog dialog("Feature not available", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true); dialog.set_secondary_text("Sorry, this feature has not yet been implemented."); - dialog.run(); + dialog.run(); } bool @@ -1999,25 +2009,25 @@ App::open_as(std::string filename,std::string as) try { OneMoment one_moment; - + etl::handle canvas(open_canvas_as(filename,as)); if(canvas && get_instance(canvas)) { get_instance(canvas)->find_canvas_view(canvas)->present(); - throw (String)strprintf(_("\"%s\" appears to already be open!"),filename.c_str()); + throw (String)strprintf(_("\"%s\" appears to already be open!"),filename.c_str()); } if(!canvas) throw (String)strprintf(_("Unable to open file \"%s\""),filename.c_str()); add_recent_file(as); - + handle instance(Instance::create(canvas)); if(!instance) throw (String)strprintf(_("Unable to create instance for \"%s\""),filename.c_str()); - + one_moment.hide(); - + if(instance->is_updated() && App::dialog_yes_no(_("CVS Update"), _("There appears to be a newer version of this file available on the CVS repository.\nWould you like to update now? (It would probably be a good idea)"))) instance->dialog_cvs_update(); } @@ -2033,7 +2043,7 @@ App::open_as(std::string filename,std::string as) } _preferences.set_value("curr_path",dirname(as)); - + return true; } @@ -2045,7 +2055,7 @@ App::new_instance() canvas->set_name(strprintf("Untitled%d",Instance::get_count())); String file_name(strprintf("untitled%d.sif",Instance::get_count())); - + canvas->rend_desc().set_frame_rate(24.0); canvas->rend_desc().set_time_start(0.0); canvas->rend_desc().set_time_end(00.0); @@ -2058,7 +2068,7 @@ App::new_instance() canvas->rend_desc().set_antialias(1); canvas->rend_desc().set_flags(RendDesc::PX_ASPECT|RendDesc::IM_SPAN); canvas->set_file_name(file_name); - + Instance::create(canvas)->find_canvas_view(canvas)->canvas_properties.present(); }