// @(#)root/qtgsi:$Id$
// Author: Denis Bertini, M. Al-Turany  01/11/2000

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#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)
{
   // ctor
   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()
{
   // Execute ROOT methods.

   Bool_t deletion = kFALSE;
   TVirtualPad *psave =  gROOT->GetSelectedPad();

   //if (fCurObj)
   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
   // handle command if existing object
   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 {
         // here call cint call
         fCurObj->Execute( fCurMethod, &tobjlist);
      }
   } // ! fCurrent Obj

   if (!deletion ) {
      gROOT->SetSelectedPad(psave);
      gROOT->GetSelectedPad()->Modified();
      gROOT->GetSelectedPad()->Update();
   }
   else {
      gROOT->SetSelectedPad( gPad );
      gROOT->GetSelectedPad()->Update();
   }
}

//______________________________________________________________________________
TQRootDialog::~TQRootDialog()
{
   // dtor

   if (fArgBox) delete fArgBox;
   if (fLineEdit) delete fLineEdit;
#if (QT_VERSION > 0x039999) // Added by cholm@nbi.dk - for Qt 4
   // Perhaps we need to deallocate all?
   fList.erase(fList.begin(),fList.end());
#else
   fList.remove();
#endif
}

//______________________________________________________________________________
void TQRootDialog::Add(const char* argname, const char* value, const char* /*type*/)
{
   // Add widgets for arguments.

   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 the dialog.

   show();
}

//______________________________________________________________________________
void TQRootDialog::closeEvent( QCloseEvent* ce )
{
   // Handle close event.

   ce->accept();
}
 TQRootDialog.cxx:1
 TQRootDialog.cxx:2
 TQRootDialog.cxx:3
 TQRootDialog.cxx:4
 TQRootDialog.cxx:5
 TQRootDialog.cxx:6
 TQRootDialog.cxx:7
 TQRootDialog.cxx:8
 TQRootDialog.cxx:9
 TQRootDialog.cxx:10
 TQRootDialog.cxx:11
 TQRootDialog.cxx:12
 TQRootDialog.cxx:13
 TQRootDialog.cxx:14
 TQRootDialog.cxx:15
 TQRootDialog.cxx:16
 TQRootDialog.cxx:17
 TQRootDialog.cxx:18
 TQRootDialog.cxx:19
 TQRootDialog.cxx:20
 TQRootDialog.cxx:21
 TQRootDialog.cxx:22
 TQRootDialog.cxx:23
 TQRootDialog.cxx:24
 TQRootDialog.cxx:25
 TQRootDialog.cxx:26
 TQRootDialog.cxx:27
 TQRootDialog.cxx:28
 TQRootDialog.cxx:29
 TQRootDialog.cxx:30
 TQRootDialog.cxx:31
 TQRootDialog.cxx:32
 TQRootDialog.cxx:33
 TQRootDialog.cxx:34
 TQRootDialog.cxx:35
 TQRootDialog.cxx:36
 TQRootDialog.cxx:37
 TQRootDialog.cxx:38
 TQRootDialog.cxx:39
 TQRootDialog.cxx:40
 TQRootDialog.cxx:41
 TQRootDialog.cxx:42
 TQRootDialog.cxx:43
 TQRootDialog.cxx:44
 TQRootDialog.cxx:45
 TQRootDialog.cxx:46
 TQRootDialog.cxx:47
 TQRootDialog.cxx:48
 TQRootDialog.cxx:49
 TQRootDialog.cxx:50
 TQRootDialog.cxx:51
 TQRootDialog.cxx:52
 TQRootDialog.cxx:53
 TQRootDialog.cxx:54
 TQRootDialog.cxx:55
 TQRootDialog.cxx:56
 TQRootDialog.cxx:57
 TQRootDialog.cxx:58
 TQRootDialog.cxx:59
 TQRootDialog.cxx:60
 TQRootDialog.cxx:61
 TQRootDialog.cxx:62
 TQRootDialog.cxx:63
 TQRootDialog.cxx:64
 TQRootDialog.cxx:65
 TQRootDialog.cxx:66
 TQRootDialog.cxx:67
 TQRootDialog.cxx:68
 TQRootDialog.cxx:69
 TQRootDialog.cxx:70
 TQRootDialog.cxx:71
 TQRootDialog.cxx:72
 TQRootDialog.cxx:73
 TQRootDialog.cxx:74
 TQRootDialog.cxx:75
 TQRootDialog.cxx:76
 TQRootDialog.cxx:77
 TQRootDialog.cxx:78
 TQRootDialog.cxx:79
 TQRootDialog.cxx:80
 TQRootDialog.cxx:81
 TQRootDialog.cxx:82
 TQRootDialog.cxx:83
 TQRootDialog.cxx:84
 TQRootDialog.cxx:85
 TQRootDialog.cxx:86
 TQRootDialog.cxx:87
 TQRootDialog.cxx:88
 TQRootDialog.cxx:89
 TQRootDialog.cxx:90
 TQRootDialog.cxx:91
 TQRootDialog.cxx:92
 TQRootDialog.cxx:93
 TQRootDialog.cxx:94
 TQRootDialog.cxx:95
 TQRootDialog.cxx:96
 TQRootDialog.cxx:97
 TQRootDialog.cxx:98
 TQRootDialog.cxx:99
 TQRootDialog.cxx:100
 TQRootDialog.cxx:101
 TQRootDialog.cxx:102
 TQRootDialog.cxx:103
 TQRootDialog.cxx:104
 TQRootDialog.cxx:105
 TQRootDialog.cxx:106
 TQRootDialog.cxx:107
 TQRootDialog.cxx:108
 TQRootDialog.cxx:109
 TQRootDialog.cxx:110
 TQRootDialog.cxx:111
 TQRootDialog.cxx:112
 TQRootDialog.cxx:113
 TQRootDialog.cxx:114
 TQRootDialog.cxx:115
 TQRootDialog.cxx:116
 TQRootDialog.cxx:117
 TQRootDialog.cxx:118
 TQRootDialog.cxx:119
 TQRootDialog.cxx:120
 TQRootDialog.cxx:121
 TQRootDialog.cxx:122
 TQRootDialog.cxx:123
 TQRootDialog.cxx:124
 TQRootDialog.cxx:125
 TQRootDialog.cxx:126
 TQRootDialog.cxx:127
 TQRootDialog.cxx:128
 TQRootDialog.cxx:129
 TQRootDialog.cxx:130
 TQRootDialog.cxx:131
 TQRootDialog.cxx:132
 TQRootDialog.cxx:133
 TQRootDialog.cxx:134
 TQRootDialog.cxx:135
 TQRootDialog.cxx:136
 TQRootDialog.cxx:137
 TQRootDialog.cxx:138
 TQRootDialog.cxx:139
 TQRootDialog.cxx:140
 TQRootDialog.cxx:141
 TQRootDialog.cxx:142
 TQRootDialog.cxx:143
 TQRootDialog.cxx:144
 TQRootDialog.cxx:145
 TQRootDialog.cxx:146
 TQRootDialog.cxx:147
 TQRootDialog.cxx:148
 TQRootDialog.cxx:149
 TQRootDialog.cxx:150
 TQRootDialog.cxx:151
 TQRootDialog.cxx:152
 TQRootDialog.cxx:153
 TQRootDialog.cxx:154
 TQRootDialog.cxx:155
 TQRootDialog.cxx:156
 TQRootDialog.cxx:157
 TQRootDialog.cxx:158
 TQRootDialog.cxx:159
 TQRootDialog.cxx:160
 TQRootDialog.cxx:161
 TQRootDialog.cxx:162
 TQRootDialog.cxx:163
 TQRootDialog.cxx:164
 TQRootDialog.cxx:165
 TQRootDialog.cxx:166
 TQRootDialog.cxx:167
 TQRootDialog.cxx:168
 TQRootDialog.cxx:169