#include <stdlib.h>
#include "qevent.h"
#include "qdialog.h"
#include "qpushbutton.h"
#include "qlabel.h"
#include "qobject.h"
#include "qlineedit.h"
#if (QT_VERSION > 0x039999) // Added by cholm@nbi.dk - for Qt 4
# include "q3hbox.h"
typedef Q3HBox QHBox;
#endif
#include "TQRootDialog.h"
#include "TMethod.h"
#include "TCanvas.h"
#include "TROOT.h"
#include "TClass.h"
#include "TObjString.h"
using namespace Qt;
ClassImp(TQRootDialog)
TQRootDialog::TQRootDialog(QWidget *wparent, const char *wname, WFlags f,
TObject* obj, TMethod *method ) :
QVBox(wparent,wname, f | WType_Modal | WStyle_Dialog ),
fLineEdit(0),
fParent(wparent)
{
fCurObj=obj;
fCurMethod=method;
setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding));
fArgBox = new QVBox(this, "args");
fArgBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding));
QHBox *hbox = new QHBox(this,"buttons");
QPushButton *bOk = new QPushButton("Apply",hbox,"Apply");
QPushButton *bCancel = new QPushButton("Cancel",hbox,"Close");
connect(bCancel,SIGNAL (clicked()), this, SLOT(close()));
connect(bOk,SIGNAL( clicked() ), this, SLOT( ExecuteMethod() ));
}
void TQRootDialog::ExecuteMethod()
{
Bool_t deletion = kFALSE;
TVirtualPad *psave = gROOT->GetSelectedPad();
TObjArray tobjlist(fCurMethod->GetListOfMethodArgs()->LastIndex()+1);
#if (QT_VERSION > 0x039999) // Added by cholm@nbi.dk - for Qt 4
typedef QList<QLineEdit*>::iterator iter;
for (iter st = fList.begin(); st != fList.end(); ++st) {
QString s = (*st)->text();
TObjString *t = new TObjString( (const char*) s );
tobjlist.AddLast((TObject*) t) ;
}
#else
for ( QLineEdit* st = fList.first(); st; st = fList.next()) {
QString s = st->text();
TObjString *t = new TObjString( (const char*) s );
tobjlist.AddLast((TObject*) t) ;
}
#endif
if ( fCurObj ) {
if( strcmp(fCurMethod->GetName(),"Delete") == 0 ) {
if (fCurObj) {
delete fCurObj;
fCurObj=0;
deletion = kTRUE;
}
}
else if ( strcmp(fCurMethod->GetName(),"SetCanvasSize") == 0 ) {
int value[2] = {0,0};
int l=0;
#if (QT_VERSION > 0x039999) // Added by cholm@nbi.dk - for Qt 4
for (iter st = fList.begin(); st != fList.end(); ++st) {
QString s = (*st)->text();
value[l++] = atoi ( s );
}
#else
for ( QLineEdit* st = fList.first(); st; st = fList.next()) {
QString s = st->text();
value[l++] = atoi ( s );
}
#endif
fParent->resize(value[0], value[1]);
}
else {
fCurObj->Execute( fCurMethod, &tobjlist);
}
}
if (!deletion ) {
gROOT->SetSelectedPad(psave);
gROOT->GetSelectedPad()->Modified();
gROOT->GetSelectedPad()->Update();
}
else {
gROOT->SetSelectedPad( gPad );
gROOT->GetSelectedPad()->Update();
}
}
TQRootDialog::~TQRootDialog()
{
if (fArgBox) delete fArgBox;
if (fLineEdit) delete fLineEdit;
#if (QT_VERSION > 0x039999) // Added by cholm@nbi.dk - for Qt 4
fList.erase(fList.begin(),fList.end());
#else
fList.remove();
#endif
}
void TQRootDialog::Add(const char* argname, const char* value, const char* )
{
QString s;
s = value;
new QLabel(argname,fArgBox);
QLineEdit* lineEdit = new QLineEdit(fArgBox);
if (fLineEdit) {
fLineEdit->setGeometry(10,10, 130, 30);
fLineEdit->setFocus();
fLineEdit->setText(s);
}
fList.append( lineEdit );
}
void TQRootDialog::Popup()
{
show();
}
void TQRootDialog::closeEvent( QCloseEvent* ce )
{
ce->accept();
}