#include <fstream>
#include <iostream>
#include <locale>
+#include <cstring>
#ifdef HAVE_SYS_ERRNO_H
#include <sys/errno.h>
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;
}
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);
}
{
ui_manager->insert_action_group(group,0);
return;
- 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();
if(*iter && (*iter)->get_name()!="menus")
{
synfig::info("Removing action group "+(*iter)->get_name());
ui_manager->remove_action_group(*iter);
}
}
- DEBUGPOINT();
ui_manager->insert_action_group(group,0);
- DEBUGPOINT();
for(;!prev_groups.empty();prev_groups.pop_front())
{
if(prev_groups.front() && prev_groups.front()!=group && prev_groups.front()->get_name()!="menus")
ui_manager->insert_action_group(prev_groups.front(),1);
}
- DEBUGPOINT();
}
*/
class Preferences : public synfigapp::Settings
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")) );
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);
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"));
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"));
" </popup>"
" <popup name='menu-main' action='menu-main'>"
" <menu action='menu-file'>"
+" <menuitem action='new' />"
+" <menuitem action='open' />"
" <menuitem action='save' />"
" <menuitem action='save-as' />"
" <menuitem action='revert' />"
" <menuitem action='options' />"
" <menuitem action='close' />"
" <menuitem action='close-document' />"
+" <menuitem action='quit' />"
" </menu>"
" <menu action='menu-edit'>"
" <menuitem action='undo'/>"
" <menuitem action='quality-09' />"
" <menuitem action='quality-10' />"
" </menu>"
+" <menu action='menu-lowres-pixel'>"
+" <menuitem action='lowres-pixel-2' />"
+" <menuitem action='lowres-pixel-3' />"
+" <menuitem action='lowres-pixel-4' />"
+" <menuitem action='lowres-pixel-5' />"
+" <menuitem action='lowres-pixel-6' />"
+" <menuitem action='lowres-pixel-8' />"
+" <menuitem action='lowres-pixel-10' />"
+" <menuitem action='lowres-pixel-12' />"
+" <menuitem action='lowres-pixel-15' />"
+" <menuitem action='lowres-pixel-20' />"
+" <menuitem action='lowres-pixel-24' />"
+" <menuitem action='lowres-pixel-30' />"
+" <menuitem action='lowres-pixel-40' />"
+" <menuitem action='lowres-pixel-60' />"
+" <menuitem action='lowres-pixel-120' />"
+" </menu>"
" <separator name='bleh08'/>"
" <menuitem action='play'/>"
//" <menuitem action='pause'/>"
ACCEL2(Gtk::AccelKey(',',Gdk::CONTROL_MASK,"<Actions>//seek-prev-frame"));
ACCEL2(Gtk::AccelKey('>',Gdk::CONTROL_MASK,"<Actions>//seek-next-second"));
ACCEL2(Gtk::AccelKey('<',Gdk::CONTROL_MASK,"<Actions>//seek-prev-second"));
- ACCEL2(Gtk::AccelKey('o',Gdk::CONTROL_MASK,"<Actions>//toggle-onion-skin"));
+ ACCEL2(Gtk::AccelKey('o',Gdk::MOD1_MASK,"<Actions>//toggle-onion-skin"));
ACCEL("<Actions>//play", "<Control>p");
ACCEL("<Actions>//seek-begin","Home");
ACCEL("<Actions>//seek-end","End");
"different version of libsynfig than what is currently\n"
"installed. Synfig Studio will now abort. Try downloading\n"
"the latest version from the Synfig website at\n"
- "http://www.synfig.com/ "
+ "http://synfig.org/Download"
);
throw 40;
}
// 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);
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;
#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") ;
#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;
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
{
}
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") ;
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);
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
}
return false;
}
- _preferences.set_value("curr_path",dirname(as));
-
return true;
}
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));
handle<Instance> 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();
}
{
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