50 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) 51 #error "Only <final/final.h> can be included directly." 54 #include "final/fwidget.h" 72 using FWidget::addAccelerator;
73 using FWidget::delAccelerator;
74 using FWidget::setEnable;
96 auto getClassName()
const ->
FString override;
97 auto getHotkey()
const noexcept -> FKey;
98 auto getMenu()
const ->
FMenu*;
99 auto getTextLength()
const noexcept -> std::size_t;
100 auto getTextWidth()
const noexcept -> std::size_t;
101 auto getText()
const ->
FString;
104 void setEnable (
bool =
true)
override;
106 void unsetSelected();
108 void unsetSeparator();
109 void setCheckable() noexcept;
110 void unsetCheckable() noexcept;
111 void setChecked() noexcept;
112 void unsetChecked() noexcept;
113 void setRadioButton() noexcept;
114 void unsetRadioButton() noexcept;
115 void setMenu (
FMenu*);
119 auto isSelected()
const -> bool;
120 auto isSeparator()
const -> bool;
121 auto isCheckable()
const -> bool;
122 auto isChecked()
const -> bool;
123 auto isRadioButton()
const -> bool;
124 auto hasHotkey()
const -> bool;
125 auto hasMenu()
const -> bool;
128 void addAccelerator (FKey,
FWidget*) &
final;
129 void delAccelerator (
FWidget*) &
final;
130 void openMenu()
const;
144 auto getSuperMenu()
const ->
FWidget*;
150 auto isDialog (
const FWidget*)
const -> bool;
151 auto isMenuBar (
const FWidget*)
const -> bool;
152 auto isMenu (
const FWidget*)
const -> bool;
155 void initLayout()
override;
158 struct DialogItemData
171 void initTextProperties();
172 void initAccelerator();
174 void initMenu (
FMenu&)
const;
175 void calculateTextDimensions();
176 void updateSuperMenuDimensions();
177 void updateMenubarDimensions()
const;
179 void updateMenuSelection (
const FAccelEvent*)
const;
180 void handleMenuBarSelection (
FMenuBar*);
181 void processEnable()
const;
182 void processDisable()
const;
183 void processActivate()
const;
184 void processDeactivate()
const;
185 void createDialogList (
FMenu*)
const;
186 void createDialogItem (
FMenu*,
const DialogItemData&)
const;
187 void configDialogItem (
FMenuItem*,
const DialogItemData&)
const;
188 template <
typename T>
189 void passMouseEvent (T,
const FMouseEvent*, Event)
const;
190 void resetSelectedItem (
const FMenuList*)
const;
193 void cb_switchToDialog (
FDialog*)
const;
194 void cb_destroyDialog (
FDialog*);
196 virtual void processClicked();
200 FMenu* menu{
nullptr};
202 FDialog* associated_window{
nullptr};
203 std::size_t text_length{0};
204 std::size_t text_width{0};
205 FKey accel_key{FKey::None};
206 FKey hotkey{FKey::None};
207 bool selected{
false};
208 bool separator{
false};
209 bool checkable{
false};
211 bool radio_button{
false};
212 bool dialog_index{
false};
224 inline auto FMenuItem::getClassName()
const ->
FString 225 {
return "FMenuItem"; }
228 inline auto FMenuItem::getHotkey()
const noexcept -> FKey
232 inline auto FMenuItem::getMenu()
const ->
FMenu*
236 inline auto FMenuItem::getTextLength()
const noexcept -> std::size_t
237 {
return text_length; }
240 inline auto FMenuItem::getTextWidth()
const noexcept -> std::size_t
241 {
return text_width; }
244 inline auto FMenuItem::getText()
const ->
FString 248 inline void FMenuItem::setSeparator()
255 inline void FMenuItem::unsetSeparator()
262 inline void FMenuItem::setCheckable() noexcept
263 { checkable =
true; }
266 inline void FMenuItem::unsetCheckable() noexcept
267 { checkable =
false; }
270 inline void FMenuItem::setChecked() noexcept
274 inline void FMenuItem::unsetChecked() noexcept
278 inline void FMenuItem::setRadioButton() noexcept
279 { radio_button =
true; }
282 inline void FMenuItem::unsetRadioButton() noexcept
283 { radio_button =
false; }
286 inline void FMenuItem::setMenu (
FMenu* m)
290 inline auto FMenuItem::isSelected()
const ->
bool 294 inline auto FMenuItem::isSeparator()
const ->
bool 295 {
return separator; }
298 inline auto FMenuItem::isCheckable()
const ->
bool 299 {
return checkable; }
302 inline auto FMenuItem::isChecked()
const ->
bool 306 inline auto FMenuItem::isRadioButton()
const ->
bool 307 {
return radio_button; }
310 inline auto FMenuItem::hasHotkey()
const ->
bool 311 {
return hotkey != FKey::None; }
314 inline auto FMenuItem::hasMenu()
const ->
bool 315 {
return menu !=
nullptr; }
318 inline auto FMenuItem::getSuperMenu()
const ->
FWidget*
319 {
return super_menu; }
322 inline void FMenuItem::setSuperMenu (
FWidget* smenu)
323 { super_menu = smenu; }
327 #endif // FMENUITEM_H
Definition: class_template.cpp:25