X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Frender.cpp;h=cec4215a09e05d2aefbda745a3510adc64315dea;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=da96fb944751bfab66bc3384c3b62479242a54f0;hpb=c6af6e1c3816eb3b15c573089b32e6ae65cd2f49;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/render.cpp b/synfig-studio/trunk/src/gtkmm/render.cpp index da96fb9..cec4215 100644 --- a/synfig-studio/trunk/src/gtkmm/render.cpp +++ b/synfig-studio/trunk/src/gtkmm/render.cpp @@ -2,10 +2,11 @@ /*! \file gtkmm/render.cpp ** \brief Template File ** -** $Id: render.cpp,v 1.2 2005/01/10 08:13:44 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -37,6 +38,10 @@ #include #include "asyncrenderer.h" +#include "general.h" + +#include + #endif /* === U S I N G =========================================================== */ @@ -54,7 +59,7 @@ using namespace studio; /* === M E T H O D S ======================================================= */ -RenderSettings::RenderSettings(Gtk::Window& parent,handle canvas_interface): +RenderSettings::RenderSettings(Gtk::Window& parent, etl::handle canvas_interface): Gtk::Dialog(_("Render Settings"),parent,false,true), canvas_interface_(canvas_interface), adjustment_quality(3,0,9), @@ -173,26 +178,44 @@ RenderSettings::RenderSettings(Gtk::Window& parent,handleget_canvas()->get_name()); + toggle_single_frame.set_active(false); + widget_rend_desc.enable_time_section(); + + set_entry_filename(); + + get_vbox()->show_all(); +} + +RenderSettings::~RenderSettings() +{ +} + +void +RenderSettings::set_entry_filename() +{ + String filename(filename_sans_extension(canvas_interface_->get_canvas()->get_file_name())); - toggle_single_frame.set_active(true); - widget_rend_desc.disable_time_section(); + // if this isn't the root canvas, append () to the filename + etl::handle canvas = canvas_interface_->get_canvas(); + if (!canvas->is_root()) + { + if(canvas->get_name().empty()) + filename+=" ("+canvas->get_id()+')'; + else + filename+=" ("+canvas->get_name()+')'; + } + filename += ".png"; try { - entry_filename.set_text(Glib::build_filename(Glib::get_home_dir(),Glib::ustring("Desktop")+ETL_DIRECTORY_SEPERATOR+Glib::ustring("output.png"))); + entry_filename.set_text((filename)); } catch(...) { synfig::warning("Averted crash!"); entry_filename.set_text("output.png"); } - - get_vbox()->show_all(); -} - -RenderSettings::~RenderSettings() -{ } void @@ -211,7 +234,7 @@ void RenderSettings::on_choose_pressed() { String filename=entry_filename.get_text(); - if(App::dialog_saveas_file("Save Render As",filename)) + if(App::dialog_save_file("Save Render As", filename, RENDER_DIR_PREFERENCE)) entry_filename.set_text(filename); } @@ -219,6 +242,7 @@ void RenderSettings::on_render_pressed() { String filename=entry_filename.get_text(); + synfig::String calculated_target_name(target_name); if(filename.empty()) { @@ -228,15 +252,23 @@ RenderSettings::on_render_pressed() // If the target type is not yet defined, // try to figure it out from the outfile. - if(target_name.empty()) + if(calculated_target_name.empty()) { try { - String ext=String(find(filename.begin(),filename.end(),'.')+1,filename.end()); + String ext(filename_extension(filename)); + if (ext.size()) ext=ext.substr(1); // skip initial '.' + synfig::info("render target filename: '%s'; extension: '%s'", filename.c_str(), ext.c_str()); if(Target::ext_book().count(ext)) - target_name=Target::ext_book()[ext]; + { + calculated_target_name=Target::ext_book()[ext]; + synfig::info("'%s' is a known extension - using target '%s'", ext.c_str(), calculated_target_name.c_str()); + } else - target_name=ext; + { + calculated_target_name=ext; + synfig::info("unknown extension"); + } } catch(std::runtime_error x) { @@ -245,18 +277,26 @@ RenderSettings::on_render_pressed() } } - if(filename.empty() && target_name!="null") + if(filename.empty() && calculated_target_name!="null") { canvas_interface_->get_ui_interface()->error(_("A filename is required for this target")); return; } - Target::Handle target=Target::create(target_name,filename); + Target::Handle target=Target::create(calculated_target_name,filename); if(!target) { canvas_interface_->get_ui_interface()->error(_("Unable to create target for ")+filename); return; } + // This is the only way I've found to avoid send a non writable + // filename path to the renderer. + fstream filetest (filename.c_str(), fstream::out); + if (filetest.fail()) + { + canvas_interface_->get_ui_interface()->error(_("Unable to create file for ")+filename); + return; + } hide(); @@ -271,7 +311,7 @@ RenderSettings::on_render_pressed() target->set_rend_desc(&rend_desc); target->set_quality((int)adjustment_quality.get_value()); if( !target->init() ){ - canvas_interface_->get_ui_interface()->error(_("Target initialisation failure")); + canvas_interface_->get_ui_interface()->error(_("Target initialization failure")); return; } @@ -294,7 +334,7 @@ RenderSettings::on_render_pressed() } // Success! - canvas_interface_->get_ui_interface()->task(filename+_(" rendered sucessfuly")); + canvas_interface_->get_ui_interface()->task(filename+_(" rendered successfully")); canvas_interface_->get_ui_interface()->amount_complete(0,10000); */ return; @@ -303,7 +343,7 @@ RenderSettings::on_render_pressed() void RenderSettings::on_finished() { - canvas_interface_->get_ui_interface()->task(_("File rendered sucessfuly")); + canvas_interface_->get_ui_interface()->task(_("File rendered successfully")); canvas_interface_->get_ui_interface()->amount_complete(0,10000); }