finalcut/src/fmenuitem.h

223 lines
6.8 KiB
C
Raw Normal View History

// File: fmenuitem.h
// Provides: class FMenuItem
//
// Inheritance diagram
// ═══════════════════
//
// ▕▔▔▔▔▔▔▔▔▔▏ ▕▔▔▔▔▔▔▔▔▔▏
// ▕ FObject ▏ ▕ FTerm ▏
// ▕▁▁▁▁▁▁▁▁▁▏ ▕▁▁▁▁▁▁▁▁▁▏
// ▲ ▲
// │ │
// └─────┬─────┘
// │
// ▕▔▔▔▔▔▔▔▔▔▏
// ▕ FWidget ▏
// ▕▁▁▁▁▁▁▁▁▁▏
// ▲
// │
// ▕▔▔▔▔▔▔▔▔▔▔▔▏* 1▕▔▔▔▔▔▔▔▏
// ▕ FMenuItem ▏-┬- - - -▕ FMenu ▏
// ▕▁▁▁▁▁▁▁▁▁▁▁▏ : ▕▁▁▁▁▁▁▁▏
// :
// : 1▕▔▔▔▔▔▔▔▔▔▔▔▏
// └- - - -▕ FMenuList ▏
// ▕▁▁▁▁▁▁▁▁▁▁▁▏
#ifndef _FMENUITEM_H
#define _FMENUITEM_H
#include "fwidget.h"
2015-08-16 20:05:39 +02:00
class FMenu;
class FMenuList;
//----------------------------------------------------------------------
// class FMenuItem
//----------------------------------------------------------------------
#pragma pack(push)
#pragma pack(1)
class FMenuItem : public FWidget
{
protected:
2015-09-15 23:07:24 +02:00
FString text;
bool selected;
bool separator;
bool checkable;
2015-09-15 23:07:24 +02:00
bool checked;
bool radio_button;
bool dialog_index;
uInt text_length;
2015-09-15 23:07:24 +02:00
int hotkey;
2015-11-12 01:33:16 +01:00
int accel_key;
2015-09-15 23:07:24 +02:00
FMenu* menu;
FWidget* super_menu;
private:
FMenuItem (const FMenuItem&);
FMenuItem& operator = (const FMenuItem&);
void init (FWidget*);
uChar hotKey();
void processActivate();
void processDeactivate();
void createDialogList (FMenu*);
void cb_switchToDialog (FWidget*, void*);
void cb_destroyDialog (FWidget*, void*);
virtual void processClicked();
protected:
2016-06-12 23:06:58 +02:00
bool isWindowsMenu (FWidget*) const;
bool isMenuBar (FWidget*) const;
2015-09-15 23:07:24 +02:00
bool isMenu (FWidget*) const;
FWidget* getSuperMenu() const;
void setSuperMenu (FWidget*);
public:
2015-09-27 16:45:28 +02:00
explicit FMenuItem (FWidget* = 0);
FMenuItem (FString&, FWidget* = 0);
FMenuItem (const std::string&, FWidget* = 0);
FMenuItem (const char*, FWidget* = 0);
2015-11-12 01:33:16 +01:00
FMenuItem (int, FString&, FWidget* = 0);
FMenuItem (int, const std::string&, FWidget* = 0);
FMenuItem (int, const char*, FWidget* = 0);
virtual ~FMenuItem();
const char* getClassName() const;
2015-11-12 01:33:16 +01:00
// make every addAccelerator from FWidget available
using FWidget::addAccelerator;
void addAccelerator (int, FWidget*);
// make every delAccelerator from FWidget available
using FWidget::delAccelerator;
void delAccelerator (FWidget*);
2015-10-29 21:10:50 +01:00
void onKeyPress (FKeyEvent*);
2016-06-12 23:06:58 +02:00
void onMouseDoubleClick (FMouseEvent*);
2015-09-28 04:31:29 +02:00
void onMouseDown (FMouseEvent*);
void onMouseUp (FMouseEvent*);
void onMouseMove (FMouseEvent*);
2015-10-29 21:10:50 +01:00
void onAccel (FAccelEvent*);
void onFocusIn (FFocusEvent*);
void onFocusOut (FFocusEvent*);
// make every setEnable from FWidget available
using FWidget::setEnable;
bool setEnable(bool);
bool setFocus(bool);
bool setFocus();
bool unsetFocus();
2015-09-15 23:07:24 +02:00
void setSelected();
void unsetSelected();
bool isSelected() const;
void setSeparator();
void unsetSeparator();
bool isSeparator() const;
void setChecked();
void unsetChecked();
bool isChecked() const;
int getHotkey() const;
2015-09-15 23:07:24 +02:00
bool hasHotkey() const;
2015-09-28 04:31:29 +02:00
FMenu* getMenu() const;
2015-09-15 23:07:24 +02:00
void setMenu(FMenu*);
bool hasMenu() const;
void openMenu();
2015-09-28 04:31:29 +02:00
uInt getTextLength() const;
FString getText() const;
2015-09-15 23:07:24 +02:00
void setText (FString&);
void setText (const std::string&);
void setText (const char*);
private:
friend class FDialogListMenu;
friend class FMenuList;
2015-08-22 18:53:52 +02:00
friend class FMenuBar;
2015-09-30 22:39:02 +02:00
friend class FMenu;
};
#pragma pack(pop)
// FMenuItem inline functions
//----------------------------------------------------------------------
inline const char* FMenuItem::getClassName() const
{ return "FMenuItem"; }
2015-10-19 00:07:07 +02:00
//----------------------------------------------------------------------
inline FWidget* FMenuItem::getSuperMenu() const
{ return super_menu; }
//----------------------------------------------------------------------
inline void FMenuItem::setSuperMenu (FWidget* smenu)
{ super_menu = smenu; }
2015-08-16 20:05:39 +02:00
//----------------------------------------------------------------------
2015-10-29 21:10:50 +01:00
inline bool FMenuItem::setFocus()
{ return setFocus(true); }
//----------------------------------------------------------------------
2015-10-29 21:10:50 +01:00
inline bool FMenuItem::unsetFocus()
{ return setFocus(false); }
//----------------------------------------------------------------------
inline bool FMenuItem::isSelected() const
{ return selected; }
//----------------------------------------------------------------------
inline void FMenuItem::setSeparator()
2015-11-07 23:16:09 +01:00
{
separator = true;
unsetFocusable();
}
//----------------------------------------------------------------------
inline void FMenuItem::unsetSeparator()
2015-11-07 23:16:09 +01:00
{
separator = false;
setFocusable();
}
//----------------------------------------------------------------------
inline bool FMenuItem::isSeparator() const
{ return separator; }
//----------------------------------------------------------------------
inline void FMenuItem::setChecked()
2015-09-22 04:18:20 +02:00
{ checked = true; }
//----------------------------------------------------------------------
inline void FMenuItem::unsetChecked()
2015-09-22 04:18:20 +02:00
{ checked = false; }
//----------------------------------------------------------------------
inline bool FMenuItem::isChecked() const
{ return checked; }
//----------------------------------------------------------------------
inline int FMenuItem::getHotkey() const
{ return hotkey; }
//----------------------------------------------------------------------
2015-08-16 20:05:39 +02:00
inline bool FMenuItem::hasHotkey() const
{ return bool(hotkey != 0); }
2015-09-28 04:31:29 +02:00
//----------------------------------------------------------------------
inline FMenu* FMenuItem::getMenu() const
{ return menu; }
//----------------------------------------------------------------------
2015-08-16 20:05:39 +02:00
inline void FMenuItem::setMenu(FMenu* m)
{ menu = m; }
//----------------------------------------------------------------------
2015-08-16 20:05:39 +02:00
inline bool FMenuItem::hasMenu() const
{ return bool(menu != 0); }
2015-09-28 04:31:29 +02:00
//----------------------------------------------------------------------
inline uInt FMenuItem::getTextLength() const
{ return text_length; }
//----------------------------------------------------------------------
inline FString FMenuItem::getText() const
{ return text; }
#endif // _FMENUITEM_H