#ifndef FORMS_H
#define FORMS_H

/*! the forms.h and forms.C files contains all the program 
 *  dialog forms and drag-drop class.
 */
#include <qdialog.h>
#include <qcombobox.h>
#include <qlabel.h>  
#include <qlayout.h>  
#include <qpushbutton.h> 
#include <qinputdialog.h> 
#include <qslider.h> 
#include <qspinbox.h> 
#include <qtabwidget.h>
#include <qdragobject.h> 
#include <qlistbox.h> 
#include <qiconview.h> 
#include <qsplitter.h> 
#include <qbuttongroup.h>  
#include <qbutton.h>  
#include <qradiobutton.h>  
#include <qcheckbox.h> 
#include <qvbuttongroup.h> 

#include "cgal_types.h"

class QDragEnterEvent; 
class QDragDropEvent; 
class DDListBox; 
class QWidget;

/*! class MySpinBox is used for the scaling factor properties 
 *  dialog. we need to use it to support duoble as a value. 
 */ 
class MySpinBox : public QSpinBox 
{ 
  Q_OBJECT 
public: 
  /*! constructor */ 
  MySpinBox ( int minValue, int maxValue, int step = 1,
              QWidget * parent = 0, const char * name = 0 ): 
    QSpinBox ( minValue, maxValue, step , parent , name ) 
  {} 
  
  /*! distructor */ 
  ~MySpinBox () {} 
  
  /*! mapValueToText - map value to text  
   *\ param value - the real spin box value 
   *\ return a text of a double number we want to represent 
   */ 
  QString mapValueToText( int value ) 
  { 
    return QString( "%1.%2" ) // 0.0 to 10.0 
      .arg( value / 10 ).arg( value % 10 ); 
  } 
  
  /*! mapTextToValue - map text to value  
   *\ return the corresponding int value 
   */ 
  int mapTextToValue( bool *ok ) 
  { 
    return (int) ( 10 * text().toFloat() ); // 0 to 100 
  } 
}; 

/*! class PropertiesForm is the dialog form that allow the user
 *  to set the program properties.
 */
class Qt_widget_base_tab;
class PropertiesForm : public QDialog
{
  Q_OBJECT
public:
  PropertiesForm( QTabWidget * bar = 0 , QWidget* parent = 0 ,
                  int number_of_tabs = 0 , Qt_widget_base_tab *w_demo_p = 0, 
				  double scale = 0 , bool colors_flag = true);
  ~PropertiesForm() {}
  
  QLabel *textLabel1;
  QLabel *textLabel2;
  QLabel *textLabel3;
  QLabel *textLabel4;
  QLabel *textLabel5;
  QLabel *textLabel6;
  QLabel *textLabel7;
  QLabel *textLabel8;
  QLabel *textLabel9;
  QSpinBox *box1;
  QSpinBox *box2;
  QSpinBox *box3;
  MySpinBox *box4;
  QComboBox *box5;
  QSpinBox *box6;
  QComboBox *box7;
  QSpinBox *box8;
  QComboBox *box9;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *arrLayout1;
  QHBoxLayout *arrLayout2;
  QHBoxLayout *arrLayout3;
  QHBoxLayout *arrLayout4;
  QHBoxLayout *arrLayout5;
  QHBoxLayout *arrLayout6;
  QHBoxLayout *arrLayout7;
  QHBoxLayout *arrLayout8;
  QHBoxLayout *arrLayout9;
  QHBoxLayout *buttonsLayout;
  
private:
  QTabWidget *myBar;
};

/*! OverlayForm - the dialog form of the overlay operation */
class OverlayForm : public QDialog
{
  Q_OBJECT
public:
  OverlayForm( QTabWidget * bar = 0 , QWidget* parent = 0 ,
               int number_of_tabs = 0 , const char* name = "options form",
               bool modal = FALSE, WFlags f = 0  );
  ~OverlayForm() {}
  
  QLabel *textLabel1;
  QLabel *textLabel2;
  QSplitter *split;
  DDListBox *listBox1;
  DDListBox *listBox2;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *arrLayout;
  QHBoxLayout *buttonsLayout;
  
private:
  QTabWidget *myBar;
}; 

/*! class DDListBox used for the drag/drop action in the overlay form */ 
class DDListBox : public QListBox 
{ 
  Q_OBJECT 
public: 
  DDListBox( QWidget * parent = 0, const char * name = 0, WFlags f = 0 ); 
  // Low-level drag and drop 
  void dragEnterEvent( QDragEnterEvent *evt ); 
  void dropEvent( QDropEvent *evt ); 
  void mousePressEvent( QMouseEvent *evt ); 
  void mouseMoveEvent( QMouseEvent * ); 
  void set_max_items(int num); 
private: 
  int dragging; 
  unsigned int max_items; 
  bool flag; 
  
}; 

///*! class CheckItem used for the drag/drop action in the overlay form */ 
//class CheckItem : public QListBoxPixmap  
//{   
//public: 
//  CheckItem(  QListBox * listbox, const QPixmap & pix, const QString & text );  
//private: 
//  QCheckBox *check_box;
//}; 

/*! class OptionsForm used for choosing which conic type will be inserted */ 
class OptionsForm : public QDialog
{
  Q_OBJECT
public:
  OptionsForm( QWidget* parent = 0 ,int number_of_tabs = 0 ,const char*
               name = "options form", bool modal = FALSE, WFlags f = 0);
  ~OptionsForm() {}
  
  QLabel *textLabel1;
  QComboBox *arrComboBox1;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *arrLayout1;
  QHBoxLayout *buttonsLayout;
  
}; 

/*! class CheckForm used for choosing which conic type will be inserted */ 
class CheckForm : public QDialog
{
  Q_OBJECT
public:
  CheckForm( OverlayForm *overlay_form , QWidget* parent = 0);
  ~CheckForm() {}
  
  QVButtonGroup *button_group;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *layout;
  QHBoxLayout *buttonsLayout;
}; 

/*! class FileOpenOptionsForm used for choosing which action will be taken  
  when we open a new file 
*/ 
class FileOpenOptionsForm : public QDialog
{
  Q_OBJECT
public:
  FileOpenOptionsForm( bool flag = true ,QWidget* parent = 0 ,
                       const char* name = "file open options form", 
                       bool modal = FALSE, WFlags f = 0);
  ~FileOpenOptionsForm() {}
  
  QLabel *textLabel1;
  //QComboBox *arrComboBox1;
  QRadioButton *b1;
  QRadioButton *b2;
  QRadioButton *b3;
  QButtonGroup *buttonGroup;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  //QHBoxLayout *arrLayout1;
  QHBoxLayout *buttonsLayout;
  
}; 

/*! class RayShootingOptionsForm used for choosing the rayshoot diraction */ 
class RayShootingOptionsForm : public QDialog
{
  Q_OBJECT
public:
  RayShootingOptionsForm( QWidget* parent = 0 ,int number_of_tabs = 0 ,
	  const char* name = "options form", bool modal = FALSE, WFlags f = 0);
  ~RayShootingOptionsForm() {}
  
  QLabel *textLabel1;
  QComboBox *arrComboBox1;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *arrLayout1;
  QHBoxLayout *buttonsLayout;
  
}; 


/*! class PointLocationStrategyForm used for choosing strategy for point location*/
class PointLocationStrategyForm : public QDialog
{
  Q_OBJECT
public:
  PointLocationStrategyForm(QWidget* parent = 0 ,int number_of_tabs = 0 ,
	  const char* name = "options form", bool modal = FALSE, WFlags f = 0);
  ~PointLocationStrategyForm() {}

  QLabel *textLabel1;
  QComboBox *arrComboBox1;
  QPushButton *okPushButton;
  QPushButton *cancelPushButton;
  
protected:
  QVBoxLayout *optionsFormLayout;
  QHBoxLayout *arrLayout1;
  QHBoxLayout *buttonsLayout;
  
}; 






#endif // FORMS_H



syntax highlighted by Code2HTML, v. 0.9.1