1/*
2 * Copyright 2006-2007, 2023, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus <superstippi@gmx.de>
7 *		Zardshard
8 */
9#ifndef TRANSFORMER_LIST_VIEW_H
10#define TRANSFORMER_LIST_VIEW_H
11
12
13#include "Container.h"
14#include "ListViews.h"
15#include "IconBuild.h"
16
17
18class BMenu;
19class BMenuItem;
20class CommandStack;
21class TransformerItem;
22class Selection;
23
24_BEGIN_ICON_NAMESPACE
25	class Shape;
26	class Transformer;
27_END_ICON_NAMESPACE
28
29
30class TransformerListView : public SimpleListView,
31							public ContainerListener<Transformer> {
32 public:
33	enum {
34		kSelectionArchiveCode		= 'strn',
35	};
36								TransformerListView(BRect frame,
37											  const char* name,
38											  BMessage* selectionMessage = NULL,
39											  BHandler* target = NULL);
40	virtual						~TransformerListView();
41
42	// SimpleListView interface
43	virtual	void				Draw(BRect updateRect);
44
45	virtual	void				SelectionChanged();
46
47	virtual	void				MessageReceived(BMessage* message);
48
49	virtual	status_t			ArchiveSelection(BMessage* into, bool deep = true) const;
50	virtual	bool				InstantiateSelection(const BMessage* archive, int32 dropIndex);
51
52	virtual	void				MoveItems(BList& items, int32 toIndex);
53	virtual	void				CopyItems(BList& items, int32 toIndex);
54	virtual	void				RemoveItemList(BList& items);
55
56	virtual	BListItem*			CloneItem(int32 atIndex) const;
57
58	virtual	int32				IndexOfSelectable(Selectable* selectable) const;
59	virtual	Selectable*			SelectableFor(BListItem* item) const;
60
61	// ContainerListener<Transformer> interface
62	virtual	void				ItemAdded(Transformer* transformer, int32 index);
63	virtual	void				ItemRemoved(Transformer* transformer);
64
65	// TransformerListView
66			void				SetMenu(BMenu* menu);
67			void				SetShape(Shape* shape);
68			void				SetCommandStack(CommandStack* stack);
69
70 private:
71			bool				_AddTransformer(
72									Transformer* transformer, int32 index);
73			bool				_RemoveTransformer(
74									Transformer* transformer);
75
76			TransformerItem*	_ItemForTransformer(
77									Transformer* transformer) const;
78
79			void				_UpdateMenu();
80
81			BMessage*			fMessage;
82
83			Shape*				fShape;
84			CommandStack*		fCommandStack;
85
86			BMenu*				fMenu;
87			BMenuItem*			fContourMI;
88			BMenuItem*			fStrokeMI;
89			BMenuItem*			fPerspectiveMI;
90};
91
92#endif // TRANSFORMER_LIST_VIEW_H
93