/*! \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
#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
);
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();
);
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();
);
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();
virtual bool
error(const std::string &err)
- {
+ {
Gtk::MessageDialog dialog(err, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true);
dialog.show();
dialog.run();
}
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;
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;
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
{
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;
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) { }
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."),
))
throw String("No License");
}
-
+
FILE* file=fopen(license_file.c_str(),"w");
if(file)
{
return serial;
#else
return 1;
-#endif
+#endif
}
/*
DEBUGPOINT();
std::list<Glib::RefPtr<Gtk::ActionGroup> > prev_groups(ui_manager->get_action_groups());
std::list<Glib::RefPtr<Gtk::ActionGroup> >::reverse_iterator iter;
-
+
DEBUGPOINT();
for(iter=prev_groups.rbegin();iter!=prev_groups.rend();++iter)
{
}
DEBUGPOINT();
ui_manager->insert_action_group(group,0);
-
+
DEBUGPOINT();
for(;!prev_groups.empty();prev_groups.pop_front())
{
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,
);
App::gamma.set_all(r,g,b,blk);
-
+
return true;
}
if(key=="time_format")
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());
Glib::RefPtr<Gtk::ActionGroup> toolbox_action_group = Gtk::ActionGroup::create("toolbox");
Glib::RefPtr<Gtk::ActionGroup> 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") );
iter->second.local_name,iter->second.local_name
));
}
-
+
#define DEFINE_ACTION(x,stock) { Glib::RefPtr<Gtk::Action> action( Gtk::Action::create(x, stock) ); /*action->set_sensitive(false);*/ actions_action_group->add(action); }
#define DEFINE_ACTION2(x,stock,label) { Glib::RefPtr<Gtk::Action> 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<Gtk::Action> action( Gtk::Action::create(x, stock) ); /*action->set_sensitive(false);*/ group->add(action,sig); }
// 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()));
//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,
" </menu>"
" <menu action='menu-canvas'>"
" <menuitem action='canvas-new'/>"
- " <menuitem action='amount-inc'/>"
- " <menuitem action='amount-dec'/>"
" </menu>"
" <menu name='menu-state' action='menu-state'>"
" </menu>"
//" <menuitem action='paste'/>"
//" <separator name='bleh06'/>"
" <menu action='menu-layer-new'></menu>"
+" <menuitem action='amount-inc'/>"
+" <menuitem action='amount-dec'/>"
" </menu>"
" <menu action='menu-keyframe'>"
" <menuitem action='keyframe-properties'/>"
}
// 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("<Actions>//select-all-ducks","<Control>a");
ACCEL("<Actions>//unselect-all-layers","<Control>d");
ACCEL("<Actions>//render","F9");
ACCEL("<Actions>//mask-width-ducks", "<Mod1>5");
ACCEL("<Actions>//mask-angle-ducks", "<Mod1>6");
-
ACCEL2(Gtk::AccelKey(GDK_Page_Up,Gdk::SHIFT_MASK,"<Actions>//action-layer_raise"));
ACCEL2(Gtk::AccelKey(GDK_Page_Down,Gdk::SHIFT_MASK,"<Actions>//action-layer_lower"));
ACCEL2(Gtk::AccelKey('o',Gdk::CONTROL_MASK,"<Actions>//toggle-onion-skin"));
ACCEL("<Actions>//seek-begin","Home");
ACCEL("<Actions>//seek-end","End");
- ACCEL("<Actions>//state-normal","<Mod1>a");
- ACCEL("<Actions>//state-rotate","<Mod1>s");
- ACCEL("<Actions>//state-scale","<Mod1>d");
- ACCEL("<Actions>//state-bline","<Mod1>b");
- ACCEL("<Actions>//state-fill","<Mod1>f");
- ACCEL("<Actions>//state-eyedrop","<Mod1>e");
- ACCEL("<Actions>//state-gradient","<Mod1>g");
- ACCEL("<Actions>//state-zoom","<Mod1>z");
+
+ ACCEL("<Actions>//state-normal", "<Mod1>a");
+ ACCEL("<Actions>//state-smooth_move", "<Mod1>v");
+ ACCEL("<Actions>//state-scale", "<Mod1>d");
+ ACCEL("<Actions>//state-rotate", "<Mod1>s");
+
+ ACCEL("<Actions>//state-bline", "<Mod1>b");
+ ACCEL("<Actions>//state-circle", "<Mod1>c");
+ ACCEL("<Actions>//state-rectangle", "<Mod1>r");
+ ACCEL("<Actions>//state-gradient", "<Mod1>g");
+
+ ACCEL("<Actions>//state-eyedrop", "<Mod1>e");
+ ACCEL("<Actions>//state-fill", "<Mod1>f");
+ ACCEL("<Actions>//state-zoom", "<Mod1>z");
+ ACCEL("<Actions>//state-polygon", "<Mod1>p");
+
+ ACCEL("<Actions>//state-draw", "<Mod1>w");
+ ACCEL("<Actions>//state-sketch", "<Mod1>k");
+ ACCEL("<Actions>//state-width", "<Mod1>t");
+ ACCEL("<Actions>//state-mirror", "<Mod1>m");
+
ACCEL("<Actions>//canvas-zoom-fit","<Control><Shift>z");
-
+
#undef ACCEL
}
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();
Glib::thread_init();
distance_system=Distance::SYSTEM_UNITS;
-
+
if(mkdir(get_user_app_directory().c_str(),ACCESSPERMS)<0)
{
if(errno!=EEXIST)
{
synfig::info("Created directory \"%s\"",get_user_app_directory().c_str());
}
-
-
+
+
ipc=new IPC();
-
+
try
{
if(!SYNFIG_CHECK_VERSION())
{
cerr<<"FATAL: Synfig Version Mismatch"<<endl;
- dialog_error_blocking("SYNFIG Studio",
- "This copy of SYNFIG Studio was compiled against a\n"
+ dialog_error_blocking("Synfig Studio",
+ "This copy of Synfig Studio was compiled against a\n"
"different version of libsynfig than what is currently\n"
"installed. Synfig Studio will now abort. Try downloading\n"
- "the latest version from the SYNFIG Development Website at\n"
- "http://dev.synfig.com/ "
+ "the latest version from the Synfig website at\n"
+ "http://www.synfig.com/ "
);
throw 40;
}
catch(synfig::SoftwareExpired)
{
cerr<<"FATAL: Software Expired"<<endl;
- dialog_error_blocking("SYNFIG Studio",
- "This copy of SYNFIG Studio has expired.\n"
+ dialog_error_blocking("Synfig Studio",
+ "This copy of Synfig Studio has expired.\n"
"Please erase this copy, or download and\n"
- "install the latest copy from the SYNFIG\n"
- "Development Website at http://dev.synfig.com/ ."
+ "install the latest copy from the Synfig\n"
+ "website at http://www.synfig.com/ ."
);
throw 39;
}
- Glib::set_application_name(_("SYNFIG Studio"));
-
+ Glib::set_application_name(_("Synfig Studio"));
+
About about_window;
about_window.set_can_self_destruct(false);
about_window.show();
shutdown_in_progress=false;
SuperCallback synfig_init_cb(about_window.get_callback(),0,9000,10000);
SuperCallback studio_init_cb(about_window.get_callback(),9000,10000,10000);
-
+
// Initialize the Synfig library
try { synfigapp_main=etl::smart_ptr<synfigapp::Main>(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); }
catch(...)
// 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();
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);
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();
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();
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();
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?"
}
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.")
}
about_window.show();
}
-
+
// Look for any files given on the command line,
// and load them if found.
for(;*argc>=1;(*argc)--)
open((*argv)[*argc]);
about_window.show();
}
-
+
studio_init_cb.task("Done.");
studio_init_cb.amount_complete(10000,10000);
-
+
toolbox->present();
}
catch(...)
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;
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<string>::iterator iter;
// Check to see if the file is already on the list.
// If it is, then remove it from the list
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;
}
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<string>::reverse_iterator iter;
-
+
for(iter=recent_files.rbegin();iter!=recent_files.rend();iter++)
file<<*iter<<endl;
}while(0);
std::string filename=get_config_file("settings");
synfigapp::Main::settings().save_to_file(filename);
- setlocale(LC_NUMERIC,old_locale);
+ setlocale(LC_NUMERIC,old_locale);
}
catch(...)
{
std::string filename=get_config_file("recentfiles");
std::ifstream file(filename.c_str());
-
+
while(file)
{
std::string recent_file;
synfigapp::Main::settings().set_value("window.toolbox.pos","4 4");
}
}
- setlocale(LC_NUMERIC,old_locale);
+ setlocale(LC_NUMERIC,old_locale);
}
catch(...)
{
App::quit()
{
if(shutdown_in_progress)return;
-
-
+
+
get_ui_interface()->task("Quit Request");
if(Busy::count)
{
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();
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
#ifdef WIN32
#include <gdk/gdkwin32.h>
#endif
-
+
bool
App::dialog_open_file(const std::string &title, std::string &filename)
{
GdkWindow *gdkWinPtr=toolbox->get_window()->gobj();
HINSTANCE hInstance=static_cast<HINSTANCE>(GetModuleHandle(NULL));
HWND hWnd=static_cast<HWND>(GDK_WINDOW_HWND(gdkWinPtr));
-
+
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.hInstance = hInstance;
// 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) {
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());
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));
{
#ifdef USE_WIN32_FILE_DIALOGS
static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ;
-
+
GdkWindow *gdkWinPtr=toolbox->get_window()->gobj();
HINSTANCE hInstance=static_cast<HINSTANCE>(GetModuleHandle(NULL));
HWND hWnd=static_cast<HWND>(GDK_WINDOW_HWND(gdkWinPtr));
-
+
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.hInstance = hInstance;
// 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;
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) {
{
#if USE_WIN32_FILE_DIALOGS
static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ;
-
+
GdkWindow *gdkWinPtr=toolbox->get_window()->gobj();
HINSTANCE hInstance=static_cast<HINSTANCE>(GetModuleHandle(NULL));
HWND hWnd=static_cast<HWND>(GDK_WINDOW_HWND(gdkWinPtr));
-
+
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.hInstance = hInstance;
// 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;
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) {
);
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);
{
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
try
{
OneMoment one_moment;
-
+
etl::handle<synfig::Canvas> 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(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();
}
}
_preferences.set_value("curr_path",dirname(as));
-
+
return true;
}
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);
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();
}