/* AbiWord
 * Copyright (C) 1998 AbiSource, Inc.
 *
 * 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.
 */

#ifndef AP_UNIXDIALOG_OPTIONS_H
#define AP_UNIXDIALOG_OPTIONS_H

#include "xap_UnixFontManager.h"
#include "ap_Dialog_Options.h"

class XAP_UnixFrame;

/*****************************************************************/
class AP_UnixDialog_Options: public AP_Dialog_Options
{
public:
	AP_UnixDialog_Options(XAP_DialogFactory * pDlgFactory, XAP_Dialog_Id id);
	virtual ~AP_UnixDialog_Options(void);

	virtual void			runModal(XAP_Frame * pFrame);

	static XAP_Dialog *		static_constructor(XAP_DialogFactory *, XAP_Dialog_Id id);
	void event_ChooseTransparentColor(void);

 protected:

	GtkWidget *_lookupWidget( tControl id );
	virtual void _controlEnable( tControl id, bool value );

	// we implement these so the XP dialog can set/grab our data
#define SET_GATHER(a,t) virtual t _gather##a(void);  \
 					    virtual void _set##a(t)


 	SET_GATHER			(NotebookPageNum,		int);

//	// Tabs
//		// Categories
//			// Subordinate Controls

	// General

		// User Interface

		SET_GATHER (ViewCursorBlink,	 bool);
		SET_GATHER (SmartQuotesEnable,	 bool);
		SET_GATHER (AllowCustomToolbars, bool);
		SET_GATHER (ViewRulerUnits,	 UT_Dimension);

		// Application Startup

 		SET_GATHER (ShowSplash,		 bool);
		SET_GATHER (AutoLoadPlugins,	 bool);

	// Documents

		// AutoSave

		SET_GATHER (AutoSaveFile,	      bool);
			virtual void _gatherAutoSaveFilePeriod (      UT_String &stRetVal);
			virtual void _setAutoSaveFilePeriod    (const UT_String &stPeriod);
			virtual void _gatherAutoSaveFileExt    (      UT_String &stRetVal);
			virtual void _setAutoSaveFileExt       (const UT_String &stExt);

		// RTL Text Layout

		SET_GATHER (OtherDirectionRtl,	      bool);
		SET_GATHER (OtherHebrewContextGlyphs, bool);

	// Spell Checking

		// General

	 	SET_GATHER (SpellCheckAsType, bool);
 		SET_GATHER (SpellHideErrors,  bool);

		// Ignore Words

	 	SET_GATHER (SpellUppercase,   bool);
	 	SET_GATHER (SpellNumbers,     bool);

		// Dictionaries

 		SET_GATHER (SpellSuggest,     bool);
	 	SET_GATHER (SpellMainOnly,    bool);

	// unimplemented UI-wise. We need dummy implementations to satisfy the XP framework, though

	SET_GATHER			(PrefsAutoSave,			bool);
	SET_GATHER			(ViewShowRuler,			bool);
	SET_GATHER			(ViewShowStatusBar,		bool);
	SET_GATHER			(ViewAll,			bool);
	SET_GATHER			(ViewHiddenText,		bool);
	SET_GATHER			(ViewUnprintable,		bool);
	SET_GATHER			(EnableSmoothScrolling,		bool);

#undef SET_GATHER

 protected:

	// private construction functions
	void	    _setupUnitMenu(GtkWidget *optionmenu, const XAP_StringSet *pSS);
	void	    _constructWindowContents(GladeXML *xml);
	GtkWidget * _constructWindow(void);

	// pointers to widgets we need to query/set
	// there are a ton of them in this dialog

	GtkWidget * m_windowMain;
	GtkWidget * m_notebook;
	GtkWidget * m_buttonDefaults;
	GtkWidget * m_buttonClose;

//	// Tabs
//		// Categories
//			// Subordinate Controls

	// General

		// User Interface

		GtkWidget *m_checkbuttonViewCursorBlink;
		GtkWidget *m_checkbuttonSmartQuotesEnable;
		GtkWidget *m_checkbuttonAllowCustomToolbars;
		GtkWidget *m_pushbuttonNewTransparentColor;
		GtkWidget *m_menuUnits;

			// used inside the color selector

			GtkWidget *m_buttonColSel_Defaults;

		// Application Startup

		GtkWidget *m_checkbuttonShowSplash;
		GtkWidget *m_checkbuttonAutoLoadPlugins;

	// Documents

		// General

		GtkWidget *m_checkbuttonAutoSaveFile;
			GtkWidget *m_tableAutoSaveFile;
				GtkWidget *m_textAutoSaveFilePeriod;
				GtkWidget *m_textAutoSaveFileExt;

		// RTL Text Layout

		GtkWidget * m_checkbuttonOtherDirectionRtl;
		GtkWidget * m_checkbuttonOtherHebrewContextGlyphs;

	// Spell Checking

		// General

		GtkWidget *m_checkbuttonSpellCheckAsType;
		GtkWidget *m_checkbuttonSpellHideErrors;

		// Ignore Words

		GtkWidget *m_checkbuttonSpellUppercase;
		GtkWidget *m_checkbuttonSpellNumbers;

		// Dictionaries

		GtkWidget *m_checkbuttonSpellSuggest;
		GtkWidget *m_checkbuttonSpellMainOnly;

    		// Dummy
		bool m_boolEnableSmoothScrolling;
		bool m_boolPrefsAutoSave;
		bool m_boolViewAll;
		bool m_boolViewHiddenText;
		bool m_boolViewShowRuler;
		bool m_boolViewShowStatusBar;
		bool m_boolViewUnprintable;
private:
	// Unix call back handlers
	static void s_control_changed	     (GtkWidget *,	   gpointer);
	static void s_toolbars_toggled	     (GtkWidget *,	   gpointer);
	static void s_apply_clicked	     (GtkWidget *,         gpointer);
	static void s_defaults_clicked	     (GtkWidget *,         gpointer);
	static void s_chooseTransparentColor (GtkWidget *,         gpointer);
	static void s_color_changed	     (GtkColorSelection *, gpointer);
	static void s_auto_save_toggled	     (GtkToggleButton *,   gpointer);
	static void s_checkbutton_toggle     (GtkWidget *,	   gpointer);
	static gint s_menu_item_activate     (GtkWidget *,	   gpointer);

	// callbacks can fire these events
	virtual void _storeWindowData(void);
};

#endif /* AP_UNIXDIALOG_OPTIONS_H */

