xref: /haiku/src/apps/mediaplayer/playlist/ListViews.h (revision e9246c710e3b62ee4cb64eafcb896f46c98e62f8)
1415ef601SStephan Aßmus /*
2415ef601SStephan Aßmus  * Copyright 2006-2007, Haiku. All rights reserved.
3415ef601SStephan Aßmus  * Distributed under the terms of the MIT License.
4415ef601SStephan Aßmus  *
5415ef601SStephan Aßmus  * Authors:
6415ef601SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7415ef601SStephan Aßmus  */
8415ef601SStephan Aßmus #ifndef LIST_VIEWS_H
9415ef601SStephan Aßmus #define LIST_VIEWS_H
10415ef601SStephan Aßmus 
11415ef601SStephan Aßmus #include <ListItem.h>
12415ef601SStephan Aßmus #include <ListView.h>
13415ef601SStephan Aßmus #include <Message.h>
14415ef601SStephan Aßmus 
15415ef601SStephan Aßmus enum {
16415ef601SStephan Aßmus 	FLAGS_NONE			= 0x00,
17415ef601SStephan Aßmus 	FLAGS_TINTED_LINE	= 0x01,
18415ef601SStephan Aßmus 	FLAGS_FOCUSED		= 0x02,
19415ef601SStephan Aßmus };
20415ef601SStephan Aßmus 
21415ef601SStephan Aßmus // portion of the listviews height that triggers autoscrolling
22415ef601SStephan Aßmus // when the mouse is over it with a dragmessage
23415ef601SStephan Aßmus #define SCROLL_AREA			0.1
24415ef601SStephan Aßmus 
25415ef601SStephan Aßmus class BMessageRunner;
26415ef601SStephan Aßmus class BMessageFilter;
27415ef601SStephan Aßmus class InterfaceWindow;
28415ef601SStephan Aßmus class BScrollView;
29415ef601SStephan Aßmus 
30415ef601SStephan Aßmus // SimpleItem
31415ef601SStephan Aßmus class SimpleItem : public BStringItem {
32415ef601SStephan Aßmus  public:
33415ef601SStephan Aßmus 							SimpleItem(const char* name);
34415ef601SStephan Aßmus 		virtual				~SimpleItem();
35415ef601SStephan Aßmus 
36415ef601SStephan Aßmus 		virtual	void		Draw(BView* owner, BRect frame,
37415ef601SStephan Aßmus 								 uint32 flags);
38415ef601SStephan Aßmus 		virtual	void		DrawBackground(BView* owner, BRect frame,
39415ef601SStephan Aßmus 								  uint32 flags);
40415ef601SStephan Aßmus };
41415ef601SStephan Aßmus 
42415ef601SStephan Aßmus // DragSortableListView
43415ef601SStephan Aßmus class DragSortableListView : public BListView {
44415ef601SStephan Aßmus  public:
45415ef601SStephan Aßmus 							DragSortableListView(BRect frame, const char* name,
46415ef601SStephan Aßmus 								list_view_type type = B_SINGLE_SELECTION_LIST,
47415ef601SStephan Aßmus 								uint32 resizingMode = B_FOLLOW_LEFT
48415ef601SStephan Aßmus 									| B_FOLLOW_TOP,
49415ef601SStephan Aßmus 								uint32 flags = B_WILL_DRAW | B_NAVIGABLE
50415ef601SStephan Aßmus 									| B_FRAME_EVENTS);
51415ef601SStephan Aßmus 	virtual					~DragSortableListView();
52415ef601SStephan Aßmus 
53415ef601SStephan Aßmus 	// BListView interface
54415ef601SStephan Aßmus 	virtual	void			AttachedToWindow();
55415ef601SStephan Aßmus 	virtual	void			DetachedFromWindow();
56415ef601SStephan Aßmus 	virtual	void			FrameResized(float width, float height);
57415ef601SStephan Aßmus 	virtual	void			Draw(BRect updateRect);
58415ef601SStephan Aßmus 	virtual	void			ScrollTo(BPoint where);
59415ef601SStephan Aßmus 	virtual	void			TargetedByScrollView(BScrollView* scrollView);
60415ef601SStephan Aßmus 	virtual	bool			InitiateDrag(BPoint point, int32 index,
61415ef601SStephan Aßmus 										 bool wasSelected);
62415ef601SStephan Aßmus 	virtual void			MessageReceived(BMessage* message);
63415ef601SStephan Aßmus 	virtual	void			KeyDown(const char* bytes, int32 numBytes);
64415ef601SStephan Aßmus 	virtual	void			MouseDown(BPoint where);
65415ef601SStephan Aßmus 	virtual void			MouseMoved(BPoint where, uint32 transit,
66415ef601SStephan Aßmus 									   const BMessage* dragMessage);
67415ef601SStephan Aßmus 	virtual void			MouseUp(BPoint where);
68415ef601SStephan Aßmus 	virtual	void			WindowActivated(bool active);
69415ef601SStephan Aßmus 	virtual void			DrawItem(BListItem *item, BRect itemFrame,
70415ef601SStephan Aßmus 									 bool complete = false);
71415ef601SStephan Aßmus 
72415ef601SStephan Aßmus 	// DragSortableListView
73415ef601SStephan Aßmus 	virtual	void			SetDragCommand(uint32 command);
74415ef601SStephan Aßmus 	virtual	void			ModifiersChanged();	// called by window
75415ef601SStephan Aßmus 	virtual	void			DoubleClicked(int32 index) {}
76415ef601SStephan Aßmus 
77415ef601SStephan Aßmus 	virtual	void			SetItemFocused(int32 index);
78415ef601SStephan Aßmus 
79415ef601SStephan Aßmus 	virtual	bool			AcceptDragMessage(const BMessage* message) const;
80415ef601SStephan Aßmus 	virtual	void			SetDropTargetRect(const BMessage* message,
81415ef601SStephan Aßmus 											  BPoint where);
82415ef601SStephan Aßmus 
83415ef601SStephan Aßmus 	// autoscrolling
84415ef601SStephan Aßmus 			void			SetAutoScrolling(bool enable);
85415ef601SStephan Aßmus 			bool			DoesAutoScrolling() const;
86415ef601SStephan Aßmus 			BScrollView*	ScrollView() const
87415ef601SStephan Aßmus 								{ return fScrollView; }
88415ef601SStephan Aßmus 			void			ScrollTo(int32 index);
89415ef601SStephan Aßmus 
90415ef601SStephan Aßmus 			bool			MouseWheelChanged(float x, float y);
91415ef601SStephan Aßmus 
92415ef601SStephan Aßmus 	virtual	void			MoveItems(BList& indices, int32 toIndex);
93415ef601SStephan Aßmus 	virtual	void			CopyItems(BList& indices, int32 toIndex);
94415ef601SStephan Aßmus 	virtual	void			RemoveItemList(BList& indices);
95415ef601SStephan Aßmus 			void			RemoveSelected(); // uses RemoveItemList()
96*e9246c71SStephan Aßmus 			void			RemoveAll(); // uses RemoveItemList()
97415ef601SStephan Aßmus 			int32			CountSelectedItems() const;
98415ef601SStephan Aßmus 			void			SelectAll();
99415ef601SStephan Aßmus 	virtual	bool			DeleteItem(int32 index);
100415ef601SStephan Aßmus 
101415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const = 0;
102415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
103415ef601SStephan Aßmus 										 BRect itemFrame) const = 0;
104415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const = 0;
105415ef601SStephan Aßmus 
106415ef601SStephan Aßmus  private:
107415ef601SStephan Aßmus 			void			_RemoveDropAnticipationRect();
108415ef601SStephan Aßmus 			void			_SetDragMessage(const BMessage* message);
109415ef601SStephan Aßmus 
110415ef601SStephan Aßmus 	BRect					fDropRect;
111415ef601SStephan Aßmus 	BMessage				fDragMessageCopy;
112415ef601SStephan Aßmus 	BMessageRunner*			fScrollPulse;
113415ef601SStephan Aßmus 	BPoint					fLastMousePos;
114415ef601SStephan Aßmus 
115415ef601SStephan Aßmus  protected:
116415ef601SStephan Aßmus 			void			_SetDropAnticipationRect(BRect r);
117415ef601SStephan Aßmus 			void			_SetDropIndex(int32 index);
118415ef601SStephan Aßmus 
119415ef601SStephan Aßmus 	int32					fDropIndex;
120415ef601SStephan Aßmus 	BListItem*				fLastClickedItem;
121415ef601SStephan Aßmus 	BScrollView*			fScrollView;
122415ef601SStephan Aßmus 	uint32					fDragCommand;
123415ef601SStephan Aßmus 	int32					fFocusedIndex;
124415ef601SStephan Aßmus };
125415ef601SStephan Aßmus 
126415ef601SStephan Aßmus // SimpleListView
127415ef601SStephan Aßmus class SimpleListView : public DragSortableListView {
128415ef601SStephan Aßmus  public:
129415ef601SStephan Aßmus 							SimpleListView(BRect frame,
130415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL);
131415ef601SStephan Aßmus 							SimpleListView(BRect frame, const char* name,
132415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL,
133415ef601SStephan Aßmus 								list_view_type type = B_MULTIPLE_SELECTION_LIST,
134415ef601SStephan Aßmus 								uint32 resizingMode = B_FOLLOW_ALL_SIDES,
135415ef601SStephan Aßmus 								uint32 flags = B_WILL_DRAW | B_NAVIGABLE
136415ef601SStephan Aßmus 									| B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE);
137415ef601SStephan Aßmus 							~SimpleListView();
138415ef601SStephan Aßmus 
139415ef601SStephan Aßmus 	// DragSortableListView interface
140415ef601SStephan Aßmus 	virtual void			MessageReceived(BMessage* message);
141415ef601SStephan Aßmus 	virtual	void			SelectionChanged();
142415ef601SStephan Aßmus 
143415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const;
144415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
145415ef601SStephan Aßmus 										 BRect itemFrame) const;
146415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const;
147415ef601SStephan Aßmus 
148415ef601SStephan Aßmus  private:
149415ef601SStephan Aßmus 
150415ef601SStephan Aßmus 	BMessage*				fSelectionChangeMessage;
151415ef601SStephan Aßmus };
152415ef601SStephan Aßmus 
153415ef601SStephan Aßmus #endif // LIST_VIEWS_H
154