xref: /haiku/src/apps/mediaplayer/playlist/ListViews.h (revision bae0154ca35cc1f8187cf9d09b63e0b08a41ad4f)
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
DoubleClicked(int32 index)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;
ScrollView()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 
92*bae0154cSStephan Aßmus 	virtual	void			MoveItems(const BList& indices, int32 toIndex);
93*bae0154cSStephan Aßmus 	virtual	void			CopyItems(const BList& indices, int32 toIndex);
94*bae0154cSStephan Aßmus 	virtual	void			RemoveItemList(const BList& indices);
95*bae0154cSStephan Aßmus 
96*bae0154cSStephan Aßmus 			void			GetSelectedItems(BList& indices);
97415ef601SStephan Aßmus 			void			RemoveSelected(); // uses RemoveItemList()
98e9246c71SStephan Aßmus 			void			RemoveAll(); // uses RemoveItemList()
99415ef601SStephan Aßmus 			int32			CountSelectedItems() const;
100415ef601SStephan Aßmus 			void			SelectAll();
101415ef601SStephan Aßmus 	virtual	bool			DeleteItem(int32 index);
102415ef601SStephan Aßmus 
103415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const = 0;
104415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
105415ef601SStephan Aßmus 										 BRect itemFrame) const = 0;
106415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const = 0;
107415ef601SStephan Aßmus 
108415ef601SStephan Aßmus  private:
109415ef601SStephan Aßmus 			void			_RemoveDropAnticipationRect();
110415ef601SStephan Aßmus 			void			_SetDragMessage(const BMessage* message);
111415ef601SStephan Aßmus 
112415ef601SStephan Aßmus 	BRect					fDropRect;
113415ef601SStephan Aßmus 	BMessage				fDragMessageCopy;
114415ef601SStephan Aßmus 	BMessageRunner*			fScrollPulse;
115415ef601SStephan Aßmus 	BPoint					fLastMousePos;
116415ef601SStephan Aßmus 
117415ef601SStephan Aßmus  protected:
118415ef601SStephan Aßmus 			void			_SetDropAnticipationRect(BRect r);
119415ef601SStephan Aßmus 			void			_SetDropIndex(int32 index);
120415ef601SStephan Aßmus 
121415ef601SStephan Aßmus 	int32					fDropIndex;
122415ef601SStephan Aßmus 	BListItem*				fLastClickedItem;
123415ef601SStephan Aßmus 	BScrollView*			fScrollView;
124415ef601SStephan Aßmus 	uint32					fDragCommand;
125415ef601SStephan Aßmus 	int32					fFocusedIndex;
126415ef601SStephan Aßmus };
127415ef601SStephan Aßmus 
128415ef601SStephan Aßmus // SimpleListView
129415ef601SStephan Aßmus class SimpleListView : public DragSortableListView {
130415ef601SStephan Aßmus  public:
131415ef601SStephan Aßmus 							SimpleListView(BRect frame,
132415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL);
133415ef601SStephan Aßmus 							SimpleListView(BRect frame, const char* name,
134415ef601SStephan Aßmus 								BMessage* selectionChangeMessage = NULL,
135415ef601SStephan Aßmus 								list_view_type type = B_MULTIPLE_SELECTION_LIST,
136415ef601SStephan Aßmus 								uint32 resizingMode = B_FOLLOW_ALL_SIDES,
137415ef601SStephan Aßmus 								uint32 flags = B_WILL_DRAW | B_NAVIGABLE
138415ef601SStephan Aßmus 									| B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE);
139415ef601SStephan Aßmus 							~SimpleListView();
140415ef601SStephan Aßmus 
141415ef601SStephan Aßmus 	// DragSortableListView interface
142415ef601SStephan Aßmus 	virtual void			MessageReceived(BMessage* message);
143415ef601SStephan Aßmus 	virtual	void			SelectionChanged();
144415ef601SStephan Aßmus 
145415ef601SStephan Aßmus 	virtual	BListItem*		CloneItem(int32 atIndex) const;
146415ef601SStephan Aßmus 	virtual	void			DrawListItem(BView* owner, int32 index,
147415ef601SStephan Aßmus 										 BRect itemFrame) const;
148415ef601SStephan Aßmus 	virtual	void			MakeDragMessage(BMessage* message) const;
149415ef601SStephan Aßmus 
150415ef601SStephan Aßmus  private:
151415ef601SStephan Aßmus 
152415ef601SStephan Aßmus 	BMessage*				fSelectionChangeMessage;
153415ef601SStephan Aßmus };
154415ef601SStephan Aßmus 
155415ef601SStephan Aßmus #endif // LIST_VIEWS_H
156