void DTipWatcherView::ShowTip(BPoint pt, const char *text) { if (!text) return; Window()->SetWorkspaces(B_CURRENT_WORKSPACE); fTipView->SetText(text); // Figure the size of the tip. We do have a maximum width of 200 and a maximum height of 400, but // we only want to use the maximum size if it's necessary. fTipView->ResizeTo(200,400); fTipView->SetTextRect(BRect(2,2,198,398)); int32 lineCount = fTipView->CountLines(); float width = 200.0; if (lineCount == 1) width = fTipView->LineWidth() + 4; float height = fTipView->TextHeight(0,lineCount); height = (height < 400) ? height : 400; Window()->ResizeTo(width,height); fTipView->SetTextRect(BRect(2,2, width - 4, height - 4)); BPoint winpt = PointForTip(pt); Window()->MoveTo(winpt.x,winpt.y); Window()->Show(); }
void ConfigWindow::MakeHowToView() { BResources *resources = BApplication::AppResources(); if (resources) { size_t length; char *buffer = (char *)resources->FindResource('ICON',101,&length); if (buffer) { BBitmap *bitmap = new BBitmap(BRect(0,0,63,63),B_CMAP8); if (bitmap && bitmap->InitCheck() == B_OK) { // copy and enlarge a 32x32 8-bit bitmap char *bits = (char *)bitmap->Bits(); for (int32 i = 0,j = -64;i < length;i++) { if ((i % 32) == 0) j += 64; char *b = bits + (i << 1) + j; b[0] = b[1] = b[64] = b[65] = buffer[i]; } fConfigView->AddChild(new BitmapView(bitmap)); } else delete bitmap; } } BRect rect = fConfigView->Bounds(); BTextView *text = new BTextView(rect,NULL,rect,B_FOLLOW_NONE,B_WILL_DRAW); text->SetViewColor(fConfigView->Parent()->ViewColor()); text->SetAlignment(B_ALIGN_CENTER); text->SetText( MDR_DIALECT_CHOICE ("\n\nCreate a new account using the \"Add\" button.\n\n" "Delete accounts (or only the inbound/outbound) by using the \"Remove\" button on the selected item.\n\n" "Select an item in the list to edit its configuration.", "\n\nアカウントの新規作成は\"追加\"ボタンを\n使います。" "\n\nアカウント自体またはアカウントの\n送受信設定を削除するには\n項目を選択して\"削除\"ボタンを使います。" "\n\nアカウント内容の変更は、\nマウスで項目をクリックしてください。")); rect = text->Bounds(); text->ResizeTo(rect.Width(),text->TextHeight(0,42)); text->SetTextRect(rect); text->MakeEditable(false); text->MakeSelectable(false); fConfigView->AddChild(text); static_cast<CenterContainer *>(fConfigView)->Layout(); }
void ConfigWindow::_MakeHowToView() { app_info info; if (be_app->GetAppInfo(&info) == B_OK) { BFile appFile(&info.ref, B_READ_ONLY); BAppFileInfo appFileInfo(&appFile); if (appFileInfo.InitCheck() == B_OK) { BBitmap *bitmap = new (nothrow) BBitmap(BRect(0, 0, 63, 63), B_RGBA32); if (appFileInfo.GetIcon(bitmap, B_LARGE_ICON) == B_OK) { fConfigView->AddChild(new BitmapView(bitmap)); } else delete bitmap; } } BRect rect = fConfigView->Bounds(); BTextView *text = new BTextView(rect, NULL, rect, B_FOLLOW_NONE, B_WILL_DRAW); text->SetViewColor(fConfigView->Parent()->ViewColor()); text->SetAlignment(B_ALIGN_CENTER); text->SetText(B_TRANSLATE( "\n\nCreate a new account with the Add button.\n\n" "Remove an account with the Remove button on the selected item.\n\n" "Select an item in the list to change its settings.")); rect = text->Bounds(); text->ResizeTo(rect.Width(), text->TextHeight(0, 42)); text->SetTextRect(rect); text->MakeEditable(false); text->MakeSelectable(false); fConfigView->AddChild(text); fConfigView->Layout(); }
void ConfigWindow::MakeHowToView() { #ifndef HAIKU_TARGET_PLATFORM_HAIKU BResources *resources = BApplication::AppResources(); if (resources) { size_t length; char *buffer = (char *)resources->FindResource(B_LARGE_ICON_TYPE, 101, &length); if (buffer) { BBitmap *bitmap = new (nothrow) BBitmap(BRect(0, 0, 63, 63), B_CMAP8); if (bitmap && bitmap->InitCheck() == B_OK) { // copy and enlarge a 32x32 8-bit bitmap char *bits = (char *)bitmap->Bits(); for (int32 i = 0, j = -64; i < (int32)length; i++) { if ((i % 32) == 0) j += 64; char *b = bits + (i << 1) + j; b[0] = b[1] = b[64] = b[65] = buffer[i]; } fConfigView->AddChild(new BitmapView(bitmap)); } else delete bitmap; } } #else app_info info; if (be_app->GetAppInfo(&info) == B_OK) { BFile appFile(&info.ref, B_READ_ONLY); BAppFileInfo appFileInfo(&appFile); if (appFileInfo.InitCheck() == B_OK) { BBitmap *bitmap = new (nothrow) BBitmap(BRect(0, 0, 63, 63), B_RGBA32); if (appFileInfo.GetIcon(bitmap, B_LARGE_ICON) == B_OK) { fConfigView->AddChild(new BitmapView(bitmap)); } else delete bitmap; } } #endif // HAIKU_TARGET_PLATFORM_HAIKU BRect rect = fConfigView->Bounds(); BTextView *text = new BTextView(rect, NULL, rect, B_FOLLOW_NONE, B_WILL_DRAW); text->SetViewColor(fConfigView->Parent()->ViewColor()); text->SetAlignment(B_ALIGN_CENTER); text->SetText(B_TRANSLATE( "\n\nCreate a new account with the Add button.\n\n" "Remove an account with the Remove button on the selected item.\n\n" "Select an item in the list to change its settings.")); rect = text->Bounds(); text->ResizeTo(rect.Width(), text->TextHeight(0, 42)); text->SetTextRect(rect); text->MakeEditable(false); text->MakeSelectable(false); fConfigView->AddChild(text); static_cast<CenterContainer *>(fConfigView)->Layout(); }
void BTextWidget::StartEdit(BRect bounds, BPoseView *view, BPose *pose) { if (!IsEditable()) return; // don't allow editing of the trash directory name if (pose->TargetModel()->IsTrash()) return; // don't allow editing of the "Disks" icon name if (pose->TargetModel()->IsRoot()) return; BEntry entry(pose->TargetModel()->EntryRef()); if (entry.InitCheck() == B_OK && !ConfirmChangeIfWellKnownDirectory(&entry, "rename")) return; // get bounds with full text length BRect rect(bounds); BRect textRect(bounds); rect.OffsetBy(-2, -1); rect.right += 1; BFont font; view->GetFont(&font); BTextView *textView = new BTextView(rect, "WidgetTextView", textRect, &font, 0, B_FOLLOW_ALL, B_WILL_DRAW); textView->SetWordWrap(false); DisallowMetaKeys(textView); fText->SetUpEditing(textView); textView->AddFilter(new BMessageFilter(B_KEY_DOWN, TextViewFilter)); rect.right = rect.left + textView->LineWidth() + 3; // center new width, if necessary if (view->ViewMode() == kIconMode || (view->ViewMode() == kListMode && fAlignment == B_ALIGN_CENTER)) { rect.OffsetBy(bounds.Width() / 2 - rect.Width() / 2, 0); } rect.bottom = rect.top + textView->LineHeight() + 1; textRect = rect.OffsetToCopy(2, 1); textRect.right -= 3; textRect.bottom--; textView->SetTextRect(textRect); textRect = view->Bounds(); bool hitBorder = false; if (rect.left < 1) rect.left = 1, hitBorder = true; if (rect.right > textRect.right) rect.right = textRect.right - 2, hitBorder = true; textView->MoveTo(rect.LeftTop()); textView->ResizeTo(rect.Width(), rect.Height()); BScrollView *scrollView = new BScrollView("BorderView", textView, 0, 0, false, false, B_PLAIN_BORDER); view->AddChild(scrollView); // configure text view switch (view->ViewMode()) { case kIconMode: textView->SetAlignment(B_ALIGN_CENTER); break; case kMiniIconMode: textView->SetAlignment(B_ALIGN_LEFT); break; case kListMode: textView->SetAlignment(fAlignment); break; } textView->MakeResizable(true, hitBorder ? NULL : scrollView); view->SetActivePose(pose); // tell view about pose SetActive(true); // for widget textView->SelectAll(); textView->MakeFocus(); // make this text widget invisible while we edit it SetVisible(false); ASSERT(view->Window()); // how can I not have a Window here??? if (view->Window()) // force immediate redraw so TextView appears instantly view->Window()->UpdateIfNeeded(); }
void BTextWidget::StartEdit(BRect bounds, BPoseView* view, BPose* pose) { view->SetTextWidgetToCheck(NULL, this); if (!IsEditable() || IsActive()) return; BEntry entry(pose->TargetModel()->EntryRef()); if (entry.InitCheck() == B_OK && !ConfirmChangeIfWellKnownDirectory(&entry, B_TRANSLATE_COMMENT("rename", "As in 'if you rename this folder...' (en) " "'Wird dieser Ordner umbenannt...' (de)"), B_TRANSLATE_COMMENT("rename", "As in 'to rename this folder...' (en) " "'Um diesen Ordner umzubenennen...' (de)"), B_TRANSLATE_COMMENT("Rename", "Button label, 'Rename' (en), 'Umbenennen' (de)"))) return; // get bounds with full text length BRect rect(bounds); BRect textRect(bounds); rect.OffsetBy(-2, -1); rect.right += 1; BFont font; view->GetFont(&font); BTextView* textView = new BTextView(rect, "WidgetTextView", textRect, &font, 0, B_FOLLOW_ALL, B_WILL_DRAW); textView->SetWordWrap(false); DisallowMetaKeys(textView); fText->SetUpEditing(textView); textView->AddFilter(new BMessageFilter(B_KEY_DOWN, TextViewFilter)); rect.right = rect.left + textView->LineWidth() + 3; // center new width, if necessary if (view->ViewMode() == kIconMode || (view->ViewMode() == kListMode && fAlignment == B_ALIGN_CENTER)) { rect.OffsetBy(bounds.Width() / 2 - rect.Width() / 2, 0); } rect.bottom = rect.top + textView->LineHeight() + 1; textRect = rect.OffsetToCopy(2, 1); textRect.right -= 3; textRect.bottom--; textView->SetTextRect(textRect); BPoint origin = view->LeftTop(); textRect = view->Bounds(); bool hitBorder = false; if (rect.left <= origin.x) rect.left = origin.x + 1, hitBorder = true; if (rect.right >= textRect.right) rect.right = textRect.right - 1, hitBorder = true; textView->MoveTo(rect.LeftTop()); textView->ResizeTo(rect.Width(), rect.Height()); BScrollView* scrollView = new BScrollView("BorderView", textView, 0, 0, false, false, B_PLAIN_BORDER); view->AddChild(scrollView); // configure text view switch (view->ViewMode()) { case kIconMode: textView->SetAlignment(B_ALIGN_CENTER); break; case kMiniIconMode: textView->SetAlignment(B_ALIGN_LEFT); break; case kListMode: textView->SetAlignment(fAlignment); break; } textView->MakeResizable(true, hitBorder ? NULL : scrollView); view->SetActivePose(pose); // tell view about pose SetActive(true); // for widget textView->SelectAll(); textView->MakeFocus(); // make this text widget invisible while we edit it SetVisible(false); ASSERT(view->Window() != NULL); // how can I not have a Window here??? if (view->Window()) { // force immediate redraw so TextView appears instantly view->Window()->UpdateIfNeeded(); } }
void HDialog::CreateField(int kind, BPositionIO& data, BView*& inside) { dRect r; char name[256]; char label[256]; uint32 cmd; BView *v; switch (kind) { case 'btn ': data >> r >> name >> label >> cmd; inside->AddChild(v = new BButton(r.ToBe(), name, label, new BMessage(cmd))); if (cmd == msg_OK || strcmp(name, "ok") == 0) SetDefaultButton(static_cast<BButton*>(v)); break; case 'radb': data >> r >> name >> label; inside->AddChild(new BRadioButton(r.ToBe(), name, label, new BMessage(msg_FieldChanged))); break; case 'chkb': data >> r >> name >> label; inside->AddChild(new BCheckBox(r.ToBe(), name, label, new BMessage(msg_FieldChanged))); break; case 'edit': { char val[256], allowed[256]; short max, divider; data >> r >> name >> label >> val >> allowed >> max >> divider; BRect b = r.ToBe(); inside->AddChild(v = new BTextControl(b, name, *label ? label : NULL, val, new BMessage(msg_FieldChanged), B_FOLLOW_NONE)); BTextView *tv = static_cast<BTextControl*>(v)->TextView(); if (*allowed) { for (int i = 0; i < 256; i++) if (isprint(i)) { if (strchr(allowed, i)) tv->AllowChar(i); else tv->DisallowChar(i); } } if (max) tv->SetMaxBytes(max); if (divider) static_cast<BTextControl*>(v)->SetDivider(divider * gFactor); if (v->Bounds().Height() < b.Height()) { float d = v->Bounds().Height() - tv->Bounds().Height(); v->ResizeTo(b.Width(), b.Height()); tv->ResizeTo(tv->Bounds().Width(), b.Height() - d); } break; } case 'capt': data >> r >> name >> label; inside->AddChild(v = new BStringView(r.ToBe(), name, label)); v->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); break; case 'popu': { short id, div; data >> r >> name >> label >> id >> div; inside->AddChild(v = new BMenuField(r.ToBe(), name, *label ? label : NULL, HResources::GetMenu(id, true))); if (div) static_cast<BMenuField*>(v)->SetDivider(div * gFactor); break; } case 'tabb': data >> r >> name; inside->AddChild(v = new HTabSheet(r.ToBe(), name)); inside = v; break; case 'tabe': inside = inside->Parent(); break; case 'shet': data >> name >> label; inside = dynamic_cast<HTabSheet*>(inside)->AddSheet(name, label); break; case 'shte': inside = inside->Parent(); break; case 'box ': data >> r >> name; inside->AddChild(v = new BBox(r.ToBe(), name)); if (*name) dynamic_cast<BBox*>(v)->SetLabel(name); v->SetFont(be_plain_font); inside = v; break; case 'boxe': inside = inside->Parent(); break; case 'list': case 'olst': { data >> r >> name; BRect lr = r.ToBe(); lr.right -= B_V_SCROLL_BAR_WIDTH; BListView *lv; if (kind == 'list') lv = new BListView(lr, name); else lv = new BOutlineListView(lr, name); strcat(name, "_scr"); inside->AddChild(new BScrollView(name, lv, B_FOLLOW_LEFT | B_FOLLOW_TOP, 0, false, true)); break; } case 'clct': { data >> r >> name >> label; rgb_color c = { 255, 100, 100, 0 }; inside->AddChild(v = new HColorControl(r.ToBe(), name, label, c)); v->SetViewColor(inside->ViewColor()); break; } case 'line': { HDlogView *dv = dynamic_cast<HDlogView*>(inside); data >> r; if (dv) dv->AddMyLine(r.ToBe()); break; } case 'sldr': { int32 msg, vMin, vMax, thumb; data >> r >> name >> label >> msg >> vMin >> vMax >> thumb; inside->AddChild(new BSlider(r.ToBe(), name, label, new BMessage(msg), vMin, vMax, (thumb_style)thumb)); break; } default: { if (sFieldMap && sFieldMap->find(kind) != sFieldMap->end()) (*sFieldMap)[kind](kind, data, inside); else throw HErr("Unknown type for dialog item (%4.4s)", &kind); } } } /* HDialog::CreateField */