
/*
 * CINELERRA
 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include "aboutprefs.h"
#include "bcsignals.h"
#include "file.h"
#include "language.h"
#include "mwindow.h"
#include "theme.h"
#include "vframe.h"
#include "versioninfo.h"


#ifndef COMPILEDATE
#define COMPILEDATE "built: " __DATE__ " " __TIME__
#endif
const char *AboutPrefs::build_timestamp = COMPILEDATE;
const char *AboutPrefs::ffmpeg_version  = CINELERRA_LIBAV_VERSION;

AboutPrefs::AboutPrefs(MWindow *mwindow, PreferencesWindow *pwindow)
 : PreferencesDialog(mwindow, pwindow)
{
// *** CONTEXT_HELP ***
	context_help_set_keyword("About");
}

AboutPrefs::~AboutPrefs()
{
	about.remove_all_objects();
}

void AboutPrefs::create_objects()
{
	lock_window("AboutPrefs::create_objects");
	int x, y;
	BC_Resources *resources = BC_WindowBase::get_resources();


	x = mwindow->theme->preferencesoptions_x;
	y = mwindow->theme->preferencesoptions_y +
		get_text_height(LARGEFONT);

	set_font(LARGEFONT);
	set_color(resources->text_default);
	draw_text(x, y, PROGRAM_NAME " " CINELERRA_VERSION);
	y += 2*get_text_height(MEDIUMFONT);

	set_font(MEDIUMFONT);
	draw_text(x, y, COPYRIGHTTEXT1
#if defined(COPYRIGHTTEXT2)
	COPYRIGHTTEXT2
#endif
	);
	y += 2*get_text_height(MEDIUMFONT);
	draw_text(x,y, COPYRIGHTTEXT3);
	y += get_text_height(MEDIUMFONT);
	draw_text(x,y, COPYRIGHTTEXT4);
	
	y += get_text_height(MEDIUMFONT) * 2;


	const char *cfg_path = File::get_cindat_path();
	char msg_path[BCTEXTLEN];
	FILE *fp = 0;
	if( BC_Resources::language[0] ) {
		snprintf(msg_path, sizeof(msg_path), "%s/msg/%s",
			cfg_path, BC_Resources::language);
		fp = fopen(msg_path, "r");
	}
	if( !fp ) {
		snprintf(msg_path, sizeof(msg_path), "%s/msg/txt",
			cfg_path);
		fp = fopen(msg_path, "r");
	}
	if( fp ) {
		set_font(LARGEFONT);
		draw_text(x, y, _("About:"));
		y += get_text_height(LARGEFONT);
		char msg[BCTEXTLEN];
		while( fgets(msg, sizeof(msg), fp) ) {
			int len = strlen(msg);
			if( len > 0 && msg[len-1] == '\n' ) msg[len-1] = 0;
			about.append(new BC_ListBoxItem(msg));
		}
		BC_ListBox *listbox;
		add_subwindow(listbox = new BC_ListBox(x, y, xS(450), yS(250),
			LISTBOX_TEXT, &about, 0, 0, 1));
		y += listbox->get_h() + get_text_height(LARGEFONT) + yS(10);
	}
	else
		y += yS(300) + get_text_height(LARGEFONT) + yS(10);

	set_font(LARGEFONT);
	set_color(resources->text_default);
	draw_text(x, y, _("License:"));
	y += get_text_height(LARGEFONT);
	set_font(MEDIUMFONT);

	char license3[BCTEXTLEN];
	sprintf(license3, _(
"This program is free software; you can redistribute it and/or modify it under the terms\n"
"of the GNU General Public License as published by the Free Software Foundation; either version\n"
"2 of the License, or (at your option) any later version.\n"
"  This software uses libraries from the FFmpeg project under the LGPLv2.1.\n"
"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n"
"without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n"
"PURPOSE.  See the GNU General Public License for more details.\n"));
	draw_text(x, y, license3);
	y += get_text_height(MEDIUMFONT, license3);

	draw_text(x, y, build_timestamp);
	x += get_text_width(MEDIUMFONT, build_timestamp);
	draw_text(x,y, " ");
	x += get_text_width(MEDIUMFONT, " ");
	draw_text(x,y, ffmpeg_version);
	x -= get_text_width(MEDIUMFONT, build_timestamp);
	x -= get_text_width(MEDIUMFONT, " ");
#if defined(REPOMAINTXT)
	y += get_text_height(MEDIUMFONT, build_timestamp);
	draw_text(x, y, REPOMAINTXT);
#endif

	x = get_w() - mwindow->theme->about_bg->get_w() - xS(10);
	y = mwindow->theme->preferencesoptions_y;
	BC_Pixmap *temp_pixmap = new BC_Pixmap(this,
		mwindow->theme->about_bg,
		PIXMAP_ALPHA);
	draw_pixmap(temp_pixmap, x, y);
	delete temp_pixmap;

	x += mwindow->theme->about_bg->get_w() + xS(10);
	y += get_text_height(LARGEFONT) * 2;

	flash();
	flush();
	unlock_window();
}


