void OpenGroup(const char* text) { if (text != NULL) { BBox* box = new BBox(GetControlBounds(), text); box->SetLabel(text); GetView()->AddChild(box); Push(box); box->ResizeTo(box->Bounds().Width(), kBoxHeight); } }
PasswordWindow::PasswordWindow() : BWindow(BRect(100, 100, 400, 230), "Enter password", B_NO_BORDER_WINDOW_LOOK, kPasswordWindowFeel /* TODO: B_MODAL_APP_WINDOW_FEEL should also behave correctly */, B_NOT_MOVABLE | B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_MINIMIZABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS, B_ALL_WORKSPACES) { BView* topView = new BView(Bounds(), "topView", B_FOLLOW_ALL, B_WILL_DRAW); topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(topView); BRect bounds(Bounds()); bounds.InsetBy(10.0, 10.0); BBox *customBox = new BBox(bounds, "customBox", B_FOLLOW_NONE); topView->AddChild(customBox); customBox->SetLabel("Unlock screen saver"); bounds.top += 10.0; fPassword = new BTextControl(bounds, "password", "Enter password:"******"VeryLongPasswordPossible", B_FOLLOW_NONE); customBox->AddChild(fPassword); fPassword->MakeFocus(true); fPassword->ResizeToPreferred(); fPassword->TextView()->HideTyping(true); fPassword->SetDivider(be_plain_font->StringWidth("Enter password:"******"unlock", "Unlock", new BMessage(kMsgUnlock), B_FOLLOW_NONE); customBox->AddChild(button); button->MakeDefault(true); button->ResizeToPreferred(); button->SetTarget(NULL, be_app); BRect frame = fPassword->Frame(); button->MoveTo(frame.right - button->Bounds().Width(), frame.bottom + 10.0); customBox->ResizeTo(frame.right + 10.0, button->Frame().bottom + 10.0); frame = customBox->Frame(); ResizeTo(frame.right + 10.0, frame.bottom + 10.0); BScreen screen(this); MoveTo(screen.Frame().left + (screen.Frame().Width() - Bounds().Width()) / 2, screen.Frame().top + (screen.Frame().Height() - Bounds().Height()) / 2); }
SpaceBarSettingsView::SpaceBarSettingsView(BRect rect) : SettingsView(rect, "SpaceBarSettingsView") { rect.OffsetTo(B_ORIGIN); fSpaceBarShowCheckBox = new BCheckBox(rect, "", "Show space bars on volumes", new BMessage(kUpdateVolumeSpaceBar)); fSpaceBarShowCheckBox->ResizeToPreferred(); AddChild(fSpaceBarShowCheckBox); rect = fSpaceBarShowCheckBox->Frame(); rect.OffsetBy(0, fSpaceBarShowCheckBox->Bounds().Height() + kItemExtraSpacing); BPopUpMenu *menu = new BPopUpMenu(B_EMPTY_STRING); menu->SetFont(be_plain_font); BMenuItem *item; menu->AddItem(item = new BMenuItem("Used space color", new BMessage(kSpaceBarSwitchColor))); item->SetMarked(true); fCurrentColor = 0; menu->AddItem(new BMenuItem("Free space color", new BMessage(kSpaceBarSwitchColor))); menu->AddItem(new BMenuItem("Warning space color", new BMessage(kSpaceBarSwitchColor))); BBox *box = new BBox(rect); box->SetLabel(fColorPicker = new BMenuField(rect, NULL, NULL, menu)); AddChild(box); fColorControl = new BColorControl(BPoint(8, fColorPicker->Bounds().Height() + 8 + kItemExtraSpacing), B_CELLS_16x16, 1, "SpaceColorControl", new BMessage(kSpaceBarColorChanged)); fColorControl->SetValue(TrackerSettings().UsedSpaceColor()); fColorControl->ResizeToPreferred(); box->AddChild(fColorControl); box->ResizeTo(fColorControl->Bounds().Width() + 16, fColorControl->Frame().bottom + 8); }
ApplicationTypeWindow::ApplicationTypeWindow(BPoint position, const BEntry& entry) : BWindow(BRect(0.0f, 0.0f, 250.0f, 340.0f).OffsetBySelf(position), "Application Type", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS), fChangedProperties(0) { // add the menu BMenuBar* menuBar = new BMenuBar(BRect(0, 0, 0, 0), NULL); AddChild(menuBar); BMenu* menu = new BMenu("File"); fSaveMenuItem = new BMenuItem("Save", new BMessage(kMsgSave), 'S'); fSaveMenuItem->SetEnabled(false); menu->AddItem(fSaveMenuItem); BMenuItem* item; menu->AddItem(item = new BMenuItem("Save into resource file" B_UTF8_ELLIPSIS, NULL)); item->SetEnabled(false); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED), 'W', B_COMMAND_KEY)); menuBar->AddItem(menu); // Top view and signature BRect rect = Bounds(); rect.top = menuBar->Bounds().Height() + 1.0f; BView* topView = new BView(rect, NULL, B_FOLLOW_ALL, B_WILL_DRAW); topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(topView); rect = topView->Bounds().InsetByCopy(8.0f, 8.0f); fSignatureControl = new BTextControl(rect, "signature", "Signature:", NULL, new BMessage(kMsgSignatureChanged), B_FOLLOW_LEFT_RIGHT); fSignatureControl->SetModificationMessage( new BMessage(kMsgSignatureChanged)); fSignatureControl->SetDivider(fSignatureControl->StringWidth( fSignatureControl->Label()) + 4.0f); float width, height; fSignatureControl->GetPreferredSize(&width, &height); fSignatureControl->ResizeTo(rect.Width(), height); topView->AddChild(fSignatureControl); // filter out invalid characters that can't be part of a MIME type name BTextView* textView = fSignatureControl->TextView(); textView->SetMaxBytes(B_MIME_TYPE_LENGTH); const char* disallowedCharacters = "<>@,;:\"()[]?="; for (int32 i = 0; disallowedCharacters[i]; i++) { textView->DisallowChar(disallowedCharacters[i]); } // "Application Flags" group BFont font(be_bold_font); font_height fontHeight; font.GetHeight(&fontHeight); width = font.StringWidth("Icon") + 16.0f; if (width < B_LARGE_ICON + 16.0f) width = B_LARGE_ICON + 16.0f; rect.top = fSignatureControl->Frame().bottom + 4.0f; rect.bottom = rect.top + 100.0f; rect.right -= width + 8.0f; BBox* box = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT); topView->AddChild(box); fFlagsCheckBox = new BCheckBox(rect, "flags", "Application flags", new BMessage(kMsgToggleAppFlags)); fFlagsCheckBox->SetValue(B_CONTROL_ON); fFlagsCheckBox->ResizeToPreferred(); box->SetLabel(fFlagsCheckBox); rect.top = fFlagsCheckBox->Bounds().Height() + 4.0f; fSingleLaunchButton = new BRadioButton(rect, "single", "Single launch", new BMessage(kMsgAppFlagsChanged)); fSingleLaunchButton->ResizeToPreferred(); box->AddChild(fSingleLaunchButton); rect.OffsetBy(0.0f, fSingleLaunchButton->Bounds().Height() + 0.0f); fMultipleLaunchButton = new BRadioButton(rect, "multiple", "Multiple launch", new BMessage(kMsgAppFlagsChanged)); fMultipleLaunchButton->ResizeToPreferred(); box->AddChild(fMultipleLaunchButton); rect.OffsetBy(0.0f, fSingleLaunchButton->Bounds().Height() + 0.0f); fExclusiveLaunchButton = new BRadioButton(rect, "exclusive", "Exclusive launch", new BMessage(kMsgAppFlagsChanged)); fExclusiveLaunchButton->ResizeToPreferred(); box->AddChild(fExclusiveLaunchButton); rect.top = fSingleLaunchButton->Frame().top; rect.left = fExclusiveLaunchButton->Frame().right + 4.0f; fArgsOnlyCheckBox = new BCheckBox(rect, "args only", "Args only", new BMessage(kMsgAppFlagsChanged)); fArgsOnlyCheckBox->ResizeToPreferred(); box->AddChild(fArgsOnlyCheckBox); rect.top += fArgsOnlyCheckBox->Bounds().Height(); fBackgroundAppCheckBox = new BCheckBox(rect, "background", "Background app", new BMessage(kMsgAppFlagsChanged)); fBackgroundAppCheckBox->ResizeToPreferred(); box->AddChild(fBackgroundAppCheckBox); box->ResizeTo(box->Bounds().Width(), fExclusiveLaunchButton->Frame().bottom + 8.0f); // "Icon" group rect = box->Frame(); #ifdef __ANTARES__ rect.top += box->TopBorderOffset(); #endif rect.left = rect.right + 8.0f; rect.right += width + 8.0f; float iconBoxWidth = rect.Width(); box = new BBox(rect, NULL, B_FOLLOW_RIGHT | B_FOLLOW_TOP); box->SetLabel("Icon"); #ifdef __ANTARES__ box->MoveBy(0.0f, -box->TopBorderOffset()); box->ResizeBy(0.0f, box->TopBorderOffset()); #endif topView->AddChild(box); rect = BRect(8.0f, 0.0f, 7.0f + B_LARGE_ICON, B_LARGE_ICON - 1.0f); #ifdef __ANTARES__ rect.OffsetBy(0.0f, (box->Bounds().Height() + box->TopBorderOffset() - rect.Height()) / 2.0f); #else rect.OffsetBy(0.0f, (box->Bounds().Height() - rect.Height()) / 2.0f); #endif if (rect.top < fontHeight.ascent + fontHeight.descent + 4.0f) rect.top = fontHeight.ascent + fontHeight.descent + 4.0f; fIconView = new IconView(rect, "icon"); fIconView->SetModificationMessage(new BMessage(kMsgIconChanged)); box->AddChild(fIconView); // "Supported Types" group rect.top = box->Frame().bottom + 8.0f; rect.bottom = rect.top + box->Bounds().Height(); rect.left = 8.0f; rect.right = Bounds().Width() - 8.0f; BBox* typeBox = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT); typeBox->SetLabel("Supported types"); topView->AddChild(typeBox); rect = typeBox->Bounds().InsetByCopy(8.0f, 6.0f); rect.top += ceilf(fontHeight.ascent); fAddTypeButton = new BButton(rect, "add type", "Add" B_UTF8_ELLIPSIS, new BMessage(kMsgAddType), B_FOLLOW_RIGHT); fAddTypeButton->ResizeToPreferred(); fAddTypeButton->MoveBy(rect.right - fAddTypeButton->Bounds().Width() - B_LARGE_ICON - 16.0f, 0.0f); typeBox->AddChild(fAddTypeButton); rect = fAddTypeButton->Frame(); rect.OffsetBy(0, rect.Height() + 4.0f); fRemoveTypeButton = new BButton(rect, "remove type", "Remove", new BMessage(kMsgRemoveType), B_FOLLOW_RIGHT); typeBox->AddChild(fRemoveTypeButton); rect.right = rect.left - 10.0f - B_V_SCROLL_BAR_WIDTH; rect.left = 10.0f; rect.top = 8.0f + ceilf(fontHeight.ascent); rect.bottom -= 2.0f; // take scrollview border into account fTypeListView = new SupportedTypeListView(rect, "type listview", B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL); fTypeListView->SetSelectionMessage(new BMessage(kMsgTypeSelected)); BScrollView* scrollView = new BScrollView("type scrollview", fTypeListView, B_FOLLOW_ALL, B_FRAME_EVENTS | B_WILL_DRAW, false, true); typeBox->ResizeTo(typeBox->Bounds().Width(), fRemoveTypeButton->Frame().bottom + 8.0f); typeBox->AddChild(scrollView); rect.left = fRemoveTypeButton->Frame().right + 8.0f; #ifdef __ANTARES__ rect.top = (box->Bounds().Height() + box->TopBorderOffset() - B_LARGE_ICON) / 2.0f; #else rect.top = (box->Bounds().Height() - B_LARGE_ICON) / 2.0f; #endif rect.right = rect.left + B_LARGE_ICON - 1.0f; rect.bottom = rect.top + B_LARGE_ICON - 1.0f; fTypeIconView = new IconView(rect, "type icon", B_FOLLOW_RIGHT | B_FOLLOW_TOP); fTypeIconView->SetModificationMessage(new BMessage(kMsgTypeIconsChanged)); typeBox->AddChild(fTypeIconView); // "Version Info" group rect.top = typeBox->Frame().bottom + 8.0f; rect.bottom = rect.top + typeBox->Bounds().Height(); rect.left = 8.0f; rect.right = Bounds().Width() - 8.0f; box = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT); // the resizing mode will later also be set to B_FOLLOW_BOTTOM box->SetLabel("Version info"); topView->AddChild(box); BMenuField* menuField; #if 0 BPopUpMenu *popUpMenu = new BPopUpMenu("version info", true, true); item = new BMenuItem("Version Info", NULL); item->SetMarked(true); popUpMenu->AddItem(item); item = new BMenuItem("System Version Info", NULL); popUpMenu->AddItem(item); menuField = new BMenuField(BRect(0, 0, 100, 15), "version kind", NULL, popUpMenu, true); menuField->ResizeToPreferred(); box->SetLabel(menuField); #endif rect.top = 4.0f + ceilf(fontHeight.ascent + fontHeight.descent); rect.bottom = rect.top + height; fMajorVersionControl = new BTextControl(rect, "major", "Version:", NULL, NULL); fMajorVersionControl->SetDivider(fMajorVersionControl->StringWidth( fMajorVersionControl->Label()) + 4.0f); fMajorVersionControl->GetPreferredSize(&width, &height); width = 12.0f + fMajorVersionControl->StringWidth("99"); fMajorVersionControl->ResizeTo(fMajorVersionControl->Divider() + width, height); _MakeNumberTextControl(fMajorVersionControl); box->AddChild(fMajorVersionControl); rect.left = fMajorVersionControl->Frame().right + 1.0f; fMiddleVersionControl = new BTextControl(rect, "middle", ".", NULL, NULL); fMiddleVersionControl->SetDivider(fMiddleVersionControl->StringWidth( fMiddleVersionControl->Label()) + 4.0f); fMiddleVersionControl->ResizeTo(fMiddleVersionControl->Divider() + width, height); _MakeNumberTextControl(fMiddleVersionControl); box->AddChild(fMiddleVersionControl); rect.left = fMiddleVersionControl->Frame().right + 1.0f; fMinorVersionControl = new BTextControl(rect, "middle", ".", NULL, NULL); fMinorVersionControl->SetDivider(fMinorVersionControl->StringWidth( fMinorVersionControl->Label()) + 4.0f); fMinorVersionControl->ResizeTo(fMinorVersionControl->Divider() + width, height); _MakeNumberTextControl(fMinorVersionControl); box->AddChild(fMinorVersionControl); fVarietyMenu = new BPopUpMenu("variety", true, true); fVarietyMenu->AddItem(new BMenuItem("Development", NULL)); fVarietyMenu->AddItem(new BMenuItem("Alpha", NULL)); fVarietyMenu->AddItem(new BMenuItem("Beta", NULL)); fVarietyMenu->AddItem(new BMenuItem("Gamma", NULL)); fVarietyMenu->AddItem(item = new BMenuItem("Golden master", NULL)); item->SetMarked(true); fVarietyMenu->AddItem(new BMenuItem("Final", NULL)); rect.top--; // BMenuField oddity rect.left = fMinorVersionControl->Frame().right + 6.0f; menuField = new BMenuField(rect, "variety", NULL, fVarietyMenu, true); menuField->ResizeToPreferred(); box->AddChild(menuField); rect.top++; rect.left = menuField->Frame().right; rect.right = rect.left + 30.0f; fInternalVersionControl = new BTextControl(rect, "internal", "/", NULL, NULL); fInternalVersionControl->SetDivider(fInternalVersionControl->StringWidth( fInternalVersionControl->Label()) + 4.0f); fInternalVersionControl->ResizeTo(fInternalVersionControl->Divider() + width, height); box->AddChild(fInternalVersionControl); rect = box->Bounds().InsetByCopy(8.0f, 0.0f); rect.top = fInternalVersionControl->Frame().bottom + 8.0f; fShortDescriptionControl = new BTextControl(rect, "short desc", "Short description:", NULL, NULL, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); float labelWidth = fShortDescriptionControl->StringWidth( fShortDescriptionControl->Label()) + 4.0f; fShortDescriptionControl->SetDivider(labelWidth); fShortDescriptionControl->GetPreferredSize(&width, &height); fShortDescriptionControl->ResizeTo(rect.Width(), height); // TODO: workaround for a GCC 4.1.0 bug? Or is that really what the standard says? version_info versionInfo; fShortDescriptionControl->TextView()->SetMaxBytes(sizeof(versionInfo.short_info)); box->AddChild(fShortDescriptionControl); rect.OffsetBy(0.0f, fShortDescriptionControl->Bounds().Height() + 5.0f); rect.right = rect.left + labelWidth; StringView* label = new StringView(rect, NULL, "Long description:", NULL); label->SetDivider(labelWidth); box->AddChild(label); rect.left = rect.right + 3.0f; rect.top += 1.0f; rect.right = box->Bounds().Width() - 10.0f - B_V_SCROLL_BAR_WIDTH; rect.bottom = rect.top + fShortDescriptionControl->Bounds().Height() * 3.0f - 1.0f; fLongDescriptionView = new TabFilteringTextView(rect, "long desc", rect.OffsetToCopy(B_ORIGIN), B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE); fLongDescriptionView->SetMaxBytes(sizeof(versionInfo.long_info)); scrollView = new BScrollView("desc scrollview", fLongDescriptionView, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP, B_FRAME_EVENTS | B_WILL_DRAW, false, true); box->ResizeTo(box->Bounds().Width(), scrollView->Frame().bottom + 8.0f); box->AddChild(scrollView); // Adjust window size and limits width = fInternalVersionControl->Frame().right + 16.0f; float minWidth = fBackgroundAppCheckBox->Frame().right + iconBoxWidth + 32.0f; if (width > minWidth) minWidth = width; ResizeTo(Bounds().Width() > minWidth ? Bounds().Width() : minWidth, box->Frame().bottom + topView->Frame().top + 8.0f); SetSizeLimits(minWidth, 32767.0f, Bounds().Height(), 32767.0f); typeBox->SetResizingMode(B_FOLLOW_ALL); box->SetResizingMode(B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM); fSignatureControl->MakeFocus(true); BMimeType::StartWatching(this); _SetTo(entry); }
void PasswordWindow::_Setup() { BRect bounds = Bounds(); BView* topView = new BView(bounds, "topView", B_FOLLOW_ALL, B_WILL_DRAW); topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(topView); bounds.InsetBy(10.0, 10.0); fUseNetwork = new BRadioButton(bounds, "useNetwork", "Use network password", new BMessage(kMsgPasswordTypeChanged), B_FOLLOW_NONE); topView->AddChild(fUseNetwork); fUseNetwork->ResizeToPreferred(); fUseNetwork->MoveBy(10.0, 0.0); bounds.OffsetBy(0.0, fUseNetwork->Bounds().Height()); BBox *customBox = new BBox(bounds, "customBox", B_FOLLOW_NONE); topView->AddChild(customBox); fUseCustom = new BRadioButton(BRect(), "useCustom", "Use custom password", new BMessage(kMsgPasswordTypeChanged), B_FOLLOW_NONE); customBox->SetLabel(fUseCustom); fUseCustom->ResizeToPreferred(); fPasswordControl = new BTextControl(bounds, "passwordControl", "Password:"******"confirmControl", "Confirm password:"******"VeryLongPasswordPossible", B_FOLLOW_NONE); customBox->AddChild(fConfirmControl); fConfirmControl->TextView()->HideTyping(true); fConfirmControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); float width, height; fConfirmControl->GetPreferredSize(&width, &height); fPasswordControl->ResizeTo(width, height); fConfirmControl->ResizeTo(width, height); float divider = be_plain_font->StringWidth("Confirm password:"******"done", "Done", new BMessage(kMsgDone)); topView->AddChild(button); button->ResizeToPreferred(); BRect frame = customBox->Frame(); button->MoveTo(frame.right - button->Bounds().Width(), frame.bottom + 10.0); frame = button->Frame(); button->MakeDefault(true); button = new BButton(frame, "cancel", "Cancel", new BMessage(B_CANCEL)); topView->AddChild(button); button->ResizeToPreferred(); button->MoveBy(-(button->Bounds().Width() + 10.0), 0.0); ResizeTo(customBox->Frame().right + 10.0, frame.bottom + 10.0); }
/*! * \brief Create box for selection of the weekend days * \note Additionally, select the color for weekends and weekdays * \param[in] frame Enclosing rectangle. * \param[in] id Reference to name of the selected Calendar module. * \returns Pointer to all-set-up BBox. Or NULL in case of error. */ BBox* CalendarModulePreferencesView::CreateWeekendSelectionBox( BRect frame, const BString &id ) { /*! \par Notes on implementation: * It's not all that straightforward - to create this selection box. * The problem is that number of days in week is dependent on the * Calendar Module, therefore the frame rectangle must be divided * properly. We should take into account the possibility that there's * not enough place for all days in the submitted frame. * * \par * The solution will be as follows: * Let number of days in week be N. I create two columns and * several rows (the number depends on N). Days in week will be * proceeded in the order <em>as Calendar Module supplies them</em>. * The days occupy both columns, and are located in rows * [0, (ceiling of (N/2)) ). Days returned from CalendarModule are * placed as follows: days from 0 to (ceiling of (N/2)-1) in the left * column, days from (ceiling of (N/2)-1) to (N-1) in right column. * * \par * There will be an empty cell in the right column, if number * of days in week is odd, (which is usually the case). */ frame.InsetBySelf( 5, 0 ); BMessage* toSend = NULL; BCheckBox* dayCheckBox = NULL; BString tempString; BLayoutItem* layoutItem = NULL; CalendarModulePreferences* prefs = NULL; CalendarModule* calModule = NULL; int height = 0; //!< this is used to resize the BBox to proper size calModule = utl_FindCalendarModule( id ); if ( calModule == NULL ) { /* Error */ utl_Deb = new DebuggerPrintout( "Did not succeed to find the calendar module." ); return NULL; } // Get the data on days of week uint32 daysInWeek = ( uint32 )( calModule->GetDaysInWeek() ); map<uint32, DoubleNames> weekdayNames = calModule->GetWeekdayNames(); /* Obtain the current Calendar Module preferences */ prefs = pref_GetPreferencesForCalendarModule( id ); if ( !prefs ) { utl_Deb = new DebuggerPrintout( "Did not succeed to find the preferences for the calendar module." ); return NULL; } // At this point, "pref" points to current preferences of this calendar module. BList* weekends = prefs->GetWeekends(); // Get info on currently selected weekends // Prepare the item to be returned BBox* enclosingBox = new BBox( frame, "Weekend selector" ); if ( !enclosingBox ) { /* Panic! */ exit(1); } enclosingBox->SetLabel( "Select the non-working days (weekends)" ); // Prepare the layout to be used BGridLayout* layout = new BGridLayout(); if ( !layout) { /* Panic! */ exit(1); } enclosingBox->SetLayout( layout ); layout->SetInsets( 10, 15, 10, 5 ); layout->SetVerticalSpacing( 1 ); /* indexX is 0 for left column or 1 for right column. * indexY is 0 for topmost row, 1 for second from top row, etc. * Max value for indexY = (ceiling of (N/2)). */ int indexX = 0, indexY = 0; for (uint32 day = prefs->GetFirstDayOfWeek(), i = 0; i < ( uint32 )daysInWeek; ++i ) { /* Creating the message to be sent */ toSend = new BMessage( kCalendarModuleWeekendDaySelected ); if ( !toSend ) { /* Panic! */ exit(1); } toSend->AddInt32( "Weekday const", day ); toSend->AddString( "Calendar module", id ); /* Set the name of the checkbox. * This is used to identify if the checkbox was checked or unchecked. */ tempString.SetTo( "Weekday" ); tempString << day; /* Creating the checkbox */ dayCheckBox = new BCheckBox( BRect(0, 0, 1, 1), tempString.String(), weekdayNames[ day ].longName.String(), toSend ); if (!dayCheckBox) { // Panic! exit(1); } dayCheckBox->ResizeToPreferred(); // Check if the checkbox should be checked if ( weekends->HasItem( ( void* )day ) ) { dayCheckBox->SetValue( 1 ); } else { dayCheckBox->SetValue( 0 ); } /* Adding the item to the BBox */ layoutItem = layout->AddView( dayCheckBox, indexX, indexY ); if ( layoutItem ) { layoutItem->SetExplicitAlignment( BAlignment( B_ALIGN_LEFT, B_ALIGN_TOP ) ); // layoutItem->SetExplicitMaxSize( BSize( (int )dayCheckBox->Bounds().Width(), (int )dayCheckBox->Bounds().Height() ) ); layout->SetMaxRowHeight( indexY, (int )dayCheckBox->Bounds().Height() + 10 ); layout->SetRowWeight( indexY, 0 ); } /* Advancing to the next cell in grid */ // If arrived to the last item in the first column, advancing to second // The +1 is needed because i starts from 0, but days are starting from 1 if ( ( i + 1 ) == ( unsigned int )( ( daysInWeek + 1 ) / 2 ) ) { indexX = 1; indexY = 0; } else // Staying in the same column, but advancing down { ++indexY; } /* Advancing to the next day */ ( day == daysInWeek ) ? day = kSunday : ++day; } // <-- end of "for (all days in week)" // Resizing the BBox to the correct size. // Note: dayCheckBox is surely not NULL; if it were, we would exit earlier. height =(int )( ( dayCheckBox->Bounds().Height() + 5 ) * ( int )( ( daysInWeek + 1 ) / 2 ) - 5 ); // Formula: ( ^height of one checkbox^ + ^separator^ ) * ( ^number of days in column^ ) - ^one unneeded extra separator^ enclosingBox->ResizeTo( enclosingBox->Bounds().Width() - 10, ( int )height ); // layout->SetExplicitMaxSize( BSize( enclosingBox->Bounds().Width() - 5, ( int )height + 25 ) ); return enclosingBox; }
TimeFormatSettingsView::TimeFormatSettingsView(BRect rect) : SettingsView(rect, "WindowsSettingsView") { rect.OffsetTo(B_ORIGIN); font_height fontHeight; be_bold_font->GetHeight(&fontHeight); rect.bottom = ceilf(fontHeight.ascent + fontHeight.descent) + 10; BBox *clockBox = new BBox(rect, "Clock"); clockBox->SetLabel("Clock"); AddChild(clockBox); rect.left = 8; rect.top = rect.bottom - 8; f24HrRadioButton = new BRadioButton(rect, "", "24 hour", new BMessage(kSettingsContentsModified)); f24HrRadioButton->ResizeToPreferred(); clockBox->AddChild(f24HrRadioButton); const float itemSpacing = f24HrRadioButton->Bounds().Height() + kItemExtraSpacing; rect.OffsetBy(0, itemSpacing); f12HrRadioButton = new BRadioButton(rect, "", "12 hour", new BMessage(kSettingsContentsModified)); f12HrRadioButton->ResizeToPreferred(); clockBox->AddChild(f12HrRadioButton); float width = max_c(f12HrRadioButton->Frame().right, f24HrRadioButton->Frame().right) + 8.0f; clockBox->ResizeTo(width, clockBox->Bounds().Height() + 3 * f12HrRadioButton->Frame().Height()); rect = clockBox->Frame(); rect.OffsetBy(rect.Width() + 8, 0); BBox *dateFormatBox = new BBox(rect, "Date order"); dateFormatBox->SetLabel("Date order"); AddChild(dateFormatBox); rect = f24HrRadioButton->Frame(); fYMDRadioButton = new BRadioButton(rect, "", "Year-month-day", new BMessage(kSettingsContentsModified)); fYMDRadioButton->ResizeToPreferred(); dateFormatBox->AddChild(fYMDRadioButton); rect.OffsetBy(0, itemSpacing); fDMYRadioButton = new BRadioButton(rect, "", "Day-month-year", new BMessage(kSettingsContentsModified)); fDMYRadioButton->ResizeToPreferred(); dateFormatBox->AddChild(fDMYRadioButton); rect.OffsetBy(0, itemSpacing); fMDYRadioButton = new BRadioButton(rect, "", "Month-day-year", new BMessage(kSettingsContentsModified)); fMDYRadioButton->ResizeToPreferred(); dateFormatBox->AddChild(fMDYRadioButton); dateFormatBox->ResizeTo(fYMDRadioButton->Bounds().Width() + 16, dateFormatBox->Bounds().Height()); BPopUpMenu *menu = new BPopUpMenu("Separator"); menu->AddItem(new BMenuItem("None", new BMessage(kSettingsContentsModified))); menu->AddItem(new BMenuItem("Space", new BMessage(kSettingsContentsModified))); menu->AddItem(new BMenuItem("-", new BMessage(kSettingsContentsModified))); menu->AddItem(new BMenuItem("/", new BMessage(kSettingsContentsModified))); menu->AddItem(new BMenuItem("\\", new BMessage(kSettingsContentsModified))); menu->AddItem(new BMenuItem(".", new BMessage(kSettingsContentsModified))); rect.left = 0; rect.top = clockBox->Frame().bottom + 8; rect.right = Bounds().Width() - 8; rect.bottom = rect.top + itemSpacing; fSeparatorMenuField = new BMenuField(rect, "Separator", "Separator:", menu); fSeparatorMenuField->SetDivider(fSeparatorMenuField->StringWidth(fSeparatorMenuField->Label()) + 8.0f); fSeparatorMenuField->SetAlignment(B_ALIGN_LEFT); fSeparatorMenuField->ResizeToPreferred(); AddChild(fSeparatorMenuField); rect.OffsetBy(0, itemSpacing + 10); BStringView *exampleView = new BStringView(rect, "", "Examples:"); exampleView->ResizeToPreferred(); AddChild(exampleView); rect.OffsetBy(0, itemSpacing); fLongDateExampleView = new BStringView(rect, "", ""); fLongDateExampleView->ResizeToPreferred(); AddChild(fLongDateExampleView); rect.OffsetBy(0, itemSpacing); fShortDateExampleView = new BStringView(rect, "", ""); fShortDateExampleView->ResizeToPreferred(); AddChild(fShortDateExampleView); _UpdateExamples(); }
void CDPlayer::BuildGUI() { fStopColor.red = 80; fStopColor.green = 164; fStopColor.blue = 80; fStopColor.alpha = 255; fPlayColor.red = 40; fPlayColor.green = 230; fPlayColor.blue = 40; fPlayColor.alpha = 255; BRect r(Bounds().InsetByCopy(10, 10)); BBox *box = new BBox(r, "", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); AddChild(box); r = box->Bounds().InsetByCopy(10, 10); r.bottom = 25; float labelWidth, labelHeight; fCDTitle = new BStringView(r, "CDTitle", B_TRANSLATE("CD drive is empty"), B_FOLLOW_LEFT_RIGHT); fCDTitle->GetPreferredSize(&labelWidth, &labelHeight); fCDTitle->ResizeTo(r.Width(), labelHeight); box->AddChild(fCDTitle); r.bottom = r.top + labelHeight; r.OffsetBy(0, r.Height() + 5); fCurrentTrack = new BStringView(r, "TrackNumber", "", B_FOLLOW_LEFT_RIGHT); box->AddChild(fCurrentTrack); r.OffsetBy(0, r.Height() + 5); r.right = r.left + (r.Width() / 2); fTrackTime = new BStringView(r, "TrackTime", B_TRANSLATE("Track: 88:88 / 88:88"), B_FOLLOW_LEFT_RIGHT); fTrackTime->ResizeToPreferred(); fTrackTime->SetText(B_TRANSLATE("Track: --:-- / --:--")); box->AddChild(fTrackTime); r.OffsetTo(fTrackTime->Frame().right + 5, r.top); fDiscTime = new BStringView(r, "DiscTime", B_TRANSLATE("Disc: 88:88 / 88:88"), B_FOLLOW_RIGHT); fDiscTime->ResizeToPreferred(); fDiscTime->SetText(B_TRANSLATE("Disc: --:-- / --:--")); box->AddChild(fDiscTime); float maxWidth = max_c(fDiscTime->Frame().right, fCDTitle->Frame().right); box->ResizeTo(maxWidth + 5, fDiscTime->Frame().bottom + 10); fStop = new DrawButton(BRect(0, 0, 1, 1), "Stop", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "stop_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "stop_down"), new BMessage(M_STOP), B_FOLLOW_BOTTOM, B_WILL_DRAW); fStop->ResizeToPreferred(); fStop->MoveTo(10, box->Frame().bottom + 15); fStop->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT, "stop_disabled")); AddChild(fStop); float stopTop = fStop->Frame().top; fPlay = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Play", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_up_on"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"), new BMessage(M_PLAY), B_FOLLOW_NONE, B_WILL_DRAW); fPlay->ResizeToPreferred(); fPlay->MoveTo(fStop->Frame().right + 2, stopTop); AddChild(fPlay); fPrevTrack = new DrawButton(BRect(0, 0, 1, 1), "PrevTrack", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "prev_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "prev_down"), new BMessage(M_PREV_TRACK), 0, B_WILL_DRAW); fPrevTrack->ResizeToPreferred(); fPrevTrack->MoveTo(fPlay->Frame().right + 40, stopTop); AddChild(fPrevTrack); fNextTrack = new DrawButton(BRect(0, 0, 1, 1), "NextTrack", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "next_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "next_down"), new BMessage(M_NEXT_TRACK), 0, B_WILL_DRAW); fNextTrack->ResizeToPreferred(); fNextTrack->MoveTo(fPrevTrack->Frame().right + 1, stopTop); AddChild(fNextTrack); fRewind = new DoubleShotDrawButton(BRect(0, 0, 1, 1), "Rewind", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "rew_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "rew_down"), new BMessage(M_REWIND), 0, B_WILL_DRAW); fRewind->ResizeToPreferred(); fRewind->MoveTo(fNextTrack->Frame().right + 40, stopTop); AddChild(fRewind); fFastFwd = new DoubleShotDrawButton(BRect(0, 0, 1, 1), "FastFwd", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "ffwd_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "ffwd_down"), new BMessage(M_FFWD), 0, B_WILL_DRAW); fFastFwd->ResizeToPreferred(); fFastFwd->MoveTo(fRewind->Frame().right + 1, stopTop); AddChild(fFastFwd); r.left = 10; r.right = fPlay->Frame().right; r.top = fStop->Frame().bottom + 14; r.bottom = r.top + 14; fVolumeSlider = new VolumeSlider(r, "VolumeSlider", 0, 255, new BMessage(M_SET_VOLUME), this); AddChild(fVolumeSlider); fRepeat = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Repeat", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_up_off"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_down"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_up_on"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_down"), new BMessage(M_REPEAT), B_FOLLOW_NONE, B_WILL_DRAW); fRepeat->ResizeToPreferred(); fRepeat->MoveTo(fPrevTrack->Frame().left, fVolumeSlider->Frame().top - ((fRepeat->Frame().Height() - fVolumeSlider->Frame().Height()) / 2)); AddChild(fRepeat); fShuffle = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Shuffle", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_up_off"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_down"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_up_on"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_down"), new BMessage(M_SHUFFLE), B_FOLLOW_NONE, B_WILL_DRAW); fShuffle->ResizeToPreferred(); fShuffle->MoveTo(fRepeat->Frame().right + 2, fRepeat->Frame().top); AddChild(fShuffle); fEject = new DrawButton(BRect(0, 0, 1, 1), "Eject", BTranslationUtils::GetBitmap(B_PNG_FORMAT, "eject_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT, "eject_down"), new BMessage(M_EJECT), 0, B_WILL_DRAW); fEject->ResizeToPreferred(); fEject->MoveTo(fFastFwd->Frame().left, fShuffle->Frame().top); AddChild(fEject); ResizeTo(box->Frame().right + 10, fVolumeSlider->Frame().bottom + 10); }