InTextView::InTextView(BRect rect, char *name) : BView(rect, name, B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_FRAME_EVENTS |B_SUBPIXEL_PRECISE) { BRect r; BTabView *tabView; BTab *tab; TOCView *tocView; r = Bounds(); //r.InsetBy(5,5); tabView = new BTabView(r, "tab_view"); tabView->SetViewColor(216,216,216,0); r = tabView->Bounds(); r.InsetBy(5,5); r.bottom -= tabView->TabHeight(); tab = new BTab(); tocView = new TOCView(r, "TOC_View"); tabView->AddTab(tocView, tab); tab->SetLabel("Table of Contents"); tab = new BTab(); unitView = new UnitView(r,"Unit_View"); tabView->AddTab(unitView, tab); tab->SetLabel("Lesson"); AddChild(tabView); }
OpenGLView::OpenGLView() : BGroupView("OpenGLView", B_VERTICAL) { BGLView* glView = new BGLView(BRect(0, 0, 1, 1), "gl info", B_FOLLOW_NONE, 0, BGL_RGB | BGL_DOUBLE); glView->Hide(); AddChild(glView); glView->LockGL(); float tabViewWidth = this->StringWidth("M") * 42; float tabViewHeight = this->StringWidth("M") * 16; BTabView *tabView = new BTabView("tab view", B_WIDTH_FROM_LABEL); tabView->SetExplicitMinSize(BSize(tabViewWidth, tabViewHeight)); tabView->AddTab(new CapabilitiesView()); tabView->AddTab(new ExtensionsView()); glView->UnlockGL(); GroupLayout()->SetSpacing(0); BLayoutBuilder::Group<>(this) .AddGroup(B_HORIZONTAL, 0) .Add(new GearsView()) .AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING) .SetInsets(0, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) .Add(new InfoView()) .Add(tabView) .End() .AddGlue() .End(); }
SettingsWindow::SettingsWindow(BRect frame, SettingsMessage* settings) : BWindow(frame, B_TRANSLATE("Settings"), B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE), fSettings(settings) { fApplyButton = new BButton(B_TRANSLATE("Apply"), new BMessage(MSG_APPLY)); fCancelButton = new BButton(B_TRANSLATE("Cancel"), new BMessage(MSG_CANCEL)); fRevertButton = new BButton(B_TRANSLATE("Revert"), new BMessage(MSG_REVERT)); fOpenFilePanel = NULL; float spacing = be_control_look->DefaultItemSpacing(); BTabView* tabView = new BTabView("settings pages", B_WIDTH_FROM_LABEL); tabView->SetBorder(B_NO_BORDER); BLayoutBuilder::Group<>(this, B_VERTICAL, 0) .SetInsets(0, B_USE_DEFAULT_SPACING, 0, B_USE_WINDOW_SPACING) .Add(tabView) .Add(new BSeparatorView(B_HORIZONTAL)) .AddGroup(B_HORIZONTAL) .SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING, 0) .Add(fRevertButton) .AddGlue() .Add(fCancelButton) .Add(fApplyButton); tabView->AddTab(_CreateGeneralPage(spacing)); tabView->AddTab(_CreateFontsPage(spacing)); tabView->AddTab(_CreateProxyPage(spacing)); _SetupFontSelectionView(fStandardFontView, new BMessage(MSG_STANDARD_FONT_CHANGED)); _SetupFontSelectionView(fSerifFontView, new BMessage(MSG_SERIF_FONT_CHANGED)); _SetupFontSelectionView(fSansSerifFontView, new BMessage(MSG_SANS_SERIF_FONT_CHANGED)); _SetupFontSelectionView(fFixedFontView, new BMessage(MSG_FIXED_FONT_CHANGED)); fApplyButton->MakeDefault(true); if (!frame.IsValid()) CenterOnScreen(); // load settings from disk _RevertSettings(); // apply to WebKit _ApplySettings(); // Start hidden Hide(); Show(); }
void TTimeWindow::_InitWindow() { SetPulseRate(500000); fDateTimeView = new DateTimeView(Bounds()); BRect bounds = fDateTimeView->Bounds(); fTimeZoneView = new TimeZoneView(bounds); fBaseView = new TTimeBaseView(bounds, "baseView"); AddChild(fBaseView); fBaseView->StartWatchingAll(fDateTimeView); fBaseView->StartWatchingAll(fTimeZoneView); bounds.OffsetBy(10.0, 10.0); BTabView *tabView = new BTabView(bounds.InsetByCopy(-5.0, -5.0), "tabView" , B_WIDTH_AS_USUAL, B_FOLLOW_NONE); BTab *tab = new BTab(); tabView->AddTab(fDateTimeView, tab); tab->SetLabel("Date & Time"); tab = new BTab(); tabView->AddTab(fTimeZoneView, tab); tab->SetLabel("Time zone"); fBaseView->AddChild(tabView); tabView->ResizeBy(0.0, tabView->TabHeight()); BRect rect = Bounds(); rect.left = 10; rect.top = rect.bottom - 10; fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW); fRevertButton->ResizeToPreferred(); fRevertButton->SetEnabled(false); float buttonHeight = fRevertButton->Bounds().Height(); fRevertButton->MoveBy(0, -buttonHeight); fBaseView->AddChild(fRevertButton); fRevertButton->SetTarget(this); fBaseView->ResizeTo(tabView->Bounds().Width() + 10.0, tabView->Bounds().Height() + buttonHeight + 30.0); ResizeTo(fBaseView->Bounds().Width(), fBaseView->Bounds().Height()); }
PreferencesWindow::PreferencesWindow() : BWindow(kDefaultFrame, "Preferences", B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE), fTorrentPreferences(NULL), fApplyButton(NULL), fIncompleteFileNaming(NULL), fTorrentSaveLocationPath(NULL), fIncompleteDirEnabled(NULL), fIncompleteDirPath(NULL), fListeningPort(NULL), fRandomPort(NULL), fApplyPort(NULL), fEnableForwardingPort(NULL), fMaxConnection(NULL), fApplyMaxConnection(NULL), fTorrentMaxConnection(NULL), fApplyTorrentMaxConnection(NULL), fEnableDHTValue(NULL), fEnablePEXValue(NULL), fEnableUTPValue(NULL), fEnableLPDValue(NULL), fEncryptionMenu(NULL) { SetLayout(new BGroupLayout(B_VERTICAL)); // // Get the torrent session. // @TODO: clean up this mess.. // fTorrentPreferences = static_cast<TorrentorApp*>(be_app)->Preferences(); float spacing = be_control_look->DefaultItemSpacing(); BTabView* tabView = new BTabView("settings pages", B_WIDTH_FROM_LABEL); tabView->AddTab(_CreateTorrentsPage(spacing)); tabView->AddTab(_CreateConnectionPage(spacing)); AddChild(BGroupLayoutBuilder(B_VERTICAL, spacing) .Add(tabView) .SetInsets(spacing, spacing, spacing, spacing) ); CenterOnScreen(); Run(); }
void SeqPrefWin::AddViews(const BMessage& prefs) { BRect b = Bounds(); /* Add the bottom panel with the Cancel OK buttons. When this * block is done, it will adjust the bounds accordingly (i.e., * without the space used by this view). */ { float buttonW = 60, buttonH = 24; float edgeR = 8, edgeB = 8, edgeT = 8; BRect f(b); f.top = f.bottom - edgeB - buttonH - edgeT; BView* v = new BView( f, "button_panel", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM, 0 ); if( v ) { BRect f( b.right - edgeR - buttonW, edgeT, b.right - edgeR, edgeT + buttonH ); BButton* button = new BButton( f, "ok_button", "OK", new BMessage( OK_MSG ), B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM ); if( button ) { v->AddChild( button ); button->MakeDefault( true ); } f.OffsetBy( 0-(buttonW + 10), 0 ); button = new BButton( f, "cancel_button", "Cancel", new BMessage( CANCEL_MSG ), B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM ); if( button ) v->AddChild( button ); v->SetViewColor( Prefs().Color(AM_AUX_WINDOW_BG_C) ); AddChild( v ); b.bottom = b.bottom - edgeB - buttonH - edgeT - 1; } } BTabView* tv = new BTabView(b, TABVIEW_STR); if (!tv) return; BView* fileView = NewFileView(b, prefs); if (fileView) tv->AddTab(fileView); BView* editView = NewEditView(b, prefs); if (editView) tv->AddTab(editView); BView* playbackView = NewTrackView(b, prefs); if (playbackView) tv->AddTab(playbackView); mFactoryView = NewFactoriesView(b, prefs); if (mFactoryView) tv->AddTab(mFactoryView); AddChild(tv); /* NOTE: Have to do this after the tab view's been added to the window or else * you get a crash. It's a bug in the tab view, nothing to be done about it. */ tv->SetTabWidth(B_WIDTH_FROM_WIDEST); }
OpenGLView::OpenGLView() : BGroupView("OpenGLView", B_VERTICAL) { BGLView* glView = new BGLView(BRect(0, 0, 1, 1), "gl info", B_FOLLOW_NONE, 0, BGL_RGB | BGL_DOUBLE); glView->Hide(); AddChild(glView); glView->LockGL(); BMenu* menu = new BMenu(B_TRANSLATE("Automatic")); menu->SetRadioMode(true); menu->SetLabelFromMarked(true); menu->AddItem(new BMenuItem(B_TRANSLATE("Automatic"), new BMessage(MENU_AUTO_MESSAGE))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Software Rasterizer"), new BMessage(MENU_SWRAST_MESSAGE))); menu->AddItem(new BMenuItem(B_TRANSLATE("Gallium Software Pipe"), new BMessage(MENU_SWPIPE_MESSAGE))); menu->AddItem(new BMenuItem(B_TRANSLATE("Gallium LLVM Pipe"), new BMessage(MENU_SWLLVM_MESSAGE))); BMenuField* menuField = new BMenuField("renderer", B_TRANSLATE("3D Rendering Engine:"), menu); // TODO: Set current Renderer menuField->SetEnabled(false); BTabView *tabView = new BTabView("tab view", B_WIDTH_FROM_LABEL); tabView->AddTab(new InfoView()); tabView->AddTab(new CapabilitiesView()); tabView->AddTab(new ExtensionsView()); glView->UnlockGL(); GroupLayout()->SetSpacing(0); BLayoutBuilder::Group<>(this) .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) .Add(menuField) .AddGroup(B_HORIZONTAL) .Add(tabView) .SetInsets(0, B_USE_DEFAULT_SPACING, 0, 0); }
APRWindow::APRWindow(BRect frame) : BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Appearance"), B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_QUIT_ON_WINDOW_CLOSE, B_ALL_WORKSPACES) { SetLayout(new BGroupLayout(B_HORIZONTAL)); fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"), new BMessage(kMsgSetDefaults), B_WILL_DRAW); fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevert), B_WILL_DRAW); BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); fFontSettings = new FontView(B_TRANSLATE("Fonts")); fColorsView = new APRView(B_TRANSLATE("Colors")); fLookAndFeelSettings = new LookAndFeelSettingsView( B_TRANSLATE("Look and feel")); fAntialiasingSettings = new AntialiasingSettingsView( B_TRANSLATE("Antialiasing")); tabView->AddTab(fFontSettings); tabView->AddTab(fColorsView); tabView->AddTab(fLookAndFeelSettings); tabView->AddTab(fAntialiasingSettings); _UpdateButtons(); AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) .Add(tabView) .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) .Add(BGroupLayoutBuilder(B_HORIZONTAL) .Add(fDefaultsButton) .Add(fRevertButton) .AddGlue() ) .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) ); }
SettingsWindow::SettingsWindow() : BWindow(BRect(100, 100, 500, 300), "MilkyTracker settings", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE) { BTabView* tabView = new BTabView(Bounds(), "TabView"); BRect tabRect = tabView->ContainerView()->Bounds(); tabRect.InsetBy(5, 5); fInterfaceSettingsView = new InterfaceSettingsView(tabRect); fMidiSettingsView = new MidiSettingsView(tabRect); tabView->AddTab(fInterfaceSettingsView); tabView->AddTab(fMidiSettingsView); AddChild(tabView); }
APRWindow::APRWindow(BRect frame) : BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Appearance"), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS, B_ALL_WORKSPACES) { SetLayout(new BGroupLayout(B_HORIZONTAL)); fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"), new BMessage(kMsgSetDefaults), B_WILL_DRAW); fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevert), B_WILL_DRAW); BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); fAntialiasingSettings = new AntialiasingSettingsView( B_TRANSLATE("Antialiasing")); fDecorSettings = new DecorSettingsView( B_TRANSLATE("Window Decorator")); fColorsView = new APRView(B_TRANSLATE("Colors"), B_WILL_DRAW); tabView->AddTab(fColorsView); tabView->AddTab(fAntialiasingSettings); tabView->AddTab(fDecorSettings); fDefaultsButton->SetEnabled(fColorsView->IsDefaultable() || fAntialiasingSettings->IsDefaultable() || fDecorSettings->IsDefaultable()); fRevertButton->SetEnabled(false); AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) .Add(tabView) .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) .Add(BGroupLayoutBuilder(B_HORIZONTAL) .Add(fRevertButton) .AddGlue() .Add(fDefaultsButton) ) .SetInsets(5, 5, 5, 5) ); }
OpenGLView::OpenGLView() : BView("OpenGLView", 0, NULL) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); SetLayout(new BGroupLayout(B_VERTICAL)); const float kInset = 10; BRect dummy(0, 0, 2, 2); fGLView = new BGLView(dummy, (char*) "gl info", B_FOLLOW_NONE, 0, BGL_RGB | BGL_DOUBLE); fGLView->Hide(); AddChild(fGLView); fGLView->LockGL(); LogoView *logoView = new LogoView(dummy); BTabView *tabView = new BTabView("tab view", B_WIDTH_FROM_LABEL); InfoView *infoView = new InfoView(); tabView->AddTab(infoView); CapabilitiesView *capabilitiesView = new CapabilitiesView(); tabView->AddTab(capabilitiesView); ExtensionsView *extensionsView = new ExtensionsView(); tabView->AddTab(extensionsView); fGLView->UnlockGL(); AddChild(BGroupLayoutBuilder(B_VERTICAL) .Add(logoView) .Add(BGroupLayoutBuilder(B_HORIZONTAL) .Add(tabView) .SetInsets(kInset, kInset, kInset, kInset) ) ); }
LocaleWindow::LocaleWindow() : BWindow(BRect(0, 0, 0, 0), "Locale", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS) { BCountry* defaultCountry; be_locale_roster->GetDefaultCountry(&defaultCountry); SetLayout(new BGroupLayout(B_HORIZONTAL)); float spacing = be_control_look->DefaultItemSpacing(); BTabView* tabView = new BTabView("tabview"); BGroupView* languageTab = new BGroupView(B_TRANSLATE("Language"), B_HORIZONTAL, spacing); // first list: available languages fLanguageListView = new LanguageListView("available", B_MULTIPLE_SELECTION_LIST); BScrollView* scrollView = new BScrollView("scroller", fLanguageListView, B_WILL_DRAW | B_FRAME_EVENTS, false, true); fLanguageListView->SetInvocationMessage(new BMessage(kMsgLanguageInvoked)); fLanguageListView->SetDragMessage(new BMessage(kMsgLanguageDragged)); // Fill the language list from the LocaleRoster data BMessage installedLanguages; if (be_locale_roster->GetInstalledLanguages(&installedLanguages) == B_OK) { BString currentID; LanguageListItem* lastAddedCountryItem = NULL; for (int i = 0; installedLanguages.FindString("langs", i, ¤tID) == B_OK; i++) { // Now get an human-readable, localized name for each language BLanguage* currentLanguage; be_locale_roster->GetLanguage(currentID.String(), ¤tLanguage); BString name; currentLanguage->GetName(name); // TODO: as long as the app_server doesn't support font overlays, // use the translated name if problematic characters are used... const char* string = name.String(); while (uint32 code = BUnicodeChar::FromUTF8(&string)) { if (code > 1424) { currentLanguage->GetTranslatedName(name); break; } } LanguageListItem* item = new LanguageListItem(name, currentID.String(), currentLanguage->Code()); if (currentLanguage->IsCountrySpecific() && lastAddedCountryItem != NULL && lastAddedCountryItem->Code() == item->Code()) { fLanguageListView->AddUnder(item, lastAddedCountryItem); } else { // This is a language variant, add it at top-level fLanguageListView->AddItem(item); if (!currentLanguage->IsCountrySpecific()) { item->SetExpanded(false); lastAddedCountryItem = item; } } delete currentLanguage; } fLanguageListView->FullListSortItems(compare_typed_list_items); } else { BAlert* alert = new BAlert("Error", B_TRANSLATE("Unable to find the available languages! You can't " "use this preflet!"), B_TRANSLATE("OK"), NULL, NULL, B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_STOP_ALERT); alert->Go(); } // Second list: active languages fPreferredListView = new LanguageListView("preferred", B_MULTIPLE_SELECTION_LIST); BScrollView* scrollViewEnabled = new BScrollView("scroller", fPreferredListView, B_WILL_DRAW | B_FRAME_EVENTS, false, true); fPreferredListView->SetInvocationMessage( new BMessage(kMsgPreferredLanguageInvoked)); fPreferredListView->SetDeleteMessage( new BMessage(kMsgPreferredLanguageDeleted)); fPreferredListView->SetDragMessage( new BMessage(kMsgPreferredLanguageDragged)); BLayoutBuilder::Group<>(languageTab) .AddGroup(B_VERTICAL, spacing) .Add(new BStringView("", B_TRANSLATE("Available languages"))) .Add(scrollView) .End() .AddGroup(B_VERTICAL, spacing) .Add(new BStringView("", B_TRANSLATE("Preferred languages"))) .Add(scrollViewEnabled) .End() .SetInsets(spacing, spacing, spacing, spacing); BView* countryTab = new BView(B_TRANSLATE("Country"), B_WILL_DRAW); countryTab->SetLayout(new BGroupLayout(B_VERTICAL, 0)); BListView* listView = new BListView("country", B_SINGLE_SELECTION_LIST); scrollView = new BScrollView("scroller", listView, B_WILL_DRAW | B_FRAME_EVENTS, false, true); listView->SetSelectionMessage(new BMessage(kMsgCountrySelection)); // get all available countries from ICU // Use DateFormat::getAvailableLocale so we get only the one we can // use. Maybe check the NumberFormat one and see if there is more. int32_t localeCount; const Locale* currentLocale = Locale::getAvailableLocales(localeCount); for (int index = 0; index < localeCount; index++) { UnicodeString countryFullName; BString string; BStringByteSink sink(&string); currentLocale[index].getDisplayName(countryFullName); countryFullName.toUTF8(sink); LanguageListItem* item = new LanguageListItem(string, currentLocale[index].getName(), NULL); listView->AddItem(item); if (!strcmp(currentLocale[index].getName(), defaultCountry->Code())) listView->Select(listView->CountItems() - 1); } // TODO: find a real solution intead of this hack listView->SetExplicitMinSize( BSize(25 * be_plain_font->Size(), B_SIZE_UNSET)); fFormatView = new FormatView(defaultCountry); countryTab->AddChild(BLayoutBuilder::Group<>(B_HORIZONTAL, spacing) .AddGroup(B_VERTICAL, 3) .Add(scrollView) .End() .Add(fFormatView) .SetInsets(spacing, spacing, spacing, spacing)); listView->ScrollToSelection(); tabView->AddTab(languageTab); tabView->AddTab(countryTab); BButton* button = new BButton(B_TRANSLATE("Defaults"), new BMessage(kMsgDefaults)); fRevertButton = new BButton(B_TRANSLATE("Revert"), new BMessage(kMsgRevert)); fRevertButton->SetEnabled(false); BLayoutBuilder::Group<>(this, B_VERTICAL, spacing) .Add(tabView) .AddGroup(B_HORIZONTAL, spacing) .Add(button) .Add(fRevertButton) .AddGlue() .End() .SetInsets(spacing, spacing, spacing, spacing) .End(); _UpdatePreferredFromLocaleRoster(); SettingsReverted(); CenterOnScreen(); }
/*! \brief Init user interface regardless of the parameter of constructor. */ void EventEditorMainWindow::InitUI() { ClearUI(); MainView = new BView( BWindow::Bounds(), "Event Editor Main View", B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS ); if ( MainView != NULL ) { MainView->SetViewColor( ui_color(B_PANEL_BACKGROUND_COLOR ) ); BWindow::AddChild( MainView ); } else { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BGridLayout* layout = new BGridLayout( B_VERTICAL ); if ( !layout ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } MainView->SetLayout( layout ); layout->SetInsets( 0, 0, 0, 5 ); layout->SetSpacing( 0, 2 ); menuBar = CreateMenuBar(); layout->AddView( menuBar, 0, 0 ); BTabView* tabView = new BTabView( Bounds().InsetBySelf( 5, 30 ), "Tab view" ); if ( !tabView ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BLayoutItem* layoutItem = layout->AddView( tabView, 0, 1 ); if ( layoutItem ) { layoutItem->SetExplicitAlignment( BAlignment( B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT ) ); } BRect individualTab = tabView->Bounds(); individualTab.bottom -= ( tabView->TabHeight() + 20 + menuBar->Bounds().Height() ); // Enable firing the activity in any case fData.SetEventActivityFired( false ); // General view genView = new EventEditor_GeneralView( individualTab, &fData ); if ( !genView || genView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BTab* tab = new BTab(); tabView->AddTab( genView, tab ); tab->SetLabel( "General" ); // Reminder view remView = new EventEditor_ReminderView( individualTab, &fData ); if ( !remView || remView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( remView, tab ); tab->SetLabel( "Reminder" ); // Event activity actView = new ActivityView( individualTab.InsetByCopy( 5, 5 ), "Event activity", fData.GetEventActivity() ); if ( !actView || actView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( actView, tab ); tab->SetLabel( "Activity" ); // Note view noteView = new EventEditor_NoteView( individualTab.InsetByCopy( 5, 5 ), &fData ); if ( !noteView || noteView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( noteView, tab ); tab->SetLabel( "Note" ); menuBar->SetTargetForItems( this ); // Save button saveAndClose = new BButton( BRect( 0, 0, 1, 1 ), "Save", "Save", new BMessage( kFileSave ) ); if ( !saveAndClose ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BLayoutItem* layoutItem2 = layout->AddView( saveAndClose, 0, 2 ); if ( layoutItem ) { layoutItem->SetExplicitAlignment( BAlignment( B_ALIGN_RIGHT, B_ALIGN_BOTTOM ) ); } saveAndClose->SetTarget( this ); layout->SetMaxRowHeight( 1, 520 ); layout->SetMinRowHeight( 2, 25 ); // Refresh view InvalidateLayout(); MainView->Invalidate(); } // <-- end of UI initialization for MainWindow
ConfigWindow::ConfigWindow() : BWindow(BRect(100.0, 100.0, 580.0, 540.0), "E-mail", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE), fLastSelectedAccount(NULL), fSaveSettings(false) { // create controls BRect rect(Bounds()); BView *top = new BView(rect, NULL, B_FOLLOW_ALL, 0); top->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(top); // determine font height font_height fontHeight; top->GetFontHeight(&fontHeight); int32 height = (int32)(fontHeight.ascent + fontHeight.descent + fontHeight.leading) + 5; rect.InsetBy(5, 5); rect.bottom -= 11 + height; BTabView *tabView = new BTabView(rect, NULL); BView *view; rect = tabView->Bounds(); rect.bottom -= tabView->TabHeight() + 4; tabView->AddTab(view = new BView(rect, NULL, B_FOLLOW_ALL, 0)); tabView->TabAt(0)->SetLabel(B_TRANSLATE("Accounts")); view->SetViewColor(top->ViewColor()); // accounts listview rect = view->Bounds().InsetByCopy(8, 8); rect.right = 140 - B_V_SCROLL_BAR_WIDTH; rect.bottom -= height + 12; fAccountsListView = new AccountsListView(rect); view->AddChild(new BScrollView(NULL, fAccountsListView, B_FOLLOW_ALL, 0, false, true)); rect.right += B_V_SCROLL_BAR_WIDTH; rect.top = rect.bottom + 8; rect.bottom = rect.top + height; BRect sizeRect = rect; sizeRect.right = sizeRect.left + 30 + view->StringWidth( B_TRANSLATE("Add")); view->AddChild(new BButton(sizeRect, NULL, B_TRANSLATE("Add"), new BMessage(kMsgAddAccount), B_FOLLOW_BOTTOM)); sizeRect.left = sizeRect.right+3; sizeRect.right = sizeRect.left + 30 + view->StringWidth( B_TRANSLATE("Remove")); view->AddChild(fRemoveButton = new BButton( sizeRect, NULL, B_TRANSLATE("Remove"), new BMessage(kMsgRemoveAccount), B_FOLLOW_BOTTOM)); // accounts config view rect = view->Bounds(); rect.left = fAccountsListView->Frame().right + B_V_SCROLL_BAR_WIDTH + 16; rect.right -= 10; view->AddChild(fConfigView = new CenterContainer(rect)); MakeHowToView(); // general settings rect = tabView->Bounds(); rect.bottom -= tabView->TabHeight() + 4; tabView->AddTab(view = new CenterContainer(rect)); tabView->TabAt(1)->SetLabel(B_TRANSLATE("Settings")); rect = view->Bounds().InsetByCopy(8, 8); rect.right -= 1; rect.bottom = rect.top + height * 5 + 15; BBox *box = new BBox(rect); box->SetLabel(B_TRANSLATE("Mail checking")); view->AddChild(box); rect = box->Bounds().InsetByCopy(8, 8); rect.top += 7; rect.bottom = rect.top + height + 5; BRect tile = rect.OffsetByCopy(0, 1); int32 labelWidth = (int32)view->StringWidth(B_TRANSLATE("Check every")) + 6; tile.right = 80 + labelWidth; fIntervalControl = new BTextControl(tile, "time", B_TRANSLATE("Check every"), NULL, NULL); fIntervalControl->SetDivider(labelWidth); box->AddChild(fIntervalControl); BPopUpMenu *frequencyPopUp = new BPopUpMenu(B_EMPTY_STRING); const char *frequencyStrings[] = { B_TRANSLATE("never"), B_TRANSLATE("minutes"), B_TRANSLATE("hours"), B_TRANSLATE("days") }; BMenuItem *item; for (int32 i = 0; i < 4; i++) { frequencyPopUp->AddItem(item = new BMenuItem(frequencyStrings[i], new BMessage(kMsgIntervalUnitChanged))); if (i == 1) item->SetMarked(true); } tile.left = tile.right + 5; tile.right = rect.right; tile.OffsetBy(0,-1); fIntervalUnitField = new BMenuField(tile, "frequency", B_EMPTY_STRING, frequencyPopUp); fIntervalUnitField->SetDivider(0.0); box->AddChild(fIntervalUnitField); rect.OffsetBy(0,height + 9); rect.bottom -= 2; fPPPActiveCheckBox = new BCheckBox(rect, "ppp active", B_TRANSLATE("Only when dial-up is connected"), NULL); box->AddChild(fPPPActiveCheckBox); rect.OffsetBy(0,height + 9); rect.bottom -= 2; fPPPActiveSendCheckBox = new BCheckBox(rect, "ppp activesend", B_TRANSLATE("Schedule outgoing mail when dial-up is disconnected"), NULL); box->AddChild(fPPPActiveSendCheckBox); // Miscellaneous settings box rect = box->Frame(); rect.bottom = rect.top + 3 * height + 30; box = new BBox(rect); box->SetLabel(B_TRANSLATE("Miscellaneous")); view->AddChild(box); BPopUpMenu *statusPopUp = new BPopUpMenu(B_EMPTY_STRING); const char *statusModes[] = { B_TRANSLATE("Never"), B_TRANSLATE("While sending"), B_TRANSLATE("While sending and receiving"), B_TRANSLATE("Always") }; BMessage *msg; for (int32 i = 0; i < 4; i++) { statusPopUp->AddItem(item = new BMenuItem(statusModes[i], msg = new BMessage(kMsgShowStatusWindowChanged))); msg->AddInt32("ShowStatusWindow", i); if (i == 0) item->SetMarked(true); } rect = box->Bounds().InsetByCopy(8,8); rect.top += 7; rect.bottom = rect.top + height + 5; labelWidth = (int32)view->StringWidth( B_TRANSLATE("Show connection status window:")) + 8; fStatusModeField = new BMenuField(rect, "show status", B_TRANSLATE("Show connection status window:"), statusPopUp); fStatusModeField->SetDivider(labelWidth); box->AddChild(fStatusModeField); rect = fStatusModeField->Frame();; rect.OffsetBy(0, rect.Height() + 10); BButton *button = new BButton(rect, B_EMPTY_STRING, B_TRANSLATE("Edit mailbox menu…"), msg = new BMessage(B_REFS_RECEIVED)); button->ResizeToPreferred(); box->AddChild(button); button->SetTarget(BMessenger("application/x-vnd.Be-TRAK")); BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("Mail/Menu Links"); BEntry entry(path.Path()); if (entry.InitCheck() == B_OK && entry.Exists()) { entry_ref ref; entry.GetRef(&ref); msg->AddRef("refs", &ref); } else button->SetEnabled(false); rect = button->Frame(); rect.OffsetBy(rect.Width() + 30,0); fAutoStartCheckBox = new BCheckBox(rect, "start daemon", B_TRANSLATE("Start mail services on startup"), NULL); fAutoStartCheckBox->ResizeToPreferred(); box->AddChild(fAutoStartCheckBox); // save/revert buttons top->AddChild(tabView); rect = tabView->Frame(); rect.top = rect.bottom + 5; rect.bottom = rect.top + height + 5; BButton *saveButton = new BButton(rect, "apply", B_TRANSLATE("Apply"), new BMessage(kMsgSaveSettings)); float w,h; saveButton->GetPreferredSize(&w, &h); saveButton->ResizeTo(w, h); saveButton->MoveTo(rect.right - w, rect.top); top->AddChild(saveButton); BButton *revertButton = new BButton(rect, "revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevertSettings)); revertButton->GetPreferredSize(&w, &h); revertButton->ResizeTo(w,h); revertButton->MoveTo(saveButton->Frame().left - 25 - w, rect.top); top->AddChild(revertButton); LoadSettings(); // this will also move our window to the stored position fAccountsListView->SetSelectionMessage(new BMessage(kMsgAccountSelected)); fAccountsListView->MakeFocus(true); }
ConfigWindow::ConfigWindow() : BWindow(BRect(200.0, 200.0, 640.0, 640.0), "E-mail", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE), fLastSelectedAccount(NULL), fSaveSettings(false) { /*** create controls ***/ BRect rect(Bounds()); BView *top = new BView(rect,NULL,B_FOLLOW_ALL,0); top->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(top); // determine font height font_height fontHeight; top->GetFontHeight(&fontHeight); int32 height = (int32)(fontHeight.ascent + fontHeight.descent + fontHeight.leading) + 5; rect.InsetBy(5,5); rect.bottom -= 11 + height; BTabView *tabView = new BTabView(rect,NULL); BView *view,*generalView; rect = tabView->Bounds(); rect.bottom -= tabView->TabHeight() + 4; tabView->AddTab(view = new BView(rect,NULL,B_FOLLOW_ALL,0)); tabView->TabAt(0)->SetLabel(MDR_DIALECT_CHOICE ("Accounts","アカウント")); view->SetViewColor(top->ViewColor()); // accounts listview rect = view->Bounds().InsetByCopy(8,8); rect.right = 140 - B_V_SCROLL_BAR_WIDTH; rect.bottom -= height + 12; fAccountsListView = new AccountsListView(rect); view->AddChild(new BScrollView(NULL,fAccountsListView,B_FOLLOW_ALL,0,false,true)); rect.right += B_V_SCROLL_BAR_WIDTH; rect.top = rect.bottom + 8; rect.bottom = rect.top + height; BRect sizeRect = rect; sizeRect.right = sizeRect.left + 30 + view->StringWidth(MDR_DIALECT_CHOICE ("Add","追加")); view->AddChild(new BButton(sizeRect,NULL,MDR_DIALECT_CHOICE ("Add","追加"), new BMessage(kMsgAddAccount),B_FOLLOW_BOTTOM)); sizeRect.left = sizeRect.right+3; sizeRect.right = sizeRect.left + 30 + view->StringWidth(MDR_DIALECT_CHOICE ("Remove","削除")); view->AddChild(fRemoveButton = new BButton(sizeRect,NULL,MDR_DIALECT_CHOICE ("Remove","削除"), new BMessage(kMsgRemoveAccount),B_FOLLOW_BOTTOM)); // accounts config view rect = view->Bounds(); rect.left = fAccountsListView->Frame().right + B_V_SCROLL_BAR_WIDTH + 16; rect.right -= 10; view->AddChild(fConfigView = new CenterContainer(rect)); MakeHowToView(); // general settings rect = tabView->Bounds(); rect.bottom -= tabView->TabHeight() + 4; tabView->AddTab(view = new CenterContainer(rect)); tabView->TabAt(1)->SetLabel(MDR_DIALECT_CHOICE ("General","一般")); rect = view->Bounds().InsetByCopy(8,8); rect.right -= 1; rect.bottom = rect.top + height * 5 + 15; BBox *box = new BBox(rect); box->SetLabel(MDR_DIALECT_CHOICE ("Retrieval Frequency","メールチェック間隔")); view->AddChild(box); rect = box->Bounds().InsetByCopy(8,8); rect.top += 7; rect.bottom = rect.top + height + 5; BRect tile = rect.OffsetByCopy(0,1); int32 labelWidth = (int32)view->StringWidth(MDR_DIALECT_CHOICE ("Check every:","メールチェック間隔:"))+6; tile.right = 80 + labelWidth; fIntervalControl = new BTextControl(tile,"time",MDR_DIALECT_CHOICE ("Check every:","メールチェック間隔:"), NULL,NULL); fIntervalControl->SetDivider(labelWidth); box->AddChild(fIntervalControl); BPopUpMenu *frequencyPopUp = new BPopUpMenu(B_EMPTY_STRING); const char *frequencyStrings[] = { MDR_DIALECT_CHOICE ("Never","チェックしない"), MDR_DIALECT_CHOICE ("Minutes","分毎チェック"), MDR_DIALECT_CHOICE ("Hours","時間毎チェック"), MDR_DIALECT_CHOICE ("Days","日間毎チェック")}; BMenuItem *item; for (int32 i = 0;i < 4;i++) { frequencyPopUp->AddItem(item = new BMenuItem(frequencyStrings[i],new BMessage(kMsgIntervalUnitChanged))); if (i == 1) item->SetMarked(true); } tile.left = tile.right + 5; tile.right = rect.right; tile.OffsetBy(0,-1); fIntervalUnitField = new BMenuField(tile,"frequency", B_EMPTY_STRING, frequencyPopUp); fIntervalUnitField->SetDivider(0.0); box->AddChild(fIntervalUnitField); rect.OffsetBy(0,height + 9); rect.bottom -= 2; fPPPActiveCheckBox = new BCheckBox(rect,"ppp active", MDR_DIALECT_CHOICE ("only when PPP is active","PPP接続中時のみ"), NULL); box->AddChild(fPPPActiveCheckBox); rect.OffsetBy(0,height + 9); rect.bottom -= 2; fPPPActiveSendCheckBox = new BCheckBox(rect,"ppp activesend", MDR_DIALECT_CHOICE ("Queue outgoing mail when PPP is inactive","PPP切断時、送信メールを送信箱に入れる"), NULL); box->AddChild(fPPPActiveSendCheckBox); rect = box->Frame(); rect.bottom = rect.top + 4*height + 20; box = new BBox(rect); box->SetLabel(MDR_DIALECT_CHOICE ("Status Window","送受信状況の表示")); view->AddChild(box); BPopUpMenu *statusPopUp = new BPopUpMenu(B_EMPTY_STRING); const char *statusModes[] = { MDR_DIALECT_CHOICE ("Never","表示しない"), MDR_DIALECT_CHOICE ("While Sending","送信時"), MDR_DIALECT_CHOICE ("While Sending / Fetching","送受信時"), MDR_DIALECT_CHOICE ("Always","常に表示")}; BMessage *msg; for (int32 i = 0;i < 4;i++) { statusPopUp->AddItem(item = new BMenuItem(statusModes[i],msg = new BMessage(kMsgShowStatusWindowChanged))); msg->AddInt32("ShowStatusWindow",i); if (i == 0) item->SetMarked(true); } rect = box->Bounds().InsetByCopy(8,8); rect.top += 7; rect.bottom = rect.top + height + 5; labelWidth = (int32)view->StringWidth( MDR_DIALECT_CHOICE ("Show Status Window:","ステータスの表示:")) + 8; fStatusModeField = new BMenuField(rect,"show status", MDR_DIALECT_CHOICE ("Show Status Window:","ステータスの表示:"), statusPopUp); fStatusModeField->SetDivider(labelWidth); box->AddChild(fStatusModeField); BPopUpMenu *lookPopUp = new BPopUpMenu(B_EMPTY_STRING); const char *windowLookStrings[] = { MDR_DIALECT_CHOICE ("Normal, With Tab","タブ付通常"), MDR_DIALECT_CHOICE ("Normal, Border Only","ボーダーのみ通常"), MDR_DIALECT_CHOICE ("Floating","フローティング"), MDR_DIALECT_CHOICE ("Thin Border","細いボーダー"), MDR_DIALECT_CHOICE ("No Border","ボーダー無し")}; for (int32 i = 0;i < 5;i++) { lookPopUp->AddItem(item = new BMenuItem(windowLookStrings[i],msg = new BMessage(kMsgStatusLookChanged))); msg->AddInt32("StatusWindowLook",i); if (i == 0) item->SetMarked(true); } rect.OffsetBy(0, height + 6); fStatusLookField = new BMenuField(rect,"status look", MDR_DIALECT_CHOICE ("Window Look:","ウィンドウ外観:"),lookPopUp); fStatusLookField->SetDivider(labelWidth); box->AddChild(fStatusLookField); BPopUpMenu *workspacesPopUp = new BPopUpMenu(B_EMPTY_STRING); workspacesPopUp->AddItem(item = new BMenuItem( MDR_DIALECT_CHOICE ("Current Workspace","使用中ワークスペース"), msg = new BMessage(kMsgStatusWorkspaceChanged))); msg->AddInt32("StatusWindowWorkSpace", 0); workspacesPopUp->AddItem(item = new BMenuItem( MDR_DIALECT_CHOICE ("All Workspaces","全てのワークスペース"), msg = new BMessage(kMsgStatusWorkspaceChanged))); msg->AddInt32("StatusWindowWorkSpace", -1); rect.OffsetBy(0,height + 6); fStatusWorkspaceField = new BMenuField(rect,"status workspace", MDR_DIALECT_CHOICE ("Window visible on:","表示場所:"),workspacesPopUp); fStatusWorkspaceField->SetDivider(labelWidth); box->AddChild(fStatusWorkspaceField); rect = box->Frame(); rect.bottom = rect.top + 3*height + 13; box = new BBox(rect); box->SetLabel(MDR_DIALECT_CHOICE ("Deskbar Icon","デスクバーアイコンリンク")); view->AddChild(box); rect = box->Bounds().InsetByCopy(8,8); rect.top += 7; rect.bottom = rect.top + height + 5; BStringView *stringView = new BStringView(rect,B_EMPTY_STRING, MDR_DIALECT_CHOICE ( "The menu links are links to folders in a real folder like the Be menu.", "デスクバーで表示する項目の設定")); box->AddChild(stringView); stringView->SetAlignment(B_ALIGN_CENTER); stringView->ResizeToPreferred(); // BStringView::ResizeToPreferred() changes the width, so that the // alignment has no effect anymore stringView->ResizeTo(rect.Width(), stringView->Bounds().Height()); rect.left += 100; rect.right -= 100; rect.OffsetBy(0,height + 1); BButton *button = new BButton(rect,B_EMPTY_STRING, MDR_DIALECT_CHOICE ("Configure Menu Links","メニューリンクの設定"), msg = new BMessage(B_REFS_RECEIVED)); box->AddChild(button); button->SetTarget(BMessenger("application/x-vnd.Be-TRAK")); BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("Mail/Menu Links"); BEntry entry(path.Path()); if (entry.InitCheck() == B_OK && entry.Exists()) { entry_ref ref; entry.GetRef(&ref); msg->AddRef("refs", &ref); } else button->SetEnabled(false); rect = box->Frame(); rect.bottom = rect.top + 2*height + 6; box = new BBox(rect); box->SetLabel(MDR_DIALECT_CHOICE ("Misc.","その他の設定")); view->AddChild(box); rect = box->Bounds().InsetByCopy(8,8); rect.top += 7; rect.bottom = rect.top + height + 5; fAutoStartCheckBox = new BCheckBox(rect,"start daemon", MDR_DIALECT_CHOICE ("Auto-Start Mail Daemon","Mail Daemonを自動起動"),NULL); box->AddChild(fAutoStartCheckBox); // about page rect = tabView->Bounds(); rect.bottom -= tabView->TabHeight() + 4; tabView->AddTab(view = new BView(rect,NULL,B_FOLLOW_ALL,0)); tabView->TabAt(2)->SetLabel(MDR_DIALECT_CHOICE ("About","情報")); view->SetViewColor(top->ViewColor()); AboutTextView *about = new AboutTextView(rect); about->SetViewColor(top->ViewColor()); view->AddChild(about); // save/cancel/revert buttons top->AddChild(tabView); rect = tabView->Frame(); rect.top = rect.bottom + 5; rect.bottom = rect.top + height + 5; BButton *saveButton = new BButton(rect,"save", MDR_DIALECT_CHOICE ("Save","保存"), new BMessage(kMsgSaveSettings)); float w,h; saveButton->GetPreferredSize(&w,&h); saveButton->ResizeTo(w,h); saveButton->MoveTo(rect.right - w, rect.top); top->AddChild(saveButton); BButton *cancelButton = new BButton(rect,"cancel", MDR_DIALECT_CHOICE ("Cancel","中止"), new BMessage(kMsgCancelSettings)); cancelButton->GetPreferredSize(&w,&h); cancelButton->ResizeTo(w,h); #ifdef HAVE_APPLY_BUTTON cancelButton->MoveTo(saveButton->Frame().left - w - 5,rect.top); #else cancelButton->MoveTo(saveButton->Frame().left - w - 20,rect.top); #endif top->AddChild(cancelButton); #ifdef HAVE_APPLY_BUTTON BButton *applyButton = new BButton(rect,"apply", MDR_DIALECT_CHOICE ("Apply","適用"), new BMessage(kMsgApplySettings)); applyButton->GetPreferredSize(&w,&h); applyButton->ResizeTo(w,h); applyButton->MoveTo(cancelButton->Frame().left - w - 20,rect.top); top->AddChild(applyButton); #endif BButton *revertButton = new BButton(rect,"revert", MDR_DIALECT_CHOICE ("Revert","復元"), new BMessage(kMsgRevertSettings)); revertButton->GetPreferredSize(&w,&h); revertButton->ResizeTo(w,h); #ifdef HAVE_APPLY_BUTTON revertButton->MoveTo(applyButton->Frame().left - w - 5,rect.top); #else revertButton->MoveTo(cancelButton->Frame().left - w - 6,rect.top); #endif top->AddChild(revertButton); LoadSettings(); fAccountsListView->SetSelectionMessage(new BMessage(kMsgAccountSelected)); }
BluetoothWindow::BluetoothWindow(BRect frame) : BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Bluetooth"), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS) { fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"), new BMessage(kMsgSetDefaults), B_WILL_DRAW); fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevert), B_WILL_DRAW); // Add the menu bar fMenubar = new BMenuBar(Bounds(), "menu_bar"); // Add File menu to menu bar BMenu* menu = new BMenu(B_TRANSLATE("Server")); menu->AddItem(new BMenuItem( B_TRANSLATE("Start bluetooth services" B_UTF8_ELLIPSIS), new BMessage(kMsgStartServices), 0)); menu->AddItem(new BMenuItem( B_TRANSLATE("Stop bluetooth services" B_UTF8_ELLIPSIS), new BMessage(kMsgStopServices), 0)); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem( B_TRANSLATE("Refresh local devices" B_UTF8_ELLIPSIS), new BMessage(kMsgRefresh), 0)); fMenubar->AddItem(menu); menu = new BMenu(B_TRANSLATE("Help")); menu->AddItem(new BMenuItem(B_TRANSLATE("About Bluetooth" B_UTF8_ELLIPSIS), new BMessage(B_ABOUT_REQUESTED), 0)); fMenubar->AddItem(menu); BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); tabView->SetBorder(B_NO_BORDER); fSettingsView = new BluetoothSettingsView(B_TRANSLATE("Settings")); // fConnChan = new ConnChanView("Connections & Channels", B_WILL_DRAW); fRemoteDevices = new RemoteDevicesView( B_TRANSLATE("Remote devices"), B_WILL_DRAW); tabView->AddTab(fRemoteDevices); // tabView->AddTab(fConnChan); tabView->AddTab(fSettingsView); fRevertButton->SetEnabled(false); BLayoutBuilder::Group<>(this, B_VERTICAL, 0) .SetInsets(0) .Add(fMenubar) .AddStrut(B_USE_HALF_ITEM_SPACING) .Add(tabView) .AddStrut(B_USE_HALF_ITEM_SPACING) .Add(new BSeparatorView(B_HORIZONTAL)) .AddGroup(B_HORIZONTAL) .SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING) .Add(fDefaultsButton) .Add(fRevertButton) .AddGlue() .End() .End(); }
int main(int argc, char** argv) { BApplication app("application/x-vnd.antares-look"); BWindow* window = new Window(BRect(50, 50, 100, 100), "Look at these pretty controls!", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS | B_QUIT_ON_WINDOW_CLOSE); window->SetLayout(new BGroupLayout(B_HORIZONTAL)); // create some controls // BListView BListView* listView = new BListView(); for (int32 i = 0; i < 20; i++) { BString itemLabel("List item "); itemLabel << i + 1; listView->AddItem(new BStringItem(itemLabel.String())); } BScrollView* scrollView = new BScrollView("scroller", listView, 0, true, true); scrollView->SetExplicitMinSize(BSize(300, 140)); // BColumnListView BColumnListView* columnListView = new BColumnListView("clv", 0, B_FANCY_BORDER); // for (int32 i = 0; i < 20; i++) { // BString itemLabel("List Item "); // itemLabel << i + 1; // columnListView->AddItem(new BStringItem(itemLabel.String())); // } BGridView* controls = new BGridView(kInset, kInset); BGridLayout* layout = controls->GridLayout(); controls->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED)); int32 row = 0; add_controls<BButton>(layout, row); add_controls<BCheckBox>(layout, row); add_controls<BRadioButton>(layout, row); add_menu_fields(layout, row); add_text_controls(layout, row); add_sliders(layout, row); add_status_bars(layout, row); BColorControl* colorControl = new BColorControl(B_ORIGIN, B_CELLS_32x8, 8.0f, "color control"); layout->AddView(colorControl, 0, row, 4); BTabView* tabView = new BTabView("tab view", B_WIDTH_FROM_WIDEST); BView* content = BGroupLayoutBuilder(B_VERTICAL, kInset) .Add(scrollView) .Add(columnListView) .Add(controls) .SetInsets(kInset, kInset, kInset, kInset); content->SetName("Tab 1"); tabView->AddTab(content); BView* tab2 = new BView("Tab 2", 0); tab2->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); tabView->AddTab(tab2); tabView->AddTab(new BView("Tab 3", 0)); BMenuBar* menuBar = new BMenuBar("menu bar"); BMenu* menu = new BMenu("File"); menu->AddItem(new BMenuItem("Test Open BFilePanel", new BMessage(MSG_TEST_OPEN_FILE_PANEL))); menu->AddItem(new BMenuItem("Test Save BFilePanel", new BMessage(MSG_TEST_SAVE_FILE_PANEL))); menu->AddItem(new BMenuItem("Click me!", NULL)); menu->AddItem(new BMenuItem("Another option", NULL)); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED))); menuBar->AddItem(menu); menu = new BMenu("Edit"); menu->SetEnabled(false); menu->AddItem(new BMenuItem("Cut", NULL)); menu->AddItem(new BMenuItem("Copy", NULL)); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem("Past", NULL)); menuBar->AddItem(menu); menu = new BMenu("One Item"); menu->AddItem(new BMenuItem("Only", NULL)); menuBar->AddItem(menu); menu = new BMenu("Sub Menu"); BMenu* subMenu = new BMenu("Click me"); subMenu->AddItem(new BMenuItem("Either", NULL)); subMenu->AddItem(new BMenuItem("Or", NULL)); subMenu->SetRadioMode(true); menu->AddItem(subMenu); menuBar->AddItem(menu); BButton* okButton = new BButton("OK", new BMessage(B_QUIT_REQUESTED)); window->AddChild(BGroupLayoutBuilder(B_VERTICAL) .Add(menuBar) .Add(BGroupLayoutBuilder(B_VERTICAL, kInset) .Add(tabView) .Add(BGroupLayoutBuilder(B_HORIZONTAL, kInset) .Add(new BButton("Revert", new BMessage(MSG_TOGGLE_LOOK))) .Add(BSpaceLayoutItem::CreateGlue()) .Add(new BButton("Cancel", NULL)) .Add(okButton) ) .SetInsets(kInset, kInset, kInset, kInset) ) ); window->SetDefaultButton(okButton); window->Show(); app.Run(); return 0; }
// ResourceUsageWindow::InitWindow -- Initialization Commands here void ResourceUsageWindow::InitWindow(BList &list) { BRect rtab = Bounds(); BRect rlist = Bounds(); rtab.top += 10; rlist.top += 10; rlist.left += 12; rlist.right -= 15 + B_V_SCROLL_BAR_WIDTH; rlist.bottom -= 47; // Create the TabView and Tabs BTabView *tabView = new BTabView(rtab,"resource_usage_tabview"); tabView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); rtab = tabView->Bounds(); rtab.InsetBy(5,5); // Create the ListViews BListView *IRQListView = new BListView(rlist, "IRQListView", B_SINGLE_SELECTION_LIST, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE); BListView *DMAListView = new BListView(rlist, "DMAListView", B_SINGLE_SELECTION_LIST, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE); BListView *IORangeListView = new BListView(rlist, "IORangeListView", B_SINGLE_SELECTION_LIST, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE); BListView *memoryListView = new BListView(rlist, "memoryListView", B_SINGLE_SELECTION_LIST, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE); BScrollView *IRQScrollView = new BScrollView("scroll_list1", IRQListView, B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, false, true, B_FANCY_BORDER); BScrollView *DMAScrollView = new BScrollView("scroll_list2", DMAListView, B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, false, true, B_FANCY_BORDER); BScrollView *IORangeScrollView = new BScrollView("scroll_list3", IORangeListView, B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, false, true, B_FANCY_BORDER); BScrollView *memoryScrollView = new BScrollView("scroll_list4", memoryListView, B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, false, true, B_FANCY_BORDER); BTab *tab = new BTab(); tabView->AddTab(IRQScrollView, tab); tab->SetLabel(B_TRANSLATE("IRQ")); tab = new BTab(); tabView->AddTab(DMAScrollView, tab); tab->SetLabel(B_TRANSLATE("DMA")); tab = new BTab(); tabView->AddTab(IORangeScrollView, tab); tab->SetLabel(B_TRANSLATE("IO Range")); tab = new BTab(); tabView->AddTab(memoryScrollView, tab); tab->SetLabel(B_TRANSLATE("Memory Range")); { uint32 mask = 1; for (int i=0;i<16;mask<<=1,i++) { bool first = true; for (int32 j=0; j<list.CountItems(); j++) { DevicesInfo *deviceInfo = (DevicesInfo *)list.ItemAt(j); struct device_configuration *current = deviceInfo->GetCurrent(); resource_descriptor r; int32 num = count_resource_descriptors_of_type(current, B_IRQ_RESOURCE); for (int32 k=0;k<num;k++) { get_nth_resource_descriptor_of_type(current, k, B_IRQ_RESOURCE, &r, sizeof(resource_descriptor)); if (mask & r.d.m.mask) { IRQListView->AddItem(new IRQDMAItem(first ? i : -1, deviceInfo->GetCardName())); first = false; } } } if (first) { IRQListView->AddItem(new IRQDMAItem(i, "")); } } } { uint32 mask = 1; for (int i=0;i<8;mask<<=1,i++) { bool first = true; for (int32 j=0; j<list.CountItems(); j++) { DevicesInfo *deviceInfo = (DevicesInfo *)list.ItemAt(j); struct device_configuration *current = deviceInfo->GetCurrent(); resource_descriptor r; int32 num = count_resource_descriptors_of_type(current, B_DMA_RESOURCE); for (int32 k=0;k<num;k++) { get_nth_resource_descriptor_of_type(current, k, B_DMA_RESOURCE, &r, sizeof(resource_descriptor)); if (mask & r.d.m.mask) { DMAListView->AddItem(new IRQDMAItem(first ? i : -1, deviceInfo->GetCardName())); first = false; } } } if (first) { DMAListView->AddItem(new IRQDMAItem(i, "")); } } } { for (int32 j=0; j<list.CountItems(); j++) { DevicesInfo *deviceInfo = (DevicesInfo *)list.ItemAt(j); struct device_configuration *current = deviceInfo->GetCurrent(); resource_descriptor r; int32 num = count_resource_descriptors_of_type(current, B_IO_PORT_RESOURCE); for (int32 k=0;k<num;k++) { get_nth_resource_descriptor_of_type(current, k, B_IO_PORT_RESOURCE, &r, sizeof(resource_descriptor)); IORangeListView->AddItem(new RangeItem(r.d.r.minbase, r.d.r.minbase + r.d.r.len - 1, deviceInfo->GetCardName())); } } IORangeListView->SortItems(&RangeItem::Compare); } { for (int32 j=0; j<list.CountItems(); j++) { DevicesInfo *deviceInfo = (DevicesInfo *)list.ItemAt(j); struct device_configuration *current = deviceInfo->GetCurrent(); resource_descriptor r; int32 num = count_resource_descriptors_of_type(current, B_MEMORY_RESOURCE); for (int32 k=0;k<num;k++) { get_nth_resource_descriptor_of_type(current, k, B_MEMORY_RESOURCE, &r, sizeof(resource_descriptor)); memoryListView->AddItem(new RangeItem(r.d.r.minbase, r.d.r.minbase + r.d.r.len - 1, deviceInfo->GetCardName())); } } memoryListView->SortItems(&RangeItem::Compare); } BBox *background = new BBox(Bounds(), "background"); background->SetBorder(B_NO_BORDER); AddChild(background); background->AddChild(tabView); }
ConfigWindow::ConfigWindow() : BWindow(BRect(100, 100, 600, 540), B_TRANSLATE_SYSTEM_NAME("E-mail"), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS), fLastSelectedAccount(NULL), fSaveSettings(false) { BTabView* tabView = new BTabView("tab"); tabView->SetBorder(B_NO_BORDER); // accounts listview BView* view = new BView("accounts", 0); tabView->AddTab(view); tabView->TabAt(0)->SetLabel(B_TRANSLATE("Accounts")); fAccountsListView = new AccountsListView(this); fAccountsListView->SetExplicitPreferredSize(BSize( fAccountsListView->StringWidth("W") * 22, B_SIZE_UNSET)); BButton* addButton = new BButton(NULL, B_TRANSLATE("Add"), new BMessage(kMsgAddAccount)); fRemoveButton = new BButton(NULL, B_TRANSLATE("Remove"), new BMessage(kMsgRemoveAccount)); fConfigView = new BView(NULL, 0); fConfigView->SetLayout(new BGroupLayout(B_VERTICAL)); fConfigView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED)); fConfigView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR); BScrollView* scroller = new BScrollView(NULL, fAccountsListView, 0, false, true); BLayoutBuilder::Group<>(view, B_HORIZONTAL) .SetInsets(B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING) .AddGroup(B_VERTICAL) .Add(scroller) .AddGroup(B_HORIZONTAL) .Add(addButton) .Add(fRemoveButton) .End() .End() .Add(fConfigView, 2.0f); _ReplaceConfigView(_BuildHowToView()); // general settings view = new BView("general", 0); view->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED)); tabView->AddTab(view); tabView->TabAt(1)->SetLabel(B_TRANSLATE("Settings")); fCheckMailCheckBox = new BCheckBox("check", B_TRANSLATE("Check every"), NULL); fIntervalControl = new BTextControl("time", B_TRANSLATE("minutes"), NULL, NULL); BPopUpMenu* statusPopUp = new BPopUpMenu(B_EMPTY_STRING); const char* statusModes[] = { B_TRANSLATE_COMMENT("Never", "show status window"), B_TRANSLATE("While sending"), B_TRANSLATE("While sending and receiving")}; for (size_t i = 0; i < sizeof(statusModes) / sizeof(statusModes[0]); i++) { BMessage* msg = new BMessage(kMsgShowStatusWindowChanged); BMenuItem* item = new BMenuItem(statusModes[i], msg); statusPopUp->AddItem(item); msg->AddInt32("ShowStatusWindow", i); } fStatusModeField = new BMenuField("show status", B_TRANSLATE("Show notifications:"), statusPopUp); BMessage* msg = new BMessage(B_REFS_RECEIVED); BButton* editMenuButton = new BButton(B_EMPTY_STRING, B_TRANSLATE("Edit mailbox menu…"), msg); editMenuButton->SetTarget(BMessenger("application/x-vnd.Be-TRAK")); BPath path; find_directory(B_USER_SETTINGS_DIRECTORY, &path); path.Append("Mail/Menu Links"); BEntry entry(path.Path()); if (entry.InitCheck() == B_OK && entry.Exists()) { entry_ref ref; entry.GetRef(&ref); msg->AddRef("refs", &ref); } else editMenuButton->SetEnabled(false); BLayoutBuilder::Group<>(view, B_VERTICAL) .SetInsets(B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING) // .AddGlue() .AddGroup(B_HORIZONTAL, 0.f) .AddGlue() .Add(fCheckMailCheckBox) .AddStrut(be_control_look->DefaultLabelSpacing()) .Add(fIntervalControl->CreateTextViewLayoutItem()) .AddStrut(be_control_look->DefaultLabelSpacing()) .Add(fIntervalControl->CreateLabelLayoutItem()) .AddGlue() .End() .AddGroup(B_HORIZONTAL, 0.f) .AddGlue() .Add(fStatusModeField->CreateLabelLayoutItem()) .Add(fStatusModeField->CreateMenuBarLayoutItem()) .AddGlue() .End() .Add(editMenuButton) .AddGlue(); // save/revert buttons BButton* applyButton = new BButton("apply", B_TRANSLATE("Apply"), new BMessage(kMsgSaveSettings)); BButton* revertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevertSettings)); BLayoutBuilder::Group<>(this, B_VERTICAL, 0) .SetInsets(0, B_USE_DEFAULT_SPACING, 0, B_USE_WINDOW_SPACING) .Add(tabView) .Add(new BSeparatorView(B_HORIZONTAL)) .AddGroup(B_HORIZONTAL, 0) .Add(revertButton) .AddGlue() .Add(applyButton) .SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING, B_USE_WINDOW_SPACING, 0); _LoadSettings(); fAccountsListView->SetSelectionMessage(new BMessage(kMsgAccountSelected)); fAccountsListView->MakeFocus(true); ResizeToPreferred(); CenterOnScreen(); }
BluetoothWindow::BluetoothWindow(BRect frame) : BWindow(frame, B_TRANSLATE("Bluetooth"), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS) { SetLayout(new BGroupLayout(B_HORIZONTAL)); fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"), new BMessage(kMsgSetDefaults), B_WILL_DRAW); fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevert), B_WILL_DRAW); // Add the menu bar fMenubar = new BMenuBar(Bounds(), "menu_bar"); // Add File menu to menu bar BMenu* menu = new BMenu(B_TRANSLATE("Server")); menu->AddItem(new BMenuItem( B_TRANSLATE("Start bluetooth services" B_UTF8_ELLIPSIS), new BMessage(kMsgStartServices), 0)); menu->AddItem(new BMenuItem( B_TRANSLATE("Stop bluetooth services" B_UTF8_ELLIPSIS), new BMessage(kMsgStopServices), 0)); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem( B_TRANSLATE("Show bluetooth console" B_UTF8_ELLIPSIS), new BMessage(kMsgStartServices), 0)); menu->AddItem(new BMenuItem( B_TRANSLATE("Refresh LocalDevices" B_UTF8_ELLIPSIS), new BMessage(kMsgRefresh), 0)); fMenubar->AddItem(menu); menu = new BMenu(B_TRANSLATE("View")); menu->AddItem(new BMenuItem( B_TRANSLATE("Connections & channels" B_UTF8_ELLIPSIS), NULL, 0)); menu->AddItem(new BMenuItem( B_TRANSLATE("Remote devices list" B_UTF8_ELLIPSIS), NULL, 0)); fMenubar->AddItem(menu); menu = new BMenu(B_TRANSLATE("Help")); menu->AddItem(new BMenuItem(B_TRANSLATE("About Bluetooth" B_UTF8_ELLIPSIS), new BMessage(B_ABOUT_REQUESTED), 0)); fMenubar->AddItem(menu); BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); fSettingsView = new BluetoothSettingsView(B_TRANSLATE("Settings")); // fConnChan = new ConnChanView("Connections & Channels", B_WILL_DRAW); fRemoteDevices = new RemoteDevicesView( B_TRANSLATE("Remote devices"), B_WILL_DRAW); tabView->AddTab(fRemoteDevices); // tabView->AddTab(fConnChan); tabView->AddTab(fSettingsView); fRevertButton->SetEnabled(false); AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) .Add(fMenubar) .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) .Add(tabView) .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) .Add(fRevertButton) .AddGlue() .Add(fDefaultsButton) ) .SetInsets(5, 5, 5, 5) ); }
LocaleWindow::LocaleWindow() : BWindow(BRect(0, 0, 0, 0), B_TRANSLATE_SYSTEM_NAME("Locale"), B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), fInitialConventionsItem(NULL), fDefaultConventionsItem(NULL), fFilesystemTranslationCheckbox(NULL) { SetLayout(new BGroupLayout(B_HORIZONTAL)); float spacing = be_control_look->DefaultItemSpacing(); BTabView* tabView = new BTabView("tabview"); BGroupView* languageTab = new BGroupView(B_TRANSLATE("Language"), B_HORIZONTAL, spacing); // first list: available languages fLanguageListView = new LanguageListView("available", B_MULTIPLE_SELECTION_LIST); BScrollView* scrollView = new BScrollView("scroller", fLanguageListView, B_WILL_DRAW | B_FRAME_EVENTS, true, true); fLanguageListView->SetInvocationMessage(new BMessage(kMsgLanguageInvoked)); fLanguageListView->SetDragMessage(new BMessage(kMsgLanguageDragged)); BFont font; fLanguageListView->GetFont(&font); // Fill the language list from the LocaleRoster data BMessage availableLanguages; if (BLocaleRoster::Default()->GetAvailableLanguages(&availableLanguages) == B_OK) { BString currentID; LanguageListItem* lastAddedCountryItem = NULL; for (int i = 0; availableLanguages.FindString("language", i, ¤tID) == B_OK; i++) { // Now get the human-readable, native name for each language BString name; BLanguage currentLanguage(currentID.String()); currentLanguage.GetNativeName(name); // TODO: the following block fails to detect a couple of language // names as containing glyphs we can't render. Why's that? bool hasGlyphs[name.CountChars()]; font.GetHasGlyphs(name.String(), name.CountChars(), hasGlyphs); for (int32 i = 0; i < name.CountChars(); ++i) { if (!hasGlyphs[i]) { // replace by name translated to current language currentLanguage.GetName(name); break; } } LanguageListItem* item = new LanguageListItem(name, currentID.String(), currentLanguage.Code(), currentLanguage.CountryCode()); if (currentLanguage.IsCountrySpecific() && lastAddedCountryItem != NULL && lastAddedCountryItem->Code() == item->Code()) { fLanguageListView->AddUnder(item, lastAddedCountryItem); } else { // This is a language variant, add it at top-level fLanguageListView->AddItem(item); if (!currentLanguage.IsCountrySpecific()) { item->SetExpanded(false); lastAddedCountryItem = item; } } } fLanguageListView->FullListSortItems(compare_typed_list_items); } else { BAlert* alert = new BAlert("Error", B_TRANSLATE("Unable to find the available languages! You can't " "use this preflet!"), B_TRANSLATE("OK"), NULL, NULL, B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_STOP_ALERT); alert->Go(); } // Second list: active languages fPreferredListView = new LanguageListView("preferred", B_MULTIPLE_SELECTION_LIST); BScrollView* scrollViewEnabled = new BScrollView("scroller", fPreferredListView, B_WILL_DRAW | B_FRAME_EVENTS, true, true); fPreferredListView->SetInvocationMessage( new BMessage(kMsgPreferredLanguageInvoked)); fPreferredListView->SetDeleteMessage( new BMessage(kMsgPreferredLanguageDeleted)); fPreferredListView->SetDragMessage( new BMessage(kMsgPreferredLanguageDragged)); BLayoutBuilder::Group<>(languageTab) .AddGroup(B_VERTICAL, spacing) .Add(new BStringView("", B_TRANSLATE("Available languages"))) .Add(scrollView) .End() .AddGroup(B_VERTICAL, spacing) .Add(new BStringView("", B_TRANSLATE("Preferred languages"))) .Add(scrollViewEnabled) .End() .SetInsets(spacing, spacing, spacing, spacing); BView* countryTab = new BView(B_TRANSLATE("Formatting"), B_WILL_DRAW); countryTab->SetLayout(new BGroupLayout(B_VERTICAL, 0)); fConventionsListView = new LanguageListView("formatting", B_SINGLE_SELECTION_LIST); scrollView = new BScrollView("scroller", fConventionsListView, B_WILL_DRAW | B_FRAME_EVENTS, true, true); fConventionsListView->SetSelectionMessage( new BMessage(kMsgConventionsSelection)); // get all available formatting conventions (by language) BFormattingConventions defaultConventions; BLocale::Default()->GetFormattingConventions(&defaultConventions); BString conventionID; fInitialConventionsItem = NULL; LanguageListItem* lastAddedConventionsItem = NULL; for (int i = 0; availableLanguages.FindString("language", i, &conventionID) == B_OK; i++) { BFormattingConventions convention(conventionID); BString conventionName; convention.GetName(conventionName); LanguageListItem* item = new LanguageListItem(conventionName, conventionID, convention.LanguageCode(), convention.CountryCode()); if (!strcmp(conventionID, "en_US")) fDefaultConventionsItem = item; if (conventionID.FindFirst('_') >= 0 && lastAddedConventionsItem != NULL && lastAddedConventionsItem->Code() == item->Code()) { if (!strcmp(conventionID, defaultConventions.ID())) { fConventionsListView->Expand(lastAddedConventionsItem); fInitialConventionsItem = item; } fConventionsListView->AddUnder(item, lastAddedConventionsItem); } else { // This conventions-item isn't country-specific, add it at top-level fConventionsListView->AddItem(item); if (conventionID.FindFirst('_') < 0) { item->SetExpanded(false); lastAddedConventionsItem = item; } if (!strcmp(conventionID, defaultConventions.ID())) fInitialConventionsItem = item; } } fConventionsListView->FullListSortItems(compare_typed_list_items); if (fInitialConventionsItem != NULL) { fConventionsListView->Select(fConventionsListView->IndexOf( fInitialConventionsItem)); } fConventionsListView->SetExplicitMinSize(BSize(20 * be_plain_font->Size(), B_SIZE_UNSET)); fFormatView = new FormatSettingsView(); countryTab->AddChild(BLayoutBuilder::Group<>(B_HORIZONTAL, spacing) .AddGroup(B_VERTICAL, 3) .Add(scrollView) .End() .Add(fFormatView) .SetInsets(spacing, spacing, spacing, spacing)); BView* optionsTab = new BView(B_TRANSLATE("Options"), B_WILL_DRAW); optionsTab->SetLayout(new BGroupLayout(B_VERTICAL, 0)); fFilesystemTranslationCheckbox = new BCheckBox("filesystemTranslation", B_TRANSLATE("Translate application and folder names in Deskbar and Tracker."), new BMessage(kMsgFilesystemTranslationChanged)); fFilesystemTranslationCheckbox->SetValue( BLocaleRoster::Default()->IsFilesystemTranslationPreferred()); optionsTab->AddChild(BLayoutBuilder::Group<>(B_VERTICAL, spacing) .Add(fFilesystemTranslationCheckbox) .AddGlue() .SetInsets(spacing, spacing, spacing, spacing)); tabView->AddTab(languageTab); tabView->AddTab(countryTab); tabView->AddTab(optionsTab); BButton* button = new BButton(B_TRANSLATE("Defaults"), new BMessage(kMsgDefaults)); fRevertButton = new BButton(B_TRANSLATE("Revert"), new BMessage(kMsgRevert)); fRevertButton->SetEnabled(false); BLayoutBuilder::Group<>(this, B_VERTICAL, spacing) .Add(tabView) .AddGroup(B_HORIZONTAL, spacing) .Add(button) .Add(fRevertButton) .AddGlue() .End() .SetInsets(spacing, spacing, spacing, spacing) .End(); _Refresh(true); _SettingsReverted(); CenterOnScreen(); }