xref: /haiku/src/apps/icon-o-matic/generic/property/view/PropertyListView.h (revision a4e4beafe528e4bf368158a1876fe78eea755941)
1 /*
2  * Copyright 2006-2007, Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Stephan Aßmus <superstippi@gmx.de>
7  */
8 
9 #ifndef PROPERTY_LIST_VIEW_H
10 #define PROPERTY_LIST_VIEW_H
11 
12 #include <List.h>
13 #include <View.h>
14 
15 #include "MouseWheelFilter.h"
16 #include "Scrollable.h"
17 
18 class BClipboard;
19 class BMenu;
20 class BMenuItem;
21 class CommandStack;
22 class Property;
23 class PropertyItemView;
24 class PropertyObject;
25 class ScrollView;
26 class TabFilter;
27 
28 class PropertyListView : public BView,
29 						 public Scrollable,
30 						 private BList,
31 						 public MouseWheelTarget {
32  public:
33 								PropertyListView();
34 	virtual						~PropertyListView();
35 
36 	// BView interface
37 	virtual	void				AttachedToWindow();
38 	virtual	void				DetachedFromWindow();
39 	virtual	void				FrameResized(float width, float height);
40 	virtual	void				Draw(BRect updateRect);
41 	virtual	void				MakeFocus(bool focus);
42 	virtual	void				MouseDown(BPoint where);
43 	virtual	void				MessageReceived(BMessage* message);
44 
45 #ifdef __HAIKU__
46 	virtual	BSize				MinSize();
47 	virtual	BSize				MaxSize();
48 	virtual	BSize				PreferredSize();
49 #endif
50 
51 	// Scrollable interface
52 	virtual	void				ScrollOffsetChanged(BPoint oldOffset,
53 													BPoint newOffset);
54 
55 	// MouseWheelTarget interface
MouseWheelChanged(float x,float y)56 	virtual	bool				MouseWheelChanged(float x, float y) { return false; }
57 
58 	// PropertyListView
59 			void				SetTo(PropertyObject* object);
60 				// takes ownership of the object
61 	virtual	void				PropertyChanged(const Property* previous,
62 												const Property* current);
63 				// implement to know when a property changed
64 	virtual	void				PasteProperties(const PropertyObject* object);
65 				// implement to know when a property changed
66 	virtual	bool				IsEditingMultipleObjects();
67 
68 			void				SetMenu(BMenu* menu);
69 			::ScrollView*		ScrollView() const;
70 
71 	// interface for Property framework
72 			void				UpdateObject(uint32 propertyID);
73 
74 			bool				TabFocus(bool shift);
75 
76 			void				Select(PropertyItemView* item);
77 			void				DeselectAll();
78 
79 			void				Clicked(PropertyItemView* item);
80 			void				DoubleClicked(PropertyItemView* item);
81 
82 protected:
83 			PropertyItemView*	_ItemAt(int32 index) const;
84 			int32				_CountItems() const;
85 
86 private:
87 			void				_UpdateSavedProperties();
88 
89 			bool				_AddItem(PropertyItemView* item);
90 			PropertyItemView*	_RemoveItem(int32 index);
91 
92 			void				_MakeEmpty();
93 
94 			BRect				_ItemsRect() const;
95 			void				_LayoutItems();
96 
97 			void				_CheckMenuStatus();
98 
99 			BClipboard*			fClipboard;
100 
101 			BMenu*				fSelectM;
102 			BMenuItem*			fSelectAllMI;
103 			BMenuItem*			fSelectNoneMI;
104 			BMenuItem*			fInvertSelectionMI;
105 
106 			BMenu*				fPropertyM;
107 			BMenuItem*			fCopyMI;
108 			BMenuItem*			fPasteMI;
109 
110 			PropertyObject*		fPropertyObject;
111 			PropertyObject*		fSavedProperties;
112 
113 			PropertyItemView*	fLastClickedItem;
114 
115 			bool				fSuspendUpdates;
116 
117 			MouseWheelFilter*	fMouseWheelFilter;
118 			TabFilter*			fTabFilter;
119 };
120 
121 #endif // PROPERTY_LIST_VIEW_H
122