55 ClassImp(TGMdiDecorFrame);
 
   56 ClassImp(TGMdiTitleBar);
 
   57 ClassImp(TGMdiButtons);
 
   58 ClassImp(TGMdiTitleIcon);
 
   59 ClassImp(TGMdiWinResizer);
 
   60 ClassImp(TGMdiVerticalWinResizer);
 
   61 ClassImp(TGMdiHorizontalWinResizer);
 
   62 ClassImp(TGMdiCornerWinResizer);
 
   69 TGMdiDecorFrame::TGMdiDecorFrame(TGMdiMainFrame *main, TGMdiFrame *frame,
 
   70                                  Int_t w, Int_t h, 
const TGGC *boxGC,
 
   71                                  UInt_t options, Pixel_t back) :
 
   72   TGCompositeFrame(main->GetContainer(), w, h,
 
   73                    options | kOwnBackground | kVerticalFrame | kFixedSize, back)
 
   79    fIsMinimized = fIsMaximized = kFALSE;
 
   80    fMinimizedX = fMinimizedY = 0;
 
   81    fMinimizedUserPlacement = kFALSE;
 
   82    fButtonMask = kMdiDefaultHints;
 
   83    SetCleanup(kDeepCleanup);
 
   85    SetDecorBorderWidth(kMdiBorderWidth);
 
   87    fTitlebar = 
new TGMdiTitleBar(
this, fMdiMainFrame);
 
   89    fLHint = 
new TGLayoutHints(kLHintsExpandX);
 
   90    fExpandHint = 
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
 
   92    AddFrame(fTitlebar, fLHint);
 
   93    fTitlebar->LayoutButtons(fButtonMask, kFALSE, kFALSE);
 
   95    fUpperHR = 
new TGMdiVerticalWinResizer(
this, main, kMdiResizerTop,
 
   96                                          boxGC, kMdiBorderWidth);
 
   97    fLowerHR = 
new TGMdiVerticalWinResizer(
this, main, kMdiResizerBottom,
 
   98                                          boxGC, kMdiBorderWidth);
 
   99    fLeftVR = 
new TGMdiHorizontalWinResizer(
this, main, kMdiResizerLeft,
 
  100                                           boxGC, kMdiBorderWidth);
 
  101    fRightVR = 
new TGMdiHorizontalWinResizer(
this, main, kMdiResizerRight,
 
  102                                            boxGC, kMdiBorderWidth);
 
  104    fUpperLeftCR = 
new TGMdiCornerWinResizer(
this, main,
 
  105                                 kMdiResizerTop | kMdiResizerLeft,
 
  106                                 boxGC, kMdiBorderWidth);
 
  107    fLowerLeftCR = 
new TGMdiCornerWinResizer(
this, main,
 
  108                                 kMdiResizerBottom | kMdiResizerLeft,
 
  109                                 boxGC, kMdiBorderWidth);
 
  110    fUpperRightCR = 
new TGMdiCornerWinResizer(
this, main,
 
  111                                  kMdiResizerTop | kMdiResizerRight,
 
  112                                  boxGC, kMdiBorderWidth);
 
  113    fLowerRightCR = 
new TGMdiCornerWinResizer(
this, main,
 
  114                                  kMdiResizerBottom | kMdiResizerRight,
 
  115                                  boxGC, kMdiBorderWidth);
 
  117    fUpperHR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  118    fLowerHR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  119    fLeftVR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  120    fRightVR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  121    fUpperLeftCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  122    fLowerLeftCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  123    fUpperRightCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  124    fLowerRightCR->SetMinSize(50, fTitlebar->GetDefaultHeight() + 2 * fBorderWidth);
 
  126    AddInput(kStructureNotifyMask | kButtonPressMask);
 
  128    fFrame->ReparentWindow(
this, fBorderWidth, fTitlebar->GetDefaultHeight());
 
  129    fFrame->fParent = 
this;
 
  130    AddFrame(fFrame, fExpandHint);
 
  133    Resize(GetDefaultSize());
 
  137    TGFrame::SetWindowName();
 
  139    fFrame->RaiseWindow();
 
  140    fTitlebar->RaiseWindow();
 
  146 TGMdiDecorFrame::~TGMdiDecorFrame()
 
  148    if (!MustCleanup()) {
 
  155       delete fUpperRightCR;
 
  156       delete fLowerRightCR;
 
  164 void TGMdiDecorFrame::SetDecorBorderWidth(Int_t bw)
 
  172 void TGMdiDecorFrame::SetMdiButtons(ULong_t buttons)
 
  174    fButtonMask = buttons;
 
  175    fTitlebar->LayoutButtons(fButtonMask, fIsMinimized, fIsMaximized);
 
  176    if (fButtonMask & kMdiSize) {
 
  177       fUpperHR->Activate(kTRUE);
 
  178       fLowerHR->Activate(kTRUE);
 
  179       fLeftVR->Activate(kTRUE);
 
  180       fRightVR->Activate(kTRUE);
 
  181       fUpperLeftCR->Activate(kTRUE);
 
  182       fLowerLeftCR->Activate(kTRUE);
 
  183       fUpperRightCR->Activate(kTRUE);
 
  184       fLowerRightCR->Activate(kTRUE);
 
  186       fUpperHR->Activate(kFALSE);
 
  187       fLowerHR->Activate(kFALSE);
 
  188       fLeftVR->Activate(kFALSE);
 
  189       fRightVR->Activate(kFALSE);
 
  190       fUpperLeftCR->Activate(kFALSE);
 
  191       fLowerLeftCR->Activate(kFALSE);
 
  192       fUpperRightCR->Activate(kFALSE);
 
  193       fLowerRightCR->Activate(kFALSE);
 
  200 void TGMdiDecorFrame::SetResizeMode(Int_t mode)
 
  202    fUpperHR->SetResizeMode(mode);
 
  203    fLowerHR->SetResizeMode(mode);
 
  204    fLeftVR->SetResizeMode(mode);
 
  205    fRightVR->SetResizeMode(mode);
 
  206    fUpperLeftCR->SetResizeMode(mode);
 
  207    fLowerLeftCR->SetResizeMode(mode);
 
  208    fUpperRightCR->SetResizeMode(mode);
 
  209    fLowerRightCR->SetResizeMode(mode);
 
  215 void TGMdiDecorFrame::Layout()
 
  217    RemoveInput(kStructureNotifyMask);
 
  218    TGCompositeFrame::Layout();
 
  219    AddInput(kStructureNotifyMask);
 
  221    if (fIsMaximized == kFALSE) {
 
  222       fUpperLeftCR->Move(0, 0);
 
  223       fUpperRightCR->Move(fWidth - fUpperRightCR->GetWidth(), 0);
 
  224       fLowerLeftCR->Move(0, fHeight - fLowerLeftCR->GetHeight());
 
  225       fLowerRightCR->Move(fWidth - fLowerRightCR->GetWidth(),
 
  226                           fHeight - fLowerRightCR->GetHeight());
 
  228       fLeftVR->MoveResize(0, fUpperLeftCR->GetHeight(), fLeftVR->GetWidth(),
 
  229                           fHeight - fUpperLeftCR->GetHeight() -
 
  230                           fLowerLeftCR->GetHeight());
 
  231       fUpperHR->MoveResize(fUpperLeftCR->GetWidth(), 0,
 
  232                            fWidth - fUpperRightCR->GetWidth() -
 
  233                            fUpperLeftCR->GetWidth(), fUpperHR->GetHeight());
 
  234       fRightVR->MoveResize(fWidth - fRightVR->GetWidth(),
 
  235                            fUpperRightCR->GetHeight(), fRightVR->GetWidth(),
 
  236                            fHeight - fUpperLeftCR->GetHeight() -
 
  237                            fLowerLeftCR->GetHeight());
 
  238       fLowerHR->MoveResize(fLowerLeftCR->GetWidth(), fHeight -
 
  239                            fLowerHR->GetHeight(),
 
  240                            fWidth - fLowerRightCR->GetWidth() -
 
  241                            fLowerLeftCR->GetWidth(), fLowerHR->GetHeight());
 
  248 void TGMdiDecorFrame::SetWindowName(
const char *name)
 
  250    fTitlebar->GetWinName()->SetText(
new TGString(name));
 
  257 void TGMdiDecorFrame::SetWindowIcon(
const TGPicture *icon)
 
  259    fTitlebar->GetWinIcon()->SetPicture(icon);
 
  260    fClient->NeedRedraw(fTitlebar->GetWinIcon());
 
  266 void TGMdiDecorFrame::Move(Int_t x, Int_t y)
 
  269       fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
 
  272       fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
 
  274    TGCompositeFrame::Move(x, y);
 
  275    if (IsMinimized()) fMinimizedUserPlacement = kTRUE;
 
  276    if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
 
  282 void TGMdiDecorFrame::MoveResize(Int_t x, Int_t y, UInt_t w, UInt_t h)
 
  285       fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
 
  288       fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
 
  290    TGCompositeFrame::MoveResize(x, y, w, h);
 
  291    if (IsMinimized()) fMinimizedUserPlacement = kTRUE;
 
  292    if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
 
  298 Bool_t TGMdiDecorFrame::HandleConfigureNotify(Event_t *event)
 
  300    if ((event->fX < 0) || (event->fY < 0) ||
 
  301        (event->fX + event->fWidth > fMdiMainFrame->GetViewPort()->GetWidth()) ||
 
  302        (event->fY + event->fHeight > fMdiMainFrame->GetViewPort()->GetHeight())) {
 
  303       fMdiMainFrame->Resize();
 
  306    if (event->fWindow == fFrame->GetId()) {
 
  307       UInt_t newW = 
event->fWidth + 2 * fBorderWidth;
 
  308       UInt_t newH = 
event->fHeight + 2 * fBorderWidth +
 
  309                     fTitlebar->GetDefaultHeight();
 
  311       if ((fWidth != newW) || (fHeight != newH)) {
 
  314       fMdiMainFrame->Layout();
 
  317    fMdiMainFrame->Layout();
 
  324 Bool_t TGMdiDecorFrame::HandleButton(Event_t *event)
 
  326    if (event->fType == kButtonPress) {
 
  328       fTitlebar->GetWinIcon()->GetPopup()->EndMenu(ud);
 
  329       SendMessage(fMdiMainFrame, MK_MSG(kC_MDI, kMDI_CURRENT), fId, 0);
 
  341 TGMdiTitleBar::TGMdiTitleBar(
const TGWindow *p, 
const TGWindow *mdiwin,
 
  343    TGCompositeFrame(p, 10, 10, kOwnBackground | kHorizontalFrame)
 
  346    fEditDisabled = kTRUE;
 
  348    fMidButPressed = fLeftButPressed = fRightButPressed = kFALSE;
 
  350    AddInput(kButtonPressMask | kButtonReleaseMask | kButtonMotionMask);
 
  352    fLHint = 
new TGLayoutHints(kLHintsNormal);
 
  353    fLeftHint = 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 1, 1, 1);
 
  355    fMiddleHint = 
new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 1, 1, 1, 1);
 
  356    fRightHint = 
new TGLayoutHints(kLHintsRight | kLHintsCenterY, 1, 2, 1, 1);
 
  358    fLFrame = 
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
 
  359    fMFrame = 
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
 
  360    fRFrame = 
new TGCompositeFrame(
this, 10, 10, kHorizontalFrame);
 
  361    AddFrame(fLFrame, fLeftHint);
 
  362    AddFrame(fMFrame, fMiddleHint);
 
  363    AddFrame(fRFrame, fRightHint);
 
  365    fWinIcon = 
new TGMdiTitleIcon(fLFrame, 
this,
 
  366                  fClient->GetPicture(
"mdi_default.xpm"),
 
  368    fLFrame->AddFrame(fWinIcon, fLHint);
 
  370    fWinName = 
new TGLabel(fMFrame, 
new TGString(name));
 
  371    fWinName->SetTextJustify(kTextLeft);
 
  372    fMFrame->AddFrame(fWinName, fLHint);
 
  374    fButtons = 
new TGMdiButtons(fRFrame, 
this);
 
  375    fRFrame->AddFrame(fButtons, fLHint);
 
  386 TGMdiTitleBar::~TGMdiTitleBar()
 
  388    if (!MustCleanup()) {
 
  399 void TGMdiTitleBar::LayoutButtons(UInt_t buttonmask,Bool_t isMinimized,
 
  402    fWinIcon->GetPopup()->EnableEntry(kMdiMove);
 
  404    if (buttonmask & kMdiSize) {
 
  405       fWinIcon->GetPopup()->EnableEntry(kMdiSize);
 
  407       fWinIcon->GetPopup()->DisableEntry(kMdiSize);
 
  410    if (buttonmask & kMdiMenu) {
 
  411       fLFrame->ShowFrame(fWinIcon);
 
  413       fLFrame->HideFrame(fWinIcon);
 
  416    if (buttonmask & kMdiClose) {
 
  417       fButtons->ShowFrame(fButtons->GetButton(4));
 
  418       fWinIcon->GetPopup()->EnableEntry(kMdiClose);
 
  420       fButtons->HideFrame(fButtons->GetButton(4));
 
  421       fWinIcon->GetPopup()->DisableEntry(kMdiClose);
 
  424    if (buttonmask & kMdiHelp) {
 
  425       fButtons->ShowFrame(fButtons->GetButton(3));
 
  427       fButtons->HideFrame(fButtons->GetButton(3));
 
  430    if ((buttonmask & kMdiMaximize) && (!isMaximized)) {
 
  431       fButtons->ShowFrame(fButtons->GetButton(2));
 
  432       fWinIcon->GetPopup()->EnableEntry(kMdiMaximize);
 
  434       fButtons->HideFrame(fButtons->GetButton(2));
 
  435       fWinIcon->GetPopup()->DisableEntry(kMdiMaximize);
 
  438    if (isMinimized | isMaximized) {
 
  439       fButtons->ShowFrame(fButtons->GetButton(1));
 
  440       fWinIcon->GetPopup()->EnableEntry(kMdiRestore);
 
  441       fWinIcon->GetPopup()->DisableEntry(kMdiSize);
 
  442       if (isMaximized) fWinIcon->GetPopup()->DisableEntry(kMdiMove);
 
  444       fButtons->HideFrame(fButtons->GetButton(1));
 
  445       fWinIcon->GetPopup()->DisableEntry(kMdiRestore);
 
  448    if ((buttonmask & kMdiMinimize) && (!isMinimized)) {
 
  449       fButtons->ShowFrame(fButtons->GetButton(0));
 
  450       fWinIcon->GetPopup()->EnableEntry(kMdiMinimize);
 
  452       fButtons->HideFrame(fButtons->GetButton(0));
 
  453       fWinIcon->GetPopup()->DisableEntry(kMdiMinimize);
 
  462 void TGMdiTitleBar::SetTitleBarColors(UInt_t fore, UInt_t back, TGFont *font)
 
  464    SetBackgroundColor(back);
 
  466    fClient->GetFont(font->GetName());
 
  467    fWinName->SetTextFont(font);
 
  468    fWinName->SetTextColor(fore, kFALSE);
 
  469    fMFrame->SetBackgroundColor(back);
 
  470    fWinName->SetBackgroundColor(back);
 
  471    fWinIcon->SetBackgroundColor(back);
 
  472    fButtons->SetBackgroundColor(back);
 
  474    fClient->NeedRedraw(
this);
 
  475    fClient->NeedRedraw(fWinName);
 
  476    fClient->NeedRedraw(fMFrame);
 
  477    fClient->NeedRedraw(fButtons);
 
  478    fClient->NeedRedraw(fWinIcon);
 
  479    fWinIcon->DoRedraw();
 
  485 Bool_t TGMdiTitleBar::HandleDoubleClick(Event_t *event)
 
  487    if ((event->fType == kButtonPress) && (event->fCode == kButton1)) {
 
  488       SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_MAXIMIZE), fParent->GetId(), 0);
 
  496 Bool_t TGMdiTitleBar::HandleButton(Event_t *event)
 
  498    if (event->fType == kButtonPress) {
 
  500       GetWinIcon()->GetPopup()->EndMenu(ud);
 
  501       gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kMove));
 
  502       switch (event->fCode) {
 
  506             fLeftButPressed = kTRUE;
 
  507             SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_CURRENT), fParent->GetId(), 0);
 
  511             fMidButPressed = kTRUE;
 
  515             gVirtualX->LowerWindow(fParent->GetId());
 
  516             fRightButPressed = kTRUE;
 
  520       gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
 
  521       gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kPointer));
 
  522       switch (event->fCode) {
 
  526             fLeftButPressed = kFALSE;
 
  530             fMidButPressed = kFALSE;
 
  534             fRightButPressed = kFALSE;
 
  538       TGFrame *f = GetFrameFromPoint(event->fX, event->fY);
 
  539       if (f && (f != 
this)) {
 
  540          TranslateCoordinates(f, event->fX, event->fY, event->fX, event->fY);
 
  541          f->HandleButton(event);
 
  550 Bool_t TGMdiTitleBar::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
 
  552    switch (GET_MSG(msg)) {
 
  554          switch (GET_SUBMSG(msg)) {
 
  557                SendMessage(fMdiWin, MK_MSG(kC_MDI, (EWidgetMessageTypes)parm1),
 
  558                            fParent->GetId(), parm2);
 
  569 Bool_t TGMdiTitleBar::HandleMotion(Event_t *event)
 
  571    if (event->fWindow != fId) 
return kTRUE;
 
  572    if (!fLeftButPressed) 
return kTRUE;
 
  574    Int_t x = ((TGFrame *)fParent)->GetX();
 
  575    Int_t y = ((TGFrame *)fParent)->GetY();
 
  576    ((TGFrame *)fParent)->Move(x + event->fX - fX0, y + event->fY - fY0);
 
  585 void TGMdiTitleBar::AddFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
 
  587    icon->ReparentWindow(fLFrame);
 
  588    buttons->ReparentWindow(fRFrame);
 
  589    fLFrame->AddFrame(icon, fLHint);
 
  590    fLFrame->ShowFrame(icon);
 
  591    fRFrame->AddFrame(buttons, fLHint);
 
  592    fRFrame->ShowFrame(buttons);
 
  599 void TGMdiTitleBar::RemoveFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
 
  601    fLFrame->RemoveFrame(icon);
 
  602    fRFrame->RemoveFrame(buttons);
 
  611 TGMdiButtons::TGMdiButtons(
const TGWindow *p, 
const TGWindow *titlebar) :
 
  612    TGCompositeFrame(p, 10, 10, kHorizontalFrame)
 
  614    fDefaultHint = 
new TGLayoutHints(kLHintsNormal, 0, 0, 1, 0);
 
  615    fCloseHint = 
new TGLayoutHints(kLHintsNormal, 2, 0, 1, 0);
 
  616    fEditDisabled = kTRUE;
 
  621    fButton[0] = 
new TGPictureButton(
this,
 
  622                      fClient->GetPicture(
"mdi_minimize.xpm"),
 
  624    fButton[0]->SetToolTipText(
"Minimize");
 
  625    AddFrame(fButton[0], fDefaultHint);
 
  626    fButton[0]->SetBackgroundColor(GetDefaultFrameBackground());
 
  627    fButton[0]->Associate(titlebar);
 
  631    fButton[1] = 
new TGPictureButton(
this,
 
  632                      fClient->GetPicture(
"mdi_restore.xpm"),
 
  634    fButton[1]->SetToolTipText(
"Restore");
 
  635    AddFrame(fButton[1], fDefaultHint);
 
  636    fButton[1]->SetBackgroundColor(GetDefaultFrameBackground());
 
  637    fButton[1]->Associate(titlebar);
 
  641    fButton[2] = 
new TGPictureButton(
this,
 
  642                      fClient->GetPicture(
"mdi_maximize.xpm"),
 
  644    fButton[2]->SetToolTipText(
"Maximize");
 
  645    AddFrame(fButton[2], fDefaultHint);
 
  646    fButton[2]->SetBackgroundColor(GetDefaultFrameBackground());
 
  647    fButton[2]->Associate(titlebar);
 
  651    fButton[3] = 
new TGPictureButton(
this,
 
  652                      fClient->GetPicture(
"mdi_help.xpm"),
 
  654    fButton[3]->SetToolTipText(
"Help");
 
  655    AddFrame(fButton[3], fDefaultHint);
 
  656    fButton[3]->SetBackgroundColor(GetDefaultFrameBackground());
 
  657    fButton[3]->Associate(titlebar);
 
  661    fButton[4] = 
new TGPictureButton(
this,
 
  662                      fClient->GetPicture(
"mdi_close.xpm"),
 
  664    fButton[4]->SetToolTipText(
"Close");
 
  665    AddFrame(fButton[4], fCloseHint);
 
  666    fButton[4]->SetBackgroundColor(GetDefaultFrameBackground());
 
  667    fButton[4]->Associate(titlebar);
 
  674 TGMdiButtons::~TGMdiButtons()
 
  676    if (!MustCleanup()) {
 
  688 TGMdiTitleIcon::TGMdiTitleIcon(
const TGWindow *p, 
const TGWindow *titlebar,
 
  689                                const TGPicture *pic, Int_t w, Int_t h) :
 
  692    fMsgWindow = titlebar;
 
  693    fEditDisabled = kTRUE;
 
  697    fPopup = 
new TGPopupMenu(fClient->GetDefaultRoot());
 
  698    fPopup->AddEntry(
new TGHotString(
"&Restore"), kMdiRestore);
 
  699    fPopup->AddEntry(
new TGHotString(
"&Move"), kMdiMove);
 
  700    fPopup->AddEntry(
new TGHotString(
"&Size"), kMdiSize);
 
  701    fPopup->AddEntry(
new TGHotString(
"Mi&nimize"), kMdiMinimize);
 
  702    fPopup->AddEntry(
new TGHotString(
"Ma&ximize"), kMdiMaximize);
 
  703    fPopup->AddSeparator();
 
  704    fPopup->AddEntry(
new TGHotString(
"&Close  Ctrl+F4"), kMdiClose);
 
  705    fPopup->DisableEntry(kMdiRestore);
 
  706    fPopup->Associate(titlebar);
 
  708    AddInput(kButtonPressMask | kButtonReleaseMask);
 
  715 TGMdiTitleIcon::~TGMdiTitleIcon()
 
  723 void TGMdiTitleIcon::DoRedraw()
 
  725    gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
 
  732 Bool_t TGMdiTitleIcon::HandleDoubleClick(Event_t *event)
 
  734    if (event->fCode == kButton1) {
 
  737       gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
 
  738       SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), kMDI_CLOSE, 0);
 
  746 Bool_t TGMdiTitleIcon::HandleButton(Event_t *event)
 
  748    SendMessage(fMsgWindow, MK_MSG(kC_COMMAND, kCM_MENU), kMDI_CURRENT, 0);
 
  750    if (event->fType == kButtonPress) {
 
  751       fPopup->PlaceMenu(event->fXRoot - event->fX,
 
  752                         event->fYRoot + (fHeight - event->fY),
 
  766 TGMdiWinResizer::TGMdiWinResizer(
const TGWindow *p, 
const TGWindow *mdiwin,
 
  767                    Int_t pos, 
const TGGC *boxgc, Int_t linew,
 
  768                    Int_t mdioptions, Int_t w, Int_t h, UInt_t options) :
 
  769    TGFrame(p, w, h, options)
 
  771    fWinX = fWinY = fWinW = fWinH = fOldX = fOldY = fOldW = fOldH = 0;
 
  772    fNewX = fNewY = fNewW = fNewH = fX0 = fY0 = 0;
 
  774    fWidgetFlags = kWidgetIsEnabled;
 
  777    fMdiOptions = mdioptions;
 
  786    fMidButPressed = fLeftButPressed = fRightButPressed = kFALSE;
 
  788    gVirtualX->GrabButton(fId, kButton1, kAnyModifier,
 
  789                          kButtonPressMask | kButtonReleaseMask | kButtonMotionMask,
 
  797 Bool_t TGMdiWinResizer::HandleButton(Event_t *event)
 
  799    if (!IsEnabled()) 
return kTRUE;
 
  801    if (event->fType == kButtonPress) {
 
  803       ((TGMdiDecorFrame *)fParent)->GetTitleBar()->GetWinIcon()->GetPopup()->EndMenu(ud);
 
  804       switch (event->fCode) {
 
  806             SendMessage(fMdiWin, MK_MSG(kC_MDI, kMDI_CURRENT), fParent->GetId(), 0);
 
  807             fNewX = fOldX = fWinX = ((TGFrame *)fParent)->GetX();
 
  808             fNewY = fOldY = fWinY = ((TGFrame *)fParent)->GetY();
 
  809             fWinW = ((TGFrame *)fParent)->GetWidth();
 
  810             fWinH = ((TGFrame *)fParent)->GetHeight();
 
  815             if (fMdiOptions != kMdiOpaque) {
 
  816                DrawBox(fNewX, fNewY, fNewW, fNewH);
 
  818             fLeftButPressed = kTRUE;
 
  819             gVirtualX->GrabPointer(fId, kButtonReleaseMask | kPointerMotionMask,
 
  820                                    kNone, kNone, kTRUE, kFALSE);
 
  824             fMidButPressed = kTRUE;
 
  828             fRightButPressed = kTRUE;
 
  832       gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
 
  833       switch (event->fCode) {
 
  835             if (fMdiOptions != kMdiOpaque) {
 
  836                DrawBox(fNewX, fNewY, fNewW, fNewH);
 
  837                ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
 
  840             fLeftButPressed = kFALSE;
 
  844             fMidButPressed = kFALSE;
 
  848             fRightButPressed = kFALSE;
 
  858 void TGMdiWinResizer::DrawBox(Int_t x, Int_t y, UInt_t width, UInt_t height)
 
  860    TGMdiMainFrame *m = (TGMdiMainFrame *) fMdiWin;
 
  862    gVirtualX->DrawRectangle(m->GetContainer()->GetId(), fBoxGC->GetGC(),
 
  863        x + fLineW / 2, y + fLineW / 2, width - fLineW, height - fLineW);
 
  869 void TGMdiWinResizer::MoveResizeIt()
 
  871    if (fMdiOptions == kMdiOpaque) {
 
  872       ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
 
  874       DrawBox(fOldX, fOldY, fOldW, fOldH);
 
  875       DrawBox(fNewX, fNewY, fNewW, fNewH);
 
  883 TGMdiVerticalWinResizer::TGMdiVerticalWinResizer(
const TGWindow *p,
 
  884              const TGWindow *mdiwin, Int_t pos, 
const TGGC *boxGC, Int_t linew,
 
  885              Int_t mdioptions, Int_t w, Int_t h) :
 
  886    TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
 
  887                    w, h, kFixedHeight | kOwnBackground)
 
  889    gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowVer));
 
  895 Bool_t TGMdiVerticalWinResizer::HandleMotion(Event_t *event)
 
  897    if (((TGMdiDecorFrame *)fParent)->IsMinimized()) 
return kTRUE;
 
  904    Int_t dy = 
event->fYRoot - fY0;
 
  906    if (!fLeftButPressed) 
return kTRUE;
 
  910          if (fWinH - dy < fMinH) dy = fWinH - fMinH;
 
  915       case kMdiResizerBottom:
 
  916          if (fWinH + dy < fMinH) dy = fMinH - fWinH;
 
  930 void TGMdiVerticalWinResizer::DrawBorder()
 
  932    gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
 
  933    if (fPos == kMdiResizerTop) {
 
  934       gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 1, fWidth - 1, 1);
 
  936       gVirtualX->DrawLine(fId, GetShadowGC()(), 0, fHeight - 2, fWidth - 1,
 
  938       gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1, fWidth - 1,
 
  947 TGMdiCornerWinResizer::TGMdiCornerWinResizer(
const TGWindow *p,
 
  948            const TGWindow *mdiwin, Int_t pos, 
const TGGC *boxGC, Int_t linew,
 
  949            Int_t mdioptions, Int_t w, Int_t h) :
 
  950    TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
 
  951                    w, h, kFixedSize | kOwnBackground)
 
  953    Cursor_t defaultCursor = kNone;
 
  954    fEditDisabled = kTRUE;
 
  957       case (kMdiResizerTop | kMdiResizerLeft):
 
  958          defaultCursor = gVirtualX->CreateCursor(kTopLeft);
 
  961       case (kMdiResizerBottom | kMdiResizerLeft):
 
  962          defaultCursor = gVirtualX->CreateCursor(kBottomLeft);
 
  965       case (kMdiResizerTop | kMdiResizerRight):
 
  966          defaultCursor = gVirtualX->CreateCursor(kTopRight);
 
  969       case (kMdiResizerBottom | kMdiResizerRight):
 
  970          defaultCursor = gVirtualX->CreateCursor(kBottomRight);
 
  973    gVirtualX->SetCursor(fId, defaultCursor);
 
  979 Bool_t TGMdiCornerWinResizer::HandleMotion(Event_t *event)
 
  981    if (((TGMdiDecorFrame *)fParent)->IsMinimized()) 
return kTRUE;
 
  988    Int_t dx = 
event->fXRoot - fX0;
 
  989    Int_t dy = 
event->fYRoot - fY0;
 
  991    if (!fLeftButPressed) 
return kTRUE;
 
  994       case (kMdiResizerTop | kMdiResizerLeft):
 
  995          if (fWinW - dx < fMinW) dx = fWinW - fMinW;
 
  996          if (fWinH - dy < fMinH) dy = fWinH - fMinH;
 
 1003       case (kMdiResizerBottom | kMdiResizerLeft):
 
 1004          if (fWinW - dx < fMinW) dx = fWinW - fMinW;
 
 1005          if (fWinH + dy < fMinH) dy = fMinH - fWinH;
 
 1012       case (kMdiResizerTop | kMdiResizerRight):
 
 1013          if (fWinW + dx < fMinW) dx = fMinW - fWinW;
 
 1014          if (fWinH - dy < fMinH) dy = fWinH - fMinH;
 
 1021       case (kMdiResizerBottom | kMdiResizerRight):
 
 1022          if (fWinW + dx < fMinW) dx = fMinW - fWinW;
 
 1023          if (fWinH + dy < fMinH) dy = fMinH - fWinH;
 
 1039 void TGMdiCornerWinResizer::DrawBorder()
 
 1041    gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
 
 1044       case (kMdiResizerTop | kMdiResizerLeft):
 
 1045          gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, fWidth - 1, 1);
 
 1046          gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, 1, fHeight - 1);
 
 1049       case (kMdiResizerBottom | kMdiResizerLeft):
 
 1050          gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 0, 1, fHeight - 1);
 
 1051          gVirtualX->DrawLine(fId, GetShadowGC()(), 1, fHeight - 2,
 
 1052              fWidth - 1, fHeight - 2);
 
 1053          gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1,
 
 1054              fWidth - 1, fHeight - 1);
 
 1057       case (kMdiResizerTop | kMdiResizerRight):
 
 1058          gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 1, fWidth - 1, 1);
 
 1059          gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 1,
 
 1060              fWidth - 2, fHeight - 1);
 
 1061          gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0,
 
 1062              fWidth - 1, fHeight - 1);
 
 1065       case (kMdiResizerBottom | kMdiResizerRight):
 
 1066          gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 0,
 
 1067              fWidth - 2, fHeight - 2);
 
 1068          gVirtualX->DrawLine(fId, GetShadowGC()(), 0, fHeight - 2,
 
 1069              fWidth - 1, fHeight - 2);
 
 1070          gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0,
 
 1071              fWidth - 1, fHeight - 1);
 
 1072          gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1,
 
 1073              fWidth - 1, fHeight - 1);
 
 1082 TGMdiHorizontalWinResizer::TGMdiHorizontalWinResizer(
const TGWindow *p,
 
 1083                const TGWindow *mdiwin, Int_t pos, 
const TGGC *boxGC, Int_t linew,
 
 1084                Int_t mdioptions, Int_t w, Int_t h) :
 
 1085    TGMdiWinResizer(p, mdiwin, pos, boxGC, linew, mdioptions,
 
 1086                    w, h, kFixedWidth | kOwnBackground)
 
 1088    fEditDisabled = kTRUE;
 
 1089    gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowHor));
 
 1096 Bool_t TGMdiHorizontalWinResizer::HandleMotion(Event_t *event)
 
 1098    if (((TGMdiDecorFrame *)fParent)->IsMinimized()) 
return kTRUE;
 
 1105    Int_t dx = 
event->fXRoot - fX0;
 
 1107    if (!fLeftButPressed) 
return kTRUE;
 
 1110       case (kMdiResizerLeft):
 
 1111          if (fWinW - dx < fMinW) dx = fWinW - fMinW;
 
 1116       case (kMdiResizerRight):
 
 1117          if (fWinW + dx < fMinW) dx = fMinW - fWinW;
 
 1131 void TGMdiHorizontalWinResizer::DrawBorder()
 
 1133    gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
 
 1134    if (fPos == kMdiResizerLeft) {
 
 1135       gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 0, 1, fHeight - 1);
 
 1137       gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 0, fWidth - 2, fHeight - 1);
 
 1138       gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0, fWidth - 1, fHeight - 1);