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