1/*
2 * Copyright 2001-2010, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Mark Hogben
7 *		DarkWyrm <bpmagic@columbus.rr.com>
8 *		Axel D��rfler, axeld@pinc-software.de
9 *		Philippe Saint-Pierre, stpere@gmail.com
10 *		Stephan A��mus <superstippi@gmx.de>
11 */
12#ifndef FONT_SELECTION_VIEW_H
13#define FONT_SELECTION_VIEW_H
14
15
16#include <Font.h>
17#include <Handler.h>
18
19class BLayoutItem;
20class BBox;
21class BMenu;
22class BMenuField;
23class BPopUpMenu;
24class BStringView;
25class BView;
26
27
28class FontSelectionView : public BHandler {
29public:
30								FontSelectionView(const char* name,
31									const char* label, bool separateStyles,
32									const BFont* font = NULL);
33	virtual						~FontSelectionView();
34
35			void				AttachedToLooper();
36	virtual void				MessageReceived(BMessage* message);
37
38			void				SetMessage(BMessage* message);
39			void				SetTarget(BHandler* target);
40
41			void				SetFont(const BFont& font, float size);
42			void				SetFont(const BFont& font);
43			void				SetSize(float size);
44			const BFont&		Font() const;
45
46			void				SetDefaults();
47			void				Revert();
48			bool				IsDefaultable();
49			bool				IsRevertable();
50
51			void				UpdateFontsMenu();
52
53			BLayoutItem*	 	CreateSizesLabelLayoutItem();
54			BLayoutItem*		CreateSizesMenuBarLayoutItem();
55
56			BLayoutItem* 		CreateFontsLabelLayoutItem();
57			BLayoutItem*		CreateFontsMenuBarLayoutItem();
58
59			BLayoutItem* 		CreateStylesLabelLayoutItem();
60			BLayoutItem*		CreateStylesMenuBarLayoutItem();
61
62			BView*				PreviewBox() const;
63
64private:
65			void				_Invoke();
66
67			BFont				_DefaultFont() const;
68			void				_SelectCurrentFont(bool select);
69			void				_SelectCurrentSize(bool select);
70			void				_UpdateFontPreview();
71			void				_BuildSizesMenu();
72			void				_AddStylesToMenu(const BFont& font,
73									BMenu* menu) const;
74
75protected:
76			BMenuField*			fFontsMenuField;
77			BMenuField*			fStylesMenuField;
78			BMenuField*			fSizesMenuField;
79			BPopUpMenu*			fFontsMenu;
80			BPopUpMenu*			fStylesMenu;
81			BPopUpMenu*			fSizesMenu;
82			BStringView*		fPreviewText;
83			BBox*				fPreviewBox;
84
85			BFont				fSavedFont;
86			BFont				fCurrentFont;
87
88			BMessage*			fMessage;
89			BHandler*			fTarget;
90};
91
92#endif	// FONT_SELECTION_VIEW_H
93