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