Blame synfig-studio/src/gui/dialogs/dialog_spritesheetparam.cpp

trizer 7e7cdf
/* === S Y N F I G ========================================================= */
trizer 7e7cdf
/*!	\file dialog_spritesheetparam.cpp
trizer 7e7cdf
**	\brief Implementation for the SpriteSheetParam Dialog
trizer 7e7cdf
**
trizer 7e7cdf
**	$Id$
trizer 7e7cdf
**
trizer 7e7cdf
**	\legal
trizer 7e7cdf
**	Copyright (c) 2015 Denis Zdorovtsov
trizer 7e7cdf
**
trizer 7e7cdf
**	This package is free software; you can redistribute it and/or
trizer 7e7cdf
**	modify it under the terms of the GNU General Public License as
trizer 7e7cdf
**	published by the Free Software Foundation; either version 2 of
trizer 7e7cdf
**	the License, or (at your option) any later version.
trizer 7e7cdf
**
trizer 7e7cdf
**	This package is distributed in the hope that it will be useful,
trizer 7e7cdf
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
trizer 7e7cdf
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
trizer 7e7cdf
**	General Public License for more details.
trizer 7e7cdf
**	\endlegal
trizer 7e7cdf
*/
trizer 7e7cdf
/* ========================================================================= */
trizer 7e7cdf
trizer 7e7cdf
/* === H E A D E R S ======================================================= */
caryoscelus 77c779
#include <cmath></cmath>
Denis Zdorovtsov 76fe0c
bw 94d8a6
#include <synfig general.h=""></synfig>
Denis Zdorovtsov 76fe0c
bw 94d8a6
#include <gtkmm grid.h=""></gtkmm>
bw 94d8a6
#include <gui localization.h=""></gui>
trizer 96a035
#include "dialogs/dialog_spritesheetparam.h"
trizer 613172
trizer 613172
namespace studio
trizer 613172
{
trizer 613172
trizer 7e7cdf
Dialog_SpriteSheetParam::Dialog_SpriteSheetParam(Gtk::Window &parent):
Denis Zdorovtsov 76fe0c
	Dialog_TargetParam(parent, _("Sprite sheet parameters")), 
Denis Zdorovtsov 76fe0c
	frame_count(0)
Denis Zdorovtsov 76fe0c
{	
Denis Zdorovtsov 76fe0c
	//Checkbox
Denis Zdorovtsov 76fe0c
	check_button = Gtk::manage(new Gtk::CheckButton(_("Add into an existing file."),true));
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	//Offset X
trizer 96a035
	Gtk::Label* offset_x_label(manage(new Gtk::Label(_("Offset X:"))));
trizer 96a035
	offset_x_label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
trizer 96a035
	offset_x_box = Gtk::manage(new Gtk::SpinButton(Gtk::Adjustment::create(0.0, 0.0,10000.0)));
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	//Offset Y
trizer 96a035
	Gtk::Label* offset_y_label(manage(new Gtk::Label(_("Offset Y:"))));
trizer 96a035
	offset_y_label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
trizer 96a035
	offset_y_box = Gtk::manage(new Gtk::SpinButton(Gtk::Adjustment::create(0.0, 0.0,10000.0)));
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	//Dirrection
Denis Zdorovtsov 76fe0c
	Gtk::Label* direction_label(manage(new Gtk::Label(_("Direction:"))));
Denis Zdorovtsov 76fe0c
	direction_label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
Denis Zdorovtsov 76fe0c
	direction_box = Gtk::manage(new Gtk::ComboBoxText());
Pascal Schmid 2891f7
	direction_box->append("horizontal");
Denis Zdorovtsov 76fe0c
	direction_box->append("vertical");
Denis Zdorovtsov 76fe0c
	direction_box->set_active(0);
Denis Zdorovtsov 76fe0c
	direction_box->signal_changed().connect(sigc::mem_fun(*this, &Dialog_SpriteSheetParam::on_dir_change));
Denis Zdorovtsov 76fe0c
	
Denis Zdorovtsov 76fe0c
	//Row count
trizer d2fcc7
	Gtk::Label* rows_label(manage(new Gtk::Label(_("Rows:"))));
trizer d2fcc7
	rows_label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
Denis Zdorovtsov 76fe0c
	rows_box = Gtk::manage(new Gtk::SpinButton(Gtk::Adjustment::create(0.0, 1.0,1000.0)));
Denis Zdorovtsov 76fe0c
	rows_box->signal_value_changed().connect(sigc::mem_fun(*this, &Dialog_SpriteSheetParam::on_rows_change));
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	//Column count
trizer d2fcc7
	Gtk::Label* columns_label(manage(new Gtk::Label(_("Columns:"))));
trizer d2fcc7
	columns_label->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
Denis Zdorovtsov 76fe0c
	columns_box = Gtk::manage(new Gtk::SpinButton(Gtk::Adjustment::create(0.0, 1.0,1000.0)));
Denis Zdorovtsov 76fe0c
	columns_box->signal_value_changed().connect(sigc::mem_fun(*this, &Dialog_SpriteSheetParam::on_cols_change));
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	//Grid
Denis Zdorovtsov 76fe0c
	Gtk::Grid* grid = Gtk::manage(new Gtk::Grid());
Denis Zdorovtsov 76fe0c
	grid->attach(*check_button,0,0,2,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*offset_x_label,0,1,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*offset_x_box,1,1,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*offset_y_label,2,1,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*offset_y_box,3,1,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*direction_label,0,2,2,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*direction_box,1,2,3,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*rows_label,0,3,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*rows_box,1,3,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*columns_label,2,3,1,1);
Denis Zdorovtsov 76fe0c
	grid->attach(*columns_box,3,3,1,1);
Denis Zdorovtsov 76fe0c
	grid->set_row_spacing (4);
Denis Zdorovtsov 76fe0c
	grid->set_column_spacing (2);
Denis Zdorovtsov 76fe0c
	grid->set_border_width(8);
Denis Zdorovtsov 76fe0c
	grid->show_all();
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
	get_content_area()->pack_start(*grid, true, true, 3);
Denis Zdorovtsov 76fe0c
	get_content_area()->show_all();
trizer 7e7cdf
}
trizer 7e7cdf
trizer 7e7cdf
Dialog_SpriteSheetParam::~Dialog_SpriteSheetParam()
trizer 7e7cdf
{
trizer 7e7cdf
}
trizer 613172
trizer 7e7cdf
void
trizer 7e7cdf
Dialog_SpriteSheetParam::init()
trizer 7e7cdf
{
Denis Zdorovtsov 76fe0c
	frame_count = get_desc().get_frame_end() - get_desc().get_frame_start() + 1;
Denis Zdorovtsov 76fe0c
	
trizer 96a035
	offset_x_box->set_value(get_tparam().offset_x);
trizer 96a035
	offset_y_box->set_value(get_tparam().offset_y);
trizer d2fcc7
	rows_box->set_value(get_tparam().rows);
trizer d2fcc7
	columns_box->set_value(get_tparam().columns);
Denis Zdorovtsov 76fe0c
	direction_box->set_active(get_tparam().dir);
Denis Zdorovtsov 76fe0c
	check_button->set_active(get_tparam().append);
Denis Zdorovtsov 76fe0c
	on_dir_change(); //Update boxes
Denis Zdorovtsov 76fe0c
}
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
void
Denis Zdorovtsov 76fe0c
Dialog_SpriteSheetParam::on_dir_change()
Denis Zdorovtsov 76fe0c
{
Denis Zdorovtsov 76fe0c
	rows_box->set_sensitive(direction_box->get_active_row_number() == 1);
Denis Zdorovtsov 76fe0c
	rows_box->set_value(direction_box->get_active_row_number() == 1 ? frame_count : 1);
Denis Zdorovtsov 76fe0c
	columns_box->set_sensitive(direction_box->get_active_row_number() == 0);
Denis Zdorovtsov 76fe0c
	columns_box->set_value(direction_box->get_active_row_number() == 0 ? frame_count : 1);
Denis Zdorovtsov 76fe0c
}
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
void
Denis Zdorovtsov 76fe0c
Dialog_SpriteSheetParam::on_rows_change()
Denis Zdorovtsov 76fe0c
{
Denis Zdorovtsov 76fe0c
	static bool flag = false;
Denis Zdorovtsov 76fe0c
	if (direction_box->get_active_row_number() == 0)
Denis Zdorovtsov 76fe0c
		return;
Denis Zdorovtsov 76fe0c
	if ((flag = !flag))
Denis Zdorovtsov 76fe0c
		columns_box->set_value(ceil((double)frame_count / rows_box->get_value()));
Denis Zdorovtsov 76fe0c
}
Denis Zdorovtsov 76fe0c
Denis Zdorovtsov 76fe0c
void
Denis Zdorovtsov 76fe0c
Dialog_SpriteSheetParam::on_cols_change()
Denis Zdorovtsov 76fe0c
{
Denis Zdorovtsov 76fe0c
	static bool flag = false;
Denis Zdorovtsov 76fe0c
	if (direction_box->get_active_row_number() == 1)
Denis Zdorovtsov 76fe0c
		return;
Denis Zdorovtsov 76fe0c
	if ((flag = !flag))
Denis Zdorovtsov 76fe0c
		rows_box->set_value(ceil((double)frame_count / columns_box->get_value()));
trizer 7e7cdf
}
trizer 7e7cdf
trizer 7e7cdf
void
trizer 7e7cdf
Dialog_SpriteSheetParam::write_tparam(synfig::TargetParam & tparam_)
trizer 7e7cdf
{
trizer 96a035
	tparam_.offset_x = offset_x_box->get_value();
trizer 96a035
	tparam_.offset_y = offset_y_box->get_value();
trizer d2fcc7
	tparam_.rows = rows_box->get_value();
trizer d2fcc7
	tparam_.columns = columns_box->get_value();
Denis Zdorovtsov 76fe0c
	tparam_.dir = (synfig::TargetParam::Direction)direction_box->get_active_row_number ();
Denis Zdorovtsov 76fe0c
	tparam_.append = check_button->get_active();
trizer 7e7cdf
}
trizer 613172
bw 94d8a6
}