RSMsgBox.cxx
// Author: Bertrand Bellenot 22/08/02
/*************************************************************************
* Copyright (C) 1995-2002, Bertrand Bellenot. *
* All rights reserved. *
* *
* For the licensing terms see the LICENSE file. *
*************************************************************************/
#include <TSystem.h>
#include <TRootHelpDialog.h>
#include "RSMsgBox.h"
#include "RootShower.h"
#include "RSHelpText.h"
//______________________________________________________________________________
RootShowerMsgBox::RootShowerMsgBox(const TGWindow *p, const TGWindow *main,
UInt_t w, UInt_t h, UInt_t options) :
TGTransientFrame(p, main, w, h, options)
{
TGPicture *fIconPicture;
TGIcon *fIcon;
UInt_t wh1 = (UInt_t)(0.6 * h);
UInt_t wh2 = h - wh1;
fVFrame = new TGVerticalFrame(this, w, wh1, 0);
TString theLogoFilename = StrDup(gProgPath);
theLogoFilename.Append("/icons/mclogo01.xpm");
fIconPicture = (TGPicture *)gClient->GetPicture(theLogoFilename);
fIcon = new TGIcon(this, fIconPicture,
fIconPicture->GetWidth(),
fIconPicture->GetHeight());
fLogoLayout = new TGLayoutHints(kLHintsCenterX,
0, 0, 0, 0);
AddFrame(fIcon, fLogoLayout);
fLabel1 = new TGLabel(fVFrame, "Appears that You have changed some parameters");
fLabel2 = new TGLabel(fVFrame, "Would You wish to SAVE changes ?");
fBly = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 5, 5);
fBfly = new TGLayoutHints(kLHintsTop | kLHintsRight| kLHintsExpandX, 0, 0, 5, 5);
fVFrame->AddFrame(fLabel1,fBly);
fVFrame->AddFrame(fLabel2,fBly);
//------------------------------------------------------------------------------
// OK Cancel Buttons in Horizontal frame
//------------------------------------------------------------------------------
fHFrame = new TGHorizontalFrame(this, w, wh2, 0);
fOkButton = new TGTextButton(fHFrame, "&Yes", 1);
fOkButton->Associate(this);
fHelpButton = new TGTextButton(fHFrame, "&Help", 2);
fHelpButton->Associate(this);
fCancelButton = new TGTextButton(fHFrame, "&No", 3);
fCancelButton->Associate(this);
fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
2, 2, 2, 2);
fL2 = new TGLayoutHints(kLHintsBottom | kLHintsLeft | kLHintsExpandX, 50, 50, 5, 20);
fHFrame->AddFrame(fOkButton, fL1);
fHFrame->AddFrame(fHelpButton, fL1);
fHFrame->AddFrame(fCancelButton, fL1);
fHFrame->Resize(w, fOkButton->GetDefaultHeight());
AddFrame(fVFrame, fBfly);
AddFrame(fHFrame, fL2);
SetWindowName("Root's Monte Carlo Message Box");
TGDimension size = GetDefaultSize();
Resize(size);
SetWMSize(size.fWidth, size.fHeight);
SetWMSizeHints(size.fWidth, size.fHeight, size.fWidth, size.fHeight, 0, 0);
SetMWMHints(kMWMDecorAll | kMWMDecorResizeH | kMWMDecorMaximize |
kMWMDecorMinimize | kMWMDecorMenu,
kMWMFuncAll | kMWMFuncResize | kMWMFuncMaximize |
kMWMFuncMinimize,
kMWMInputModeless);
// position relative to the parent's window
Window_t wdummy;
Int_t ax, ay;
gVirtualX->TranslateCoordinates(main->GetId(), GetParent()->GetId(),
(Int_t)(((TGFrame *) main)->GetWidth() - fWidth) >> 1,
(Int_t)(((TGFrame *) main)->GetHeight() - fHeight) >> 1,
ax, ay, wdummy);
Move(ax, ay);
MapSubwindows();
MapWindow();
fClient->WaitFor(this);
}
//______________________________________________________________________________
RootShowerMsgBox::~RootShowerMsgBox() {
delete fLogoLayout;
delete fCancelButton;
delete fHelpButton;
delete fOkButton;
delete fVFrame;
delete fHFrame;
delete fLabel1;
delete fLabel2;
delete fBly;
}
//______________________________________________________________________________
void RootShowerMsgBox::CloseWindow()
{
// Close dialog in response to window manager close.
delete this;
}
//______________________________________________________________________________
Bool_t RootShowerMsgBox::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
// Process messages sent to this dialog.
TRootHelpDialog* hd;
switch (GET_MSG(msg)) {
case kC_COMMAND:
switch (GET_SUBMSG(msg)) {
case kCM_BUTTON:
switch(parm1) {
case 1:
gRootShower->SetOk();
CloseWindow();
break;
case 2:
hd = new TRootHelpDialog(this, "Help on Message Box", 590, 200);
hd->SetText(gRSHelpMsgBox);
hd->Popup();
fClient->WaitFor(hd);
break;
case 3: // Cancel button
gRootShower->SetOk(false);
CloseWindow();
break;
default:
break;
}
break;
default:
break;
}
break;
}
return kTRUE;
}