33 extern TGTextEntry *gBlinkingEntry;
35 ClassImp(TRootDialog);
40 TRootDialog::TRootDialog(TRootContextMenu *cmenu,
const TGWindow *main,
41 const char *title, Bool_t okB, Bool_t cancelB, Bool_t applyB,
42 Bool_t helpB) : TGTransientFrame(gClient->GetRoot(), main, 200, 100)
53 fL1 =
new TGLayoutHints(kLHintsTop | kLHintsCenterX, 0, 0, 5, 0);
54 fL2 =
new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5);
58 SetEditDisabled(kEditDisable);
60 AddInput(kKeyPressMask | kEnterWindowMask | kLeaveWindowMask);
66 TRootDialog::~TRootDialog()
77 void TRootDialog::Add(
const char *argname,
const char *value,
const char *type)
79 TGLabel *l =
new TGLabel(
this, argname);
80 TString svalue(value);
82 svalue.ReplaceAll(
"\\",
"\\\\");
83 TGTextBuffer *b =
new TGTextBuffer(20); b->AddText(0, svalue.Data());
84 TGTextEntry *t =
new TGTextEntry(
this, b);
86 t->Connect(
"TabPressed()",
"TRootDialog",
this,
"TabPressed()");
89 t->Resize(260, t->GetDefaultHeight());
95 fWidgets->Add(
new TObjString(type));
102 const char *TRootDialog::GetParameters()
104 static TString params;
111 if (fMenu->GetContextMenu()->GetSelectedMenuItem())
112 selfobjpos = fMenu->GetContextMenu()->GetSelectedMenuItem()->GetSelfObjectPos();
117 TIter next(fWidgets);
120 while ((obj = next())) {
121 if (obj->IsA() != TGLabel::Class())
break;
123 str = (TObjString *) next();
127 const char *type = str ? str->GetString().Data() : 0;
128 const char *data = 0;
130 if (obj && obj->IsA() == TGTextEntry::Class())
131 data = ((TGTextEntry *) obj)->GetBuffer()->GetString();
136 if (selfobjpos == nparam-1) {
137 if (params.Length()) params +=
",";
138 param = TString::Format(
"(TObject*)0x%lx",
139 (Long_t)fMenu->GetContextMenu()->GetSelectedObject());
143 if (params.Length()) params +=
",";
145 if (!strncmp(type,
"char*", 5))
146 param = TString::Format(
"\"%s\"", data);
148 param = TString::Format(
"(%s)%s", type, data);
156 if (selfobjpos == nparam) {
157 if (params.Length()) params +=
",";
158 param = TString::Format(
"(TObject*)0x%lx",
159 (Long_t)fMenu->GetContextMenu()->GetSelectedObject());
163 return params.Data();
169 void TRootDialog::Popup()
173 UInt_t nb = 0, width = 0, height = 0;
175 TGHorizontalFrame *hf =
new TGHorizontalFrame(
this, 60, 20, kFixedWidth);
176 TGLayoutHints *l1 =
new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 5, 5, 0, 0);
183 b =
new TGTextButton(hf,
"&OK", 1);
187 height = b->GetDefaultHeight();
188 width = TMath::Max(width, b->GetDefaultWidth()); ++nb;
191 b =
new TGTextButton(hf,
"&Apply", 2);
195 height = b->GetDefaultHeight();
196 width = TMath::Max(width, b->GetDefaultWidth()); ++nb;
199 b =
new TGTextButton(hf,
"&Cancel", 3);
203 height = b->GetDefaultHeight();
204 width = TMath::Max(width, b->GetDefaultWidth()); ++nb;
207 b =
new TGTextButton(hf,
"Online &Help", 4);
211 height = b->GetDefaultHeight();
212 width = TMath::Max(width, b->GetDefaultWidth()); ++nb;
216 l1 =
new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 5, 5);
223 hf->Resize((width + 20) * nb, height);
228 width = GetDefaultWidth();
229 height = GetDefaultHeight();
231 Resize(width, height);
237 SetWMSize(width, height);
238 SetWMSizeHints(width, height, width, height, 0, 0);
240 SetMWMHints(kMWMDecorAll | kMWMDecorResizeH | kMWMDecorMaximize |
241 kMWMDecorMinimize | kMWMDecorMenu,
242 kMWMFuncAll | kMWMFuncResize | kMWMFuncMaximize |
247 fClient->WaitFor(
this);
253 void TRootDialog::CloseWindow()
256 SendMessage(fMenu, MK_MSG(kC_COMMAND, kCM_BUTTON), 3, 0);
262 void TRootDialog::TabPressed()
264 Bool_t setNext = kFALSE;
266 TIter next(fWidgets);
268 while ( TObject* obj = next() ) {
269 if ( obj->IsA() == TGTextEntry::Class() ) {
270 entry = (TGTextEntry*) obj;
271 if ( entry == gBlinkingEntry ) {
273 }
else if ( setNext ) {
282 while ( TObject* obj = next() ) {
283 if ( obj->IsA() == TGTextEntry::Class() ) {
284 entry = (TGTextEntry*) obj;
295 Bool_t TRootDialog::HandleKey(Event_t* event)
299 gVirtualX->LookupString(event, tmp,
sizeof(tmp), keysym);
300 if ((EKeySym)keysym == kKey_Tab) {
303 TIter next(fWidgets);
305 while ( TObject* obj = next() ) {
306 if ( obj->IsA() == TGTextEntry::Class() ) {
307 entry = (TGTextEntry*) obj;
314 return TGMainFrame::HandleKey(event);