docs/ikteam: Delete most files.
[haiku.git] / src / preferences / appearance / FontView.cpp
blobfea39f5f8d05b384eebe0e872a1dd985efc5eb39
1 /*
2 * Copyright 2001-2012, Haiku.
3 * Distributed under the terms of the MIT License.
5 * Authors:
6 * Mark Hogben
7 * DarkWyrm <bpmagic@columbus.rr.com>
8 * Axel Dörfler, axeld@pinc-software.de
9 * Philippe St-Pierre, stpere@gmail.com
10 * Stephan Aßmus <superstippi@gmx.de>
14 #include "FontView.h"
16 #include <string.h>
18 #include <Catalog.h>
19 #include <ControlLook.h>
20 #include <GridLayoutBuilder.h>
21 #include <GroupLayoutBuilder.h>
22 #include <Locale.h>
23 #include <MessageRunner.h>
24 #include <SpaceLayoutItem.h>
26 #include "APRWindow.h"
27 #include "FontSelectionView.h"
30 #undef B_TRANSLATION_CONTEXT
31 #define B_TRANSLATION_CONTEXT "Font view"
34 static const uint32 kMsgCheckFonts = 'chkf';
37 static void
38 add_font_selection_view(BGridLayout* layout, FontSelectionView* view,
39 int32& row, bool withExtraSpace)
41 layout->AddItem(view->CreateFontsLabelLayoutItem(), 0, row);
42 layout->AddItem(view->CreateFontsMenuBarLayoutItem(), 1, row);
44 layout->AddItem(BSpaceLayoutItem::CreateGlue(), 2, row);
46 layout->AddItem(view->CreateSizesLabelLayoutItem(), 3, row);
47 layout->AddItem(view->CreateSizesMenuBarLayoutItem(), 4, row);
49 row++;
51 layout->AddItem(BSpaceLayoutItem::CreateGlue(), 0, row);
52 layout->AddView(view->GetPreviewBox(), 1, row, 4);
54 row++;
56 if (withExtraSpace) {
57 layout->AddItem(BSpaceLayoutItem::CreateVerticalStrut(5), 0, row, 5);
58 row++;
63 FontView::FontView(const char* name)
65 BView(name, B_WILL_DRAW )
67 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
69 fPlainView = new FontSelectionView("plain", B_TRANSLATE("Plain font:"));
70 fBoldView = new FontSelectionView("bold", B_TRANSLATE("Bold font:"));
71 fFixedView = new FontSelectionView("fixed", B_TRANSLATE("Fixed font:"));
72 fMenuView = new FontSelectionView("menu", B_TRANSLATE("Menu font:"));
74 BGridLayout* layout = new BGridLayout(5, 5);
75 layout->SetInsets(B_USE_WINDOW_SPACING);
76 SetLayout(layout);
78 int32 row = 0;
79 add_font_selection_view(layout, fPlainView, row, true);
80 add_font_selection_view(layout, fBoldView, row, true);
81 add_font_selection_view(layout, fFixedView, row, true);
82 add_font_selection_view(layout, fMenuView, row, false);
86 void
87 FontView::AttachedToWindow()
89 fPlainView->SetTarget(this);
90 fBoldView->SetTarget(this);
91 fFixedView->SetTarget(this);
92 fMenuView->SetTarget(this);
94 UpdateFonts();
95 fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000);
96 // every 3 seconds
100 void
101 FontView::DetachedFromWindow()
103 delete fRunner;
104 fRunner = NULL;
108 void
109 FontView::SetDefaults()
111 fPlainView->SetDefaults();
112 fBoldView->SetDefaults();
113 fFixedView->SetDefaults();
114 fMenuView->SetDefaults();
118 void
119 FontView::MessageReceived(BMessage* message)
121 switch (message->what) {
122 case kMsgSetSize:
123 case kMsgSetFamily:
124 case kMsgSetStyle:
126 const char* name;
127 if (message->FindString("name", &name) != B_OK)
128 break;
130 if (!strcmp(name, "plain"))
131 fPlainView->MessageReceived(message);
132 else if (!strcmp(name, "bold"))
133 fBoldView->MessageReceived(message);
134 else if (!strcmp(name, "fixed"))
135 fFixedView->MessageReceived(message);
136 else if (!strcmp(name, "menu"))
137 fMenuView->MessageReceived(message);
138 else
139 break;
141 Window()->PostMessage(kMsgUpdate);
142 break;
145 case kMsgCheckFonts:
146 if (update_font_families(true))
147 UpdateFonts();
148 break;
150 default:
151 BView::MessageReceived(message);
156 void
157 FontView::Revert()
159 fPlainView->Revert();
160 fBoldView->Revert();
161 fFixedView->Revert();
162 fMenuView->Revert();
166 void
167 FontView::UpdateFonts()
169 fPlainView->UpdateFontsMenu();
170 fBoldView->UpdateFontsMenu();
171 fFixedView->UpdateFontsMenu();
172 fMenuView->UpdateFontsMenu();
176 bool
177 FontView::IsDefaultable()
179 return fPlainView->IsDefaultable()
180 || fBoldView->IsDefaultable()
181 || fFixedView->IsDefaultable()
182 || fMenuView->IsDefaultable();
186 bool
187 FontView::IsRevertable()
189 return fPlainView->IsRevertable()
190 || fBoldView->IsRevertable()
191 || fFixedView->IsRevertable()
192 || fMenuView->IsRevertable();