BView* SettingsWindow::_CreateFontsPage(float spacing) { fStandardFontView = new FontSelectionView("standard", B_TRANSLATE("Standard font:"), true, be_plain_font); BFont defaultSerifFont = _FindDefaultSerifFont(); fSerifFontView = new FontSelectionView("serif", B_TRANSLATE("Serif font:"), true, &defaultSerifFont); fSansSerifFontView = new FontSelectionView("sans serif", B_TRANSLATE("Sans serif font:"), true, be_plain_font); fFixedFontView = new FontSelectionView("fixed", B_TRANSLATE("Fixed font:"), true, be_fixed_font); fStandardSizesMenu = new BMenuField("standard font size", B_TRANSLATE("Default standard font size:"), new BPopUpMenu("sizes"), B_WILL_DRAW); _BuildSizesMenu(fStandardSizesMenu->Menu(), MSG_STANDARD_FONT_SIZE_SELECTED); fFixedSizesMenu = new BMenuField("fixed font size", B_TRANSLATE("Default fixed font size:"), new BPopUpMenu("sizes"), B_WILL_DRAW); _BuildSizesMenu(fFixedSizesMenu->Menu(), MSG_FIXED_FONT_SIZE_SELECTED); BView* view = BGridLayoutBuilder(spacing / 2, spacing / 2) .Add(fStandardFontView->CreateFontsLabelLayoutItem(), 0, 0) .Add(fStandardFontView->CreateFontsMenuBarLayoutItem(), 1, 0) .Add(fStandardFontView->PreviewBox(), 0, 1, 2) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing), 0, 2, 2) .Add(fSerifFontView->CreateFontsLabelLayoutItem(), 0, 3) .Add(fSerifFontView->CreateFontsMenuBarLayoutItem(), 1, 3) .Add(fSerifFontView->PreviewBox(), 0, 4, 2) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing), 0, 5, 2) .Add(fSansSerifFontView->CreateFontsLabelLayoutItem(), 0, 6) .Add(fSansSerifFontView->CreateFontsMenuBarLayoutItem(), 1, 6) .Add(fSansSerifFontView->PreviewBox(), 0, 7, 2) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing), 0, 8, 2) .Add(fFixedFontView->CreateFontsLabelLayoutItem(), 0, 9) .Add(fFixedFontView->CreateFontsMenuBarLayoutItem(), 1, 9) .Add(fFixedFontView->PreviewBox(), 0, 10, 2) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing), 0, 11, 2) .Add(fStandardSizesMenu->CreateLabelLayoutItem(), 0, 12) .Add(fStandardSizesMenu->CreateMenuBarLayoutItem(), 1, 12) .Add(fFixedSizesMenu->CreateLabelLayoutItem(), 0, 13) .Add(fFixedSizesMenu->CreateMenuBarLayoutItem(), 1, 13) .SetInsets(spacing, spacing, spacing, spacing) .View() ; view->SetName(B_TRANSLATE("Fonts")); return view; }
FontSelectionView::FontSelectionView(const char* name, const char* label, const BFont* currentFont) : BView(name, B_WILL_DRAW), fMessageTarget(this) { if (currentFont == NULL) { if (!strcmp(Name(), "plain")) fCurrentFont = *be_plain_font; else if (!strcmp(Name(), "bold")) fCurrentFont = *be_bold_font; else if (!strcmp(Name(), "fixed")) fCurrentFont = *be_fixed_font; else if (!strcmp(Name(), "menu")) { menu_info info; get_menu_info(&info); fCurrentFont.SetFamilyAndStyle(info.f_family, info.f_style); fCurrentFont.SetSize(info.font_size); } } else fCurrentFont = *currentFont; fSavedFont = fCurrentFont; fSizesMenu = new BPopUpMenu("size menu"); _BuildSizesMenu(); fFontsMenu = new BPopUpMenu("font menu"); // font menu fFontsMenuField = new BMenuField("fonts", label, fFontsMenu); fFontsMenuField->SetAlignment(B_ALIGN_RIGHT); // size menu fSizesMenuField = new BMenuField("size", B_TRANSLATE("Size:"), fSizesMenu); fSizesMenuField->SetAlignment(B_ALIGN_RIGHT); // preview fPreviewText = new BStringView("preview text", B_TRANSLATE_COMMENT("The quick brown fox jumps over the lazy dog.", "Don't translate this literally ! Use a phrase showing all chars " "from A to Z.")); fPreviewText->SetFont(&fCurrentFont); fPreviewText->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); // box around preview fPreviewBox = new BBox("preview box", B_WILL_DRAW | B_FRAME_EVENTS); fPreviewBox->AddChild(BGroupLayoutBuilder(B_HORIZONTAL) .Add(fPreviewText) .SetInsets(B_USE_SMALL_SPACING, B_USE_SMALL_SPACING, B_USE_SMALL_SPACING, B_USE_SMALL_SPACING) .TopView() ); }
void FontSelectionView::AttachedToLooper() { _BuildSizesMenu(); UpdateFontsMenu(); }