Revision: 2132
http://synfig.svn.sourceforge.net/synfig/?rev=2132&view=rev
Author: dooglus
Date: 2008-10-26 20:01:02 +0000 (Sun, 26 Oct 2008)
Log Message:
-----------
When a .sif file fails to load, display the error messages in the studio GUI,
not just in the terminal.
Modified Paths:
--------------
synfig-core/trunk/src/synfig/canvas.cpp
synfig-core/trunk/src/synfig/loadcanvas.cpp
synfig-core/trunk/src/synfig/loadcanvas.h
synfig-core/trunk/src/tool/main.cpp
synfig-studio/trunk/src/gtkmm/app.cpp
synfig-studio/trunk/src/synfigapp/canvasinterface.cpp
Modified: synfig-core/trunk/src/synfig/canvas.cpp
===================================================================
--- synfig-core/trunk/src/synfig/canvas.cpp 2008-10-26 12:36:00 UTC (rev
2131)
+++ synfig-core/trunk/src/synfig/canvas.cpp 2008-10-26 20:01:02 UTC (rev
2132)
@@ -47,7 +47,7 @@
using namespace etl;
using namespace std;
-namespace synfig { extern Canvas::Handle open_canvas(const String &filename);
};
+namespace synfig { extern Canvas::Handle open_canvas(const String &filename,
String &errors); };
/* === M A C R O S ========================================================= */
@@ -537,10 +537,11 @@
external_canvas=externals_[file_name];
else
{
+ String errors;
if(is_absolute_path(file_name))
- external_canvas=open_canvas(file_name);
+ external_canvas=open_canvas(file_name, errors);
else
-
external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name);
+
external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name,
errors);
if(!external_canvas)
throw Exception::FileNotFound(file_name);
@@ -622,10 +623,11 @@
external_canvas=externals_[file_name];
else
{
+ String errors;
if(is_absolute_path(file_name))
- external_canvas=open_canvas(file_name);
+ external_canvas=open_canvas(file_name, errors);
else
-
external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name);
+
external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name,
errors);
if(!external_canvas)
throw Exception::FileNotFound(file_name);
Modified: synfig-core/trunk/src/synfig/loadcanvas.cpp
===================================================================
--- synfig-core/trunk/src/synfig/loadcanvas.cpp 2008-10-26 12:36:00 UTC (rev
2131)
+++ synfig-core/trunk/src/synfig/loadcanvas.cpp 2008-10-26 20:01:02 UTC (rev
2132)
@@ -121,31 +121,25 @@
}
Canvas::Handle
-synfig::open_canvas(const String &filename)
+synfig::open_canvas(const String &filename,String &errors)
{
- CanvasParser parser;
-
- parser.set_allow_errors(true);
-
- Canvas::Handle canvas=parser.parse_from_file(filename);
-
- if(parser.error_count())
- return Canvas::Handle();
-
- return canvas;
+ return open_canvas_as(filename, filename, errors);
}
Canvas::Handle
-synfig::open_canvas_as(const String &filename,const String &as)
+synfig::open_canvas_as(const String &filename,const String &as,String &errors)
{
CanvasParser parser;
parser.set_allow_errors(true);
- Canvas::Handle canvas=parser.parse_from_file_as(filename,as);
+ Canvas::Handle canvas=parser.parse_from_file_as(filename,as,errors);
if(parser.error_count())
+ {
+ errors = parser.get_errors_text();
return Canvas::Handle();
+ }
return canvas;
}
@@ -195,6 +189,7 @@
{
string str=strprintf("%s:<%s>:%d: error:
",filename.c_str(),element->get_name().c_str(),element->get_line())+text;
total_errors_++;
+ errors_text += " " + str + "\n";
if(!allow_errors_)
throw runtime_error(str);
cerr<<str<<endl;
@@ -2100,14 +2095,8 @@
}
Canvas::Handle
-CanvasParser::parse_from_file(const String &file)
+CanvasParser::parse_from_file_as(const String &file_,const String &as_,String
&errors)
{
- return parse_from_file_as(file,file);
-}
-
-Canvas::Handle
-CanvasParser::parse_from_file_as(const String &file_,const String &as_)
-{
try
{
ChangeLocale change_locale(LC_NUMERIC, "C");
@@ -2154,12 +2143,14 @@
catch(const std::exception& ex)
{
synfig::error("Standard Exception: "+String(ex.what()));
+ errors = ex.what();
return Canvas::Handle();
}
catch(const String& str)
{
cerr<<str<<endl;
// synfig::error(str);
+ errors = str;
return Canvas::Handle();
}
return Canvas::Handle();
Modified: synfig-core/trunk/src/synfig/loadcanvas.h
===================================================================
--- synfig-core/trunk/src/synfig/loadcanvas.h 2008-10-26 12:36:00 UTC (rev
2131)
+++ synfig-core/trunk/src/synfig/loadcanvas.h 2008-10-26 20:01:02 UTC (rev
2132)
@@ -73,6 +73,8 @@
String path;
+ String errors_text;
+
GUID guid_;
/*
@@ -113,11 +115,11 @@
const synfig::String& get_path()const { return path; }
+ const synfig::String& get_errors_text()const { return errors_text; }
+
//! \todo writeme
- Canvas::Handle parse_from_file(const String &filename);
+ Canvas::Handle parse_from_file_as(const String &filename,const String
&as,String &errors);
- Canvas::Handle parse_from_file_as(const String &filename,const String
&as);
-
//! \todo writeme
Canvas::Handle parse_from_string(const String &data);
@@ -169,8 +171,8 @@
//! Loads a canvas from \a filename
/*! \return The Canvas's handle on success, an empty handle on failure */
-extern Canvas::Handle open_canvas(const String &filename);
-extern Canvas::Handle open_canvas_as(const String &filename,const String &as);
+extern Canvas::Handle open_canvas(const String &filename,String &errors);
+extern Canvas::Handle open_canvas_as(const String &filename,const String
&as,String &errors);
//! Retrieves a Canvas from a string in XML format
extern Canvas::Handle string_to_canvas(const String &data);
Modified: synfig-core/trunk/src/tool/main.cpp
===================================================================
--- synfig-core/trunk/src/tool/main.cpp 2008-10-26 12:36:00 UTC (rev 2131)
+++ synfig-core/trunk/src/tool/main.cpp 2008-10-26 20:01:02 UTC (rev 2132)
@@ -1174,7 +1174,8 @@
return ret;
// Open the composition
-
job_list.front().root=open_canvas(job_list.front().filename);
+ String errors;
+
job_list.front().root=open_canvas(job_list.front().filename, errors);
if(!job_list.front().root)
{
@@ -1234,7 +1235,8 @@
extract_append(imageargs,composite_file);
if(!composite_file.empty())
{
- Canvas::Handle
composite(open_canvas(composite_file));
+ String errors;
+ Canvas::Handle
composite(open_canvas(composite_file, errors));
if(!composite)
break;
Canvas::reverse_iterator iter;
Modified: synfig-studio/trunk/src/gtkmm/app.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/app.cpp 2008-10-26 12:36:00 UTC (rev
2131)
+++ synfig-studio/trunk/src/gtkmm/app.cpp 2008-10-26 20:01:02 UTC (rev
2132)
@@ -2339,8 +2339,9 @@
try
{
OneMoment one_moment;
+ String errors;
- etl::handle<synfig::Canvas> canvas(open_canvas_as(filename,as));
+ etl::handle<synfig::Canvas>
canvas(open_canvas_as(filename,as,errors));
if(canvas && get_instance(canvas))
{
get_instance(canvas)->find_canvas_view(canvas)->present();
@@ -2350,7 +2351,7 @@
else
{
if(!canvas)
- throw (String)strprintf(_("Unable to open file
\"%s\""),filename.c_str());
+ throw (String)strprintf(_("Unable to open file
\"%s\":\n\n"),filename.c_str()) + errors;
if (as.find(custom_filename_prefix.c_str()) != 0)
add_recent_file(as);
Modified: synfig-studio/trunk/src/synfigapp/canvasinterface.cpp
===================================================================
--- synfig-studio/trunk/src/synfigapp/canvasinterface.cpp 2008-10-26
12:36:00 UTC (rev 2131)
+++ synfig-studio/trunk/src/synfigapp/canvasinterface.cpp 2008-10-26
20:01:02 UTC (rev 2132)
@@ -579,8 +579,8 @@
// If this is a SIF file, then we need to do things slightly differently
if(ext=="sif" || ext=="sifz")try
{
-
- Canvas::Handle outside_canvas(synfig::open_canvas(filename));
+ String errors;
+ Canvas::Handle outside_canvas(synfig::open_canvas(filename,
errors));
if(!outside_canvas)
throw String(_("Unable to open this composition"));
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl