xref: /haiku/src/apps/mediaplayer/playlist/ListViews.h (revision 415ef601dfd3c244a31c1e9d60eb1689da854e3c)
1*415ef601SStephan Aßmus /*
2*415ef601SStephan Aßmus  * Copyright 2006-2007, Haiku. All rights reserved.
3*415ef601SStephan Aßmus  * Distributed under the terms of the MIT License.
4*415ef601SStephan Aßmus  *
5*415ef601SStephan Aßmus  * Authors:
6*415ef601SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7*415ef601SStephan Aßmus  */
8*415ef601SStephan Aßmus #ifndef LIST_VIEWS_H
9*415ef601SStephan Aßmus #define LIST_VIEWS_H
10*415ef601SStephan Aßmus 
11*415ef601SStephan Aßmus #include <ListItem.h>
12*415ef601SStephan Aßmus #include <ListView.h>
13*415ef601SStephan Aßmus #include <Message.h>
14*415ef601SStephan Aßmus 
15*415ef601SStephan Aßmus enum {
16*415ef601SStephan Aßmus 	FLAGS_NONE			= 0x00,
17*415ef601SStephan Aßmus 	FLAGS_TINTED_LINE	= 0x01,
18*415ef601SStephan Aßmus 	FLAGS_FOCUSED		= 0x02,
19*415ef601SStephan Aßmus };
20*415ef601SStephan Aßmus 
21*415ef601SStephan Aßmus // portion of the listviews height that triggers autoscrolling
22*415ef601SStephan Aßmus // when the mouse is over it with a dragmessage
23*415ef601SStephan Aßmus #define SCROLL_AREA			0.1
24*415ef601SStephan Aßmus 
25*415ef601SStephan Aßmus class BMessageRunner;
26*415ef601SStephan Aßmus class BMessageFilter;
27*415ef601SStephan Aßmus class InterfaceWindow;
28*415ef601SStephan Aßmus class BScrollView;
29*415ef601SStephan Aßmus 
30*415ef601SStephan Aßmus // SimpleItem
31*415ef601SStephan Aßmus class SimpleItem : public BStringItem {
32*415ef601SStephan Aßmus  public:
33*415ef601SStephan Aßmus 							SimpleItem(const char* name);
34*415ef601SStephan Aßmus 		virtual				~SimpleItem();
35*415ef601SStephan Aßmus 
36*415ef601SStephan Aßmus 		virtual	void		Draw(BView* owner, BRect frame,
37*415ef601SStephan Aßmus 								 uint32 flags);
38*415ef601SStephan Aßmus 		virtual	void		DrawBackground(BView* owner, BRect frame,
39*415ef601SStephan Aßmus 								  uint32 flags);
40*415ef601SStephan Aßmus };
41*415ef601SStephan Aßmus 
42*415ef601SStephan Aßmus // DragSortableListView
43*415ef601SStephan Aßmus class DragSortableListView : public BListView {
44*415ef601SStephan Aßmus  public:
45*415ef601SStephan Aßmus 							DragSortableListView(BRect frame, const char* name,
46*415ef601SStephan Aßmus 								list_view_type type = B_SINGLE_SELECTION_LIST,
47*415ef601SStephan Aßmus 								uint32 resizingMode = B_FOLLOW_LEFT
48*415ef601SStephan Aßmus 									| B_FOLLOW_TOP,
49*415ef601SStephan Aßmus 								uint32 flags = B_WILL_DRAW | B_NAVIGABLE
50*415ef601SStephan Aßmus 									| B_FRAME_EVENTS);
51*415ef601SStephan Aßmus 	virtual					~DragSortableListView();
52*415ef601SStephan Aßmus 
53*415ef601SStephan Aßmus 	// BListView interface
54*415ef601SStephan Aßmus 	virtual	void			AttachedToWindow();
55*415ef601SStephan Aßmus 	virtual	void			DetachedFromWindow();
56*415ef601SStephan Aßmus 	virtual	void			FrameResized(float width, float height);
57*415ef601SStephan Aßmus 	virtual	void			Draw(BRect updateRect);
58*415ef601SStephan Aßmus 	virtual	void			ScrollTo(BPoint where);
59*415ef601SStephan Aßmus 	virtual	void			TargetedByScrollView(BScrollView* scrollView);
60*415ef601SStephan Aßmus 	virtual	bool			InitiateDrag(BPoint point, int32 index,
61*415ef601SStephan Aßmus 										 bool wasSelected);
62*415ef601SStephan Aßmus 	virtual void			MessageReceived(BMessage* message);
63*415ef601SStephan Aßmus 	virtual	void			KeyDown(const char* bytes, int32 numBytes);
64*415ef601SStephan Aßmus 	virtual	void			MouseDown(BPoint where);
65*415ef601SStephan Aßmus 	virtual void			MouseMoved(BPoint where, uint32 transit,
66*415ef601SStephan Aßmus 									   const BMessage* dragMessage);
67*415ef601SStephan Aßmus 	virtual void			MouseUp(BPoint where);
68*415ef601SStephan Aßmus 	virtual	void			WindowActivated(bool active);
69*415ef601SStephan Aßmus 	virtual void			DrawItem(BListItem *item, BRect itemFrame,
70*415ef601SStephan Aßmus 									 bool complete = false);
71*415ef601SStephan Aßmus 
72*415ef601SStephan Aßmus 	// DragSortableListView
73*415ef601SStephan Aßmus 	virtual	void			SetDragCommand(uint32 command);
74*415ef601SStephan Aßmus 	virtual	void			ModifiersChanged();	// called by window
75*415ef601SStephan Aßmus 	virtual	void			DoubleClicked(int32 index) {}
76*415ef601SStephan Aßmus 
77*415ef601SStephan Aßmus 	virtual	void			SetItemFocused(int32 index);
78*415ef601SStephan Aßmus 
79*415ef601SStephan Aßmus 	virtual	bool			AcceptDragMessage(const BMessage* message) const;
80*415ef601SStephan Aßmus 	virtual	void			SetDropTargetRect(const BMessage* message,
81*415ef601SStephan Aßmus 											  BPoint where);
82*415ef601SStephan Aßmus 
83*415ef601SStephan Aßmus 	// autoscrolling
84*415ef601SStephan Aßmus 			void			SetAutoScrolling(bool enable);
85*415ef601SStephan Aßmus 			bool			DoesAutoScrolling() const;
86*415ef601SStephan Aßmus 			BScrollView*	ScrollView() const
87*415ef601SStephan Aßmus 								{ return fScrollView; }
88*415ef601SStephan Aßmus 			void			ScrollTo(int32 index);
89*415ef601SStephan Aßmus 
90*415ef601SStephan Aßmus 			bool			MouseWheelChanged(float x, float y);
91*415ef601SStephan Aßmus 
92*415ef601SStephan Aßmus 	virtual	void			MoveItems(BList& indices, int32 toIndex);
93*415ef601SStephan Aßmus 	virtual	void			CopyItems(BList& indices, int32 toIndex);
94*415ef601SStephan Aßmus 	virtual	void			RemoveItemList(BList& indices);
95*415ef601SStephan Aßmus 			void			RemoveSelected(); // uses RemoveItemList()
96*415ef601SStephan Aßmus 			int32			CountSelectedItems() const;
97*415ef601SStephan Aßmus 			void			SelectAll();
98*415ef601SStephan Aßmus 	virtual	bool			DeleteItem(int32 index);
99*415ef601SStephan Aßmus 
100*415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const = 0;
101*415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
102*415ef601SStephan Aßmus 										 BRect itemFrame) const = 0;
103*415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const = 0;
104*415ef601SStephan Aßmus 
105*415ef601SStephan Aßmus  private:
106*415ef601SStephan Aßmus 			void			_RemoveDropAnticipationRect();
107*415ef601SStephan Aßmus 			void			_SetDragMessage(const BMessage* message);
108*415ef601SStephan Aßmus 
109*415ef601SStephan Aßmus 	BRect					fDropRect;
110*415ef601SStephan Aßmus 	BMessage				fDragMessageCopy;
111*415ef601SStephan Aßmus 	BMessageRunner*			fScrollPulse;
112*415ef601SStephan Aßmus 	BPoint					fLastMousePos;
113*415ef601SStephan Aßmus 
114*415ef601SStephan Aßmus  protected:
115*415ef601SStephan Aßmus 			void			_SetDropAnticipationRect(BRect r);
116*415ef601SStephan Aßmus 			void			_SetDropIndex(int32 index);
117*415ef601SStephan Aßmus 
118*415ef601SStephan Aßmus 	int32					fDropIndex;
119*415ef601SStephan Aßmus 	BListItem*				fLastClickedItem;
120*415ef601SStephan Aßmus 	BScrollView*			fScrollView;
121*415ef601SStephan Aßmus 	uint32					fDragCommand;
122*415ef601SStephan Aßmus 	int32					fFocusedIndex;
123*415ef601SStephan Aßmus };
124*415ef601SStephan Aßmus 
125*415ef601SStephan Aßmus // SimpleListView
126*415ef601SStephan Aßmus class SimpleListView : public DragSortableListView {
127*415ef601SStephan Aßmus  public:
128*415ef601SStephan Aßmus 							SimpleListView(BRect frame,
129*415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL);
130*415ef601SStephan Aßmus 							SimpleListView(BRect frame, const char* name,
131*415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL,
132*415ef601SStephan Aßmus 								list_view_type type = B_MULTIPLE_SELECTION_LIST,
133*415ef601SStephan Aßmus 								uint32 resizingMode = B_FOLLOW_ALL_SIDES,
134*415ef601SStephan Aßmus 								uint32 flags = B_WILL_DRAW | B_NAVIGABLE
135*415ef601SStephan Aßmus 									| B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE);
136*415ef601SStephan Aßmus 							~SimpleListView();
137*415ef601SStephan Aßmus 
138*415ef601SStephan Aßmus 	// DragSortableListView interface
139*415ef601SStephan Aßmus 	virtual void			MessageReceived(BMessage* message);
140*415ef601SStephan Aßmus 	virtual	void			SelectionChanged();
141*415ef601SStephan Aßmus 
142*415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const;
143*415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
144*415ef601SStephan Aßmus 										 BRect itemFrame) const;
145*415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const;
146*415ef601SStephan Aßmus 
147*415ef601SStephan Aßmus  private:
148*415ef601SStephan Aßmus 
149*415ef601SStephan Aßmus 	BMessage*				fSelectionChangeMessage;
150*415ef601SStephan Aßmus };
151*415ef601SStephan Aßmus 
152*415ef601SStephan Aßmus #endif // LIST_VIEWS_H
153