void VisualColorControl::AttachedToWindow() { BPoint *points = new BPoint[3]; points[0] = BPoint(0,0); points[1] = BPoint(-4,-4); points[2] = BPoint(4,-4); // calculate the initial ramps CalcRamps(); // create the arrow-pictures BeginPicture(new BPicture()); SetHighColor(100,100,255); FillPolygon(points,3); SetHighColor(0,0,0); StrokePolygon(points,3); down_arrow = EndPicture(); if (Parent() != NULL) SetViewColor(Parent()->ViewColor()); BStringView *sv = new BStringView(BRect(0,COLOR_HEIGHT/2,1,COLOR_HEIGHT/2),"label view",label1); AddChild(sv); float sv_width = sv->StringWidth(label1); sv_width = max_c(sv_width,sv->StringWidth(label2)); sv_width = max_c(sv_width,sv->StringWidth(label3)); font_height fHeight; sv->GetFontHeight(&fHeight); sv->ResizeTo(sv_width,fHeight.ascent+fHeight.descent); sv->MoveBy(0,-(fHeight.ascent+fHeight.descent)/2.0); BRect sv_frame = sv->Frame(); sv_frame.OffsetBy(0,COLOR_HEIGHT); sv->SetAlignment(B_ALIGN_CENTER); sv = new BStringView(sv_frame,"label view",label2); AddChild(sv); sv->SetAlignment(B_ALIGN_CENTER); sv_frame.OffsetBy(0,COLOR_HEIGHT); sv = new BStringView(sv_frame,"label view",label3); AddChild(sv); sv->SetAlignment(B_ALIGN_CENTER); sv_frame.OffsetBy(0,COLOR_HEIGHT); sv = new BStringView(sv_frame,"label view",label4); AddChild(sv); sv->SetAlignment(B_ALIGN_CENTER); ramp_left_edge = sv->Bounds().IntegerWidth()+2; ResizeBy(ramp_left_edge,0); delete[] points; }
void MidiPlayerWindow::CreateViews() { // Set up needed views scopeView = new ScopeView; showScope = new BCheckBox("showScope", B_TRANSLATE("Scope"), new BMessage(MSG_SHOW_SCOPE)); showScope->SetValue(B_CONTROL_ON); CreateInputMenu(); CreateReverbMenu(); volumeSlider = new BSlider("volumeSlider", NULL, NULL, 0, 100, B_HORIZONTAL); rgb_color col = { 152, 152, 255 }; volumeSlider->UseFillColor(true, &col); volumeSlider->SetModificationMessage(new BMessage(MSG_VOLUME)); playButton = new BButton("playButton", B_TRANSLATE("Play"), new BMessage(MSG_PLAY_STOP)); playButton->SetEnabled(false); BBox* divider = new BBox(B_EMPTY_STRING, B_WILL_DRAW | B_FRAME_EVENTS, B_FANCY_BORDER); divider->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, 1)); BStringView* volumeLabel = new BStringView(NULL, B_TRANSLATE("Volume:")); volumeLabel->SetAlignment(B_ALIGN_LEFT); volumeLabel->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); // Build the layout SetLayout(new BGroupLayout(B_HORIZONTAL)); AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) .Add(scopeView) .Add(BGridLayoutBuilder(10, 10) .Add(BSpaceLayoutItem::CreateGlue(), 0, 0) .Add(showScope, 1, 0) .Add(reverbMenu->CreateLabelLayoutItem(), 0, 1) .Add(reverbMenu->CreateMenuBarLayoutItem(), 1, 1) .Add(inputMenu->CreateLabelLayoutItem(), 0, 2) .Add(inputMenu->CreateMenuBarLayoutItem(), 1, 2) .Add(volumeLabel, 0, 3) .Add(volumeSlider, 1, 3) ) .AddGlue() .Add(divider) .AddGlue() .Add(playButton) .AddGlue() .SetInsets(5, 5, 5, 5) ); }
status_t PLabel::SetProperty(const char *name, PValue *value, const int32 &index) { if (!name || !value) return B_ERROR; BString str(name); PProperty *prop = FindProperty(name,index); if (!prop) return B_NAME_NOT_FOUND; if (FlagsForProperty(prop) & PROPERTY_READ_ONLY) return B_READ_ONLY; BStringView *backend = (BStringView*)fView; BoolValue boolval; CharValue charval; ColorValue colorval; FloatValue floatval; IntValue intval; PointValue pointval; RectValue rectval; StringValue stringval; status_t status = prop->SetValue(value); if (status != B_OK) return status; if (backend->Window()) backend->Window()->Lock(); if (str.ICompare("Alignment") == 0) { prop->GetValue(&intval); backend->SetAlignment((alignment)*intval.value); } else if (str.ICompare("Text") == 0) { prop->GetValue(&stringval); backend->SetText(*stringval.value); } else { if (backend->Window()) backend->Window()->Unlock(); return PView::SetProperty(name, value, index); } if (backend->Window()) backend->Window()->Unlock(); return prop->GetValue(value); }
BStringView* InfoWin::_CreateLabel(const char* name, const char* label) { static const rgb_color kLabelColor = tint_color( ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_3_TINT); BStringView* view = new BStringView(name, label); view->SetAlignment(B_ALIGN_RIGHT); view->SetHighColor(kLabelColor); return view; }
/*! This creates a view that handles all incoming messages itself - that's what is meant with self-hosting. */ BView * DefaultMediaTheme::MakeSelfHostingViewFor(BParameter& parameter, const BRect* hintRect) { if (parameter.Flags() & B_HIDDEN_PARAMETER || parameter_should_be_hidden(parameter)) return NULL; BView *view = MakeViewFor(¶meter, hintRect); if (view == NULL) { // The MakeViewFor() method above returns a BControl - which we // don't need for a null parameter; that's why it returns NULL. // But we want to see something anyway, so we add a string view // here. if (parameter.Type() == BParameter::B_NULL_PARAMETER) { if (parameter.Group()->ParameterAt(0) == ¶meter) { // this is the first parameter in this group, so // let's use a nice title view TitleView *titleView = new TitleView(BRect(0, 0, 10, 10), parameter.Name()); titleView->ResizeToPreferred(); return titleView; } BStringView *stringView = new BStringView(BRect(0, 0, 10, 10), parameter.Name(), parameter.Name()); stringView->SetAlignment(B_ALIGN_CENTER); stringView->ResizeToPreferred(); return stringView; } return NULL; } MessageFilter *filter = MessageFilter::FilterFor(view, parameter); if (filter != NULL) view->AddFilter(filter); return view; }
void MediaWindow::_MakeEmptyParamView() { fParamWeb = NULL; BStringView* stringView = new BStringView("noControls", B_TRANSLATE("This hardware has no controls.")); BSize unlimited(B_SIZE_UNLIMITED, B_SIZE_UNLIMITED); stringView->SetExplicitMaxSize(unlimited); BAlignment centered(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER); stringView->SetExplicitAlignment(centered); stringView->SetAlignment(B_ALIGN_CENTER); fContentLayout->AddView(stringView); fContentLayout->SetVisibleItem(fContentLayout->CountItems() - 1); rgb_color panel = stringView->LowColor(); stringView->SetHighColor(tint_color(panel, B_DISABLED_LABEL_TINT)); }
void ChannelOptions::Init(void) { BString temp(S_CHANOPTS_TITLE); temp.Prepend(chan_name); SetTitle(temp.String()); bgView = new BView(Bounds(), "Background", B_FOLLOW_ALL_SIDES, B_WILL_DRAW); bgView->AdoptSystemColors(); AddChild(bgView); BStringView* tempStringView = new BStringView(Bounds(), "temp", "AEIOUglqj", 0, 0); tempStringView->ResizeToPreferred(); float stringHeight = tempStringView->Frame().bottom; delete tempStringView; privilegesView = new BView(BRect(bgView->Frame().left + 2, bgView->Frame().top + 2, bgView->Frame().right - 2, stringHeight + 2), "privilege message", 0, B_WILL_DRAW); privilegesView->SetViewColor(0, 100, 0); bgView->AddChild(privilegesView); BString privString; // this will become dynamic based on the current mode privString += S_CHANOPTS_OPID1; privString += S_CHANOPTS_OPID2; BStringView* privMsgView = new BStringView(BRect(privilegesView->Bounds().left, privilegesView->Bounds().top, privilegesView->Bounds().right, stringHeight), "privMsgView", privString.String(), 0, B_WILL_DRAW); privMsgView->SetHighColor(255, 255, 255); privMsgView->SetAlignment(B_ALIGN_CENTER); privilegesView->ResizeToPreferred(); privilegesView->AddChild(privMsgView); }
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)); }
FadeView::FadeView(const char* name, ScreenSaverSettings& settings) : BView(name, B_WILL_DRAW), fSettings(settings) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); font_height fontHeight; be_plain_font->GetHeight(&fontHeight); float textHeight = ceilf(fontHeight.ascent + fontHeight.descent); fEnableCheckBox = new BCheckBox("EnableCheckBox", B_TRANSLATE("Enable screensaver"), new BMessage(kMsgEnableScreenSaverBox)); BBox* box = new BBox("EnableScreenSaverBox"); box->SetLabel(fEnableCheckBox); // Start Screensaver BStringView* startScreenSaver = new BStringView("startScreenSaver", B_TRANSLATE("Start screensaver")); startScreenSaver->SetAlignment(B_ALIGN_RIGHT); fRunSlider = new TimeSlider("RunSlider", kMsgRunSliderChanged, kMsgRunSliderUpdate); // Turn Off rgb_color textColor = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DISABLED_LABEL_TINT); fTurnOffNotSupported = new BTextView("not_supported", be_plain_font, &textColor, B_WILL_DRAW); fTurnOffNotSupported->SetExplicitMinSize(BSize(B_SIZE_UNSET, 3 + textHeight * 3)); fTurnOffNotSupported->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fTurnOffNotSupported->MakeEditable(false); fTurnOffNotSupported->MakeSelectable(false); fTurnOffNotSupported->SetText( B_TRANSLATE("Display Power Management Signaling not available")); fTurnOffCheckBox = new BCheckBox("TurnOffScreenCheckBox", B_TRANSLATE("Turn off screen"), new BMessage(kMsgTurnOffCheckBox)); fTurnOffCheckBox->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER)); fTurnOffSlider = new TimeSlider("TurnOffSlider", kMsgTurnOffSliderChanged, kMsgTurnOffSliderUpdate); // Password fPasswordCheckBox = new BCheckBox("PasswordCheckbox", B_TRANSLATE("Password lock"), new BMessage(kMsgPasswordCheckBox)); fPasswordCheckBox->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER)); fPasswordSlider = new TimeSlider("PasswordSlider", kMsgPasswordSliderChanged, kMsgPasswordSliderUpdate); fPasswordButton = new BButton("PasswordButton", B_TRANSLATE("Password" B_UTF8_ELLIPSIS), new BMessage(kMsgChangePassword)); // Bottom float monitorHeight = 10 + textHeight * 3; float aspectRatio = 4.0f / 3.0f; float monitorWidth = monitorHeight * aspectRatio; BRect monitorRect = BRect(0, 0, monitorWidth, monitorHeight); fFadeNow = new ScreenCornerSelector(monitorRect, "FadeNow", new BMessage(kMsgFadeCornerChanged), B_FOLLOW_NONE); BTextView* fadeNowText = new BTextView("FadeNowText", B_WILL_DRAW); fadeNowText->SetExplicitMinSize(BSize(B_SIZE_UNSET, 4 + textHeight * 4)); fadeNowText->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fadeNowText->MakeEditable(false); fadeNowText->MakeSelectable(false); fadeNowText->SetText(B_TRANSLATE("Fade now when mouse is here")); fFadeNever = new ScreenCornerSelector(monitorRect, "FadeNever", new BMessage(kMsgNeverFadeCornerChanged), B_FOLLOW_NONE); BTextView* fadeNeverText = new BTextView("FadeNeverText", B_WILL_DRAW); fadeNeverText->SetExplicitMinSize(BSize(B_SIZE_UNSET, 4 + textHeight * 4)); fadeNeverText->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fadeNeverText->MakeEditable(false); fadeNeverText->MakeSelectable(false); fadeNeverText->SetText(B_TRANSLATE("Don't fade when mouse is here")); box->AddChild(BLayoutBuilder::Group<>(B_VERTICAL) .SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) .AddGrid(B_USE_DEFAULT_SPACING, B_USE_SMALL_SPACING) .Add(startScreenSaver, 0, 0) .Add(fRunSlider, 1, 0) .Add(fTurnOffCheckBox, 0, 1) .Add(BLayoutBuilder::Group<>(B_VERTICAL) .Add(fTurnOffNotSupported) .Add(fTurnOffSlider) .View(), 1, 1) .Add(fPasswordCheckBox, 0, 2) .Add(fPasswordSlider, 1, 2) .End() .AddGroup(B_HORIZONTAL) .AddGlue() .Add(fPasswordButton) .End() .AddGlue() .AddGroup(B_HORIZONTAL) .Add(fFadeNow) .AddGroup(B_VERTICAL, 0) .Add(fadeNowText) .AddGlue() .End() .Add(fFadeNever) .AddGroup(B_VERTICAL, 0) .Add(fadeNeverText) .AddGlue() .End() .End() .AddGlue() .View()); BLayoutBuilder::Group<>(this, B_HORIZONTAL) .SetInsets(B_USE_SMALL_SPACING) .Add(box) .End(); }
ScreenWindow::ScreenWindow(ScreenSettings* settings) : BWindow(settings->WindowFrame(), B_TRANSLATE_SYSTEM_NAME("Screen"), B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS, B_ALL_WORKSPACES), fIsVesa(false), fBootWorkspaceApplied(false), fOtherRefresh(NULL), fScreenMode(this), fUndoScreenMode(this), fModified(false) { BScreen screen(this); accelerant_device_info info; if (screen.GetDeviceInfo(&info) == B_OK && !strcasecmp(info.chipset, "VESA")) fIsVesa = true; _UpdateOriginal(); _BuildSupportedColorSpaces(); fActive = fSelected = fOriginal; fSettings = settings; // we need the "Current Workspace" first to get its height BPopUpMenu *popUpMenu = new BPopUpMenu(B_TRANSLATE("Current workspace"), true, true); fAllWorkspacesItem = new BMenuItem(B_TRANSLATE("All workspaces"), new BMessage(WORKSPACE_CHECK_MSG)); popUpMenu->AddItem(fAllWorkspacesItem); BMenuItem *item = new BMenuItem(B_TRANSLATE("Current workspace"), new BMessage(WORKSPACE_CHECK_MSG)); popUpMenu->AddItem(item); fAllWorkspacesItem->SetMarked(true); BMenuField* workspaceMenuField = new BMenuField("WorkspaceMenu", NULL, popUpMenu); workspaceMenuField->ResizeToPreferred(); // box on the left with workspace count and monitor view BBox* screenBox = new BBox("screen box"); BGroupLayout* layout = new BGroupLayout(B_VERTICAL, B_USE_SMALL_SPACING); layout->SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING); screenBox->SetLayout(layout); fMonitorInfo = new BStringView("monitor info", ""); fMonitorInfo->SetAlignment(B_ALIGN_CENTER); screenBox->AddChild(fMonitorInfo); fMonitorView = new MonitorView(BRect(0.0, 0.0, 80.0, 80.0), "monitor", screen.Frame().IntegerWidth() + 1, screen.Frame().IntegerHeight() + 1); screenBox->AddChild(fMonitorView); BStringView* workspaces = new BStringView("workspaces", B_TRANSLATE("Workspaces")); workspaces->SetAlignment(B_ALIGN_CENTER); fColumnsControl = new BTextControl(B_TRANSLATE("Columns:"), "0", new BMessage(kMsgWorkspaceColumnsChanged)); fColumnsControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); fRowsControl = new BTextControl(B_TRANSLATE("Rows:"), "0", new BMessage(kMsgWorkspaceRowsChanged)); fRowsControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); float tiny = be_control_look->DefaultItemSpacing() / 4; screenBox->AddChild(BLayoutBuilder::Group<>() .AddGroup(B_VERTICAL, B_USE_SMALL_SPACING) .Add(workspaces) .AddGrid(0.0, tiny) // columns .Add(fColumnsControl->CreateLabelLayoutItem(), 0, 0) .Add(BSpaceLayoutItem::CreateHorizontalStrut( B_USE_SMALL_SPACING), 1, 0) .Add(fColumnsControl->CreateTextViewLayoutItem(), 2, 0) .Add(BSpaceLayoutItem::CreateHorizontalStrut(tiny), 3, 0) .Add(_CreateColumnRowButton(true, false), 4, 0) .Add(_CreateColumnRowButton(true, true), 5, 0) // rows .Add(fRowsControl->CreateLabelLayoutItem(), 0, 1) .Add(BSpaceLayoutItem::CreateHorizontalStrut( B_USE_SMALL_SPACING), 1, 1) .Add(fRowsControl->CreateTextViewLayoutItem(), 2, 1) .Add(BSpaceLayoutItem::CreateHorizontalStrut(tiny), 3, 1) .Add(_CreateColumnRowButton(false, false), 4, 1) .Add(_CreateColumnRowButton(false, true), 5, 1) .End() .End() .View()); fBackgroundsButton = new BButton("BackgroundsButton", B_TRANSLATE("Set background" B_UTF8_ELLIPSIS), new BMessage(BUTTON_LAUNCH_BACKGROUNDS_MSG)); fBackgroundsButton->SetFontSize(be_plain_font->Size() * 0.9); screenBox->AddChild(fBackgroundsButton); // box on the right with screen resolution, etc. BBox* controlsBox = new BBox("controls box"); controlsBox->SetLabel(workspaceMenuField); BGroupView* outerControlsView = new BGroupView(B_VERTICAL, 10.0); outerControlsView->GroupLayout()->SetInsets(10, 10, 10, 10); controlsBox->AddChild(outerControlsView); fResolutionMenu = new BPopUpMenu("resolution", true, true); uint16 maxWidth = 0; uint16 maxHeight = 0; uint16 previousWidth = 0; uint16 previousHeight = 0; for (int32 i = 0; i < fScreenMode.CountModes(); i++) { screen_mode mode = fScreenMode.ModeAt(i); if (mode.width == previousWidth && mode.height == previousHeight) continue; previousWidth = mode.width; previousHeight = mode.height; if (maxWidth < mode.width) maxWidth = mode.width; if (maxHeight < mode.height) maxHeight = mode.height; BMessage* message = new BMessage(POP_RESOLUTION_MSG); message->AddInt32("width", mode.width); message->AddInt32("height", mode.height); BString name; name << mode.width << " x " << mode.height; fResolutionMenu->AddItem(new BMenuItem(name.String(), message)); } fMonitorView->SetMaxResolution(maxWidth, maxHeight); fResolutionField = new BMenuField("ResolutionMenu", B_TRANSLATE("Resolution:"), fResolutionMenu); fColorsMenu = new BPopUpMenu("colors", true, false); for (int32 i = 0; i < kColorSpaceCount; i++) { if ((fSupportedColorSpaces & (1 << i)) == 0) continue; BMessage* message = new BMessage(POP_COLORS_MSG); message->AddInt32("bits_per_pixel", kColorSpaces[i].bits_per_pixel); message->AddInt32("space", kColorSpaces[i].space); BMenuItem* item = new BMenuItem(kColorSpaces[i].label, message); if (kColorSpaces[i].space == screen.ColorSpace()) fUserSelectedColorSpace = item; fColorsMenu->AddItem(item); } fColorsField = new BMenuField("ColorsMenu", B_TRANSLATE("Colors:"), fColorsMenu); fRefreshMenu = new BPopUpMenu("refresh rate", true, true); float min, max; if (fScreenMode.GetRefreshLimits(fActive, min, max) != B_OK) { // if we couldn't obtain the refresh limits, reset to the default // range. Constraints from detected monitors will fine-tune this // later. min = kRefreshRates[0]; max = kRefreshRates[kRefreshRateCount - 1]; } if (min == max) { // This is a special case for drivers that only support a single // frequency, like the VESA driver BString name; refresh_rate_to_string(min, name); BMessage *message = new BMessage(POP_REFRESH_MSG); message->AddFloat("refresh", min); BMenuItem *item = new BMenuItem(name.String(), message); fRefreshMenu->AddItem(item); item->SetEnabled(false); } else { monitor_info info; if (fScreenMode.GetMonitorInfo(info) == B_OK) { min = max_c(info.min_vertical_frequency, min); max = min_c(info.max_vertical_frequency, max); } for (int32 i = 0; i < kRefreshRateCount; ++i) { if (kRefreshRates[i] < min || kRefreshRates[i] > max) continue; BString name; name << kRefreshRates[i] << " " << B_TRANSLATE("Hz"); BMessage *message = new BMessage(POP_REFRESH_MSG); message->AddFloat("refresh", kRefreshRates[i]); fRefreshMenu->AddItem(new BMenuItem(name.String(), message)); } fOtherRefresh = new BMenuItem(B_TRANSLATE("Other" B_UTF8_ELLIPSIS), new BMessage(POP_OTHER_REFRESH_MSG)); fRefreshMenu->AddItem(fOtherRefresh); } fRefreshField = new BMenuField("RefreshMenu", B_TRANSLATE("Refresh rate:"), fRefreshMenu); if (_IsVesa()) fRefreshField->Hide(); // enlarged area for multi-monitor settings { bool dummy; uint32 dummy32; bool multiMonSupport; bool useLaptopPanelSupport; bool tvStandardSupport; multiMonSupport = TestMultiMonSupport(&screen) == B_OK; useLaptopPanelSupport = GetUseLaptopPanel(&screen, &dummy) == B_OK; tvStandardSupport = GetTVStandard(&screen, &dummy32) == B_OK; // even if there is no support, we still create all controls // to make sure we don't access NULL pointers later on fCombineMenu = new BPopUpMenu("CombineDisplays", true, true); for (int32 i = 0; i < kCombineModeCount; i++) { BMessage *message = new BMessage(POP_COMBINE_DISPLAYS_MSG); message->AddInt32("mode", kCombineModes[i].mode); fCombineMenu->AddItem(new BMenuItem(kCombineModes[i].name, message)); } fCombineField = new BMenuField("CombineMenu", B_TRANSLATE("Combine displays:"), fCombineMenu); if (!multiMonSupport) fCombineField->Hide(); fSwapDisplaysMenu = new BPopUpMenu("SwapDisplays", true, true); // !order is important - we rely that boolean value == idx BMessage *message = new BMessage(POP_SWAP_DISPLAYS_MSG); message->AddBool("swap", false); fSwapDisplaysMenu->AddItem(new BMenuItem(B_TRANSLATE("no"), message)); message = new BMessage(POP_SWAP_DISPLAYS_MSG); message->AddBool("swap", true); fSwapDisplaysMenu->AddItem(new BMenuItem(B_TRANSLATE("yes"), message)); fSwapDisplaysField = new BMenuField("SwapMenu", B_TRANSLATE("Swap displays:"), fSwapDisplaysMenu); if (!multiMonSupport) fSwapDisplaysField->Hide(); fUseLaptopPanelMenu = new BPopUpMenu("UseLaptopPanel", true, true); // !order is important - we rely that boolean value == idx message = new BMessage(POP_USE_LAPTOP_PANEL_MSG); message->AddBool("use", false); fUseLaptopPanelMenu->AddItem(new BMenuItem(B_TRANSLATE("if needed"), message)); message = new BMessage(POP_USE_LAPTOP_PANEL_MSG); message->AddBool("use", true); fUseLaptopPanelMenu->AddItem(new BMenuItem(B_TRANSLATE("always"), message)); fUseLaptopPanelField = new BMenuField("UseLaptopPanel", B_TRANSLATE("Use laptop panel:"), fUseLaptopPanelMenu); if (!useLaptopPanelSupport) fUseLaptopPanelField->Hide(); fTVStandardMenu = new BPopUpMenu("TVStandard", true, true); // arbitrary limit uint32 i; for (i = 0; i < 100; ++i) { uint32 mode; if (GetNthSupportedTVStandard(&screen, i, &mode) != B_OK) break; BString name = tv_standard_to_string(mode); message = new BMessage(POP_TV_STANDARD_MSG); message->AddInt32("tv_standard", mode); fTVStandardMenu->AddItem(new BMenuItem(name.String(), message)); } fTVStandardField = new BMenuField("tv standard", B_TRANSLATE("Video format:"), fTVStandardMenu); fTVStandardField->SetAlignment(B_ALIGN_RIGHT); if (!tvStandardSupport || i == 0) fTVStandardField->Hide(); } BLayoutBuilder::Group<>(outerControlsView) .AddGrid(5.0, 5.0) .AddMenuField(fResolutionField, 0, 0, B_ALIGN_RIGHT) .AddMenuField(fColorsField, 0, 1, B_ALIGN_RIGHT) .AddMenuField(fRefreshField, 0, 2, B_ALIGN_RIGHT) .AddMenuField(fCombineField, 0, 3, B_ALIGN_RIGHT) .AddMenuField(fSwapDisplaysField, 0, 4, B_ALIGN_RIGHT) .AddMenuField(fUseLaptopPanelField, 0, 5, B_ALIGN_RIGHT) .AddMenuField(fTVStandardField, 0, 6, B_ALIGN_RIGHT) .End(); // TODO: we don't support getting the screen's preferred settings /* fDefaultsButton = new BButton(buttonRect, "DefaultsButton", "Defaults", new BMessage(BUTTON_DEFAULTS_MSG));*/ fApplyButton = new BButton("ApplyButton", B_TRANSLATE("Apply"), new BMessage(BUTTON_APPLY_MSG)); fApplyButton->SetEnabled(false); BLayoutBuilder::Group<>(outerControlsView) .AddGlue() .AddGroup(B_HORIZONTAL) .AddGlue() .Add(fApplyButton); fRevertButton = new BButton("RevertButton", B_TRANSLATE("Revert"), new BMessage(BUTTON_REVERT_MSG)); fRevertButton->SetEnabled(false); BLayoutBuilder::Group<>(this, B_VERTICAL, B_USE_DEFAULT_SPACING) .AddGroup(B_HORIZONTAL) .AddGroup(B_VERTICAL, 0) .AddStrut(floorf(controlsBox->TopBorderOffset()) - 1) .Add(screenBox) .End() .Add(controlsBox) .End() .AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING) .Add(fRevertButton) .AddGlue() .End() .SetInsets(B_USE_DEFAULT_SPACING); _UpdateControls(); _UpdateMonitor(); }
FilePermissionsView::FilePermissionsView(BRect rect, Model* model) : BView(rect, "FilePermissionsView", B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW), fModel(model) { SetViewUIColor(B_PANEL_BACKGROUND_COLOR); // Constants for the column labels: "User", "Group" and "Other". const float kColumnLabelMiddle = 77, kColumnLabelTop = 0, kColumnLabelSpacing = 37, kColumnLabelBottom = 39, kColumnLabelWidth = 80, kAttribFontHeight = 10; BStringView* strView; strView = new RotatedStringView( BRect(kColumnLabelMiddle - kColumnLabelWidth / 2, kColumnLabelTop, kColumnLabelMiddle + kColumnLabelWidth / 2, kColumnLabelBottom), "", B_TRANSLATE("Owner")); AddChild(strView); strView->SetFontSize(kAttribFontHeight); strView = new RotatedStringView( BRect(kColumnLabelMiddle - kColumnLabelWidth / 2 + kColumnLabelSpacing, kColumnLabelTop, kColumnLabelMiddle + kColumnLabelWidth / 2 + kColumnLabelSpacing, kColumnLabelBottom), "", B_TRANSLATE("Group")); AddChild(strView); strView->SetFontSize(kAttribFontHeight); strView = new RotatedStringView( BRect(kColumnLabelMiddle - kColumnLabelWidth / 2 + 2 * kColumnLabelSpacing, kColumnLabelTop, kColumnLabelMiddle + kColumnLabelWidth / 2 + 2 * kColumnLabelSpacing, kColumnLabelBottom), "", B_TRANSLATE("Other")); AddChild(strView); strView->SetFontSize(kAttribFontHeight); // Constants for the row labels: "Read", "Write" and "Execute". const float kRowLabelLeft = 10, kRowLabelTop = kColumnLabelBottom + 5, kRowLabelVerticalSpacing = 18, kRowLabelRight = kColumnLabelMiddle - kColumnLabelSpacing / 2 - 5, kRowLabelHeight = 14; strView = new BStringView(BRect(kRowLabelLeft, kRowLabelTop, kRowLabelRight, kRowLabelTop + kRowLabelHeight), "", B_TRANSLATE("Read")); AddChild(strView); strView->SetAlignment(B_ALIGN_RIGHT); strView->SetFontSize(kAttribFontHeight); strView = new BStringView(BRect(kRowLabelLeft, kRowLabelTop + kRowLabelVerticalSpacing, kRowLabelRight, kRowLabelTop + kRowLabelVerticalSpacing + kRowLabelHeight), "", B_TRANSLATE("Write")); AddChild(strView); strView->SetAlignment(B_ALIGN_RIGHT); strView->SetFontSize(kAttribFontHeight); strView = new BStringView(BRect(kRowLabelLeft, kRowLabelTop + 2 * kRowLabelVerticalSpacing, kRowLabelRight, kRowLabelTop + 2 * kRowLabelVerticalSpacing + kRowLabelHeight), "", B_TRANSLATE("Execute")); AddChild(strView); strView->SetAlignment(B_ALIGN_RIGHT); strView->SetFontSize(kAttribFontHeight); // Constants for the 3x3 check box array. const float kLeftMargin = kRowLabelRight + 5, kTopMargin = kRowLabelTop - 2, kHorizontalSpacing = kColumnLabelSpacing, kVerticalSpacing = kRowLabelVerticalSpacing, kCheckBoxWidth = 18, kCheckBoxHeight = 18; BCheckBox** checkBoxArray[3][3] = { { &fReadUserCheckBox, &fReadGroupCheckBox, &fReadOtherCheckBox }, { &fWriteUserCheckBox, &fWriteGroupCheckBox, &fWriteOtherCheckBox }, { &fExecuteUserCheckBox, &fExecuteGroupCheckBox, &fExecuteOtherCheckBox } }; for (int32 x = 0; x < 3; x++) { for (int32 y = 0; y < 3; y++) { *checkBoxArray[y][x] = new BCheckBox(BRect(kLeftMargin + kHorizontalSpacing * x, kTopMargin + kVerticalSpacing * y, kLeftMargin + kHorizontalSpacing * x + kCheckBoxWidth, kTopMargin + kVerticalSpacing * y + kCheckBoxHeight), "", "", new BMessage(kPermissionsChanged)); AddChild(*checkBoxArray[y][x]); } } const float kTextControlLeft = 170, kTextControlRight = 270, kTextControlTop = kRowLabelTop - 29, kTextControlHeight = 14, kTextControlSpacing = 16; strView = new BStringView(BRect(kTextControlLeft, kTextControlTop, kTextControlRight, kTextControlTop + kTextControlHeight), "", B_TRANSLATE("Owner")); strView->SetAlignment(B_ALIGN_CENTER); strView->SetFontSize(kAttribFontHeight); AddChild(strView); fOwnerTextControl = new BTextControl( BRect(kTextControlLeft, kTextControlTop - 2 + kTextControlSpacing, kTextControlRight, kTextControlTop + kTextControlHeight - 2 + kTextControlSpacing), "", "", "", new BMessage(kNewOwnerEntered)); fOwnerTextControl->SetDivider(0); AddChild(fOwnerTextControl); strView = new BStringView(BRect(kTextControlLeft, kTextControlTop + 11 + 2 * kTextControlSpacing, kTextControlRight, kTextControlTop + 11 + 2 * kTextControlSpacing + kTextControlHeight), "", B_TRANSLATE("Group")); strView->SetAlignment(B_ALIGN_CENTER); strView->SetFontSize(kAttribFontHeight); AddChild(strView); fGroupTextControl = new BTextControl(BRect(kTextControlLeft, kTextControlTop + 10 + 3 * kTextControlSpacing, kTextControlRight, kTextControlTop + 10 + 3 * kTextControlSpacing + kTextControlHeight), "", "", "", new BMessage(kNewGroupEntered)); fGroupTextControl->SetDivider(0); AddChild(fGroupTextControl); ModelChanged(model); }
void MonthWindowView::AttachedToWindow(void) { SetFont(be_plain_font); SetViewColor(VIEW_COLOR); // Calculate size of cell needed for number of day of month font_height h; be_plain_font->GetHeight(&h); h_cell=(int)(h.ascent+h.descent+h.leading+6); w_cell=StringWidth("4")*4; #ifdef __LANG_RUSSIAN BString s(""); s<<tday; s.Append(" "); switch(tmonth) { case 1: { s.Append("января "); break; } case 2: { s.Append("февраля "); break; } case 3: { s.Append("марта "); break; } case 4: { s.Append("апреля "); break; } case 5: { s.Append("мая "); break; } case 6: { s.Append("июня "); break; } case 7: { s.Append("июля "); break; } case 8: { s.Append("августа "); break; } case 9: { s.Append("сентября "); break; } case 10: { s.Append("октября "); break; } case 11: { s.Append("ноября "); break; } case 12: { s.Append("декабря "); break; } } s<<tyear; s.Append(" г."); #else // localized, english and french BString s(""); s<<tday; s.Append(" "); s.Append(monthNames[tmonth-1]); s.Append(" "); s<<tyear; #endif msng=new BMessenger(this); todayStringView=new MouseSenseStringView(new BMessage('TODA'), msng, BRect(10,10,100,100),"todayMStringViewAViX", s.String()); AddChild(todayStringView); todayStringView->ResizeToPreferred(); todayStringView->SetViewColor(VIEW_COLOR); monthStringView=new BStringView(BRect(10,10,100,100),"monthStringViewAViX", monthNames[8]); monthStringView->SetAlignment(B_ALIGN_CENTER); AddChild(monthStringView); monthStringView->ResizeToPreferred(); monthStringView->SetText(monthNames[cmonth-1]); monthStringView->SetViewColor(VIEW_COLOR); s.SetTo(""); if(cyear<10) s.Append("000"); else if(cyear<100) s.Append("00"); else if(cyear<1000) s.Append("0"); s<<cyear; yearStringView=new BStringView(BRect(10,10,100,100),"yearStringViewAViX", "0000"); AddChild(yearStringView); yearStringView->ResizeToPreferred(); yearStringView->SetText(s.String()); yearStringView->SetViewColor(VIEW_COLOR); ResizeTo(w_cell*7+1,h_cell*7+3+16+yearStringView->Bounds().bottom+todayStringView->Bounds().bottom); Window()->ResizeTo(Bounds().right, Bounds().bottom); yearMStringView[0]=new MouseSenseStringView(new BMessage('YEA0'),msng, BRect(10,10,100,100), "yearMStringViewAViX0", "<<"); AddChild(yearMStringView[0]); yearMStringView[0]->ResizeToPreferred(); yearMStringView[0]->SetViewColor(VIEW_COLOR); yearMStringView[1]=new MouseSenseStringView(new BMessage('YEA1'),msng, BRect(10,10,100,100), "yearMStringViewAViX1", ">>"); AddChild(yearMStringView[1]); yearMStringView[1]->ResizeToPreferred(); yearMStringView[1]->SetViewColor(VIEW_COLOR); monthMStringView[0]=new MouseSenseStringView(new BMessage('MON0'),msng, BRect(10,10,100,100), "monthMStringViewAViX0", "<<"); AddChild(monthMStringView[0]); monthMStringView[0]->ResizeToPreferred(); monthMStringView[0]->SetViewColor(VIEW_COLOR); monthMStringView[1]=new MouseSenseStringView(new BMessage('MON1'),msng, BRect(10,10,100,100), "monthMStringViewAViX1", ">>"); AddChild(monthMStringView[1]); monthMStringView[1]->ResizeToPreferred(); monthMStringView[1]->SetViewColor(VIEW_COLOR); todayStringView->MoveTo((Bounds().right-todayStringView->Bounds().right)/2, Bounds().bottom-todayStringView->Bounds().bottom-2); if(tyear<first_year || tyear>last_year) todayStringView->SetHighColor(NOACTIVE_COLOR); yearMStringView[1]->MoveTo(Bounds().right-yearMStringView[1]->Bounds().right,5); yearStringView->MoveTo(yearMStringView[1]->Frame().left-yearStringView->Bounds().right,5); yearMStringView[0]->MoveTo(yearStringView->Frame().left-yearMStringView[0]->Bounds().right,5); monthStringView->MoveTo((yearMStringView[0]->Frame().left-monthStringView->Bounds().right)/2,5); monthMStringView[0]->MoveTo(monthStringView->Frame().left-monthMStringView[0]->Bounds().right,5); monthMStringView[1]->MoveTo(monthStringView->Frame().right,5); which_focused=2; // days of month Bmp=new BBitmap(BRect(Frame()),B_RGB32,true); BmpView=new BView(Bmp->Bounds(),"BV",0,B_WILL_DRAW); Bmp->AddChild(BmpView); Bmp->Lock(); BmpView->SetHighColor(VIEW_COLOR); BmpView->FillRect(BmpView->Frame()); BmpView->SetHighColor(LINE_COLOR); BmpView->StrokeLine(BPoint(3,todayStringView->Frame().top-5), BPoint(Bounds().right-3,todayStringView->Frame().top-5)); BmpView->StrokeLine(BPoint(3,yearStringView->Frame().bottom+2), BPoint(Bounds().right-3,yearStringView->Frame().bottom+2)); BmpView->SetHighColor(0,0,0,0); float y=yearStringView->Frame().bottom+h_cell; float x=0; for(int i=0;i<7;i++) { BmpView->DrawString(weekdayNames[i],BPoint(x+(w_cell-StringWidth(weekdayNames[i]))/2,y)); x+=w_cell; } BmpView->Sync(); Bmp->Unlock(); DrawMonth(); }
ColorsPreflet::ColorsPreflet(PrefsWindow *parent) : Preflet(parent) { // clear colors listview BRect lvrc(Bounds()); lvrc.InsetBy(20, 50); lvrc.OffsetBy(0, -5); lvrc.right--; lvrc.top += 12; // make room for cut/paste instructions lvrc.bottom -= 2; // looks nicer lvrc.OffsetBy(0, 1); // create list lvrc.InsetBy(2, 2); lvrc.right -= B_V_SCROLL_BAR_WIDTH; fColorsList = new ColorView(lvrc, parent); // create scrollview fScrollView = new BScrollView("sv", fColorsList, B_FOLLOW_ALL, 0, false, true); AddChild(fScrollView); lvrc.right += B_V_SCROLL_BAR_WIDTH; // the real TargetedByScrollView is for some reason called BEFORE the scrollbars // are created, so it doesn't work properly, fix up... fColorsList->TargetedByScrollView(fScrollView); // cut/paste instructions BStringView *paste; BRect rc(lvrc); rc.bottom = rc.top - 1; rc.top -= 18; //rc.bottom = rc.top + 15; rc.right = rc.left + (WIDTHOF(rc) / 2); AddChild(new BStringView(rc, "", "Right-click: pick up color", 0)); rc.left = rc.right + 1; rc.right = lvrc.right; paste = new BStringView(rc, "", "Ctrl-click: paste color", 0); paste->SetAlignment(B_ALIGN_RIGHT); AddChild(paste); // font selector area fFontMenu = new BPopUpMenu("fontsel"); fFontMenu->AddItem(new BMenuItem("System Fixed Font ", NULL)); int x = 10; int y = 273; rc.Set(x, y, x+20, y+20); fFontField = new BMenuField(rc, "fontfld", "", fFontMenu); fFontMenu->ItemAt(0)->SetMarked(true); AddChild(fFontField); rc.Set(200, 270, 353, 290); fFontSize = new Spinner(rc, "fontsz", "Point size", new BMessage(M_POINTSIZE_CHANGED)); fFontSize->SetRange(4, 24); fFontSize->SetValue(editor.settings.font_size); fFontSize->SetTarget(Looper()); AddChild(fFontSize); // scheme selector area fSchemeMenu = new BPopUpMenu("schemesel"); UpdateSchemesMenu(); x = 10; y = 10; rc.Set(x, y, x+20, y+20); fSchemeField = new BMenuField(rc, "schemefld", "", fSchemeMenu); AddChild(fSchemeField); rc.right = lvrc.right; rc.left = rc.right - 48; rc.OffsetBy(-80, 0); BButton *delbtn = new BButton(rc, "", "Del", new BMessage(M_SCHEME_DELETE)); rc.OffsetBy(-58, 0); BButton *newbtn = new BButton(rc, "", "New", new BMessage(M_SCHEME_NEW)); rc.OffsetBy(115, 0); rc.right = lvrc.right + 1; BButton *defaultsbtn = new BButton(rc, "", "Defaults", new BMessage(M_SCHEME_DEFAULTS)); newbtn->SetTarget(Looper()); delbtn->SetTarget(Looper()); defaultsbtn->SetTarget(Looper()); AddChild(newbtn); AddChild(delbtn); AddChild(defaultsbtn); }
ModifierKeysWindow::ModifierKeysWindow() : BWindow(BRect(0, 0, 360, 220), B_TRANSLATE("Modifier keys"), B_FLOATING_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS) { get_key_map(&fCurrentMap, &fCurrentBuffer); get_key_map(&fSavedMap, &fSavedBuffer); BStringView* keyRole = new BStringView("key role", B_TRANSLATE_COMMENT("Role", "As in the role of a modifier key")); keyRole->SetAlignment(B_ALIGN_RIGHT); keyRole->SetFont(be_bold_font); BStringView* keyLabel = new BStringView("key label", B_TRANSLATE_COMMENT("Key", "As in a computer keyboard key")); keyLabel->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); keyLabel->SetFont(be_bold_font); BMenuField* shiftMenuField = _CreateShiftMenuField(); shiftMenuField->SetAlignment(B_ALIGN_RIGHT); BMenuField* controlMenuField = _CreateControlMenuField(); controlMenuField->SetAlignment(B_ALIGN_RIGHT); BMenuField* optionMenuField = _CreateOptionMenuField(); optionMenuField->SetAlignment(B_ALIGN_RIGHT); BMenuField* commandMenuField = _CreateCommandMenuField(); commandMenuField->SetAlignment(B_ALIGN_RIGHT); fShiftConflictView = new ConflictView("shift warning view"); fShiftConflictView->SetExplicitMaxSize(BSize(15, 15)); fControlConflictView = new ConflictView("control warning view"); fControlConflictView->SetExplicitMaxSize(BSize(15, 15)); fOptionConflictView = new ConflictView("option warning view"); fOptionConflictView->SetExplicitMaxSize(BSize(15, 15)); fCommandConflictView = new ConflictView("command warning view"); fCommandConflictView->SetExplicitMaxSize(BSize(15, 15)); fCancelButton = new BButton("cancelButton", B_TRANSLATE("Cancel"), new BMessage(B_QUIT_REQUESTED)); fRevertButton = new BButton("revertButton", B_TRANSLATE("Revert"), new BMessage(kMsgRevertModifiers)); fRevertButton->SetEnabled(false); fOkButton = new BButton("okButton", B_TRANSLATE("Set modifier keys"), new BMessage(kMsgApplyModifiers)); fOkButton->MakeDefault(true); // Build the layout SetLayout(new BGroupLayout(B_VERTICAL)); float forcedMinWidth = be_plain_font->StringWidth("XXX") * 4; keyRole->SetExplicitMinSize(BSize(forcedMinWidth, B_SIZE_UNSET)); BLayoutItem* shiftLabel = shiftMenuField->CreateLabelLayoutItem(); shiftLabel->SetExplicitMinSize(BSize(forcedMinWidth, B_SIZE_UNSET)); BLayoutItem* controlLabel = controlMenuField->CreateLabelLayoutItem(); controlLabel->SetExplicitMinSize(BSize(forcedMinWidth, B_SIZE_UNSET)); BLayoutItem* optionLabel = optionMenuField->CreateLabelLayoutItem(); optionLabel->SetExplicitMinSize(BSize(forcedMinWidth, B_SIZE_UNSET)); BLayoutItem* commandLabel = commandMenuField->CreateLabelLayoutItem(); commandLabel->SetExplicitMinSize(BSize(forcedMinWidth, B_SIZE_UNSET)); AddChild(BLayoutBuilder::Group<>(B_VERTICAL, B_USE_SMALL_SPACING) .AddGroup(B_HORIZONTAL) .Add(keyRole) .Add(keyLabel) .End() .AddGroup(B_HORIZONTAL) .Add(shiftLabel) .Add(shiftMenuField->CreateMenuBarLayoutItem()) .Add(fShiftConflictView) .End() .AddGroup(B_HORIZONTAL) .Add(controlLabel) .Add(controlMenuField->CreateMenuBarLayoutItem()) .Add(fControlConflictView) .End() .AddGroup(B_HORIZONTAL) .Add(optionLabel) .Add(optionMenuField->CreateMenuBarLayoutItem()) .Add(fOptionConflictView) .End() .AddGroup(B_HORIZONTAL) .Add(commandLabel) .Add(commandMenuField->CreateMenuBarLayoutItem()) .Add(fCommandConflictView) .End() .AddGlue() .AddGroup(B_HORIZONTAL) .Add(fCancelButton) .AddGlue() .Add(fRevertButton) .Add(fOkButton) .End() .SetInsets(B_USE_DEFAULT_SPACING) ); _MarkMenuItems(); _ValidateDuplicateKeys(); PostMessage(kMsgHideShowIcons); }
// constructor NavigationInfoPanel::NavigationInfoPanel(BWindow* parent, const BMessage& message, const BMessenger& target) : BWindow(BRect(0, 0, 200, 30), "Navigation Info", B_FLOATING_WINDOW_LOOK, B_FLOATING_SUBSET_WINDOW_FEEL, B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_V_RESIZABLE) , fMessage(message) , fTarget(target) { // create the interface and resize to fit BRect frame = Bounds(); frame.InsetBy(5, 5); frame.bottom = frame.top + 15; // label string view fLabelView = new BStringView(frame, "label", kLabel, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); fLabelView->ResizeToPreferred(); frame = fLabelView->Frame(); // target clip text control frame.OffsetBy(0, frame.Height() + 5); fTargetClipTC = new BTextControl(frame, "clip id", "Target Playlist ID", "", new BMessage(MSG_INVOKE), B_FOLLOW_TOP | B_FOLLOW_LEFT_RIGHT); fTargetClipTC->ResizeToPreferred(); frame = fTargetClipTC->Frame(); // help string view frame.OffsetBy(0, frame.Height() + 5); BStringView* helpView = new BStringView(frame, "help", "Drag and drop a playlist clip here.", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); BFont font; helpView->GetFont(&font); font.SetFace(B_ITALIC_FACE); font.SetSize(font.Size() * 0.9); helpView->SetFont(&font); helpView->SetAlignment(B_ALIGN_CENTER); helpView->ResizeToPreferred(); // parent view frame = fLabelView->Frame() | fTargetClipTC->Frame() | helpView->Frame(); frame.InsetBy(-5, -5); fInfoView = new InfoView(frame, this); fInfoView->AddChild(fLabelView); fInfoView->AddChild(fTargetClipTC); fInfoView->AddChild(helpView); // resize to fit and adjust size limits ResizeTo(fInfoView->Frame().Width(), fInfoView->Frame().Height()); AddChild(fInfoView); float minWidth, maxWidth, minHeight, maxHeight; GetSizeLimits(&minWidth, &maxWidth, &minHeight, &maxHeight); minWidth = Frame().Width(); minHeight = maxHeight = Frame().Height(); SetSizeLimits(minWidth, maxWidth, minHeight, maxHeight); // modify the high color after the help view is attached to a window helpView->SetHighColor(tint_color(helpView->LowColor(), B_DISABLED_LABEL_TINT)); helpView->SetFlags(helpView->Flags() | B_FULL_UPDATE_ON_RESIZE); // help the buggy BeOS BStringView (when text alignment != left...) fInfoView->SetEventMask(B_POINTER_EVENTS); // resize controls to the same (maximum) width float maxControlWidth = fLabelView->Frame().Width(); maxControlWidth = max_c(maxControlWidth, fTargetClipTC->Frame().Width()); maxControlWidth = max_c(maxControlWidth, helpView->Frame().Width()); fLabelView->ResizeTo(maxControlWidth, fLabelView->Frame().Height()); fTargetClipTC->ResizeTo(maxControlWidth, fTargetClipTC->Frame().Height()); helpView->ResizeTo(maxControlWidth, helpView->Frame().Height()); // center above parent window BAutolock _(parent); frame = Frame(); BRect parentFrame = parent->Frame(); MoveTo((parentFrame.left + parentFrame.right - frame.Width()) / 2, (parentFrame.top + parentFrame.bottom - frame.Height()) / 2); AddToSubset(parent); }
InfoWin::InfoWin(BPoint p, FileInfo *f, BWindow* parent) : BWindow(BRect(p, p), kEmptyStr, B_FLOATING_WINDOW_LOOK, B_FLOATING_SUBSET_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_NOT_MINIMIZABLE) { AddToSubset(parent); typedef pair<string, string> Item; typedef vector<Item> InfoList; BString stringTitle("%refName% info"); stringTitle.ReplaceFirst("%refName%", f->ref.name); SetTitle(stringTitle.String()); InfoList info; Item item; // Size BString name; if (f->count > 0) { // This is a directory, include file count information static BMessageFormat format(B_TRANSLATE( "%size% in {0, plural, one{# file} other{# files}}")); format.Format(name, f->count); } else name = "%size%"; char tmp[B_PATH_NAME_LENGTH] = { 0 }; string_for_size(f->size, tmp, sizeof(tmp)); name.ReplaceFirst("%size%", tmp); info.push_back(Item(B_TRANSLATE_MARK("Size"), name.String())); // Created & modified dates BEntry entry(&f->ref); time_t t; entry.GetCreationTime(&t); strftime(tmp, 64, B_TRANSLATE("%a, %d %b %Y, %r"), localtime(&t)); info.push_back(Item(B_TRANSLATE("Created"), tmp)); entry.GetModificationTime(&t); strftime(tmp, 64, B_TRANSLATE("%a, %d %b %Y, %r"), localtime(&t)); info.push_back(Item(B_TRANSLATE("Modified"), tmp)); // Kind BMimeType* type = f->Type(); type->GetShortDescription(tmp); info.push_back(Item(B_TRANSLATE("Kind"), tmp)); delete type; // Path string path; f->GetPath(path); info.push_back(Item(B_TRANSLATE("Path"), path)); // Icon BBitmap *icon = new BBitmap(BRect(0.0, 0.0, 31.0, 31.0), B_RGBA32); entry_ref ref; entry.GetRef(&ref); BNodeInfo::GetTrackerIcon(&ref, icon, B_LARGE_ICON); // Compute the window size and add the views. BFont smallFont(be_plain_font); smallFont.SetSize(floorf(smallFont.Size() * 0.95)); struct font_height fh; smallFont.GetHeight(&fh); float fontHeight = fh.ascent + fh.descent + fh.leading; float leftWidth = 32.0; float rightWidth = 0.0; InfoList::iterator i = info.begin(); while (i != info.end()) { float w = smallFont.StringWidth((*i).first.c_str()) + 2.0 * kSmallHMargin; leftWidth = max_c(leftWidth, w); w = smallFont.StringWidth((*i).second.c_str()) + 2.0 * kSmallHMargin; rightWidth = max_c(rightWidth, w); i++; } float winHeight = 32.0 + 4.0 * kSmallVMargin + 5.0 * (fontHeight + kSmallVMargin); float winWidth = leftWidth + rightWidth; ResizeTo(winWidth, winHeight); LeftView *leftView = new LeftView(BRect(0.0, 0.0, leftWidth, winHeight), icon); BView *rightView = new BView( BRect(leftWidth + 1.0, 0.0, winWidth, winHeight), NULL, B_FOLLOW_NONE, B_WILL_DRAW); AddChild(leftView); AddChild(rightView); BStringView *sv = new BStringView( BRect(kSmallHMargin, kSmallVMargin, rightView->Bounds().Width(), kSmallVMargin + 30.0), NULL, f->ref.name, B_FOLLOW_ALL); BFont largeFont(be_plain_font); largeFont.SetSize(ceilf(largeFont.Size() * 1.1)); sv->SetFont(&largeFont); rightView->AddChild(sv); float y = 32.0 + 4.0 * kSmallVMargin; i = info.begin(); while (i != info.end()) { sv = new BStringView( BRect(kSmallHMargin, y, leftView->Bounds().Width(), y + fontHeight), NULL, (*i).first.c_str()); sv->SetFont(&smallFont); sv->SetAlignment(B_ALIGN_RIGHT); sv->SetHighColor(kBasePieColor[1]); // arbitrary leftView->AddChild(sv); sv = new BStringView( BRect(kSmallHMargin, y, rightView->Bounds().Width(), y + fontHeight), NULL, (*i).second.c_str()); sv->SetFont(&smallFont); rightView->AddChild(sv); y += fontHeight + kSmallVMargin; i++; } Show(); }
InterfaceHardwareView::InterfaceHardwareView(NetworkSettings* settings) : BGroupView(B_VERTICAL), fSettings(settings) { SetLayout(new BGroupLayout(B_VERTICAL)); SetFlags(Flags() | B_PULSE_NEEDED); // TODO : Small graph of throughput? float minimumWidth = be_control_look->DefaultItemSpacing() * 16; BStringView* status = new BStringView("status label", B_TRANSLATE("Status:")); status->SetAlignment(B_ALIGN_RIGHT); fStatusField = new BStringView("status field", ""); fStatusField->SetExplicitMinSize(BSize(minimumWidth, B_SIZE_UNSET)); BStringView* macAddress = new BStringView("mac address label", B_TRANSLATE("MAC address:")); macAddress->SetAlignment(B_ALIGN_RIGHT); fMacAddressField = new BStringView("mac address field", ""); fMacAddressField->SetExplicitMinSize(BSize(minimumWidth, B_SIZE_UNSET)); BStringView* linkSpeed = new BStringView("link speed label", B_TRANSLATE("Link speed:")); linkSpeed->SetAlignment(B_ALIGN_RIGHT); fLinkSpeedField = new BStringView("link speed field", ""); fLinkSpeedField->SetExplicitMinSize(BSize(minimumWidth, B_SIZE_UNSET)); // TODO: These metrics may be better in a BScrollView? BStringView* linkTx = new BStringView("tx label", B_TRANSLATE("Sent:")); linkTx->SetAlignment(B_ALIGN_RIGHT); fLinkTxField = new BStringView("tx field", ""); fLinkTxField ->SetExplicitMinSize(BSize(minimumWidth, B_SIZE_UNSET)); BStringView* linkRx = new BStringView("rx label", B_TRANSLATE("Received:")); linkRx->SetAlignment(B_ALIGN_RIGHT); fLinkRxField = new BStringView("rx field", ""); fLinkRxField ->SetExplicitMinSize(BSize(minimumWidth, B_SIZE_UNSET)); fNetworkMenuField = new BMenuField(B_TRANSLATE("Network:"), new BMenu( B_TRANSLATE("Choose automatically"))); fNetworkMenuField->SetAlignment(B_ALIGN_RIGHT); fNetworkMenuField->Menu()->SetLabelFromMarked(true); // Construct the BButtons fOnOff = new BButton("onoff", B_TRANSLATE("Disable"), new BMessage(kMsgInterfaceToggle)); fRenegotiate = new BButton("heal", B_TRANSLATE("Renegotiate"), new BMessage(kMsgInterfaceRenegotiate)); fRenegotiate->SetEnabled(false); BLayoutBuilder::Group<>(this) .AddGrid() .Add(status, 0, 0) .Add(fStatusField, 1, 0) .Add(fNetworkMenuField->CreateLabelLayoutItem(), 0, 1) .Add(fNetworkMenuField->CreateMenuBarLayoutItem(), 1, 1) .Add(macAddress, 0, 2) .Add(fMacAddressField, 1, 2) .Add(linkSpeed, 0, 3) .Add(fLinkSpeedField, 1, 3) .Add(linkTx, 0, 4) .Add(fLinkTxField, 1, 4) .Add(linkRx, 0, 5) .Add(fLinkRxField, 1, 5) .End() .AddGlue() .AddGroup(B_HORIZONTAL) .Add(fOnOff) .AddGlue() .Add(fRenegotiate) .End() .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING); }
InfoWin::InfoWin(BPoint p, FileInfo *f, BWindow* parent) : BWindow(BRect(p, p), kEmptyStr, B_FLOATING_WINDOW_LOOK, B_FLOATING_SUBSET_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_NOT_MINIMIZABLE) { AddToSubset(parent); typedef pair<string, string> Item; typedef vector<Item> InfoList; char name[B_PATH_NAME_LENGTH]; strcpy(name, f->ref.name); strcat(name, " info"); SetTitle(name); InfoList info; Item item; // Size size_to_string(f->size, name); if (f->count > 0) { // This is a directory. char str[64]; sprintf(str, kInfoInFiles, f->count); strcat(name, str); } info.push_back(Item(kInfoSize, name)); // Created & modified dates BEntry entry(&f->ref); time_t t; entry.GetCreationTime(&t); strftime(name, 64, kInfoTimeFmt, localtime(&t)); info.push_back(Item(kInfoCreated, name)); entry.GetModificationTime(&t); strftime(name, 64, kInfoTimeFmt, localtime(&t)); info.push_back(Item(kInfoModified, name)); // Kind BMimeType* type = f->Type(); type->GetShortDescription(name); info.push_back(Item(kInfoKind, name)); delete type; // Path string path; f->GetPath(path); info.push_back(Item(kInfoPath, path)); // Icon BBitmap *icon = new BBitmap(BRect(0.0, 0.0, 31.0, 31.0), B_RGBA32); entry_ref ref; entry.GetRef(&ref); BNodeInfo::GetTrackerIcon(&ref, icon, B_LARGE_ICON); // Compute the window size and add the views. BFont smallFont(be_plain_font); smallFont.SetSize(floorf(smallFont.Size() * 0.95)); struct font_height fh; smallFont.GetHeight(&fh); float fontHeight = fh.ascent + fh.descent + fh.leading; float leftWidth = 32.0; float rightWidth = 0.0; InfoList::iterator i = info.begin(); while (i != info.end()) { float w = smallFont.StringWidth((*i).first.c_str()) + 2.0 * kSmallHMargin; leftWidth = max_c(leftWidth, w); w = smallFont.StringWidth((*i).second.c_str()) + 2.0 * kSmallHMargin; rightWidth = max_c(rightWidth, w); i++; } float winHeight = 32.0 + 4.0 * kSmallVMargin + 5.0 * (fontHeight + kSmallVMargin); float winWidth = leftWidth + rightWidth; ResizeTo(winWidth, winHeight); LeftView *leftView = new LeftView(BRect(0.0, 0.0, leftWidth, winHeight), icon); BView *rightView = new BView( BRect(leftWidth + 1.0, 0.0, winWidth, winHeight), NULL, B_FOLLOW_NONE, B_WILL_DRAW); AddChild(leftView); AddChild(rightView); BStringView *sv = new BStringView( BRect(kSmallHMargin, kSmallVMargin, rightView->Bounds().Width(), kSmallVMargin + 30.0), NULL, f->ref.name, B_FOLLOW_ALL); BFont largeFont(be_plain_font); largeFont.SetSize(ceilf(largeFont.Size() * 1.1)); sv->SetFont(&largeFont); rightView->AddChild(sv); float y = 32.0 + 4.0 * kSmallVMargin; i = info.begin(); while (i != info.end()) { sv = new BStringView( BRect(kSmallHMargin, y, leftView->Bounds().Width(), y + fontHeight), NULL, (*i).first.c_str()); sv->SetFont(&smallFont); sv->SetAlignment(B_ALIGN_RIGHT); sv->SetHighColor(kBasePieColor[1]); // arbitrary leftView->AddChild(sv); sv = new BStringView( BRect(kSmallHMargin, y, rightView->Bounds().Width(), y + fontHeight), NULL, (*i).second.c_str()); sv->SetFont(&smallFont); rightView->AddChild(sv); y += fontHeight + kSmallVMargin; i++; } Show(); }