/***************************************************************************
 *   Copyright (C) 2007 by Abderrahman Taha                                *
 *                                                                         *
 *                                                                         *
 *   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.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
 ***************************************************************************/
#include "menubar.h"
#include "glviewer.h"
#include "filesave.xpm"
#include "fileopen.xpm"
#include "gedit.xpm"
#include "gear.xpm"
#include "snapshot.xpm"
#include "pov.xpm"
#include "tools.xpm"
#include "graphics.xpm"

void menubar::lunchabout(){
present = new presentation(0, "About", WDestructiveClose | WStyle_StaysOnTop);
present->show();
};

//=====================================//
void menubar::typecolor(int cl)
{
    ptr->isoWidget->colortype = cl;
    ptr->IsoGlWidget->colortype = cl;
    ptr->connectWidget2->colortype = cl;
    ptr->ParamGlWidget->colortype = cl;

if(ptr->tabsurf->currentPageIndex() == 1)  {
     switch(cl) {

    case 0:
col->red->setValue((int)(ptr->IsoGlWidget->LocalScene.frontcol[0]*255.)) ;
col->green->setValue((int)(ptr->IsoGlWidget->LocalScene.frontcol[1]*255.)) ;
col->blue->setValue((int)(ptr->IsoGlWidget->LocalScene.frontcol[2]*255.));
col->transparent->setValue((int)(ptr->IsoGlWidget->LocalScene.frontcol[3]*255.));

 break;
    case 1:
col->red->setValue((int)(ptr->IsoGlWidget->LocalScene.backcol[0]*255.)) ;
col->green->setValue((int)(ptr->IsoGlWidget->LocalScene.backcol[1]*255.)) ;
col->blue->setValue((int)(ptr->IsoGlWidget->LocalScene.backcol[2]*255.));
col->transparent->setValue((int)(ptr->IsoGlWidget->LocalScene.backcol[3]*255.));

 break;
    case 2:
col->red->setValue((int)(ptr->IsoGlWidget->LocalScene.gridcol[0]*255.)) ;
col->green->setValue((int)(ptr->IsoGlWidget->LocalScene.gridcol[1]*255.)) ;
col->blue->setValue((int)(ptr->IsoGlWidget->LocalScene.gridcol[2]*255.));
col->transparent->setValue((int)(ptr->IsoGlWidget->LocalScene.gridcol[3]*255.));

 break;
    case 3:
col->red->setValue((int)(ptr->IsoGlWidget->LocalScene.groundcol[0]*255.)) ;
col->green->setValue((int)(ptr->IsoGlWidget->LocalScene.groundcol[1]*255.)) ;
col->blue->setValue((int)(ptr->IsoGlWidget->LocalScene.groundcol[2]*255.));
col->transparent->setValue((int)(ptr->IsoGlWidget->LocalScene.groundcol[3]*255.));

 break;

     case 4:
col->red->setValue((int)(ptr->IsoGlWidget->LocalScene.condcol[0]*255.)) ;
col->green->setValue((int)(ptr->IsoGlWidget->LocalScene.condcol[1]*255.)) ;
col->blue->setValue((int)(ptr->IsoGlWidget->LocalScene.condcol[2]*255.));
col->transparent->setValue((int)(ptr->IsoGlWidget->LocalScene.condcol[3]*255.));

 break;

}
}
    else {

    switch(cl) {

    case 0:
col->red->setValue((int)(ptr->ParamGlWidget->LocalScene.frontcol[0]*255.)) ;
col->green->setValue((int)(ptr->ParamGlWidget->LocalScene.frontcol[1]*255.)) ;
col->blue->setValue((int)(ptr->ParamGlWidget->LocalScene.frontcol[2]*255.));
col->transparent->setValue((int)(ptr->ParamGlWidget->LocalScene.frontcol[3]*255.));

 break;
    case 1:
col->red->setValue((int)(ptr->ParamGlWidget->LocalScene.backcol[0]*255.)) ;
col->green->setValue((int)(ptr->ParamGlWidget->LocalScene.backcol[1]*255.)) ;
col->blue->setValue((int)(ptr->ParamGlWidget->LocalScene.backcol[2]*255.));
col->transparent->setValue((int)(ptr->ParamGlWidget->LocalScene.backcol[3]*255.));

 break;
    case 2:
col->red->setValue((int)(ptr->ParamGlWidget->LocalScene.gridcol[0]*255.)) ;
col->green->setValue((int)(ptr->ParamGlWidget->LocalScene.gridcol[1]*255.)) ;
col->blue->setValue((int)(ptr->ParamGlWidget->LocalScene.gridcol[2]*255.));
col->transparent->setValue((int)(ptr->ParamGlWidget->LocalScene.gridcol[3]*255.));

 break;

    case 3:
col->red->setValue((int)(ptr->ParamGlWidget->LocalScene.groundcol[0]*255.)) ;
col->green->setValue((int)(ptr->ParamGlWidget->LocalScene.groundcol[1]*255.)) ;
col->blue->setValue((int)(ptr->ParamGlWidget->LocalScene.groundcol[2]*255.));
col->transparent->setValue((int)(ptr->ParamGlWidget->LocalScene.groundcol[3]*255.));

 break;
     case 4:
col->red->setValue((int)(ptr->ParamGlWidget->LocalScene.condcol[0]*255.)) ;
col->green->setValue((int)(ptr->ParamGlWidget->LocalScene.condcol[1]*255.)) ;
col->blue->setValue((int)(ptr->ParamGlWidget->LocalScene.condcol[2]*255.));
col->transparent->setValue((int)(ptr->ParamGlWidget->LocalScene.condcol[3]*255.));

 break;
 default :  break;
};

} /// End else...
}

//==========================================//
void menubar::transparencecl() {
    /*if(ptr->tabsurf->currentPageIndex() == 1)  {
              ptr->isoWidget->transparence();
              ptr->IsoGlWidget->transparence();}
    else {  ptr->connectWidget2->transparence();
              ptr->ParamGlWidget->transparence();}*/
ptr->ParamGlWidget->transparence();
ptr->IsoGlWidget->transparence();
}

//==========================================//
void menubar::transcl(int cl) {
    if(ptr->tabsurf->currentPageIndex() == 1) {
     ptr->IsoGlWidget->transparency(cl);}
    else {
    ptr->ParamGlWidget->transparency(cl);}
}

//=========================================//
void menubar::bluecl(int cl) {
    if(ptr->tabsurf->currentPageIndex() == 1) {
     ptr->isoWidget->blue(cl);
     ptr->IsoGlWidget->blue(cl);}
    else {
    ptr->connectWidget2->blue(cl);
    ptr->ParamGlWidget->blue(cl);}
}

//========================================//
void menubar::redcl(int cl) {
    if(ptr->tabsurf->currentPageIndex() == 1)  {
    ptr->isoWidget->red(cl);
    ptr->IsoGlWidget->red(cl);}
    else {
    ptr->connectWidget2->red(cl);
    ptr->ParamGlWidget->red(cl);}
}

//=======================================//
void menubar::greencl(int cl) {
    if(ptr->tabsurf->currentPageIndex() == 1)  {
 ptr->isoWidget->green(cl);
 ptr->IsoGlWidget->green(cl);}
    else {
 ptr->connectWidget2->green(cl);
 ptr->ParamGlWidget->green(cl);}
}

//=======================================//
void menubar::tabsurfPageChanged(){
if(col == NULL) {
  QMessageBox message ;
    message.setText("No Color Control...");
    message.adjustSize();
    message.exec();
}
else typecolor(col->color->currentItem ());
};

//======================================//
void menubar::lunchcoloroptions(){
    col = new coloroptions(0, "CO", WDestructiveClose | WStyle_StaysOnTop);
    typecolor(col->color->currentItem ());
    if(ptr->IsoGlWidget->LocalScene.transparency == 1 ||
    ptr->ParamGlWidget->LocalScene.transparency == 1) col->transparence->toggle();
    connect( col->color, SIGNAL( activated(int) ), this, SLOT( typecolor(int) ) );
    connect( col->transparence, SIGNAL( clicked() ), this, SLOT( transparencecl() ) );
    connect( col->blue, SIGNAL( valueChanged(int) ), this, SLOT( bluecl(int) ) );
    connect( col->green, SIGNAL( valueChanged(int) ), this, SLOT( greencl(int) ) );
    connect( col->red, SIGNAL( valueChanged(int) ), this, SLOT( redcl(int) ) );
    connect( col->transparent, SIGNAL( valueChanged(int) ), this, SLOT( transcl(int) ) );
   //connect( ptr->tabsurf,SIGNAL(currentChanged(QWidget*)),this,SLOT(tabsurfPageChanged()));
    col->show();
};
//======================================
//++++++//
menubar::menubar(){
mainmenu = new QMenuBar(ptr);
};
//======================================//
void menubar::menupage(){
PageMenu = new QPopupMenu;
PageMenu->setCheckable(TRUE);

IsosurfaceAction = new QAction(QPixmap(""), "Isosurface", 0, ptr, "Iso" );
IsosurfaceAction->setToggleAction(TRUE);
QObject::connect( IsosurfaceAction, SIGNAL(activated()), this, SLOT(isoShow()));
IsosurfaceAction->addTo(PageMenu);
IsosurfaceAction->setOn(TRUE);
PageMenu->setItemChecked(PageMenu->idAt(0), TRUE);

ParametricAction = new QAction(QPixmap(""), "Parametric", 0, ptr, "Para" );
ParametricAction->setToggleAction(TRUE);
QObject::connect( ParametricAction, SIGNAL(activated()), this, SLOT(paraShow()));
ParametricAction->addTo(PageMenu);
ParametricAction->setOn(TRUE);
PageMenu->setItemChecked(PageMenu->idAt(1), TRUE);

ToolsAction = new QAction(QPixmap(""), "Tools", 0, ptr, "Tools" );
ToolsAction->setToggleAction(TRUE);
QObject::connect( ToolsAction, SIGNAL(activated()), this, SLOT(toolsShow()));
ToolsAction->addTo(PageMenu);
ToolsAction->setOn(TRUE);
PageMenu->setItemChecked(PageMenu->idAt(2), TRUE);

HallAction = new QAction(QPixmap(""), "Hall", 0, ptr, "Hall" );
HallAction->setToggleAction(TRUE);
QObject::connect( HallAction, SIGNAL(activated()), this, SLOT(hallShow()));
HallAction->addTo(PageMenu);
HallAction->setOn(TRUE);
PageMenu->setItemChecked(PageMenu->idAt(3), TRUE);

NDAction = new QAction(QPixmap(""), "ND", 0, ptr, "ND" );
NDAction->setToggleAction(TRUE);
QObject::connect( NDAction, SIGNAL(activated()), this, SLOT(ndShow()));
NDAction->addTo(PageMenu);
NDAction->setOn(TRUE);
PageMenu->setItemChecked(PageMenu->idAt(4), TRUE);

mainmenu->insertItem( "PageView",  PageMenu);

IsosurfaceWidget = ptr->isopage->page(0);
ParametricWidget = ptr->isopage->page(1);
ToolsWidget      = ptr->isopage->page(2);
HallWidget       = ptr->isopage->page(3);
NDWidget         = ptr->isopage->page(4);
};

//======================================//
static int showiso = 1;
void menubar::isoShow(){
showiso  *= -1;
(showiso == 1) ? ptr->isopage->insertTab ( IsosurfaceWidget, "IsoSurface", 0 ):
ptr->isopage->removePage(IsosurfaceWidget);
};

//======================================//
static int showpara = 1;
void menubar::paraShow(){
showpara  *= -1;
(showpara == 1) ? ptr->isopage->insertTab ( ParametricWidget, "Parametric", 1 ):
ptr->isopage->removePage(ParametricWidget);
};

//======================================//
static int showtools = 1;
void menubar::toolsShow(){
showtools  *= -1;
(showtools == 1) ? ptr->isopage->insertTab ( ToolsWidget, "Tools", 2 ):
ptr->isopage->removePage(ToolsWidget);
};

//======================================//
static int showhall = 1;
void menubar::hallShow(){
showhall  *= -1;
(showhall == 1) ? ptr->isopage->insertTab ( HallWidget, "Hall", 3 ):
ptr->isopage->removePage(HallWidget);
};

//======================================//
static int shownd = 1;
void menubar::ndShow(){
shownd  *= -1;
(shownd == 1) ? ptr->isopage->insertTab ( NDWidget, "ND", 4 ):
ptr->isopage->removePage(NDWidget);
};

//======================================//
void menubar::opentestpov(){
    QFile file( "test.pov" );
    if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        QString line;
        editeur * edit = new editeur();
        edit->e->setText(stream.read ());
        edit->show();
        file.close();
    }
}

//======================================//
void menubar::openmeshpov(){
    QFile file( "Mesh.inc" );
    if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        editeur * edit = new editeur();
        edit->e->setText(stream.read ());
        edit->show();
        file.close();
    }
};

//======================================//
void menubar::loadConfig(){
QString line, filename;

if ( QFile::exists("K3DSurfConfig") ) {filename = "K3DSurfConfig";}
else if ( QFile::exists(".K3DSurfConfig") )  { filename = ".K3DSurfConfig";}
else {/*
  QMessageBox message ;
    message.setText("No Config file \".K3DSurfConfig\" or \"K3DSurfConfig\" ");
    message.adjustSize();
    message.exec();*/
    return;
}

QString red, green, blue, trans;
int i;
QFile file(filename);
 if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        while ( !stream.atEnd() ) {
            line = (stream.readLine()).simplifyWhiteSpace(); // line of text excluding '\n'
if (!line.contains("#")) {  //currentfunction = 0;
if (line.contains("ISOMAXPOINTS=")) ptr->isomaxpt->setText(line.remove("ISOMAXPOINTS="));
else if (line.contains("ISOMAXTRIANG=")) ptr->isomaxtr->setText(line.remove("ISOMAXTRIANG="));
else if (line.contains("ISOMAXGRID=")) ptr->isomaxgrid->setText(line.remove("ISOMAXGRID="));

//Isosurfaces Colors:
else if (line.contains("GridIsoColor=")) {
line.remove("GridIsoColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->IsoGlWidget->setGridColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("FrontIsoColor=")) {
line.remove("FrontIsoColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->IsoGlWidget->setFrontColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("BackIsoColor=")) {
line.remove("BackIsoColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->IsoGlWidget->setBackColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("GroundIsoColor=")) {
line.remove("GroundIsoColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->IsoGlWidget->setGroundColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
//Parametric Surfaces Colors:
else if (line.contains("GridParaColor=")) {
line.remove("GridParaColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;

ptr->ParamGlWidget->setGridColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("FrontParaColor=")) {
line.remove("FrontParaColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->ParamGlWidget->setFrontColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("BackParaColor=")) {
line.remove("BackParaColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->ParamGlWidget->setBackColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
else if (line.contains("GroundParaColor=")) {
line.remove("GroundParaColor=");
i     = line.find(",");
red   = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
green = line.mid(0,i);
line.remove( 0, i+1 );
i     = line.find(",");
blue  = line.mid(0,i);
line.remove( 0, i+1 );
trans = line;
ptr->ParamGlWidget->setGroundColor(red.toFloat()/255., green.toFloat()/255., blue.toFloat()/255., trans.toFloat()/255.);
}
ptr->IsoGlWidget->update();
}
                      }
     file.close();
      ptr->pushButton71_2_clicked();
      ptr->pushButton71_clicked();
    }
};

//======================================//
void menubar::runpov(){
 PovConfig *pvconfig = new PovConfig(ptr);
 int current_page = ptr->tabsurf->currentPageIndex();
    if(current_page == 0) ptr->ParamGlWidget->RunPovscript(1);
    else ptr->IsoGlWidget->RunPovscript(1);
 pvconfig->runpovray();
};
//======================================
void menubar::povconfig(){
 PovConfig *pvconfig = new PovConfig(ptr);
 pvconfig->connectcontrols();
 pvconfig->show();
}
//======================================
void menubar::SaveConfig(){

QFile file( "K3DSurfConfig" );
   if ( file.open( IO_WriteOnly ) ) {
//file.open( IO_WriteOnly );
QTextStream * stream  = new QTextStream(&file);

*(stream) << "\n\
# Comments start with \"#\"\n";
if(GridAction->isOn() == TRUE) {
*(stream) << "#+++++++++++++++ Points & Triangles ++++++++++++++++\n\
# The values of ISOMAXTRIANG and ISOMAXPOINTS should be between 0 and 10\n\
# ISOMaxPOINTS and ISOMAXTRIANG are expressed in Millions(ie: 0.41 = 410.000 triangles)\n\
# Memory requirements :\n\
# 1 Millions Points    => 88 MegRAM\n\
# 1 Millions Triangles => 50 MegRAM\n\
# Example: ISOMAXPOINTS = 0.42 => 0.42x88 = 36.96 MegRAM\n";
*(stream) << "ISOMAXPOINTS= "+ptr->isomaxpt->text()+"\n";
*(stream) << "ISOMAXTRIANG= "+ptr->isomaxtr->text()+"\n\n";
}
if(PtTrAction->isOn() == TRUE) {
*(stream) << "#+++++++++++++++ Grid ++++++++++++++++\n";
*(stream) << "# ISOMAXGRID is : 4 < ISOMAXGRID < 500\n\
# Grid of 100x100x100  => 61 MegRAM\n\
# Example: ISOMAXGRID = 200 => (200x200x200/100x100x100)*61 = 8*61 = 488 MegRAM\n";
*(stream) << "ISOMAXGRID= "+ptr->isomaxgrid->text()+"\n\n";
 }

// Iso Colors:
*(stream) << "#+++++++++++++++ Colors ++++++++++++++++\n";
*(stream) << "# Colors Values C : 0 < C <255\n\n";
if(IsoFrontColorAction->isOn()  == TRUE) 
*(stream) << "FrontIsoColor= " 
          << (int)(ptr->IsoGlWidget->LocalScene.frontcol[0]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.frontcol[1]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.frontcol[2]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.frontcol[3]*255)  << "\n";
if(IsoBackColorAction->isOn()   == TRUE) 
*(stream) << "BackIsoColor= " 
          << (int)(ptr->IsoGlWidget->LocalScene.backcol[0]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.backcol[1]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.backcol[2]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.backcol[3]*255)  << "\n";
if(IsoGridColorAction->isOn()   == TRUE)
*(stream) << "GridIsoColor= " 
          << (int)(ptr->IsoGlWidget->LocalScene.gridcol[0]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.gridcol[1]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.gridcol[2]*255)  << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.gridcol[3]*255)  << "\n";
if(IsoGroundColorAction->isOn() == TRUE)
*(stream) << "GroundIsoColor= " 
          << (int)(ptr->IsoGlWidget->LocalScene.groundcol[0]*255) << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.groundcol[1]*255) << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.groundcol[2]*255) << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.groundcol[3]*255) << "\n";
if(IsoCndColorAction->isOn()    == TRUE)
*(stream) << "CndIsoColor= " 
          << (int)(ptr->IsoGlWidget->LocalScene.condcol[0]*255)   << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.condcol[1]*255)   << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.condcol[2]*255)   << ", "
          << (int)(ptr->IsoGlWidget->LocalScene.condcol[3]*255)   << "\n";

// Parametric Colors:
if(ParaFrontColorAction->isOn()  == TRUE) 
*(stream) << "FrontParaColor= " 
          << (int)(ptr->ParamGlWidget->LocalScene.frontcol[0]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.frontcol[1]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.frontcol[2]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.frontcol[3]*255) << "\n";
if(ParaBackColorAction->isOn()   == TRUE) 
*(stream) << "BackParaColor= " 
          << (int)(ptr->ParamGlWidget->LocalScene.backcol[0]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.backcol[1]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.backcol[2]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.backcol[3]*255) << "\n";
if(ParaGridColorAction->isOn()   == TRUE)
*(stream) << "GridParaColor= " 
          << (int)(ptr->ParamGlWidget->LocalScene.gridcol[0]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.gridcol[1]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.gridcol[2]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.gridcol[3]*255) << "\n";
if(ParaGroundColorAction->isOn() == TRUE)
*(stream) << "GroundParaColor= " 
          << (int)(ptr->ParamGlWidget->LocalScene.groundcol[0]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.groundcol[1]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.groundcol[2]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.groundcol[3]*255) << "\n";
if(ParaCndColorAction->isOn()    == TRUE)
*(stream) << "CndParaColor= " 
          << (int)(ptr->ParamGlWidget->LocalScene.condcol[0]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.condcol[1]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.condcol[2]*255) << ", "
          << (int)(ptr->ParamGlWidget->LocalScene.condcol[3]*255) << "\n";
file.close();
}
};


//++++++//
menubar::menubar(k3dsurface * pointertowindow, QApplication * ptrapplication){
root = ptrapplication;
ptr = pointertowindow;
mainmenu = new QMenuBar(ptr);
tools    = new QToolBar(ptr, "Tools");
tools->setLabel( ("Tools") );
};

//++++++//
menubar::~menubar(){
delete(mainmenu);
};

//++++++//
void menubar::controlcenter(){
drawingoptions *newpanl = new drawingoptions(0, "CC", WDestructiveClose | WStyle_StaysOnTop);
/// IsoSurface Page :
connect( newpanl->xyzg, SIGNAL( valueChanged(int) ), ptr, SLOT(xyzg_valueChanged(int)));
connect( newpanl->xg, SIGNAL( valueChanged(int) ), ptr, SLOT(xg_valueChanged(int)));
connect( newpanl->yg, SIGNAL( valueChanged(int) ), ptr, SLOT(yg_valueChanged(int)));
connect( newpanl->zg, SIGNAL( valueChanged(int) ), ptr, SLOT(zg_valueChanged(int)));

connect( newpanl->xyzg_2, SIGNAL( valueChanged(int) ), ptr, SLOT(xyzg_2_valueChanged(int)));
connect( newpanl->xg_2, SIGNAL( valueChanged(int) ), ptr, SLOT(xg_2_valueChanged(int)));
connect( newpanl->yg_2, SIGNAL( valueChanged(int) ), ptr, SLOT(yg_2_valueChanged(int)));
connect( newpanl->zg_2, SIGNAL( valueChanged(int) ), ptr, SLOT(zg_2_valueChanged(int)));
connect( newpanl->comboBox18_3, SIGNAL(activated(int) ), ptr, SLOT(comboBox18_3_activated(int)));

/// Parametric Page :
connect( newpanl->cutline, SIGNAL( valueChanged(int) ), ptr, SLOT(cutline_valueChanged(int)));
connect( newpanl->cutcolumn, SIGNAL( valueChanged(int) ), ptr, SLOT(cutcolumn_valueChanged(int)));
connect( newpanl->linecolumn, SIGNAL( valueChanged(int) ), ptr, SLOT(linecolumn_valueChanged(int)));
connect( newpanl->comboBox18_2, SIGNAL(activated(int) ), ptr, SLOT(comboBox18_2_activated(int)));

/// Color/OpenGL :
/*
connect( newpanl->color, SIGNAL( activated(int) ), ptr, SLOT(typecolor(int)));
connect( newpanl->red, SIGNAL( valueChanged(int) ), ptr, SLOT(redcl(int)));
connect( newpanl->green, SIGNAL( valueChanged(int) ), ptr, SLOT(greencl(int)));
connect( newpanl->blue, SIGNAL( valueChanged(int) ), ptr, SLOT(bluecl(int)));
connect( newpanl->transparence, SIGNAL( clicked() ), ptr, SLOT(transparencecl()));
connect( newpanl->transparence, SIGNAL( clicked() ), ptr, SLOT(transparence->toggle()));
*/
connect( newpanl->comboBox18, SIGNAL( activated(int) ), ptr, SLOT(comboBox18_activated(int)));

/// Lunch the Panel :
newpanl->show();
};

//++++++//
void menubar::gotoweb(){
        QDate d = QDate::currentDate();
        editeur * ed = new editeur();
        ed->e->setText("");
        //ed->e->setText(d.toString("ddd MMMM d yyyy"));
        ed->show();
};

//++++++//
void menubar::toolbar(){
    QPixmap openIcon = QPixmap( gedit_xpm );
    QToolButton * fileOpen;
    fileOpen = new QToolButton( openIcon, ("Small Editor"), QString::null,
                           this, SLOT(lunchedit()), tools, "Editor" );


    QPixmap ControlIcon = QPixmap( gear_xpm );
    QToolButton * ControlCenter;
    ControlCenter = new QToolButton( ControlIcon, ("Control Center"), QString::null,
                           this, SLOT(controlcenter()), tools, "ControlCenter" );
    ControlCenter->setTextLabel ("Controls");


    QPixmap SnapshotIcon = QPixmap( snapshot_xpm );
    QToolButton * SnapShot;
    SnapShot    = new QToolButton( SnapshotIcon, ("Control Center"), QString::null,
                           ptr, SLOT(videoplay()), tools, "ControlCenter" );
    SnapShot->setTextLabel ("Image");

    //tools->addSeparator ();
    QPixmap ColorsIcon = QPixmap( graphics_xpm );
    QToolButton * Colors;
    Colors    = new QToolButton( ColorsIcon, ("Colors Options"), QString::null,
                           //this, SLOT(lunchabout()), tools, "Colors Options" );
                           this, SLOT(lunchcoloroptions()), tools, "Colors Options" );
/*
    QPixmap PovIcon = QPixmap( pov_xpm );
    QToolButton * PovShot;
    PovShot    = new QToolButton( PovIcon, ("POV"), QString::null,
                           this, SLOT(lunchabout()), tools, "Colors Options" );
                           //this, SLOT(runpov()), tools, "PovRay" );
*/
};

//+++++++++++  menuabout()  ++++++++++++++//
void menubar::menuabout(){
aboutMenu = new QPopupMenu;
aboutMenu->insertItem("About", this, SLOT(lunchabout()),  0);
mainmenu->insertItem( "About", aboutMenu );
};

//++++++//
void menubar::lunchedit(){
QDateTime d = QDateTime::currentDateTime();
editeur * edit = new editeur();
edit->e->setText("#   Date:"+d.toString("ddd MMMM d yyyy")+"\n#  Time: "+(d.time()).toString("hh:mm:ss"));

edit->e->setText("#################################\n\
#                      K3DSurf Project\n\
#           "+d.toString("ddd MMMM d yyyy")+" ## "+(d.time()).toString("hh:mm:ss")+"\n\
#################################\n");
edit->show();
};

//+++++++++++  menufile()  ++++++++++++++//
void menubar::menupov(){
povMenu = new QPopupMenu;
QPixmap openIcon = QPixmap( fileopen );
QPixmap toolsIcon = QPixmap( tools_xpm );
QPixmap PovIcon = QPixmap( pov_xpm );
povMenu->insertItem(PovIcon, "Run", this, SLOT(runpov()),  Qt::Key_F9);
povMenu->insertItem(openIcon, ("Edit \"test.pov\""), this, SLOT(opentestpov()), 0);
povMenu->insertItem(openIcon, "Edit \"Mesh.inc\"", this, SLOT(openmeshpov()), 0);
povMenu->insertSeparator(3);
povMenu->insertItem(toolsIcon, "POV-Ray Options", this, SLOT(povconfig()), 0);
mainmenu->insertItem( "POV-Ray", povMenu );
};

//+++++++++++  menufile()  ++++++++++++++//
void menubar::menufile(){
fileMenu = new QPopupMenu;
QPixmap openIcon = QPixmap( fileopen );
fileMenu->insertItem("&New", this, SLOT(lunchedit()),  Qt::CTRL+Qt::Key_N);
fileMenu->insertItem(openIcon, ("&Open"), &edit, SLOT(choose()), Qt::CTRL+Qt::Key_O);
fileMenu->insertItem("&Exit", root, SLOT(quit()), Qt::CTRL+Qt::Key_E);
mainmenu->insertItem( "&Project", fileMenu );
};

//+++++++++++  menuinfos()  ++++++++++++++//
void menubar::menuinfos(){
infosMenu = new QPopupMenu;
infosMenu->setCheckable(TRUE);
// Grid:
GridsAction = new QAction(QPixmap(""), "Grig", Qt::CTRL+Qt::Key_S, ptr, "Grid" );
GridsAction->setToggleAction(TRUE);
QObject::connect( GridsAction, SIGNAL(activated()), ptr, SLOT(checkBox240_clicked()));
GridsAction->addTo(infosMenu);
GridsAction->setOn(TRUE);
infosMenu->setItemChecked(infosMenu->idAt(0), TRUE);

// Polys:
PolysAction = new QAction(QPixmap(""), "Polygons", Qt::CTRL+Qt::Key_L, ptr, "Polys" );
PolysAction->setToggleAction(TRUE);
QObject::connect( PolysAction, SIGNAL(activated()), ptr, SLOT(checkBox241_clicked()));
PolysAction->addTo(infosMenu);
PolysAction->setOn(TRUE);
infosMenu->setItemChecked(infosMenu->idAt(1), TRUE);

// Vertices:
VerticeAction = new QAction(QPixmap(""), "Vertices", Qt::CTRL+Qt::Key_P, ptr, "Vert" );
VerticeAction->setToggleAction(TRUE);
QObject::connect( VerticeAction, SIGNAL(activated()), ptr, SLOT(PlanBox_clicked()));
VerticeAction->addTo(infosMenu);
VerticeAction->setOn(TRUE);
infosMenu->setItemChecked(infosMenu->idAt(2), TRUE);
mainmenu->insertItem( "Infos", infosMenu );
};

//+++++++++++  menugl()  ++++++++++++++//
void menubar::menugl(){
fileMenuGL = new QPopupMenu;
fileMenuGL->setCheckable(TRUE);
SmoothPolyAction = new QAction(QPixmap(""), "&Smouth Poly", Qt::CTRL+Qt::Key_S, ptr, "Polys" );
SmoothPolyAction->setToggleAction(TRUE);
QObject::connect( SmoothPolyAction, SIGNAL(activated()), ptr, SLOT(checkBox240_clicked()));
SmoothPolyAction->addTo(fileMenuGL);
SmoothPolyAction->setOn(TRUE);
fileMenuGL->setItemChecked(fileMenuGL->idAt(0), TRUE);

// Smooth Lines:
SmoothLinesAction = new QAction(QPixmap(""), "&Smouth Line", Qt::CTRL+Qt::Key_L, ptr, "Lines" );
SmoothLinesAction->setToggleAction(TRUE);
QObject::connect( SmoothLinesAction, SIGNAL(activated()), ptr,
SLOT(checkBox241_clicked()));
SmoothLinesAction->addTo(fileMenuGL);

// Plan:
PlanAction = new QAction(QPixmap(""), "Draw &Plan", Qt::CTRL+Qt::Key_P, ptr, "Plan" );
PlanAction->setToggleAction(TRUE);
QObject::connect( PlanAction, SIGNAL(activated()), ptr, SLOT(PlanBox_clicked()));
PlanAction->addTo(fileMenuGL);
PlanAction->setOn(TRUE);
fileMenuGL->setItemChecked(fileMenuGL->idAt(2), TRUE);

mainmenu->insertItem( "&OpenGL", fileMenuGL );
};

//+++++++++++  menuconfig()  ++++++++++++++//
void menubar::menuconfig(){
fileMenuConf = new QPopupMenu;
QPixmap openIcon = QPixmap( fileopen );
QPixmap saveIcon = QPixmap( filesave );
fileMenuConf->insertItem(openIcon, "&Open Configure file", ptr, SLOT(OpenConfig()), 0);
fileMenuConf->insertItem("&Load (execute)", this, SLOT(loadConfig()), 0);
fileMenuConf->insertItem(saveIcon, "&Save Config file", this, SLOT(SaveConfig()), 0);
fileMenuConf->insertSeparator(3);

QPopupMenu *fieldMenu    = new QPopupMenu;
// Resolution:
QPopupMenu *ResolutionMenu    = new QPopupMenu;
// All:
AllResoAction = new QAction(QPixmap(""), "Save All", 0, this, "All" );
AllResoAction->setToggleAction(TRUE);

AllResoAction->setOn(TRUE);
AllResoAction->addTo(ResolutionMenu);
ResolutionMenu->insertSeparator(1);

// Max Grid:
GridAction = new QAction(QPixmap(""), "Maximum &Grid ("+ptr->isomaxgrid->text()+")", 0, ptr, "Grid" );
GridAction->setToggleAction(TRUE);
GridAction->setOn(TRUE);
GridAction->addTo(ResolutionMenu);

// Max Triangles and Points:
PtTrAction = new QAction(QPixmap(""), "Maximum Points ("+ptr->isomaxpt->text()+" Millions) And & Triangles ("+ptr->isomaxtr->text()+" Millions)", 0, ptr, "PtTr" );
PtTrAction->setToggleAction(TRUE);
PtTrAction->setOn(TRUE);
PtTrAction->addTo(ResolutionMenu);

fieldMenu->insertItem("Resolution", ResolutionMenu);
QObject::connect(AllResoAction, SIGNAL(toggled(bool)), GridAction, SLOT(setOn(bool)));
QObject::connect(AllResoAction, SIGNAL(toggled(bool)), PtTrAction, SLOT(setOn(bool)));

// Colors:
QPopupMenu *colorMenu    = new QPopupMenu;

// All:
AllColorAction = new QAction(QPixmap(""), "Save All", 0, this, "AllColor" );
AllColorAction->setToggleAction(TRUE);
AllColorAction->setOn(TRUE);
AllColorAction->addTo(colorMenu);
colorMenu->insertSeparator(1);

// Isosurfaces:
IsoFrontColorAction = new QAction(QPixmap(""), "&Isosurfaces Front Colors", 0, this, "IsoFrontColor" );
IsoFrontColorAction->setToggleAction(TRUE);
IsoFrontColorAction->setOn(TRUE);
IsoFrontColorAction->addTo(colorMenu);

IsoBackColorAction = new QAction(QPixmap(""), "&Isosurfaces  Back Colors", 0, this, "IsoBackColor" );
IsoBackColorAction->setToggleAction(TRUE);
IsoBackColorAction->setOn(TRUE);
IsoBackColorAction->addTo(colorMenu);

IsoGridColorAction = new QAction(QPixmap(""), "&Isosurfaces Grid Colors", 0, this, "IsoGridColor" );
IsoGridColorAction->setToggleAction(TRUE);
IsoGridColorAction->setOn(TRUE);
IsoGridColorAction->addTo(colorMenu);

IsoGroundColorAction = new QAction(QPixmap(""), "&Isosurfaces Ground Colors", 0, this, "IsoGroundColor" );
IsoGroundColorAction->setToggleAction(TRUE);
IsoGroundColorAction->setOn(TRUE);
IsoGroundColorAction->addTo(colorMenu);

IsoCndColorAction = new QAction(QPixmap(""), "&Isosurfaces Cnd Colors", 0, this, "IsoCndColor" );
IsoCndColorAction->setToggleAction(TRUE);
IsoCndColorAction->setOn(TRUE);
IsoCndColorAction->addTo(colorMenu);


//Parametric:
ParaFrontColorAction = new QAction(QPixmap(""), "&Parasurfaces Front Colors", 0, this, "ParaFrontColor" );
ParaFrontColorAction->setToggleAction(TRUE);
ParaFrontColorAction->setOn(TRUE);
ParaFrontColorAction->addTo(colorMenu);

ParaBackColorAction = new QAction(QPixmap(""), "&Parasurfaces  Back Colors", 0, this, "ParaBackColor" );
ParaBackColorAction->setToggleAction(TRUE);
ParaBackColorAction->setOn(TRUE);
ParaBackColorAction->addTo(colorMenu);

ParaGridColorAction = new QAction(QPixmap(""), "&Parasurfaces Grid Colors", 0, this, "ParaGridColor" );
ParaGridColorAction->setToggleAction(TRUE);
ParaGridColorAction->setOn(TRUE);
ParaGridColorAction->addTo(colorMenu);

ParaGroundColorAction = new QAction(QPixmap(""), "&Parasurfaces Ground Colors", 0, this, "ParaGroundColor" );
ParaGroundColorAction->setToggleAction(TRUE);
ParaGroundColorAction->setOn(TRUE);
ParaGroundColorAction->addTo(colorMenu);

ParaCndColorAction = new QAction(QPixmap(""), "&Parasurfaces Cnd Colors", 0, this, "ParaCndColor" );
ParaCndColorAction->setToggleAction(TRUE);
ParaCndColorAction->setOn(TRUE);
ParaCndColorAction->addTo(colorMenu);


fieldMenu->insertSeparator(2);
fieldMenu->insertItem("Colors", colorMenu);
fileMenuConf->insertItem("&Fields To Save", fieldMenu);

QObject::connect( AllColorAction, SIGNAL(toggled(bool)), IsoFrontColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), IsoBackColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), IsoGridColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), IsoGroundColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), IsoCndColorAction,  SLOT(setOn(bool)));

QObject::connect( AllColorAction, SIGNAL(toggled(bool)), ParaFrontColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), ParaBackColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), ParaGridColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), ParaGroundColorAction,  SLOT(setOn(bool)));
QObject::connect( AllColorAction, SIGNAL(toggled(bool)), ParaCndColorAction,  SLOT(setOn(bool)));

mainmenu->insertItem( "&Config", fileMenuConf );
};



void menubar::constructmenubar(){
menufile();
menugl();
menuconfig();
menupov();
menupage();
menuabout();
toolbar();
};

void menubar::activateallcolor(){

};


syntax highlighted by Code2HTML, v. 0.9.1