Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGMdiDecorFrame.cxx
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Bertrand Bellenot 20/08/2004
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12/**************************************************************************
13
14 This file is part of TGMdi an extension to the xclass toolkit.
15 Copyright (C) 1998-2002 by Harald Radke, Hector Peraza.
16
17 This application is free software; you can redistribute it and/or
18 modify it under the terms of the GNU Library General Public
19 License as published by the Free Software Foundation; either
20 version 2 of the License, or (at your option) any later version.
21
22 This application is distributed in the hope that it will be useful,
23 but WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 Library General Public License for more details.
26
27 You should have received a copy of the GNU Library General Public
28 License along with this library; if not, write to the Free
29 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30
31**************************************************************************/
32
33
34/** \class TGMdiDecorFrame
35 \ingroup guiwidgets
36
37This file contains all different MDI frame decoration classes.
38
39*/
40
41
42#include <cstdio>
43#include <cstdlib>
44
45#include "KeySymbols.h"
46#include "TGResourcePool.h"
47#include "TGDimension.h"
48#include "WidgetMessageTypes.h"
49#include "TGMdiFrame.h"
50#include "TGMdiDecorFrame.h"
51#include "TGMdiMainFrame.h"
52#include "TVirtualX.h"
53
54
63
64////////////////////////////////////////////////////////////////////////////////
65/// TGMdiDecorFrame constructor.
66/// The TGMdiDecorFrame is the frame containing MDI decorations like
67/// title bar, minimize, maximize, restore and close buttons, and resizers.
68
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)
74{
75
77 fEditDisabled = 1;
78 fFrame = frame;
84
86
88
91
93 fTitlebar->LayoutButtons(fButtonMask, kFALSE, kFALSE);
94
96 boxGC, kMdiBorderWidth);
98 boxGC, kMdiBorderWidth);
100 boxGC, kMdiBorderWidth);
102 boxGC, kMdiBorderWidth);
103
106 boxGC, kMdiBorderWidth);
109 boxGC, kMdiBorderWidth);
112 boxGC, kMdiBorderWidth);
115 boxGC, kMdiBorderWidth);
116
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);
125
127
128 fFrame->ReparentWindow(this, fBorderWidth, fTitlebar->GetDefaultHeight());
129 fFrame->fParent = this;
131
134 Layout();
135
136 MapWindow();
138
139 fFrame->RaiseWindow();
140 fTitlebar->RaiseWindow();
141}
142
143////////////////////////////////////////////////////////////////////////////////
144/// TGMdiDecorFrame destructor.
145
147{
148 if (!MustCleanup()) {
149 delete fUpperHR;
150 delete fLowerHR;
151 delete fLeftVR;
152 delete fRightVR;
153 delete fUpperLeftCR;
154 delete fLowerLeftCR;
155 delete fUpperRightCR;
156 delete fLowerRightCR;
157 }
159}
160
161////////////////////////////////////////////////////////////////////////////////
162/// Set border width of the decor.
163
168
169////////////////////////////////////////////////////////////////////////////////
170/// Set-up MDI buttons.
171
173{
174 fButtonMask = buttons;
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);
185 } else {
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);
194 }
195}
196
197////////////////////////////////////////////////////////////////////////////////
198/// Set resize mode (opaque or transparent)
199
201{
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);
210}
211
212////////////////////////////////////////////////////////////////////////////////
213/// Recalculates the postion and the size of all decor frame components.
214
216{
220
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());
227
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());
242 }
243}
244
245////////////////////////////////////////////////////////////////////////////////
246/// Set MDI Window name (appearing in the title bar)
247
249{
250 fTitlebar->GetWinName()->SetText(new TGString(name));
251 fTitlebar->Layout();
252}
253
254////////////////////////////////////////////////////////////////////////////////
255/// Set Window icon (appearing in the title bar)
256
258{
259 fTitlebar->GetWinIcon()->SetPicture(icon);
260 fClient->NeedRedraw(fTitlebar->GetWinIcon());
261}
262
263////////////////////////////////////////////////////////////////////////////////
264/// Move the MDI window at position x, y.
265
267{
268 if (x < 0) {
269 fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
270 }
271 if (y < 0) {
272 fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
273 }
276 if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
277}
278
279////////////////////////////////////////////////////////////////////////////////
280/// Move the MDI window at position x, y and set size to w, h.
281
283{
284 if (x < 0) {
285 fMdiMainFrame->SetHsbPosition(fMdiMainFrame->GetViewPort()->GetWidth());
286 }
287 if (y < 0) {
288 fMdiMainFrame->SetVsbPosition(fMdiMainFrame->GetViewPort()->GetHeight());
289 }
292 if (IsMapped() && !IsMaximized()) fMdiMainFrame->Layout();
293}
294
295////////////////////////////////////////////////////////////////////////////////
296/// Handle configure notify event.
297
299{
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();
304 }
305
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();
310
311 if ((fWidth != newW) || (fHeight != newH)) {
312 Resize(newW, newH);
313 }
314 fMdiMainFrame->Layout();
315 return kTRUE;
316 }
317 fMdiMainFrame->Layout();
318 return kFALSE;
319}
320
321////////////////////////////////////////////////////////////////////////////////
322/// Handle mouse button events.
323
325{
326 if (event->fType == kButtonPress) {
327 void *ud;
328 fTitlebar->GetWinIcon()->GetPopup()->EndMenu(ud);
330 }
331 return kTRUE;
332}
333
334
335////////////////////////////////////////////////////////////////////////////////
336/// TGMdiTitleBar constructor.
337/// the TGMdiTitleBar is the frame containing a title (window name)
338/// an icon and MDI picture buttons as minimize, maximize, restore,
339/// close and help.
340
342 const char *name) :
344{
345 fMdiWin = mdiwin;
347 fWinName = 0;
349
351
354 //fMiddleHint = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 1, 1, 1);
357
358 fLFrame = new TGCompositeFrame(this, 10, 10, kHorizontalFrame);
359 fMFrame = new TGCompositeFrame(this, 10, 10, kHorizontalFrame);
360 fRFrame = new TGCompositeFrame(this, 10, 10, kHorizontalFrame);
364
365 fWinIcon = new TGMdiTitleIcon(fLFrame, this,
366 fClient->GetPicture("mdi_default.xpm"),
367 16, 16);
368 fLFrame->AddFrame(fWinIcon, fLHint);
369
370 fWinName = new TGLabel(fMFrame, new TGString(name));
371 fWinName->SetTextJustify(kTextLeft);
372 fMFrame->AddFrame(fWinName, fLHint);
373
374 fButtons = new TGMdiButtons(fRFrame, this);
375 fRFrame->AddFrame(fButtons, fLHint);
376
377 MapWindow();
379 Layout();
381}
382
383////////////////////////////////////////////////////////////////////////////////
384/// TGMdiTitleBar destructor.
385
387{
388 if (!MustCleanup()) {
389 delete fLHint;
390 delete fLeftHint;
391 delete fMiddleHint;
392 delete fRightHint;
393 }
394}
395
396////////////////////////////////////////////////////////////////////////////////
397/// Recalculates the position of every enabled (displayed) buttons.
398
399void TGMdiTitleBar::LayoutButtons(UInt_t buttonmask,Bool_t isMinimized,
400 Bool_t isMaximized)
401{
402 fWinIcon->GetPopup()->EnableEntry(kMdiMove);
403
404 if (buttonmask & kMdiSize) {
405 fWinIcon->GetPopup()->EnableEntry(kMdiSize);
406 } else {
407 fWinIcon->GetPopup()->DisableEntry(kMdiSize);
408 }
409
410 if (buttonmask & kMdiMenu) {
411 fLFrame->ShowFrame(fWinIcon);
412 } else {
413 fLFrame->HideFrame(fWinIcon);
414 }
415
416 if (buttonmask & kMdiClose) {
417 fButtons->ShowFrame(fButtons->GetButton(4));
418 fWinIcon->GetPopup()->EnableEntry(kMdiClose);
419 } else {
420 fButtons->HideFrame(fButtons->GetButton(4));
421 fWinIcon->GetPopup()->DisableEntry(kMdiClose);
422 }
423
424 if (buttonmask & kMdiHelp) {
425 fButtons->ShowFrame(fButtons->GetButton(3));
426 } else {
427 fButtons->HideFrame(fButtons->GetButton(3));
428 }
429
430 if ((buttonmask & kMdiMaximize) && (!isMaximized)) {
431 fButtons->ShowFrame(fButtons->GetButton(2));
432 fWinIcon->GetPopup()->EnableEntry(kMdiMaximize);
433 } else {
434 fButtons->HideFrame(fButtons->GetButton(2));
435 fWinIcon->GetPopup()->DisableEntry(kMdiMaximize);
436 }
437
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);
443 } else {
444 fButtons->HideFrame(fButtons->GetButton(1));
445 fWinIcon->GetPopup()->DisableEntry(kMdiRestore);
446 }
447
448 if ((buttonmask & kMdiMinimize) && (!isMinimized)) {
449 fButtons->ShowFrame(fButtons->GetButton(0));
450 fWinIcon->GetPopup()->EnableEntry(kMdiMinimize);
451 } else {
452 fButtons->HideFrame(fButtons->GetButton(0));
453 fWinIcon->GetPopup()->DisableEntry(kMdiMinimize);
454 }
455
456 Layout();
457}
458
459////////////////////////////////////////////////////////////////////////////////
460/// Set title bar color (blue or grey, depends on active state).
461
463{
464 SetBackgroundColor(back);
465
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);
473 Layout();
474 fClient->NeedRedraw(this);
475 fClient->NeedRedraw(fWinName);
476 fClient->NeedRedraw(fMFrame);
477 fClient->NeedRedraw(fButtons);
478 fClient->NeedRedraw(fWinIcon);
479 fWinIcon->DoRedraw();
480}
481
482////////////////////////////////////////////////////////////////////////////////
483/// Handle double click in title bar (maximize window)
484
486{
487 if ((event->fType == kButtonPress) && (event->fCode == kButton1)) {
489 }
490 return kTRUE;
491}
492
493////////////////////////////////////////////////////////////////////////////////
494/// Handle mouse click on title bar.
495
497{
498 if (event->fType == kButtonPress) {
499 void *ud;
500 GetWinIcon()->GetPopup()->EndMenu(ud);
501 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kMove));
502 switch (event->fCode) {
503 case kButton1:
504 fX0 = event->fX;
505 fY0 = event->fY;
508 break;
509
510 case kButton2:
512 break;
513
514 case kButton3:
515 gVirtualX->LowerWindow(fParent->GetId());
517 break;
518 }
519 } else {
520 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
521 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kPointer));
522 switch (event->fCode) {
523
524 case kButton1:
525 //if (!fClient->IsEditable()) ((TGMainFrame *)((TGMdiMainFrame *)fMdiWin)->GetMainFrame())->Layout();
527 break;
528
529 case kButton2:
531 break;
532
533 case kButton3:
535 break;
536 }
537
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);
542 }
543 }
544 return kTRUE;
545}
546
547////////////////////////////////////////////////////////////////////////////////
548/// Process messages for title bar.
549
551{
552 switch (GET_MSG(msg)) {
553 case kC_COMMAND:
554 switch (GET_SUBMSG(msg)) {
555 case kCM_BUTTON:
556 case kCM_MENU:
558 fParent->GetId(), parm2);
559 break;
560 }
561 break;
562 }
563 return kTRUE;
564}
565
566////////////////////////////////////////////////////////////////////////////////
567/// Handle mouse motion events in title bar (used to move MDI window).
568
570{
571 if (event->fWindow != fId) return kTRUE;
572 if (!fLeftButPressed) return kTRUE;
573
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);
577
578 return kTRUE;
579}
580
581
582////////////////////////////////////////////////////////////////////////////////
583/// This is called from TGMdiMainFrame on Restore().
584
586{
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);
593}
594
595
596////////////////////////////////////////////////////////////////////////////////
597/// This is called from TGMdiMainFrame on Maximize().
598
600{
601 fLFrame->RemoveFrame(icon);
602 fRFrame->RemoveFrame(buttons);
603}
604
605
606////////////////////////////////////////////////////////////////////////////////
607/// TGMdiButtons constructor.
608/// the TGMdiButtons is the frame containing MDI picture buttons like
609/// minimize, maximize, restore, close and help.
610
611TGMdiButtons::TGMdiButtons(const TGWindow *p, const TGWindow *titlebar) :
613{
614 fDefaultHint = new TGLayoutHints(kLHintsNormal, 0, 0, 1, 0);
615 fCloseHint = new TGLayoutHints(kLHintsNormal, 2, 0, 1, 0);
617 fMsgWindow = 0;
618
619 //--- Minimize button
620
621 fButton[0] = new TGPictureButton(this,
622 fClient->GetPicture("mdi_minimize.xpm"),
624 fButton[0]->SetToolTipText("Minimize");
626 fButton[0]->SetBackgroundColor(GetDefaultFrameBackground());
627 fButton[0]->Associate(titlebar);
628
629 //--- Restore button
630
631 fButton[1] = new TGPictureButton(this,
632 fClient->GetPicture("mdi_restore.xpm"),
634 fButton[1]->SetToolTipText("Restore");
636 fButton[1]->SetBackgroundColor(GetDefaultFrameBackground());
637 fButton[1]->Associate(titlebar);
638
639 //--- Maximize button
640
641 fButton[2] = new TGPictureButton(this,
642 fClient->GetPicture("mdi_maximize.xpm"),
644 fButton[2]->SetToolTipText("Maximize");
646 fButton[2]->SetBackgroundColor(GetDefaultFrameBackground());
647 fButton[2]->Associate(titlebar);
648
649 //--- Help button
650
651 fButton[3] = new TGPictureButton(this,
652 fClient->GetPicture("mdi_help.xpm"),
653 kMdiHelp);
654 fButton[3]->SetToolTipText("Help");
656 fButton[3]->SetBackgroundColor(GetDefaultFrameBackground());
657 fButton[3]->Associate(titlebar);
658
659 //--- Close button
660
661 fButton[4] = new TGPictureButton(this,
662 fClient->GetPicture("mdi_close.xpm"),
663 kMdiClose);
664 fButton[4]->SetToolTipText("Close");
666 fButton[4]->SetBackgroundColor(GetDefaultFrameBackground());
667 fButton[4]->Associate(titlebar);
669}
670
671////////////////////////////////////////////////////////////////////////////////
672/// TGMdiButtons destructor.
673
675{
676 if (!MustCleanup()) {
677 delete fDefaultHint;
678 delete fCloseHint;
679 }
680}
681
682////////////////////////////////////////////////////////////////////////////////
683/// TGMdiTitleIcon constructor.
684/// the TGMdiTitleIcon is the left icon used also for the MDI
685/// popup menu allowing access to MDI commands as : restore,
686/// move, size, minimize and close.
687
689 const TGPicture *pic, Int_t w, Int_t h) :
690 TGIcon(p, pic, w, h)
691{
692 fMsgWindow = titlebar;
694
695 //--- MDI system menu
696
697 fPopup = new TGPopupMenu(fClient->GetDefaultRoot());// fClient->GetRoot());
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);
707
710}
711
712////////////////////////////////////////////////////////////////////////////////
713/// TGMdiTitleIcon destructor.
714
719
720////////////////////////////////////////////////////////////////////////////////
721/// Redraw icon.
722
724{
725 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
727}
728
729////////////////////////////////////////////////////////////////////////////////
730/// Handle double click event on MDI icon (close the window)
731
733{
734 if (event->fCode == kButton1) {
735 void *ud;
736 fPopup->EndMenu(ud);
737 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
739 }
740 return kTRUE;
741}
742
743////////////////////////////////////////////////////////////////////////////////
744/// Handle button event on MDI icon (popup menu)
745
747{
749
750 if (event->fType == kButtonPress) {
751 fPopup->PlaceMenu(event->fXRoot - event->fX,
752 event->fYRoot + (fHeight - event->fY),
753 kTRUE, kTRUE);
754 }
755 return kTRUE;
756}
757
758
759////////////////////////////////////////////////////////////////////////////////
760/// TGMdiWinResizer constructor.
761/// The TGMdiWinResizer is a frame allowing to resize MDI window.
762/// Could be horizontal, vertical or corner resizer (see derived classes
763/// TGMdiVerticalWinResizer, TGMdiHorizontalWinResizer, and
764/// TGMdiCornerWinResizer).
765
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)
770{
771 fWinX = fWinY = fWinW = fWinH = fOldX = fOldY = fOldW = fOldH = 0;
772 fNewX = fNewY = fNewW = fNewH = fX0 = fY0 = 0;
773
775
776 fMdiWin = mdiwin;
777 fMdiOptions = mdioptions;
778 fPos = pos;
779
780 fBoxGC = boxgc;
781 fLineW = linew;
782
783 fMinW = 50;
784 fMinH = 20;
785
787
788 gVirtualX->GrabButton(fId, kButton1, kAnyModifier,
790 kNone, kNone);
792}
793
794////////////////////////////////////////////////////////////////////////////////
795/// Handle button events in resizer (grab button and resize).
796
798{
799 if (!IsEnabled()) return kTRUE;
800
801 if (event->fType == kButtonPress) {
802 void *ud;
803 ((TGMdiDecorFrame *)fParent)->GetTitleBar()->GetWinIcon()->GetPopup()->EndMenu(ud);
804 switch (event->fCode) {
805 case kButton1:
807 fNewX = fOldX = fWinX = ((TGFrame *)fParent)->GetX();
808 fNewY = fOldY = fWinY = ((TGFrame *)fParent)->GetY();
809 fWinW = ((TGFrame *)fParent)->GetWidth();
810 fWinH = ((TGFrame *)fParent)->GetHeight();
811 fX0 = event->fXRoot;
812 fY0 = event->fYRoot;
813 fNewW = fWinW;
814 fNewH = fWinH;
815 if (fMdiOptions != kMdiOpaque) {
817 }
821 break;
822
823 case kButton2:
825 break;
826
827 case kButton3:
829 break;
830 }
831 } else {
832 gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);
833 switch (event->fCode) {
834 case kButton1:
835 if (fMdiOptions != kMdiOpaque) {
837 ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
838 }
839 //if (!fClient->IsEditable()) ((TGMainFrame *)((TGMdiMainFrame *)fMdiWin)->GetMainFrame())->Layout();
841 break;
842
843 case kButton2:
845 break;
846
847 case kButton3:
849 break;
850 }
851 }
852 return kTRUE;
853}
854
855////////////////////////////////////////////////////////////////////////////////
856/// Draw resize box (rectangle).
857
859{
861
862 gVirtualX->DrawRectangle(m->GetContainer()->GetId(), fBoxGC->GetGC(),
863 x + fLineW / 2, y + fLineW / 2, width - fLineW, height - fLineW);
864}
865
866////////////////////////////////////////////////////////////////////////////////
867/// Move (resize) parent MDI window.
868
870{
871 if (fMdiOptions == kMdiOpaque) {
872 ((TGFrame *)fParent)->MoveResize(fNewX, fNewY, fNewW, fNewH);
873 } else {
876 }
877}
878
879
880////////////////////////////////////////////////////////////////////////////////
881/// TGMdiVerticalWinResizer constructor.
882
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,
888{
889 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowVer));
890}
891
892////////////////////////////////////////////////////////////////////////////////
893/// Handle motion events in resizer (resize associated MDI window).
894
896{
897 if (((TGMdiDecorFrame *)fParent)->IsMinimized()) return kTRUE;
898
899 fOldX = fNewX;
900 fOldY = fNewY;
901 fOldW = fNewW;
902 fOldH = fNewH;
903
904 Int_t dy = event->fYRoot - fY0;
905
906 if (!fLeftButPressed) return kTRUE;
907
908 switch (fPos) {
909 case kMdiResizerTop:
910 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
911 fNewY = fWinY + dy;
912 fNewH = fWinH - dy;
913 break;
914
916 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
917 fNewY = fWinY;
918 fNewH = fWinH + dy;
919 break;
920 }
921
922 MoveResizeIt();
923
924 return kTRUE;
925}
926
927////////////////////////////////////////////////////////////////////////////////
928/// Draw vertical resizer frame border.
929
931{
932 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
933 if (fPos == kMdiResizerTop) {
934 gVirtualX->DrawLine(fId, GetHilightGC()(), 0, 1, fWidth - 1, 1);
935 } else {
936 gVirtualX->DrawLine(fId, GetShadowGC()(), 0, fHeight - 2, fWidth - 1,
937 fHeight - 2);
938 gVirtualX->DrawLine(fId, GetBlackGC()(), 0, fHeight - 1, fWidth - 1,
939 fHeight - 1);
940 }
941}
942
943
944////////////////////////////////////////////////////////////////////////////////
945/// TGMdiCornerWinResizer constructor.
946
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,
952{
953 Cursor_t defaultCursor = kNone;
955
956 switch (fPos) {
958 defaultCursor = gVirtualX->CreateCursor(kTopLeft);
959 break;
960
962 defaultCursor = gVirtualX->CreateCursor(kBottomLeft);
963 break;
964
966 defaultCursor = gVirtualX->CreateCursor(kTopRight);
967 break;
968
970 defaultCursor = gVirtualX->CreateCursor(kBottomRight);
971 break;
972 }
973 gVirtualX->SetCursor(fId, defaultCursor);
974}
975
976////////////////////////////////////////////////////////////////////////////////
977/// Handle motion events in resizer (resize associated MDI window).
978
980{
981 if (((TGMdiDecorFrame *)fParent)->IsMinimized()) return kTRUE;
982
983 fOldX = fNewX;
984 fOldY = fNewY;
985 fOldW = fNewW;
986 fOldH = fNewH;
987
988 Int_t dx = event->fXRoot - fX0;
989 Int_t dy = event->fYRoot - fY0;
990
991 if (!fLeftButPressed) return kTRUE;
992
993 switch (fPos) {
995 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
996 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
997 fNewX = fWinX + dx;
998 fNewW = fWinW - dx;
999 fNewY = fWinY + dy;
1000 fNewH = fWinH - dy;
1001 break;
1002
1004 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
1005 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
1006 fNewX = fWinX + dx;
1007 fNewW = fWinW - dx;
1008 fNewY = fWinY;
1009 fNewH = fWinH + dy;
1010 break;
1011
1013 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1014 if (fWinH - dy < fMinH) dy = fWinH - fMinH;
1015 fNewX = fWinX;
1016 fNewW = fWinW + dx;
1017 fNewY = fWinY + dy;
1018 fNewH = fWinH - dy;
1019 break;
1020
1022 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1023 if (fWinH + dy < fMinH) dy = fMinH - fWinH;
1024 fNewX = fWinX;
1025 fNewW = fWinW + dx;
1026 fNewY = fWinY;
1027 fNewH = fWinH + dy;
1028 break;
1029 }
1030
1031 MoveResizeIt();
1032
1033 return kTRUE;
1034}
1035
1036////////////////////////////////////////////////////////////////////////////////
1037/// Draw corner resizer frame border.
1038
1040{
1041 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
1042
1043 switch (fPos) {
1045 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, fWidth - 1, 1);
1046 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 1, 1, fHeight - 1);
1047 break;
1048
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);
1055 break;
1056
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);
1063 break;
1064
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);
1074 break;
1075 }
1076}
1077
1078
1079////////////////////////////////////////////////////////////////////////////////
1080/// TGMdiHorizontalWinResizer constructor.
1081
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,
1087{
1089 gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kArrowHor));
1090 SetWindowName();
1091}
1092
1093////////////////////////////////////////////////////////////////////////////////
1094/// Handle motion events in resizer (resize associated MDI window).
1095
1097{
1098 if (((TGMdiDecorFrame *)fParent)->IsMinimized()) return kTRUE;
1099
1100 fOldX = fNewX;
1101 fOldY = fNewY;
1102 fOldW = fNewW;
1103 fOldH = fNewH;
1104
1105 Int_t dx = event->fXRoot - fX0;
1106
1107 if (!fLeftButPressed) return kTRUE;
1108
1109 switch (fPos) {
1110 case (kMdiResizerLeft):
1111 if (fWinW - dx < fMinW) dx = fWinW - fMinW;
1112 fNewX = fWinX + dx;
1113 fNewW = fWinW - dx;
1114 break;
1115
1116 case (kMdiResizerRight):
1117 if (fWinW + dx < fMinW) dx = fMinW - fWinW;
1118 fNewX = fWinX;
1119 fNewW = fWinW + dx;
1120 break;
1121 }
1122
1123 MoveResizeIt();
1124
1125 return kTRUE;
1126}
1127
1128////////////////////////////////////////////////////////////////////////////////
1129/// Draw horizontal resizer frame border.
1130
1132{
1133 gVirtualX->ClearArea(fId, 0, 0, fWidth, fHeight);
1134 if (fPos == kMdiResizerLeft) {
1135 gVirtualX->DrawLine(fId, GetHilightGC()(), 1, 0, 1, fHeight - 1);
1136 } else {
1137 gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth - 2, 0, fWidth - 2, fHeight - 1);
1138 gVirtualX->DrawLine(fId, GetBlackGC()(), fWidth - 1, 0, fWidth - 1, fHeight - 1);
1139 }
1140}
@ kButtonPress
Definition GuiTypes.h:60
@ kTopLeft
Definition GuiTypes.h:372
@ kBottomRight
Definition GuiTypes.h:372
@ kArrowVer
Definition GuiTypes.h:374
@ kMove
Definition GuiTypes.h:374
@ kTopRight
Definition GuiTypes.h:372
@ kBottomLeft
Definition GuiTypes.h:372
@ kArrowHor
Definition GuiTypes.h:374
@ kPointer
Definition GuiTypes.h:375
const Mask_t kButtonMotionMask
Definition GuiTypes.h:164
const Mask_t kButtonPressMask
Definition GuiTypes.h:161
const Mask_t kAnyModifier
Definition GuiTypes.h:210
const Mask_t kPointerMotionMask
Definition GuiTypes.h:163
@ kVerticalFrame
Definition GuiTypes.h:381
@ kFixedWidth
Definition GuiTypes.h:387
@ kHorizontalFrame
Definition GuiTypes.h:382
@ kFixedHeight
Definition GuiTypes.h:389
@ kFixedSize
Definition GuiTypes.h:390
@ kOwnBackground
Definition GuiTypes.h:391
Handle_t Cursor_t
Cursor handle.
Definition GuiTypes.h:34
const Handle_t kNone
Definition GuiTypes.h:88
const Mask_t kStructureNotifyMask
Definition GuiTypes.h:166
const Mask_t kButtonReleaseMask
Definition GuiTypes.h:162
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:40
@ kButton2
Definition GuiTypes.h:214
@ kButton3
Definition GuiTypes.h:214
@ kButton1
Definition GuiTypes.h:214
#define f(i)
Definition RSha256.hxx:104
#define h(i)
Definition RSha256.hxx:106
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
long Longptr_t
Definition RtypesCore.h:82
unsigned long ULong_t
Definition RtypesCore.h:55
unsigned int UInt_t
Definition RtypesCore.h:46
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
#define ClassImp(name)
Definition Rtypes.h:377
@ kDeepCleanup
Definition TGFrame.h:42
@ kLHintsRight
Definition TGLayout.h:26
@ kLHintsExpandY
Definition TGLayout.h:31
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsCenterY
Definition TGLayout.h:28
@ kLHintsNormal
Definition TGLayout.h:32
@ kLHintsExpandX
Definition TGLayout.h:30
@ kMdiResizerRight
@ kMdiResizerLeft
@ kMdiResizerBottom
@ kMdiResizerTop
@ kMdiOpaque
@ kMdiMinimize
@ kMdiMove
@ kMdiHelp
@ kMdiMenu
@ kMdiSize
@ kMdiRestore
@ kMdiMaximize
@ kMdiClose
@ kMdiDefaultHints
@ kTextLeft
Definition TGWidget.h:23
@ kWidgetIsEnabled
Definition TGWidget.h:37
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t TranslateCoordinates
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void w
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
char name[80]
Definition TGX11.cxx:110
#define gVirtualX
Definition TVirtualX.h:337
Int_t MK_MSG(EWidgetMessageTypes msg, EWidgetMessageTypes submsg)
Int_t GET_MSG(Long_t val)
EWidgetMessageTypes
WidgetMessageTypes.
@ kMDI_CLOSE
@ kCM_MENU
@ kC_COMMAND
@ kCM_BUTTON
@ kMDI_CURRENT
@ kMDI_MAXIMIZE
Int_t GET_SUBMSG(Long_t val)
int main(int argc, char *argv[])
Definition cef_main.cxx:54
TGDimension GetDefaultSize() const override
std::cout << fWidth << "x" << fHeight << std::endl;
Definition TGFrame.h:316
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1117
TGFrame * GetFrameFromPoint(Int_t x, Int_t y) override
Get frame located at specified point.
Definition TGFrame.cxx:1308
Int_t MustCleanup() const override
Definition TGFrame.h:360
void MapSubwindows() override
Map all sub windows that are part of the composite frame.
Definition TGFrame.cxx:1164
TGCompositeFrame(const TGCompositeFrame &)=delete
void Layout() override
Layout the elements of the composite frame.
Definition TGFrame.cxx:1257
void SetCleanup(Int_t mode=kLocalCleanup) override
Turn on automatic cleanup of child frames in dtor.
Definition TGFrame.cxx:1072
Encapsulate fonts used in the GUI system.
Definition TGFont.h:140
void AddInput(UInt_t emask)
Add events specified in the emask to the events the frame should handle.
Definition TGFrame.cxx:339
void MoveResize(Int_t x, Int_t y, UInt_t w=0, UInt_t h=0) override
Move and/or resize the frame.
Definition TGFrame.cxx:629
static const TGGC & GetBlackGC()
Get black graphics context.
Definition TGFrame.cxx:735
void Resize(UInt_t w=0, UInt_t h=0) override
Resize the frame.
Definition TGFrame.cxx:605
void RemoveInput(UInt_t emask)
Remove events specified in emask from the events the frame should handle.
Definition TGFrame.cxx:348
TGFrame(const TGFrame &)=delete
UInt_t fHeight
frame height
Definition TGFrame.h:88
void ReparentWindow(const TGWindow *p, Int_t x=0, Int_t y=0) override
Reparent window, make p the new parent and position the window at position (x,y) in new parent.
Definition TGFrame.h:202
Int_t fBorderWidth
frame border width
Definition TGFrame.h:93
void SetBackgroundColor(Pixel_t back) override
Set background color (override from TGWindow base class).
Definition TGFrame.cxx:312
void MapWindow() override
map window
Definition TGFrame.h:204
static const TGGC & GetHilightGC()
Get highlight color graphics context.
Definition TGFrame.cxx:755
static Pixel_t GetDefaultFrameBackground()
Get default frame background.
Definition TGFrame.cxx:683
void Move(Int_t x, Int_t y) override
Move frame.
Definition TGFrame.cxx:593
virtual void SendMessage(const TGWindow *w, Longptr_t msg, Longptr_t parm1, Longptr_t parm2)
Send message (i.e.
Definition TGFrame.cxx:645
static const TGGC & GetShadowGC()
Get shadow color graphics context.
Definition TGFrame.cxx:765
UInt_t fWidth
frame width
Definition TGFrame.h:87
Encapsulate a graphics context used in the low level graphics.
Definition TGGC.h:22
TGHotString is a string with a "hot" character underlined.
Definition TGString.h:42
void DoRedraw() override
Redraw picture.
Definition TGIcon.cxx:126
TGIcon(const TGIcon &)=delete
This class handles GUI labels.
Definition TGLabel.h:24
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
~TGMdiButtons() override
TGMdiButtons destructor.
TGPictureButton * fButton[5]
MDI picture buttons.
TGMdiButtons(const TGWindow *p, const TGWindow *titlebar)
TGMdiButtons constructor.
TGLayoutHints * fCloseHint
Layout hints.
TGLayoutHints * fDefaultHint
const TGWindow * fMsgWindow
window handling container messages
Bool_t HandleMotion(Event_t *event) override
Handle motion events in resizer (resize associated MDI window).
void DrawBorder() override
Draw corner resizer frame border.
TGMdiCornerWinResizer(const TGWindow *p, const TGWindow *mdiwin, Int_t pos, const TGGC *boxGC, Int_t linew, Int_t mdioptions=kMdiDefaultResizeMode, Int_t w=20, Int_t h=20)
TGMdiCornerWinResizer constructor.
This file contains all different MDI frame decoration classes.
Bool_t HandleConfigureNotify(Event_t *event) override
Handle configure notify event.
TGMdiTitleBar * fTitlebar
MDI window title bar.
~TGMdiDecorFrame() override
TGMdiDecorFrame destructor.
TGMdiVerticalWinResizer * fUpperHR
Bool_t IsMaximized() const
Bool_t IsMinimized() const
TGLayoutHints * fExpandHint
layout hints
TGMdiVerticalWinResizer * fLowerHR
upper and lower vertical resizers
void SetResizeMode(Int_t mode=kMdiDefaultResizeMode)
Set resize mode (opaque or transparent)
ULong_t fButtonMask
mask used to display/hide buttons
TGMdiCornerWinResizer * fUpperLeftCR
void Layout() override
Recalculates the postion and the size of all decor frame components.
TGMdiHorizontalWinResizer * fLeftVR
TGLayoutHints * fLHint
Bool_t fIsMaximized
minimized and maximized flags
Bool_t fMinimizedUserPlacement
user placement flag
friend class TGMdiMainFrame
TGMdiMainFrame * fMdiMainFrame
MDI main frame.
void SetWindowName(const char *name) override
Set MDI Window name (appearing in the title bar)
void SetWindowIcon(const TGPicture *pic)
Set Window icon (appearing in the title bar)
TGMdiFrame * fFrame
parent (owner) MDI frame
TGMdiDecorFrame(TGMdiMainFrame *main, TGMdiFrame *frame, Int_t w, Int_t h, const TGGC *boxGC, UInt_t options=0, Pixel_t back=GetDefaultFrameBackground())
TGMdiDecorFrame constructor.
void MoveResize(Int_t x, Int_t y, UInt_t w, UInt_t h) override
Move the MDI window at position x, y and set size to w, h.
Int_t fMinimizedY
minimized position
void Move(Int_t x, Int_t y) override
Move the MDI window at position x, y.
void SetMdiButtons(ULong_t buttons)
Set-up MDI buttons.
TGMdiCornerWinResizer * fLowerRightCR
upper right and lower right resizers
TGMdiCornerWinResizer * fUpperRightCR
Bool_t HandleButton(Event_t *event) override
Handle mouse button events.
void SetDecorBorderWidth(Int_t bw)
Set border width of the decor.
TGMdiCornerWinResizer * fLowerLeftCR
upper left and lower left resizers
TGMdiHorizontalWinResizer * fRightVR
left and right horizontal resizers
This file contains the TGMdiFrame class.
Definition TGMdiFrame.h:42
void DrawBorder() override
Draw horizontal resizer frame border.
TGMdiHorizontalWinResizer(const TGWindow *p, const TGWindow *mdiwin, Int_t pos, const TGGC *boxGC, Int_t linew, Int_t mdioptions=kMdiDefaultResizeMode, Int_t w=5, Int_t h=4)
TGMdiHorizontalWinResizer constructor.
Bool_t HandleMotion(Event_t *event) override
Handle motion events in resizer (resize associated MDI window).
Bool_t HandleButton(Event_t *event) override
Handle mouse click on title bar.
void LayoutButtons(UInt_t buttonmask, Bool_t isMinimized, Bool_t isMaximized)
Recalculates the position of every enabled (displayed) buttons.
TGMdiTitleIcon * GetWinIcon() const
TGLayoutHints * fLeftHint
void SetTitleBarColors(UInt_t fore, UInt_t back, TGFont *f)
Set title bar color (blue or grey, depends on active state).
TGLayoutHints * fMiddleHint
TGMdiTitleBar(const TGWindow *p, const TGWindow *mdiwin, const char *name="Untitled")
TGMdiTitleBar constructor.
void RemoveFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
This is called from TGMdiMainFrame on Maximize().
TGCompositeFrame * fLFrame
Int_t fY0
initial position of the mouse click
Bool_t ProcessMessage(Longptr_t msg, Longptr_t parm1, Longptr_t parm2) override
Process messages for title bar.
Bool_t HandleDoubleClick(Event_t *event) override
Handle double click in title bar (maximize window)
Bool_t HandleMotion(Event_t *event) override
Handle mouse motion events in title bar (used to move MDI window).
Bool_t fMidButPressed
mouse button pressed
void AddFrames(TGMdiTitleIcon *icon, TGMdiButtons *buttons)
This is called from TGMdiMainFrame on Restore().
TGLabel * fWinName
window name label
const TGWindow * fMdiWin
owner MDI window
~TGMdiTitleBar() override
TGMdiTitleBar destructor.
TGCompositeFrame * fMFrame
TGMdiTitleIcon * fWinIcon
title icon
TGMdiButtons * fButtons
MDI buttons.
TGCompositeFrame * fRFrame
the three parts of the title bar
TGLayoutHints * fLHint
TGLayoutHints * fRightHint
layout hints
Bool_t HandleDoubleClick(Event_t *event) override
Handle double click event on MDI icon (close the window)
TGMdiTitleIcon(const TGWindow *p, const TGWindow *titlebar, const TGPicture *pic, Int_t w, Int_t h)
TGMdiTitleIcon constructor.
Bool_t HandleButton(Event_t *event) override
Handle button event on MDI icon (popup menu)
TGPopupMenu * GetPopup() const
void DoRedraw() override
Redraw icon.
~TGMdiTitleIcon() override
TGMdiTitleIcon destructor.
const TGWindow * fMsgWindow
window handling container messages
TGPopupMenu * fPopup
Popup menu associated to the title icon.
TGMdiVerticalWinResizer(const TGWindow *p, const TGWindow *mdiwin, Int_t pos, const TGGC *boxGC, Int_t linew, Int_t mdioptions=kMdiDefaultResizeMode, Int_t w=4, Int_t h=5)
TGMdiVerticalWinResizer constructor.
void DrawBorder() override
Draw vertical resizer frame border.
Bool_t HandleMotion(Event_t *event) override
Handle motion events in resizer (resize associated MDI window).
Int_t fPos
position of the resizer
const TGGC * fBoxGC
GC used for resizing rectangle.
TGMdiWinResizer(const TGWindow *p, const TGWindow *mdiwin, Int_t pos, const TGGC *boxGC, Int_t linew, Int_t mdioptions=kMdiDefaultResizeMode, Int_t w=1, Int_t h=1, UInt_t options=kOwnBackground)
TGMdiWinResizer constructor.
Int_t fNewH
new MDI win position and dimension
Bool_t HandleButton(Event_t *event) override
Handle button events in resizer (grab button and resize).
friend class TGMdiMainFrame
Int_t fMdiOptions
MDI options.
Int_t fLineW
line width of resizing rectangle
const TGWindow * fMdiWin
owner MDI Window
void MoveResizeIt()
Move (resize) parent MDI window.
Int_t fY0
initial position of the mouse click
Bool_t fMidButPressed
mouse buttons flags
void DrawBox(Int_t x, Int_t y, UInt_t width, UInt_t height)
Draw resize box (rectangle).
Int_t fWinH
MDI win position and dimension.
Int_t fOldH
old MDI win position and dimension
Int_t fMinH
Min width and height of the MDI Win.
TGClient * fClient
Connection to display server.
Definition TGObject.h:25
Handle_t fId
X11/Win32 Window identifier.
Definition TGObject.h:24
Yield an action as soon as it is clicked.
Definition TGButton.h:228
The TGPicture class implements pictures and icons used in the different GUI elements and widgets.
Definition TGPicture.h:25
This class creates a popup menu object.
Definition TGMenu.h:110
virtual Int_t EndMenu(void *&userData)
Close menu and return ID of selected menu item.
Definition TGMenu.cxx:1289
TGString wraps a TString and adds some graphics routines like drawing, size of string on screen depen...
Definition TGString.h:20
Int_t fWidgetFlags
widget status flags (OR of EWidgetStatus)
Definition TGWidget.h:47
Bool_t IsEnabled() const
Definition TGWidget.h:69
const TGWindow * fParent
Parent window.
Definition TGWindow.h:28
TGWindow(Window_t id)
Definition TGWindow.h:34
virtual void DestroyWindow()
destroy window
Definition TGWindow.cxx:192
virtual void SetWindowName(const char *name=nullptr)
Set window name.
Definition TGWindow.cxx:129
virtual Bool_t IsMapped()
Returns kTRUE if window is mapped on screen, kFALSE otherwise.
Definition TGWindow.cxx:295
UInt_t fEditDisabled
flags used for "guibuilding"
Definition TGWindow.h:32
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Event structure.
Definition GuiTypes.h:174
EGEventType fType
of event (see EGEventType)
Definition GuiTypes.h:175
Int_t fY
pointer x, y coordinates in event window
Definition GuiTypes.h:178
Int_t fXRoot
Definition GuiTypes.h:179
UInt_t fWidth
Definition GuiTypes.h:182
UInt_t fHeight
width and height of exposed area
Definition GuiTypes.h:182
Window_t fWindow
window reported event is relative to
Definition GuiTypes.h:176
Int_t fYRoot
coordinates relative to root
Definition GuiTypes.h:179
Int_t fX
Definition GuiTypes.h:178
UInt_t fCode
key or button code
Definition GuiTypes.h:180
TMarker m
Definition textangle.C:8