1/*
2 * Copyright 2006-2011, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus <superstippi@gmx.de>
7 */
8#ifndef STYLE_VIEW_H
9#define STYLE_VIEW_H
10
11
12#include "IconBuild.h"
13#include "Observer.h"
14
15#include <Referenceable.h>
16#include <View.h>
17
18
19class BMenu;
20class BMenuField;
21class CommandStack;
22class CurrentColor;
23class GradientControl;
24
25_BEGIN_ICON_NAMESPACE
26	class Gradient;
27	class Style;
28_END_ICON_NAMESPACE
29
30_USING_ICON_NAMESPACE
31
32
33// TODO: write lock the document when changing something...
34
35enum {
36	MSG_STYLE_TYPE_CHANGED	= 'stch',
37};
38
39class StyleView : public BView, public Observer {
40public:
41									StyleView(BRect frame);
42	virtual							~StyleView();
43
44	// BView interface
45	virtual	void					AttachedToWindow();
46	virtual	void					FrameResized(float width, float height);
47	virtual	void					MessageReceived(BMessage* message);
48
49	virtual	BSize					MinSize();
50
51	// Observer interface
52	virtual	void					ObjectChanged(const Observable* object);
53
54	// StyleView
55			void					SetStyle(Style* style);
56			void					SetCommandStack(CommandStack* stack);
57			void					SetCurrentColor(CurrentColor* color);
58
59private:
60			void					_SetGradient(Gradient* gradient,
61										bool forceControlUpdate = false,
62										bool sendMessage = false);
63			void					_MarkType(BMenu* menu, int32 type) const;
64			void					_SetStyleType(int32 type);
65			void					_SetGradientType(int32 type);
66			void					_AdoptCurrentColor(rgb_color color);
67			void					_TransferGradientStopColor();
68
69private:
70			CommandStack*			fCommandStack;
71			CurrentColor*			fCurrentColor;
72
73			Style*					fStyle;
74			BReference<Gradient>	fGradient;
75			bool					fIgnoreCurrentColorNotifications;
76			bool					fIgnoreControlGradientNotifications;
77
78			GradientControl*		fGradientControl;
79			BMenuField*				fStyleType;
80			BMenuField*				fGradientType;
81
82			BRect					fPreviousBounds;
83};
84
85
86#endif // STYLE_VIEW_H
87