void BTextControl::_ValidateLayout() { CALLED(); _ValidateLayoutData(); ResizeTo(Bounds().Width(), fLayoutData->min.height); _LayoutTextView(); }
void BTextControl::ResizeToPreferred() { BView::ResizeToPreferred(); fDivider = 0.0; const char* label = Label(); if (label) fDivider = ceil(StringWidth(label)) + 2.0; _LayoutTextView(); }
void BTextControl::SetDivider(float dividingLine) { fDivider = floorf(dividingLine + 0.5); _LayoutTextView(); if (Window()) { fText->Invalidate(); Invalidate(); } }
void BAbstractSpinner::ResizeToPreferred() { BView::ResizeToPreferred(); const char* label = Label(); if (label != NULL) { fDivider = ceilf(StringWidth(label)) + be_control_look->DefaultLabelSpacing(); } else fDivider = 0.0f; _LayoutTextView(); }
void BAbstractSpinner::DoLayout() { if ((Flags() & B_SUPPORTS_LAYOUT) == 0) return; if (GetLayout()) { BControl::DoLayout(); return; } _ValidateLayoutData(); BSize size(Bounds().Size()); if (size.width < fLayoutData->min.width) size.width = fLayoutData->min.width; if (size.height < fLayoutData->min.height) size.height = fLayoutData->min.height; float divider = 0; if (fLayoutData->label_layout_item != NULL && fLayoutData->text_view_layout_item != NULL && fLayoutData->label_layout_item->Frame().IsValid() && fLayoutData->text_view_layout_item->Frame().IsValid()) { divider = fLayoutData->text_view_layout_item->Frame().left - fLayoutData->label_layout_item->Frame().left; } else if (fLayoutData->label_width > 0) { divider = fLayoutData->label_width + be_control_look->DefaultLabelSpacing(); } fDivider = divider; BRect dirty(fTextView->Frame()); _LayoutTextView(); // invalidate dirty region dirty = dirty | fTextView->Frame(); dirty = dirty | fIncrement->Frame(); dirty = dirty | fDecrement->Frame(); Invalidate(dirty); }
void BAbstractSpinner::SetDivider(float position) { position = roundf(position); float delta = fDivider - position; if (delta == 0.0f) return; fDivider = position; if ((Flags() & B_SUPPORTS_LAYOUT) != 0) { // We should never get here, since layout support means, we also // layout the divider, and don't use this method at all. Relayout(); } else { _LayoutTextView(); Invalidate(); } }
void BAbstractSpinner::SetEnabled(bool enable) { if (IsEnabled() == enable) return; BControl::SetEnabled(enable); fTextView->MakeEditable(enable); if (enable) fTextView->SetFlags(fTextView->Flags() | B_NAVIGABLE); else fTextView->SetFlags(fTextView->Flags() & ~B_NAVIGABLE); _UpdateTextViewColors(enable); fTextView->Invalidate(); _LayoutTextView(); Invalidate(); if (Window() != NULL) Window()->UpdateIfNeeded(); }