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

Reply via email to