OpenClonk
C4ObjectMenu.h
Go to the documentation of this file.
1 /*
2  * OpenClonk, http://www.openclonk.org
3  *
4  * Copyright (c) 1998-2000, Matthes Bender
5  * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/
6  * Copyright (c) 2009-2016, The OpenClonk Team and contributors
7  *
8  * Distributed under the terms of the ISC license; see accompanying file
9  * "COPYING" for details.
10  *
11  * "Clonk" is a registered trademark of Matthes Bender, used with permission.
12  * See accompanying file "TRADEMARK" for details.
13  *
14  * To redistribute this file separately, substitute the full license texts
15  * for the above references.
16  */
17 // Menus attached to objects; script created or internal
18 // These menus are shown to players if the target object is the current cursor
19 
20 #ifndef INC_C4ObjectMenu
21 #define INC_C4ObjectMenu
22 
23 #include "gui/C4Menu.h"
24 
25 enum
26 {
27  C4MN_None = 0,
28  /*C4MN_Construction = 1, obsolete, now reserved */
29  /*C4MN_Bridge = 2, obsolete, now reserved */
30  C4MN_Take = 3,
31  C4MN_Buy = 4,
32  C4MN_Sell = 5,
34  /*C4MN_Hostility = 7, now defined in C4MainMenu*/
35  /*C4MN_Surrender = 8, obsolete, now reserved*/
36  /*C4MN_Put = 9, obsolete, now reserved*/
37  /*C4MN_Magic = 10, obsolete, now reserved*/
38  /*C4MN_Main = 12, now defined in C4MainMenu*/
39  C4MN_Get = 13,
40  /*C4MN_Context = 14, obsolete, now reserved*/
41  C4MN_Info = 15,
42  /*C4MN_TeamSelection= 16, now defined in C4MainMenu */
43  /*C4MN_TeamSwitch = 17, now defined in C4MainMenu */
44  C4MN_Contents = 18
45 };
46 
47 class C4ObjectMenu : public C4Menu
48 {
49 public:
50  C4ObjectMenu();
51 
52  void Default() override;
53 
55 protected:
61  bool UserMenu; // set for script created menus; user menus do CloseQuery and MenuSelection callbacks
62  bool CloseQuerying; // recursion check for close query callback
63 
64  void LocalInit(C4Object *pObject, bool fUserMenu);
65 
66 public:
67  void SetRefillObject(C4Object *pObj);
68  void ClearPointers(C4Object *pObj);
69  bool Init(C4FacetSurface &fctSymbol, const char *szEmpty, C4Object *pObject, int32_t iExtra=C4MN_Extra_None, int32_t iExtraData=0, int32_t iId=0, int32_t iStyle=C4MN_Style_Normal, bool fUserMenu=false);
70  bool InitRefSym(const C4TargetFacet &fctSymbol, const char *szEmpty, C4Object *pObject, int32_t iExtra=C4MN_Extra_None, int32_t iExtraData=0, int32_t iId=0, int32_t iStyle=C4MN_Style_Normal, bool fUserMenu=false);
71  void Execute();
72 
73  C4Object* GetParentObject() override;
74  bool IsCloseQuerying() const { return !!CloseQuerying; }
75 
76 protected:
77  bool MenuCommand(const char *szCommand, bool fIsCloseCommand) override;
78 
79  bool DoRefillInternal(bool &rfRefilled) override;
80  void OnSelectionChanged(int32_t iNewSelection) override; // do object callbacks if selection changed in user menus
81  bool IsCloseDenied() override; // do MenuQueryCancel-callbacks for user menus
82  bool IsReadOnly() override; // determine whether the menu is just viewed by an observer, and should not issue any calls
83  void OnUserSelectItem(int32_t Player, int32_t iIndex) override;
84  void OnUserEnter(int32_t Player, int32_t iIndex, bool fRight) override;
85  void OnUserClose() override;
86  int32_t GetControllingPlayer() override;
87 };
88 
89 #endif
@ C4MN_Extra_None
Definition: C4Menu.h:44
@ C4MN_Style_Normal
Definition: C4Menu.h:35
@ C4MN_Sell
Definition: C4ObjectMenu.h:32
@ C4MN_Buy
Definition: C4ObjectMenu.h:31
@ C4MN_Activate
Definition: C4ObjectMenu.h:33
@ C4MN_Get
Definition: C4ObjectMenu.h:39
@ C4MN_Contents
Definition: C4ObjectMenu.h:44
@ C4MN_Info
Definition: C4ObjectMenu.h:41
@ C4MN_Take
Definition: C4ObjectMenu.h:30
@ C4MN_None
Definition: C4ObjectMenu.h:27
Definition: C4Menu.h:123
void OnUserEnter(int32_t Player, int32_t iIndex, bool fRight) override
void OnUserSelectItem(int32_t Player, int32_t iIndex) override
C4Object * ParentObject
Definition: C4ObjectMenu.h:57
int32_t RefillObjectContentsCount
Definition: C4ObjectMenu.h:59
C4Object * GetParentObject() override
C4Object * Object
Definition: C4ObjectMenu.h:56
bool DoRefillInternal(bool &rfRefilled) override
bool IsCloseDenied() override
void Default() override
bool CloseQuerying
Definition: C4ObjectMenu.h:62
bool IsCloseQuerying() const
Definition: C4ObjectMenu.h:74
bool InitRefSym(const C4TargetFacet &fctSymbol, const char *szEmpty, C4Object *pObject, int32_t iExtra=C4MN_Extra_None, int32_t iExtraData=0, int32_t iId=0, int32_t iStyle=C4MN_Style_Normal, bool fUserMenu=false)
bool IsReadOnly() override
void SetRefillObject(C4Object *pObj)
void OnSelectionChanged(int32_t iNewSelection) override
void OnUserClose() override
bool MenuCommand(const char *szCommand, bool fIsCloseCommand) override
CallbackType eCallbackType
Definition: C4ObjectMenu.h:60
void LocalInit(C4Object *pObject, bool fUserMenu)
void ClearPointers(C4Object *pObj)
C4Object * RefillObject
Definition: C4ObjectMenu.h:58
bool Init(C4FacetSurface &fctSymbol, const char *szEmpty, C4Object *pObject, int32_t iExtra=C4MN_Extra_None, int32_t iExtraData=0, int32_t iId=0, int32_t iStyle=C4MN_Style_Normal, bool fUserMenu=false)
int32_t GetControllingPlayer() override