#include <stream.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>

#include "GUIC_Application.hpp"
#include "GUIC_OldButton.hpp"
#include "GUIC_Checkbox.hpp"
#include "GUIC_ColorMixer.hpp"
#include "GUIC_Cycle.hpp"
#include "GUIC_Error.hpp"
#include "GUIC_Event.hpp"
#include "GUIC_FileString.hpp"
#include "GUIC_Font.hpp"
#include "GUIC_FontRequester.hpp"
#include "GUIC_Frame.hpp"
#include "GUIC_OldLabel.hpp"
#include "GUIC_PathString.hpp"
#include "GUIC_Radio.hpp"
#include "GUIC_Register.hpp"
#include "GUIC_Screen.hpp"
#include "GUIC_ScreenRequester.hpp"
#include "GUIC_SlidingInteger.hpp"
#include "GUIC_String.hpp"
#include "GUIC_Text.hpp"

#include "PrefsWindow.hpp"

/*********************************************************************************************************/
	
PrefsWindowC::PrefsWindowC							(GUIC_ApplicationC &a, GUIC_ScreenC &s, GUIC_ScreenRequesterC &sReq, GUIC_FontRequesterC &fReq) : GUIC_WindowC (52,34)
{
	app							= &a;
	screen					= &s;
	screenRequester	= &sReq;
	fontRequester		= &fReq;
	fixedFont				= 0;
	colorMixer				= new GUIC_ColorMixerC(a, s);
		
	// Register erstellen
	reg = new GUIC_RegisterC			(1,1,50,32,5);
	reg -> setName(1, "GUI");
	reg -> setName(2, "Misc");
	reg -> setName(3, "Thumb");
	reg -> setName(4, "HTML");
	reg -> setName(5, "Tables");
	add ( reg );
	
	// Teil 1: GUI

	fr_screen	= new GUIC_FrameC					( 0, 0,48,12, "Screen");
	cb_public	= new GUIC_CheckboxC 			( 1, 2, 3, 2, FALSE);
	la_public		= new GUIC_OldLabelC				( 5, 2,42, 2, "Use a _public screen:");
	st_public		= new GUIC_StringC					( 1, 4,46, 2, "Workbench");
	cb_own		= new GUIC_CheckboxC 			( 1, 7, 3, 2, TRUE);
	la_own		= new GUIC_OldLabelC				( 5, 7,42, 2, "Use _own public screen:");
	tx_own		= new GUIC_TextC						( 1, 9,44, 2, "Like Workbench");
	bt_own		= new GUIC_OldButtonC	(45, 9, 2, 2, "«");
	
	cb_public	-> setShortcut('p');
	cb_own		-> setShortcut('o');
	st_public		-> setEnabled(FALSE);
	
	reg->add(1, fr_screen);
	reg->add(1, cb_public);
	reg->add(1, la_public);
	reg->add(1, st_public);
	reg->add(1, cb_own);
	reg->add(1, la_own);
	reg->add(1, tx_own);
	reg->add(1, bt_own);

	fr_font	= new GUIC_FrameC					( 0,14, 48, 7, "Font");
	cb_font	= new GUIC_CheckboxC				( 1,16, 3, 2, FALSE);
	la_font	= new GUIC_OldLabelC				( 5,16,42, 2, "Use own _font (instead of system default):");
	tx_font	= new GUIC_TextC						( 1,18,44, 2, "topaz.font / 8");
	bt_font	= new GUIC_OldButtonC			(45,18, 2, 2, "«");

	cb_font	-> setShortcut('f');
	tx_font	-> setEnabled(FALSE);
	bt_font	-> setEnabled(FALSE);
	
	reg->add(1, fr_font);
	reg->add(1, cb_font);
	reg->add(1, la_font);
	reg->add(1, tx_font);
	reg->add(1, bt_font);
	
	app->addPrefs("PublicScreen", cb_public);
	app->addPrefs("PublicScreenName", st_public);
	app->addPrefs("OwnScreen", cb_own);
	app->addPrefs("OwnScreenName", tx_own);
	app->addPrefs("OwnFont", cb_font);
	app->addPrefs("OwnFontName", tx_font);
	

	// Teil 2: Misc
	
	fr_paths					= new GUIC_FrameC				( 0, 0,48,12, "Paths");
	la_thumbnailPath	= new GUIC_OldLabelC			( 1, 2,46, 2, "_Path to store thumbnails and HTML files:");
	ps_thumbnailPath	= new GUIC_PathStringC		( 1, 4,46, 2, "HTML");
	la_temporaryPath	= new GUIC_OldLabelC			( 1, 7,46, 2, "_Temporary path for thumbnails:");
	ps_temporaryPath	= new GUIC_PathStringC		( 1, 9,46, 2, "temp");
	
	fr_shell					= new GUIC_FrameC				( 0,13,48, 7, "Shell command");
	la_shellCommand	= new GUIC_OldLabelC			( 1,15,46, 2, "_Command to open a shell window:");
	st_shellCommand	= new GUIC_StringC				( 1,17,46, 2, "NewShell \"CON:600/600/450/200/Shell/CLOSE/SCREEN Gallery\"");
	
	fr_priority				= new GUIC_FrameC				( 0,21,48, 7, "Process Priority");
	cb_priority				= new GUIC_CheckboxC			( 1,23, 3, 2, FALSE);
	la_priority				= new GUIC_OldLabelC			( 5,23,42, 2, "Change pr_iority while processing:");
	si_priority				= new GUIC_SlidingIntegerC	( 1,25,46, 2, -128, 127, -1);
			
	ps_thumbnailPath	-> setShortcut('p');
	ps_temporaryPath	-> setShortcut('t');
	st_shellCommand	-> setShortcut('c');
	cb_priority				-> setShortcut('i');
	
	reg->add(2, fr_paths);
	reg->add(2, la_thumbnailPath);
	reg->add(2, ps_thumbnailPath);
	reg->add(2, la_temporaryPath);
	reg->add(2, ps_temporaryPath);
	reg->add(2, fr_shell);
	reg->add(2, la_shellCommand);
	reg->add(2, st_shellCommand);
	reg->add(2, fr_priority);
	reg->add(2, cb_priority);
	reg->add(2, la_priority);
	reg->add(2, si_priority);
	
	app->addPrefs("ThumbnailPath", ps_thumbnailPath);
	app->addPrefs("TemporaryPath", ps_temporaryPath);
	app->addPrefs("ShellCommand", st_shellCommand);
	app->addPrefs("ChangePriority", cb_priority);
	app->addPrefs("ProcessPriority", si_priority);

	// Teil 3: Thumbnails
	
	fr_thumbnails				= new GUIC_FrameC				( 0, 0,48,20, "Thumbnails");
	la_thumbnailWidth		= new GUIC_OldLabelC			( 1, 2,46, 2, "_Width of thumbnails:");
	si_thumbnailWidth		= new GUIC_SlidingIntegerC	( 1, 4,46, 2, 50, 200, 110);
	la_thumbnailHeight		= new GUIC_OldLabelC			( 1, 6,46, 2, "_Height of thumbnails:");
	si_thumbnailHeight		= new GUIC_SlidingIntegerC	( 1, 8,46, 2, 50, 200, 110);
	la_quality					= new GUIC_OldLabelC			( 1,10,46, 2, "_Quality of JPEG file:");
	si_quality					= new GUIC_SlidingIntegerC	( 1,12,46, 2, 10, 100, 90);
	la_thumbnailHide			= new GUIC_OldLabelC			( 1,15,40, 2, "Set hide _flag for thumbnails:");
	cb_thumbnailHide		= new GUIC_CheckboxC			(44,15, 3, 2, TRUE);
	la_thumbnailDelete		= new GUIC_OldLabelC			( 1,17,40, 2, "_Delete obsolete thumbnails:");
	cb_thumbnailDelete	= new GUIC_CheckboxC			(44,17, 3, 2, FALSE);

	si_thumbnailWidth		-> setShortcut('w');
	si_thumbnailHeight		-> setShortcut('h');
	si_quality					-> setShortcut('q');
	cb_thumbnailHide		-> setShortcut('f');
	cb_thumbnailDelete	-> setShortcut('d');
	
	reg->add(3, fr_thumbnails);
	reg->add(3, la_thumbnailWidth);
	reg->add(3, si_thumbnailWidth);
	reg->add(3, la_thumbnailHeight);
	reg->add(3, si_thumbnailHeight);
	reg->add(3, la_quality);
	reg->add(3, si_quality);
	reg->add(3, la_thumbnailHide);
	reg->add(3, cb_thumbnailHide);
	reg->add(3, la_thumbnailDelete);
	reg->add(3, cb_thumbnailDelete);
	
	app->addPrefs("ThumbnailWidth", si_thumbnailWidth);
	app->addPrefs("ThumbnailHeight", si_thumbnailHeight);
	app->addPrefs("ThumbnailQuality", si_quality);
	app->addPrefs("ThumbnailHide", cb_thumbnailHide);
	app->addPrefs("ThumbnailDelete", cb_thumbnailDelete);

	// Teil 4: HTML
	
	fr_html				= new GUIC_FrameC				( 0, 0,48,27, "HTML");
	la_pattern1			= new GUIC_OldLabelC			( 1, 2,10, 2, "_Pattern 1:");
	fs_pattern1			= new GUIC_FileStringC			(12, 2,35, 2, "");
	la_pattern2			= new GUIC_OldLabelC			( 1, 4,10, 2, "P_attern 2:");
	fs_pattern2			= new GUIC_FileStringC			(12, 4,35, 2, "");
	la_sound1			= new GUIC_OldLabelC			( 1, 7,10, 2, "_Sound 1:");
	fs_sound1			= new GUIC_FileStringC			(12, 7,35, 2, "");
	la_sound2			= new GUIC_OldLabelC			( 1, 9,10, 2, "S_ound 2:");
	fs_sound2			= new GUIC_FileStringC			(12, 9,35, 2, "");
	la_up					= new GUIC_OldLabelC			( 1,12,10, 2, "Image _Up:");
	fs_up					= new GUIC_FileStringC			(12,12,35, 2, "");
	la_left					= new GUIC_OldLabelC			( 1,14,10, 2, "_Left:");
	fs_left					= new GUIC_FileStringC			(12,14,35, 2, "");
	la_right				= new GUIC_OldLabelC			( 1,16,10, 2, "_Right:");
	fs_right				= new GUIC_FileStringC			(12,16,35, 2, "");
	la_filename			= new GUIC_OldLabelC			( 1,19,20, 2, "_Name for html files:"); 
	st_filename			= new GUIC_StringC				(24,19,10, 2, "index");
	cy_suffix			= new GUIC_CycleC				(35,19,12, 2, ".html|.htm");
	la_frames			= new GUIC_OldLabelC			( 1,22,22, 2, "Create _frames:");
	cb_frames			= new GUIC_CheckboxC			(44,22, 3, 2, TRUE);
	la_frameWidth		= new GUIC_OldLabelC			( 1,24,22, 2, "_Width of menu frame:");
	si_frameWidth		= new GUIC_SlidingIntegerC	(24,24,23, 2, 50, 300, 150);

	fs_pattern1			-> setShortcut('p');
	fs_pattern2			-> setShortcut('a');
	fs_sound1			-> setShortcut('s');
	fs_sound2			-> setShortcut('o');
	fs_up					-> setShortcut('u');
	fs_left					-> setShortcut('l');
	fs_right				-> setShortcut('r');
	st_filename			-> setShortcut('n');
	cb_frames			-> setShortcut('f');
	si_frameWidth		-> setShortcut('w');
	fs_pattern1 		-> setFilter(GUIC_PictureFile);
	fs_pattern2 		-> setFilter(GUIC_PictureFile);
	fs_sound1 			-> setFilter(GUIC_SoundFile);
	fs_sound2 			-> setFilter(GUIC_SoundFile);
	
	reg->add(4, fr_html);
	reg->add(4, la_pattern1);
	reg->add(4, fs_pattern1);
	reg->add(4, la_pattern2);
	reg->add(4, fs_pattern2);
	reg->add(4, la_up);
	reg->add(4, fs_up);
	reg->add(4, la_left);
	reg->add(4, fs_left);
	reg->add(4, la_right);
	reg->add(4, fs_right);
	reg->add(4, la_sound1);
	reg->add(4, fs_sound1);
	reg->add(4, la_sound2);
	reg->add(4, fs_sound2);
	reg->add(4, la_filename);
	reg->add(4, st_filename);
	reg->add(4, cy_suffix);
	reg->add(4, la_frames);
	reg->add(4, cb_frames);
	reg->add(4, la_frameWidth);
	reg->add(4, si_frameWidth);
	
	app->addPrefs("Pattern1", fs_pattern1);
	app->addPrefs("Pattern2", fs_pattern2);
	app->addPrefs("Sound1", fs_sound1);
	app->addPrefs("Sound2", fs_sound2);
	app->addPrefs("UpImage", fs_up);
	app->addPrefs("LeftImage", fs_left);
	app->addPrefs("RightImage", fs_right);
	app->addPrefs("Filename", st_filename);
	app->addPrefs("Suffix", cy_suffix);
	app->addPrefs("CreateFrames", cb_frames);
	app->addPrefs("MenuFrameWidth", si_frameWidth);

	// Teil 5: Tables
	
	fr_table						= new GUIC_FrameC					( 0, 0,48,21, "Tables");
	la_tableLines				= new GUIC_OldLabelC				( 1, 2,12, 2, "_Lines:");
	si_tableLines				= new GUIC_SlidingIntegerC		(14, 2,33, 2, 3, 200, 3);
	la_tableColumns			= new GUIC_OldLabelC				( 1, 4,12, 2, "_Columns:");
	si_tableColumns			= new GUIC_SlidingIntegerC		(14, 4,33, 2, 3, 200, 3);
	la_tableBorderSize		= new GUIC_OldLabelC				( 1, 6,12, 2, "_Bordersize:");
	si_tableBorderSize		= new GUIC_SlidingIntegerC		(14, 6,33, 2, 0, 20, 4);
	la_showSize				= new GUIC_OldLabelC				( 1, 9,20, 2, "Show file _size:");
	cb_showSize				= new GUIC_CheckboxC				(44, 9, 3, 2, TRUE);
	la_showDate				= new GUIC_OldLabelC				( 1,11,20, 2, "Show file _data:");
	cb_showDate				= new GUIC_CheckboxC				(44,11, 3, 2, TRUE);
	la_showDimensions	= new GUIC_OldLabelC				( 1,13,20, 2, "Show d_imensions:");
	cb_showDimensions	= new GUIC_CheckboxC				(44,13, 3, 2, TRUE);
	la_tableColor1				= new GUIC_OldLabelC				( 1,16,25, 2, "_Title background color:");
	st_tableColor1			= new GUIC_StringC					(32,16,13, 2, "0xA99A99");
	bt_tableColor1			= new GUIC_OldButtonC			(45,16, 2, 2, "«");
	la_tableColor2				= new GUIC_OldLabelC				( 1,18,25, 2, "_Entry background color:");
	st_tableColor2			= new GUIC_StringC					(32,18,13, 2, "0xBBBBBB");
	bt_tableColor2			= new GUIC_OldButtonC			(45,18, 2, 2, "«");

	si_tableLines				-> setShortcut('l');
	si_tableColumns			-> setShortcut('c');
	si_tableBorderSize		-> setShortcut('b');
	cb_showSize				-> setShortcut('s');
	cb_showDate				-> setShortcut('d');
	cb_showDimensions	-> setShortcut('i');
	bt_tableColor1			-> setShortcut('t');
	bt_tableColor2			-> setShortcut('e');

	reg->add(5, fr_table);
	reg->add(5, la_tableLines);
	reg->add(5, si_tableLines);
	reg->add(5, la_tableColumns);
	reg->add(5, si_tableColumns);
	reg->add(5, la_tableBorderSize);
	reg->add(5, si_tableBorderSize);
	reg->add(5, la_showSize);
	reg->add(5, cb_showSize);
	reg->add(5, la_showDate);
	reg->add(5, cb_showDate);
	reg->add(5, la_showDimensions);
	reg->add(5, cb_showDimensions);
	reg->add(5, la_tableColor1);
	reg->add(5, st_tableColor1);
	reg->add(5, bt_tableColor1);
	reg->add(5, la_tableColor2);
	reg->add(5, st_tableColor2);
	reg->add(5, bt_tableColor2);
	
	app->addPrefs("TableLines", si_tableLines);
	app->addPrefs("TableColumns", si_tableColumns);
	app->addPrefs("TableBordersize", si_tableBorderSize);
	app->addPrefs("TableShowSize", cb_showSize);
	app->addPrefs("TableShowDate", cb_showDate);
	app->addPrefs("TableShowDimensions", cb_showDimensions);
	app->addPrefs("TableColor1", st_tableColor1);
	app->addPrefs("TableColor2", st_tableColor2);

	app -> addPrefs("ColorMixer", colorMixer);
	app -> addPrefs("Register", reg);
	app -> addPrefs("PrefsWindow", this);
	
	setTitle("Gallery - Prefs");
	setGuideContext("PrefsWindow");
	activate();
}
PrefsWindowC::~PrefsWindowC							(VOID)
{
	cleanUp();
}

/*********************************************************************************************************/

STRPTR	PrefsWindowC::getClass						(VOID)
{
	return "PrefsWindowC";
}

BOOL		PrefsWindowC::action							(GUIC_EventC &e)
{
	switch (e.id)
		{
		case GUIC_GadgetEvent:
			if (e.gadget == (GUIC_GadgetC *) cb_public)
				{
				cb_own->set ( cb_public->get() ? FALSE : TRUE );
				setScreen();
				}
			else if (e.gadget == (GUIC_GadgetC *) st_public)
				{
				setScreen();
				}
			else if (e.gadget == (GUIC_GadgetC *) cb_own)
				{
				cb_public->set ( cb_own->get() ? FALSE : TRUE );
				setScreen();
				}
			else if (e.gadget == (GUIC_GadgetC *) bt_own)
				{
				if (screenRequester->request(this)) setScreen();
				}
			else if (e.gadget == (GUIC_GadgetC *) cb_font)
				{
				setFont();
				}
			else if (e.gadget == (GUIC_GadgetC *) bt_font)
				{
				if (fontRequester->request(this)) setFont();
				}
			else if (e.gadget == (GUIC_GadgetC *) cb_priority)
				{
				si_priority->setEnabled ( cb_priority->get() ? TRUE : FALSE);
				}
			else if (e.gadget == (GUIC_GadgetC *) bt_tableColor1)
				{
				app->setBusy(TRUE);

				LONG r=0, g=0, b=0;
				color = 1;
				
				if (! convertHEXToRGB(st_tableColor1->get(), r, g, b))
					{
					GUIC_ErrorC err ("Error", "Can't convert sting to RGB values.\nPlease check.");
					err.request();
					app->setBusy(FALSE);
					return TRUE;
					}

				colorMixer->setRGB(r,g,b);
				screen->add(colorMixer);				
				
				return TRUE;
				}
			else if (e.gadget == (GUIC_GadgetC *) bt_tableColor2)
				{
				app->setBusy(TRUE);
				
				LONG r=0, g=0, b=0;
				color = 2;
				
				if (! convertHEXToRGB(st_tableColor2->get(), r, g, b))
					{
					GUIC_ErrorC err ("Error", "Can't convert sting to RGB values.\nPlease check.");
					err.request();
					app->setBusy(FALSE);
					return TRUE;
					}

				colorMixer->setRGB(r,g,b);
				screen->add(colorMixer);				
				
				return TRUE;
				}
			return TRUE;
			break;
		case GUIC_OpenWindow:
			return TRUE;
			break;
		case GUIC_CloseWindow:
			screen->remove(this);
			return TRUE;
			break;
		}
	
	return FALSE;
}

VOID		PrefsWindowC::setPrefs						(VOID)
{
	app->addPrefs("ScreenRequester", screenRequester);
	app->addPrefs("FontRequester", fontRequester);
	
	fontRequester->setFixedWidth(TRUE);
	
	setFont();
	setScreen();

	si_priority->setEnabled ( cb_priority->get() ? TRUE : FALSE);
}
VOID		PrefsWindowC::windowClosed			(GUIC_WindowC *w)
{
	if (w == (GUIC_WindowC *) colorMixer)
		{
		STRPTR hex = new CHAR [10];
		
		screen->remove(colorMixer);

		if (convertRGBToHEX ( colorMixer->getRed(), colorMixer->getGreen(), colorMixer->getBlue(), &hex )) 
			( color == 1 ? st_tableColor1 : st_tableColor2 ) -> set( hex );
		
		delete [] hex;
		
		app->setBusy(FALSE);
		}
}
	
VOID		PrefsWindowC::setFont						(VOID)
{
	if ( cb_font->get() )
		{
		bt_font->setEnabled(TRUE);
		tx_font->setEnabled(TRUE);

		STRPTR	fontName	= fontRequester->getName();
		LONG		fontSize		= fontRequester->getSize();
		STRPTR	text			= new CHAR [ strlen(fontName) + 10 ];
			
		sprintf(text, "%s / %ld", fontName, fontSize);
		tx_font->set(text);
		delete [] text;
			
		if (fixedFont) delete fixedFont;
		fixedFont = new GUIC_FixedFontC(fontName, fontSize);
		screen->setFont(fixedFont);
		}
	else
		{
		bt_font->setEnabled(FALSE);
		tx_font->setEnabled(FALSE);
		
		if (fixedFont) delete fixedFont;
		fixedFont = new GUIC_FixedFontC;
		screen->setFont(fixedFont);		
		}
}
VOID		PrefsWindowC::setScreen					(VOID)
{
	if ( cb_own->get() )
		{
		st_public->setEnabled(FALSE);
		
		tx_own->setEnabled(TRUE);
		bt_own->setEnabled(TRUE);
		
		STRPTR 	mode 	= screenRequester->getModeName();
		LONG 	width	= screenRequester->getWidth();
		LONG		height	= screenRequester->getHeight();
		LONG		depth	= screenRequester->getDepth();
		STRPTR 	text	= new CHAR [ strlen(mode) + 50 ];
	
		sprintf(text, "%s (%ld · %ld · %ld)", mode, width, height, depth);
		tx_own->set(text);
		delete [] text;
		
		screen->set(screenRequester);
		}
	else 
		{
		st_public->setEnabled(TRUE);

		bt_own->setEnabled(FALSE);
		tx_own->setEnabled(FALSE);
				
		screen->set(st_public->get());
		}
}

BOOL		PrefsWindowC::hexToLong					(CHAR c, LONG &l)
{
	switch (toupper(c))
		{
		case '0':
			l =  0;
			break;
		case '1':
			l =  1;
			break;
		case '2':
			l =  2;
			break;
		case '3':
			l =  3;
			break;
		case '4':
			l =  4;
			break;
		case '5':
			l =  5;
			break;
		case '6':
			l =  6;
			break;
		case '7':
			l =  7;
			break;
		case '8':
			l =  8;
			break;
		case '9':
			l =  9;
			break;
		case 'A':
			l =  10;
			break;
		case 'B':
			l =  11;
			break;
		case 'C':
			l =  12;
			break;
		case 'D':
			l =  13;
			break;
		case 'E':
			l =  14;
			break;
		case 'F':
			l =  15;
			break;
		default:
			return FALSE;
		}
		
	return TRUE;
}
BOOL 	PrefsWindowC::convertHEXToRGB		(STRPTR hex, LONG &r, LONG &g, LONG &b)
{
	if (strlen(hex) < 8) 						return FALSE;
	if (hex[0] != '0') 							return FALSE;
	if (hex[1] != 'x' && hex[1] !='X')	return FALSE;

	LONG l, red, green, blue;
	
	if (! hexToLong(hex[2], l)) return FALSE;
	red = 16 * l;
	if (! hexToLong(hex[3], l)) return FALSE;
	red = red + l;
	
	if (! hexToLong(hex[4], l)) return FALSE;
	green = 16 * l;
	if (! hexToLong(hex[5], l)) return FALSE;
	green = green + l;

	if (! hexToLong(hex[6], l)) return FALSE;
	blue = 16 * l;
	if (! hexToLong(hex[7], l)) return FALSE;
	blue = blue + l;

	r = red;
	g = green;
	b = blue;
	
	return TRUE;
}
BOOL 	PrefsWindowC::convertRGBToHEX		(LONG r, LONG g, LONG b, STRPTR *hex)
{
	if (r < 0) r=0;
	if (r > 255) r=255;
	
	if (g < 0) g=0;
	if (g > 255) g=255;
	
	if (b < 0) b=0;
	if (b > 255) b=255;

	sprintf (*hex, "0x%02lX%02lX%02lX", r, g, b);

	return TRUE;
}

/*********************************************************************************************************/

VOID		PrefsWindowC::cleanUp						(VOID)
{
	delete reg;

	delete fr_screen;
	delete cb_public;
	delete la_public;
	delete st_public;
	
	delete cb_own;
	delete la_own;
	delete tx_own;
	delete bt_own;

	delete fr_font;
	delete cb_font;
	delete la_font;
	delete tx_font;
	delete bt_font;
	
	delete fr_paths;
	delete la_thumbnailPath;
	delete ps_thumbnailPath;
	delete la_temporaryPath;
	delete ps_temporaryPath;
	delete fr_shell;
	delete la_shellCommand;
	delete st_shellCommand;
	delete fr_priority;
	delete cb_priority;
	delete la_priority;
	delete si_priority;

	delete fr_thumbnails;
	delete la_thumbnailWidth;
	delete si_thumbnailWidth;
	delete la_thumbnailHeight;
	delete si_thumbnailHeight;
	delete la_quality;
	delete si_quality;
	delete la_thumbnailHide;
	delete cb_thumbnailHide;
	delete la_thumbnailDelete;
	delete cb_thumbnailDelete;

	delete fr_html;
	delete la_pattern1;
	delete fs_pattern1;
	delete la_pattern2;
	delete fs_pattern2;
	delete la_up;
	delete fs_up;
	delete la_left;
	delete fs_left;
	delete la_right;
	delete fs_right;
	delete la_sound1;
	delete fs_sound1;
	delete la_sound2;
	delete fs_sound2;
	delete la_filename;
	delete st_filename;
	delete cy_suffix;
	delete la_frames;
	delete cb_frames;
	delete la_frameWidth;
	delete si_frameWidth;

	delete fr_table;
	delete la_tableLines;
	delete si_tableLines;
	delete la_tableColumns;
	delete si_tableColumns;
	delete la_tableBorderSize;
	delete si_tableBorderSize;
	delete la_showSize;
	delete cb_showSize;
	delete la_showDate;
	delete cb_showDate;
	delete la_showDimensions;
	delete cb_showDimensions;
	delete la_tableColor1;
	delete st_tableColor1;
	delete bt_tableColor1;
	delete la_tableColor2;
	delete st_tableColor2;
	delete bt_tableColor2;

	if (fixedFont) 	delete fixedFont;
	if (colorMixer)	delete colorMixer;
}

