1/*
2 * Copyright 2015, Rene Gollent, rene@gollent.com.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef TABLE_CELL_VALUE_EDITOR_H
6#define TABLE_CELL_VALUE_EDITOR_H
7
8#include <Referenceable.h>
9
10#include <util/DoublyLinkedList.h>
11
12
13class BView;
14class Value;
15
16
17class TableCellValueEditor : public BReferenceable {
18public:
19	class Listener;
20								TableCellValueEditor();
21	virtual						~TableCellValueEditor();
22
23			void				AddListener(Listener* listener);
24			void				RemoveListener(Listener* listener);
25
26	inline	Value*				InitialValue() const { return fInitialValue; }
27			void				SetInitialValue(Value* value);
28
29	virtual	BView*				GetView() = 0;
30
31protected:
32			void				NotifyEditBeginning();
33			void				NotifyEditCancelled();
34			void				NotifyEditCompleted(Value* newValue);
35
36private:
37	typedef DoublyLinkedList<Listener> ListenerList;
38
39private:
40			ListenerList		fListeners;
41			Value*				fInitialValue;
42};
43
44
45class TableCellValueEditor::Listener : public
46	DoublyLinkedListLinkImpl<TableCellValueEditor::Listener> {
47public:
48	virtual						~Listener();
49
50	virtual	void				TableCellEditBeginning();
51	virtual	void				TableCellEditCancelled();
52	virtual	void				TableCellEditEnded(Value* newValue);
53};
54
55#endif	// TABLE_CELL_VALUE_EDITOR_H
56