00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
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
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
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
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
00134
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 }