50 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)    51   #error "Only <final/final.h> can be included directly."    54 #include <unordered_map>    56 #include "final/menu/fmenu.h"    57 #include "final/widget/fwindow.h"    73     using FWindow::setResizeable;
    74     using FWindow::setMinimizable;
    77     enum class ResultCode : int
   103     auto getClassName() 
const -> 
FString override;
   104     virtual auto getText() 
const -> 
FString;
   107     void setDialogWidget (
bool = 
true);
   108     void unsetDialogWidget();
   109     void setModal (
bool = 
true);
   111     void setResizeable (
bool = 
true) 
override;
   112     void setMinimizable (
bool = 
true) 
override;
   113     void setTitlebarButtonVisibility (
bool = 
true);
   114     void unsetTitlebarButtonVisibility();
   115     void setBorder (
bool = 
true);
   117     void resetColors() 
override;
   118     virtual void setText (
const FString&);
   121     auto isModal() 
const -> bool;
   122     auto hasBorder() 
const -> bool;
   125     void show() 
override;
   126     void hide() 
override;
   127     auto exec() -> ResultCode;
   128     void setPos (
const FPoint&, 
bool = 
true) 
override;
   129     void move (
const FPoint&) 
override;
   130     auto moveUp (
int) -> bool;
   131     auto moveDown (
int) -> bool;
   132     auto moveLeft (
int) -> bool;
   133     auto moveRight (
int) -> bool;
   134     void setWidth (std::size_t, 
bool = 
true) 
override;
   135     void setHeight (std::size_t, 
bool = 
true) 
override;
   136     void setSize (
const FSize&, 
bool = 
true) 
override;
   137     auto reduceHeight (
int) -> bool;
   138     auto expandHeight (
int) -> bool;
   139     auto reduceWidth (
int) -> bool;
   140     auto expandWidth (
int) -> bool;
   141     auto zoomWindow() -> 
bool override;
   142     auto minimizeWindow() -> 
bool override;
   143     void flushChanges() 
override;
   144     void activateDialog();
   153     void onWindowActive (
FEvent*) 
override;
   154     void onWindowInactive (
FEvent*) 
override;
   155     void onWindowRaised (
FEvent*) 
override;
   156     void onWindowLowered (
FEvent*) 
override;
   160     void adjustSize() 
override;
   161     void done (ResultCode);
   162     void draw() 
override;
   163     void drawDialogShadow();
   174       std::size_t menu_btn;
   175       std::size_t minimize_btn;
   176       std::size_t zoom_btn;
   177       bool        mouse_over_menu;
   183       bool zoom_button_pressed{
false};
   184       bool zoom_button_active{
false};
   185       bool minimize_button_pressed{
false};
   186       bool minimize_button_active{
false};
   191       bool setPos_error{
false};
   192       bool setSize_error{
false};
   197       FPoint titlebar_click_pos{};
   198       FPoint resize_click_pos{};
   205       FRect save_geometry{};  
   210       FMenu*     menu{
nullptr};
   219     using KeyMap = std::unordered_map<FKey, std::function<void()>, 
EnumHash<FKey>>;
   222     static constexpr 
bool PRINT_WIN_NUMBER = 
false;  
   226     void initDialogMenu();
   227     void initMoveSizeMenuItem (
FMenu*);
   228     void initZoomMenuItem (
FMenu*);
   229     void initMinimizeMenuItem (
FMenu*);
   230     void initCloseMenuItem (
FMenu*);
   231     auto initMouseStates (
const FMouseEvent&, 
bool) 
const -> MouseStates;
   232     void mapKeyFunctions();
   233     void recoverBackgroundAfterMove (
const FPoint&, 
const FRect&);
   234     void drawBorder() 
override;
   236     void drawBarButton();
   237     void drawZoomButton();
   238     void drawMinimizeButton();
   239     void printRestoreSizeButton();
   240     void printZoomedButton();
   241     void printMinimizeButton();
   243     void clearStatusBar() 
const;
   244     void setCursorToFocusWidget();
   247     void selectFirstMenuItem();
   248     void setMinimizeItem();
   250     auto getMenuButtonWidth() 
const -> std::size_t;
   251     auto getZoomButtonWidth() 
const -> std::size_t;
   252     auto getMinimizeButtonWidth() 
const -> std::size_t;
   253     void activateMinimizeButton (
const MouseStates&);
   254     void deactivateMinimizeButton();
   255     void leaveMinimizeButton (
const MouseStates&);
   256     void pressMinimizeButton (
const MouseStates&);
   257     void activateZoomButton (
const MouseStates&);
   258     void deactivateZoomButton();
   259     void leaveZoomButton (
const MouseStates&);
   260     void pressZoomButton (
const MouseStates&);
   261     auto isMouseOverMenu (
const FPoint&) 
const -> bool;
   262     auto isMouseOverMenuButton (
const MouseStates&) 
const -> bool;
   263     auto isMouseOverZoomButton (
const MouseStates&) 
const -> bool;
   264     auto isMouseOverMinimizeButton (
const MouseStates&) 
const -> bool;
   265     auto isMouseOverTitlebar (
const MouseStates&) 
const -> bool;
   266     void passEventToSubMenu ( 
const MouseStates&
   268     void handleLeftMouseDown (
const MouseStates&);
   269     auto isClickOnTitleBar (
const MouseStates&, 
int, 
int) 
const -> bool;
   270     void handleRightAndMiddleMouseDown (
const MouseButton&, 
const MouseStates&);
   272     void raiseActivateDialog();
   273     void lowerActivateDialog();
   274     auto isOutsideTerminal (
const FPoint&) 
const -> bool;
   275     auto isLeftOutside() 
const -> bool;
   276     auto isBottomOutside() 
const -> bool;
   277     auto isLowerRightResizeCorner (
const MouseStates&) 
const -> bool;
   278     auto noVisibleDialog() 
const -> bool;
   279     void resizeMouseDown (
const MouseStates&);
   280     void resizeMouseUpMove (
const MouseStates&, 
bool = 
false);
   281     void cancelMouseResize();
   282     void acceptMoveSize();
   283     void cancelMoveSize();
   284     static void addDialog (
FWidget*);
   285     static void delDialog (
const FWidget*);
   294     TitleBarFlags titlebar{};
   295     ErrorFlags    error_flags{
false, 
false};
   296     PositionData  position_data{};
   297     SizeData      size_data{};
   298     DialogMenu    dialog_menu{};
   302     ResultCode    result_code{ResultCode::Reject};
   305     friend void FMenu::hideSuperMenus() 
const;
   310 inline auto FDialog::getClassName() 
const -> 
FString   311 { 
return "FDialog"; }
   314 inline auto FDialog::getText() 
const -> 
FString   318 inline void FDialog::unsetDialogWidget()
   319 { setDialogWidget(
false); }
   322 inline void FDialog::unsetModal()
   326 inline void FDialog::setTitlebarButtonVisibility (
bool enable)
   327 {  titlebar.buttons = enable; }
   330 inline void FDialog::unsetTitlebarButtonVisibility()
   331 { setTitlebarButtonVisibility(
false); }
   334 inline void FDialog::unsetBorder()
   335 { setBorder(
false); }
   338 inline void FDialog::setText (
const FString& txt)
   339 { tb_text.setString(txt); }
   342 inline auto FDialog::isModal() 
const -> 
bool   343 { 
return getFlags().visibility.modal; }
   346 inline auto FDialog::hasBorder() 
const -> 
bool   347 { 
return ! getFlags().feature.no_border; }
 
Definition: class_template.cpp:25