xref: /haiku/src/apps/icon-o-matic/generic/gui/stateview/ViewState.h (revision 7c4b3726d9477810a630f9c0d0604a36473df559)
1128277c9SStephan Aßmus /*
2*7c4b3726SStephan Aßmus  * Copyright 2006-2007, Haiku.
3128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4128277c9SStephan Aßmus  *
5128277c9SStephan Aßmus  * Authors:
6128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7128277c9SStephan Aßmus  */
8128277c9SStephan Aßmus 
9128277c9SStephan Aßmus #ifndef VIEW_STATE_H
10128277c9SStephan Aßmus #define VIEW_STATE_H
11128277c9SStephan Aßmus 
12128277c9SStephan Aßmus #include <View.h>
13128277c9SStephan Aßmus 
14128277c9SStephan Aßmus class BMessage;
15128277c9SStephan Aßmus class Command;
16128277c9SStephan Aßmus class StateView;
17128277c9SStephan Aßmus 
18128277c9SStephan Aßmus struct mouse_info {
19128277c9SStephan Aßmus 	mouse_info();
20128277c9SStephan Aßmus 
21128277c9SStephan Aßmus 	uint32				buttons;
22128277c9SStephan Aßmus 	BPoint				position;
23128277c9SStephan Aßmus 	uint32				transit;
24128277c9SStephan Aßmus 	uint32				modifiers;
25128277c9SStephan Aßmus };
26128277c9SStephan Aßmus 
27128277c9SStephan Aßmus class ViewState {
28128277c9SStephan Aßmus  public:
29128277c9SStephan Aßmus 								ViewState(StateView* view);
30128277c9SStephan Aßmus 								ViewState(const ViewState& other);
31128277c9SStephan Aßmus 	virtual						~ViewState();
32128277c9SStephan Aßmus 
33128277c9SStephan Aßmus 	// ViewState interface
34128277c9SStephan Aßmus 	virtual	void				Init();
35128277c9SStephan Aßmus 	virtual	void				Cleanup();
36128277c9SStephan Aßmus 
37128277c9SStephan Aßmus 	virtual	void				Draw(BView* into, BRect updateRect);
38128277c9SStephan Aßmus 	virtual	bool				MessageReceived(BMessage* message,
39128277c9SStephan Aßmus 												Command** _command);
40128277c9SStephan Aßmus 
41128277c9SStephan Aßmus 	// mouse tracking
42128277c9SStephan Aßmus 	virtual	void				MouseDown(BPoint where,
43128277c9SStephan Aßmus 										  uint32 buttons,
44128277c9SStephan Aßmus 										  uint32 clicks);
45128277c9SStephan Aßmus 
46128277c9SStephan Aßmus 	virtual	void				MouseMoved(BPoint where,
47128277c9SStephan Aßmus 										   uint32 transit,
48128277c9SStephan Aßmus 										   const BMessage* dragMessage);
49128277c9SStephan Aßmus 	virtual	Command*			MouseUp();
50128277c9SStephan Aßmus 
51128277c9SStephan Aßmus 	// modifiers
52128277c9SStephan Aßmus 	virtual	void				ModifiersChanged(uint32 modifiers);
53128277c9SStephan Aßmus 
54128277c9SStephan Aßmus 	// TODO: mouse wheel
55128277c9SStephan Aßmus 	virtual	bool				HandleKeyDown(uint32 key, uint32 modifiers,
56128277c9SStephan Aßmus 											  Command** _command);
57128277c9SStephan Aßmus 	virtual	bool				HandleKeyUp(uint32 key, uint32 modifiers,
58128277c9SStephan Aßmus 											Command** _command);
59128277c9SStephan Aßmus 
60*7c4b3726SStephan Aßmus 	virtual	bool				UpdateCursor();
61*7c4b3726SStephan Aßmus 
62128277c9SStephan Aßmus 
PressedMouseButtons()63128277c9SStephan Aßmus 	inline	uint32				PressedMouseButtons() const
64128277c9SStephan Aßmus 									{ return fMouseInfo->buttons; }
65128277c9SStephan Aßmus 
IsFirstButtonDown()66128277c9SStephan Aßmus 	inline	bool				IsFirstButtonDown() const
67128277c9SStephan Aßmus 									{ return fMouseInfo->buttons & B_PRIMARY_MOUSE_BUTTON; }
IsSecondButtonDown()68128277c9SStephan Aßmus 	inline	bool				IsSecondButtonDown() const
69128277c9SStephan Aßmus 									{ return fMouseInfo->buttons & B_SECONDARY_MOUSE_BUTTON; }
IsThirdButtonDown()70128277c9SStephan Aßmus 	inline	bool				IsThirdButtonDown() const
71128277c9SStephan Aßmus 									{ return fMouseInfo->buttons & B_TERTIARY_MOUSE_BUTTON; }
72128277c9SStephan Aßmus 
MousePos()73128277c9SStephan Aßmus 	inline	BPoint				MousePos() const
74128277c9SStephan Aßmus 									{ return fMouseInfo->position; }
75128277c9SStephan Aßmus 
Modifiers()76128277c9SStephan Aßmus 	inline	uint32				Modifiers() const
77128277c9SStephan Aßmus 									{ return fMouseInfo->modifiers; }
78128277c9SStephan Aßmus 
79128277c9SStephan Aßmus  protected:
80128277c9SStephan Aßmus 			StateView*			fView;
81128277c9SStephan Aßmus 
82128277c9SStephan Aßmus 			// NOTE: the intention of using a pointer
83128277c9SStephan Aßmus 			// to a mouse_info struct is that all
84128277c9SStephan Aßmus 			// ViewStates belonging to the same StateView
85128277c9SStephan Aßmus 			// should have the same pointer, so that
86128277c9SStephan Aßmus 			// they will all be up to date with the same info
87128277c9SStephan Aßmus 			const mouse_info*	fMouseInfo;
88128277c9SStephan Aßmus };
89128277c9SStephan Aßmus 
90128277c9SStephan Aßmus #endif // VIEW_STATE_H
91