** $Id: app.cpp,v 1.11 2005/03/24 21:47:28 darco Exp $
**
** \legal
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** This package is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
** \endlegal
*/
/* ========================================================================= */
#include <fstream>
#include <iostream>
+#include <locale>
+#ifdef HAVE_SYS_ERRNO_H
+#include <sys/errno.h>
+#endif
#include <gtkmm/fileselection.h>
#include <gtkmm/dialog.h>
#include <gtkmm/label.h>
#endif
#ifdef WIN32
+#define _WIN32_WINNT 0x0500
#include <windows.h>
#endif
#include <gtkmm/accelmap.h>
+#include <gtkmm/filechooser.h>
+#include <gtkmm/filechooserdialog.h>
#endif
/* === M A C R O S ========================================================= */
+#ifndef SYNFIG_USER_APP_DIR
+#ifdef __APPLE__
+#define SYNFIG_USER_APP_DIR "Library/Synfig"
+#else
+#define SYNFIG_USER_APP_DIR "Synfig"
+#endif
+#endif
+
#ifndef DPM2DPI
#define DPM2DPI(x) (float(x)/39.3700787402f)
#define DPI2DPM(x) (float(x)*39.3700787402f)
int check_license(String basedir)
{
+#ifdef LICENSE_KEY_REQUIRED
String key;
String license_file;
}
synfig::info("License Authenticated -- Serial #%05d",serial);
return serial;
+#else
+ return 1;
+#endif
}
/*
}
};
-static Preferences _preferences;
+static ::Preferences _preferences;
void
init_ui_manager()
menus_action_group->add( Gtk::Action::create("menu-view", "_View") );
menus_action_group->add( Gtk::Action::create("menu-canvas", "_Canvas") );
menus_action_group->add( Gtk::Action::create("menu-layer", "_Layer") );
- menus_action_group->add( Gtk::Action::create("menu-duck-mask", "Mask Ducks") );
+ 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-layer-new", "New Layer") );
menus_action_group->add( Gtk::Action::create("menu-keyframe", "Keyframe") );
DEFINE_ACTION("unselect-all-layers", _("Unselect All Layers"));
DEFINE_ACTION("properties", _("Properties"));
- DEFINE_ACTION("mask-position-ducks", _("Mask Position Ducks"));
- DEFINE_ACTION("mask-vertex-ducks", _("Mask Vertex Ducks"));
- DEFINE_ACTION("mask-tangent-ducks", _("Mask Tangent Ducks"));
- DEFINE_ACTION("mask-radius-ducks", _("Mask Radius Ducks"));
- DEFINE_ACTION("mask-width-ducks", _("Mask Width Ducks"));
- DEFINE_ACTION("mask-angle-ducks", _("Mask Angle Ducks"));
+ DEFINE_ACTION("mask-position-ducks", _("Show Position Ducks"));
+ DEFINE_ACTION("mask-vertex-ducks", _("Show Vertex Ducks"));
+ DEFINE_ACTION("mask-tangent-ducks", _("Show Tangent Ducks"));
+ DEFINE_ACTION("mask-radius-ducks", _("Show Radius Ducks"));
+ DEFINE_ACTION("mask-width-ducks", _("Show Width Ducks"));
+ DEFINE_ACTION("mask-angle-ducks", _("Show Angle Ducks"));
DEFINE_ACTION("quality-00", _("Use Parametric Renderer"));
DEFINE_ACTION("quality-01", _("Use Quality Level 1"));
DEFINE_ACTION("quality-02", _("Use Quality Level 2"));
state_manager->add_state(&state_rotate);
state_manager->add_state(&state_bline);
- state_manager->add_state(&state_polygon);
+
+
state_manager->add_state(&state_circle);
state_manager->add_state(&state_rectangle);
- state_manager->add_state(&state_draw);
- state_manager->add_state(&state_sketch);
-
+ state_manager->add_state(&state_gradient);
state_manager->add_state(&state_eyedrop);
state_manager->add_state(&state_fill);
- state_manager->add_state(&state_width);
- state_manager->add_state(&state_gradient);
-
state_manager->add_state(&state_zoom);
+ if(false) {
+ // Disabled this tool because it should be
+ // considered deprecated. Use the bline tool instead.
+ state_manager->add_state(&state_polygon);
+
+ // These tools are disabled for now,
+ // because they tend to confuse users.
+ state_manager->add_state(&state_draw);
+ state_manager->add_state(&state_sketch);
+ state_manager->add_state(&state_width);
+ }
+
studio_init_cb.task("Init ModPalette...");
module_list_.push_back(new ModPalette()); module_list_.back()->start();
String
App::get_user_app_directory()
{
-#ifdef __APPLE__
- return Glib::build_filename(Glib::get_home_dir(),"Library/Synfig");
-#else
- return Glib::build_filename(Glib::get_home_dir(),"Synfig");
-#endif
+ return Glib::build_filename(Glib::get_home_dir(),SYNFIG_USER_APP_DIR);
}
synfig::String
void
App::save_settings()
{
+ char * old_locale;
try
{
+ old_locale=strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
{
std::string filename=get_config_file("accelrc");
Gtk::AccelMap::save(filename);
std::string filename=get_config_file("settings");
synfigapp::Main::settings().save_to_file(filename);
+ setlocale(LC_NUMERIC,old_locale);
}
catch(...)
{
void
App::load_settings()
{
+ char * old_locale;
try
{
+ old_locale=strdup(setlocale(LC_NUMERIC, NULL));
+ setlocale(LC_NUMERIC, "C");
{
std::string filename=get_config_file("accelrc");
Gtk::AccelMap::load(filename);
synfigapp::Main::settings().set_value("window.toolbox.pos","4 4");
}
}
-
+ setlocale(LC_NUMERIC,old_locale);
}
catch(...)
{
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);
+ 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;
+ /*
+
GtkWidget *ok;
GtkWidget *cancel;
int val=0;
}
gtk_widget_destroy(fileselection);
return true;
+ */
#endif
}
}
return false;
#else
- return dialog_open_file(title, 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);
+ 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
}
}
return false;
#else
- return dialog_open_file(title, 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);
+ 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::open_as(std::string filename,std::string as)
{
+#ifdef WIN32
+ char long_name[1024];
+ if(GetLongPathName(as.c_str(),long_name,sizeof(long_name)));
+ as=long_name;
+#endif
+
try
{
OneMoment one_moment;