//
//                 mxToolKit (c) 1999 by Mete Ciragan
//
// file:           mxWidget.h
// implementation: all
// last modified:  Apr 28 1999, Mete Ciragan
// copyright:      The programs and associated files contained in this
//                 distribution were developed by Mete Ciragan. The programs
//                 are not in the public domain, but they are freely
//                 distributable without licensing fees. These programs are
//                 provided without guarantee or warrantee expressed or
//                 implied.
//
#ifndef INCLUDED_MXWIDGET
#define INCLUDED_MXWIDGET


#include "tier0/platform.h"

enum
{
	MX_BUTTON,
	MX_CHECKBOX,
	MX_CHOICE,
	MX_GLWINDOW,
	MX_MATSYSWINDOW,
	MX_GROUPBOX,
	MX_LABEL,
	MX_LINEEDIT,
	MX_LISTBOX,
	MX_MENU,
	MX_MENUBAR,
	MX_POPUPMENU,
	MX_PROGRESSBAR,
	MX_RADIOBUTTON,
	MX_SLIDER,
	MX_SCROLLBAR,
	MX_TAB,
	MX_TOGGLEBUTTON,
	MX_TREEVIEW,
	MX_WINDOW,
	MX_LISTVIEW,
};



class mxWindow;



class mxWidget_i;
class mxWidget
{
	mxWidget_i *d_this;

protected:
	void setHandle (void *handle);
	void setType (int type);
	void setParent (mxWindow *parentWindow);

public:
	// CREATORS
	mxWidget (mxWindow *parent, int x, int y, int w, int h, const char *label = 0);
	virtual ~mxWidget ();

	// Called just before deletion during shutdown
	// Closing of application aborted if any control returns false
	virtual bool	CanClose();
	virtual void	OnDelete();

	// MANIPULATORS

	// void setBounds (int x, int y, int w, int h);
	//
	//
	void setBounds (int x, int y, int w, int h);

	// void setLabel (const char *label);
	//
	//
	void setLabel (PRINTF_FORMAT_STRING const char *format, ... );

	void setVisible (bool b);
	void setEnabled (bool b);
	void setId (int id);
	void setUserData (void *userData);

	// ACCESSORS
	void *getHandle () const;
	int getType () const;
	mxWindow *getParent () const;
	int x () const;
	int y () const;
	int w () const;
	int h () const;
	int w2 () const;
	int h2 () const;
	const char *getLabel () const;
	bool isVisible () const;
	bool isEnabled () const;
	int getId () const;
	void *getUserData () const;

private:
	// NOT IMPLEMENTED
	mxWidget (const mxWidget&);
	mxWidget& operator= (const mxWidget&);
};



#endif // INCLUDED_MXWIDGET