2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/ui/buttpanl.h,v 1.5 1998/10/30 02:03:02 mahk Exp $
18 ////////////////////////////////////////////////////////////
19 // SIMPLE BUTTON PANEL MODE CLASS
21 // This simple class uses panelmode to implement
22 // a modal, full-screen button panel.
24 // It's not terribly abstract, but it gets the job done.
27 typedef cCTUnaggregated
<ILoopClient
, &IID_ILoopClient
, kCTU_Default
> cBaseLoopClient
;
29 typedef cDynArray
<Rect
> cRectArray
;
30 typedef cDynArray
<DrawElement
> cElemArray
;
32 class cModalButtonPanel
36 //------------------------------------------------------------
37 // VIRTUAL FUNCTIONS FOR DESCRIBING YOUR BUTTON PANEL
40 // Init/Term UI (optional, but way recommended)
41 virtual void InitUI() { };
42 virtual void TermUI() { };
44 // These will only get called inside init/term ui, we promise
46 // How many buttons do I have?
47 virtual int NumButtons() = 0;
48 // my button rectangles
49 virtual cRectArray
& Rects() = 0;
51 virtual cElemArray
& Elems() = 0;
54 virtual IImageSource
* CursorImage() = 0;
56 virtual IDataSource
* CursorPalette() { return NULL
; };
59 virtual void OnButtonList(ushort action
, int button
) = 0;
61 // Handle loop events (optional)
62 // Can get called outside init/term ui
63 virtual void OnLoopMsg(eLoopMessage
, tLoopMessageData
) {} ;
69 //------------------------------------------------------------
74 // Constructor. The descriptors specify *default* values.
75 // The button panel will override them when necessary
77 cModalButtonPanel(sPanelModeDesc
* pmdesc
, sLoopClientDesc
* lcdesc
);
81 // Spit out a panel mode, so that the client can call switch or whatever
84 IPanelMode
* GetPanelMode() { mpPanelMode
->AddRef(); return mpPanelMode
; };
87 // Get the button list
90 LGadButtonList
& GetButtons() { return mpClient
->mButtonList
; };
92 //------------------------------------------------------------
97 IPanelMode
* mpPanelMode
;
101 // LOOP CLIENT, ACTUALLY OWNS THE BUTTON LIST
104 class cClient
: public cBaseLoopClient
107 cClient(const sLoopClientDesc
* desc
, cModalButtonPanel
* panel
);
110 STDMETHOD_(short,GetVersion
)() { return kVerLoopClient
; };
111 STDMETHOD_(const sLoopClientDesc
*, GetDescription
)() { return mpDesc
; };
112 STDMETHOD_(eLoopMessageResult
, ReceiveMessage
)(eLoopMessage
, tLoopMessageData hData
);
114 static bool BListCB(ushort action
, int button
, void* data
, LGadBox
* blist
);
117 static ILoopClient
* LGAPI
FactoryFunc(const sLoopClientDesc
*, tLoopClientData
);
119 const sLoopClientDesc
* mpDesc
;
120 cModalButtonPanel
* mpPanel
;
121 LGadButtonList mButtonList
;
122 IImageSource
* mpCursorImg
;
129 friend class cClient
;
136 #endif // __BUTTPANL_H