/***************************************************************************
    copyright            : (C) 2003, 2004, 2005 by Carsten Niehaus
    email                : cniehaus@kde.org
 ***************************************************************************/
/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/
#ifndef _KALZIUM_H_
#define _KALZIUM_H_

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <tdemainwindow.h>

class TDESelectAction;
class TDEToggleAction;
class QuizsettingsDlg;
class SliderWidget;
class TQToolBox;
class TQVBoxLayout;
class TQDockWindow;
class TempSlider;
class DetailedInfoDlg;
class PerodicTableView;
class MolcalcWidget;
class DetailedGraphicalOverview;
class TimeWidgetIMPL;
class SOMWidgetIMPL;
class GlossaryDialog;

/**
 * @short Application Main Window
 * @author Carsten Niehaus <cniehaus@kde.org>
 * @version 1.2
 *
 * This class connects the parts of kalzium. All actions will
 * be set, the menu generated and so on.
 */
class Kalzium : public TDEMainWindow
{
	Q_OBJECT
  
	public:
		/**
		 * Default Constructor
		 */
		Kalzium();

		/**
		 * Default Destructor
		 */
		virtual ~Kalzium();

	private:
		class privatedata;
		friend class privatedata;
		privatedata* pd;

		DetailedInfoDlg   *m_infoDialog;

		/**
		 * this pointer points to the PerodicTableView.
		 */
		PerodicTableView *m_PerodicTableView;
		
		/**
		 *initialize actions
		 */
		void setupActions();
		
		/**
		 *initialize the sidebars
		 */
		void setupSidebars();
		
		/**
		 * Signal the PerodicTableView that it should do a full draw operation
		 */
		void setFullDraw();
		
		/**
		 * all TDEActions Kalzium uses
		 */
		TDESelectAction *gradient_action;
		TDESelectAction *numeration_action;
		TDEAction *m_pPlotAction, 
				*m_pGlossaryAction;
		
		TDEAction *m_pTooltipAction;
		TDEAction *m_pLegendAction;
		TDEAction *m_SidebarAction;
		TDEAction *m_EQSolverAction;

		TDEToggleAction *m_actionNoScheme;
		TDEToggleAction *m_actionGroups;
		TDEToggleAction *m_actionBlocks;
		TDEToggleAction *m_actionAcid;
		TDEToggleAction *m_actionFamily;
		TDEToggleAction *m_actionCrystal;
		
		/**
		 * the layout of the central Widget ( CentralWidget )
		 */
		TQVBoxLayout *m_pCentralLayout;

		MolcalcWidget *m_calcWidget;

		TimeWidgetIMPL *m_timeWidget;
		
		SOMWidgetIMPL *m_somWidget;

		DetailedGraphicalOverview *m_detailWidget;

		TQDockWindow *m_dockWin;
		TQToolBox *m_toolbox;
		int m_toolboxCurrent;

		GlossaryDialog *m_glossarydlg;
	
	private slots:
		/**
		 * opens the information dialog for the element @p number
		 */
		void openInformationDialog( int number );

		void slotStatusbar( int num );
		void setupStatusBar();


		/**
		 * this slot switches Kalzium to the selected color scheme
		 */
		void slotShowScheme(int);

		void slotShowEQSolver();
		
		void slotShowLegend();
		
		/**
		 * Hide or show the tooltips
		 */
		void slotEnableTooltips();
		
		/**
		 * start the glossary
		 */
		void slotGlossary();
		
		void slotSwitchtoNumeration(int);
		
		/**
		 * this will make the periodic table display the gradient
		 * defined by @p int gradient
		 */
		void slotSwitchtoGradient(int gradient);

		void slotPlotData();

		void slotUpdateSettings();

		void slotNoLook();

		void slotLookGroups();
		void slotLookBlocks();
		void slotLookAcidBehavior();
		void slotLookFamily();
		void slotLookCrystal();
	
		/**
		 * These slots are for the standard actions
		 */
		void showSettingsDialog();

		void slotToolboxCurrentChanged(int);

		void slotSelectedNumber(int);

		void slotShowHideSidebar();

		void slotSidebarVisibilityChanged(bool);
};

#endif // _KALZIUM_H_
