**
** \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
#include <synfig/canvas.h>
#include "asyncrenderer.h"
+#include "general.h"
+
#endif
/* === U S I N G =========================================================== */
/* === M E T H O D S ======================================================= */
-RenderSettings::RenderSettings(Gtk::Window& parent,handle<synfigapp::CanvasInterface> canvas_interface):
+RenderSettings::RenderSettings(Gtk::Window& parent, etl::handle<synfigapp::CanvasInterface> canvas_interface):
Gtk::Dialog(_("Render Settings"),parent,false,true),
canvas_interface_(canvas_interface),
adjustment_quality(3,0,9),
set_title(_("Render Settings")+String(" - ")+canvas_interface_->get_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 (<canvasname>) to the filename
+ etl::handle<synfig::Canvas> 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_SEPARATOR+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
RenderSettings::on_choose_pressed()
{
String filename=entry_filename.get_text();
- if(App::dialog_save_file("Save Render As",filename))
+ if(App::dialog_save_file("Save Render As", filename, RENDER_DIR_PREFERENCE))
entry_filename.set_text(filename);
}
RenderSettings::on_render_pressed()
{
String filename=entry_filename.get_text();
+ synfig::String calculated_target_name(target_name);
if(filename.empty())
{
// 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)
{
}
}
- 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);
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;
}