TGTextDialog.cxx

Go to the documentation of this file.
00001 /*********************************************************************
00002 
00003   Name:         TGTextDialog.cxx
00004   Created by:   Stephan Ritt
00005 
00006                                                                        
00007   Contents:     MIROODAS        
00008   $Log$
00009   Revision 1.4  2004/07/19 19:39:40  chuma
00010   Fixed some minor bugs:
00011    do not make group named "-1" when TGTextDialog returns "-1" if canceled;
00012    get the port number correct on a restore;
00013    rationalize the host name and port number code;
00014 
00015   Revision 1.3  2004/06/25 21:46:34  chuma
00016   Added:  current online host name is displayed in message dialog
00017   Fixed:  online histograms can now be added and displayed in groups
00018 
00019   Revision 1.2  2003/12/10 18:07:36  chuma
00020   first pass by Joe Chuma
00021 
00022   Revision 1.1.1.1  2003/08/08 22:37:11  gking
00023   New Files
00024 
00025   
00026 *********************************************************************/
00027 //////////////////////////////////////////////////////////////////////
00028 // This Code is written by Stephan Ritt                             //
00029 // found in rmidas.c, a component of the MIDAS                      //
00030 // (see http://midas.triumf.ca/)                                    //
00031 //////////////////////////////////////////////////////////////////////
00032 
00033 #include "TGTextDialog.h"
00034 
00035 ClassImp(TGTextDialog)
00036 
00037 TGTextDialog::TGTextDialog( TGWindow const *p, const TGWindow *main,
00038                             UInt_t w, UInt_t h, char *label, char const *preLoad,
00039                             TObjString *ret_str,
00040                             UInt_t options)
00041     : TGTransientFrame(p, main, w, h, options)
00042 {
00043   // Create a dialog to enter a single line text entry
00044   //
00045   fRetObjStr = ret_str;
00046   //
00047   ChangeOptions( (GetOptions()&~kVerticalFrame)|kHorizontalFrame );
00048   //
00049   fF1 = new TGCompositeFrame( this, 60, 20, kVerticalFrame | kFixedWidth );
00050   fF2 = new TGCompositeFrame( this, 60, 20, kHorizontalFrame );
00051   //
00052   fOkButton = new TGTextButton( fF1, new TGHotString("Ok"), 1 );
00053   fCancelButton = new TGTextButton( fF1, new TGHotString("Cancel"), 2 );
00054   fF1->Resize( fOkButton->GetDefaultWidth()+40, GetDefaultHeight() );
00055   //
00056   fOkButton->Associate(this);
00057   fCancelButton->Associate(this);
00058   //
00059   fL1 = new TGLayoutHints( kLHintsTop | kLHintsExpandX, 2, 2, 3, 0 );
00060   fL21 = new TGLayoutHints( kLHintsTop | kLHintsRight, 2, 5, 10, 0 );
00061   //
00062   fF1->AddFrame( fOkButton, fL1 );
00063   fF1->AddFrame( fCancelButton, fL1 );
00064   AddFrame( fF1, fL21 );
00065   //
00066   fLabel = new TGLabel( fF2, new TGHotString(label) );
00067   //
00068   fBLabel = new TGTextBuffer(200);
00069   fOkButton->SetState(kButtonDisabled);
00070   //
00071   fText = new TGTextEntry( fF2, fBLabel );
00072   fText->Associate(this);
00073   fText->Resize( 220, fText->GetDefaultHeight() );
00074   fText->SelectAll();
00075   if( strlen(preLoad) )fText->SetText( preLoad );
00076   //
00077   fL5 = new TGLayoutHints( kLHintsLeft|kLHintsCenterY, 3, 5, 0, 0 );
00078   fL6 = new TGLayoutHints( kLHintsLeft|kLHintsCenterY, 0, 2, 0, 0 );
00079   //
00080   fF2->AddFrame( fLabel, fL5 );
00081   fF2->AddFrame( fText, fL5 );
00082   AddFrame( fF2, fL1 );
00083   //
00084   MapSubwindows();
00085   Resize( GetDefaultSize() );
00086   //
00087   // position relative to the parent's window
00088   Int_t ax, ay;
00089   if( main )
00090   {
00091     Window_t wdum;
00092     gVirtualX->TranslateCoordinates(
00093      main->GetId(), GetParent()->GetId(),
00094      (Int_t)(((TGFrame *)main)->GetWidth()-fWidth)>>1,
00095      (Int_t)(((TGFrame *)main)->GetHeight()-fHeight)>>1,
00096      ax, ay, wdum );
00097   }
00098   else
00099   {
00100     UInt_t root_w, root_h;
00101     gVirtualX->GetWindowSize( fClient->GetRoot()->GetId(), ax, ay,
00102                               root_w, root_h );
00103     ax = (root_w-fWidth) >> 1;
00104     ay = (root_h-fHeight) >> 1;
00105   }
00106   //
00107   Move( ax, ay );
00108   SetWMPosition( ax, ay );
00109   //
00110   SetWindowName("Enter Text");
00111   //
00112   SetMWMHints( kMWMDecorAll|kMWMDecorMaximize|kMWMDecorMenu,
00113                kMWMFuncAll|kMWMFuncMaximize|kMWMFuncResize,
00114                kMWMInputModeless );
00115   //
00116   MapWindow();
00117   fClient->WaitFor(this);
00118 }
00119 
00120 TGTextDialog::~TGTextDialog()
00121 {
00122   // Clean up text dialog
00123   delete fCancelButton;
00124   delete fOkButton;
00125   delete fText;
00126   delete fLabel;
00127   delete fF1; delete fF2;
00128   delete fL1; delete fL5; delete fL6; delete fL21;
00129 }
00130 
00131 void TGTextDialog::CloseWindow()
00132 {
00133   // Close the dialog.
00134   // On close the dialog will be deleted and cannot be re-used.
00135   //
00136   DeleteWindow();
00137 }
00138 
00139 Bool_t TGTextDialog::ProcessMessage( Long_t msg, Long_t parm1, Long_t dummy )
00140 {
00141   switch (GET_MSG(msg))
00142   {
00143     case kC_COMMAND:
00144     {
00145       switch (GET_SUBMSG(msg))
00146       {
00147         case kCM_BUTTON:
00148         {
00149           switch (parm1)
00150           {
00151             case 1:
00152             {
00153               delete fRetObjStr;
00154               fRetObjStr = new TObjString(fText->GetText());
00155               CloseWindow();
00156               break;
00157             }
00158             case 2:
00159             {
00160               delete fRetObjStr;
00161               fRetObjStr = new TObjString("-1");
00162               CloseWindow();
00163               break;
00164             }
00165           }
00166           break;
00167         }
00168         default:
00169         {
00170           break;
00171         }
00172       }
00173       break;  
00174     }
00175     case kC_TEXTENTRY:
00176     {
00177       switch (GET_SUBMSG(msg))
00178       {
00179         case kTE_TEXTCHANGED:
00180         {
00181           char const *string = fBLabel->GetString();
00182           strlen(string)==0 ? fOkButton->SetState(kButtonDisabled) :
00183                               fOkButton->SetState(kButtonUp);
00184           break;
00185         }
00186         case kTE_ENTER:
00187         {
00188           char const *string = fBLabel->GetString();
00189           if( strlen(string) != 0 )
00190           {
00191             delete fRetObjStr;
00192             fRetObjStr = new TObjString(fText->GetText());
00193             CloseWindow();
00194           }
00195           break;
00196         }
00197         default:
00198         {
00199           break;
00200         }
00201       }
00202       break;
00203     }
00204     default:
00205     {
00206       break;
00207     }
00208   }
00209   return kTRUE;
00210 }

Roody DOC Version 1.0.1 ---- TRIUMF ----
Contributions: Pierre-Andre Amaudruz - Joe Chuma - Doxygen - Greg King - Konstantin Olchanski - Matthias Schneebeli