/** * AllowOnlyNumbers() * * @param BTextControl, the control we want to only allow numbers * @param maxNum, the maximun number of characters allowed * @return void */ void MarginView::_AllowOnlyNumbers(BTextControl *textControl, int32 maxNum) { BTextView *tv = textControl->TextView(); for (int32 i = 0; i < 256; i++) tv->DisallowChar(i); for (int32 i = '0'; i <= '9'; i++) tv->AllowChar(i); tv->AllowChar(B_BACKSPACE); tv->AllowChar('.'); tv->SetMaxBytes(maxNum); }
int32_t PTextViewAllowChars(void *pobject, void *in, void *out, void *extraData) { if (!pobject || !in || !out) return B_ERROR; PView *parent = static_cast<PView*>(pobject); if (!parent) return B_BAD_TYPE; BTextView *backend = (BTextView*)parent->GetView(); PArgs *args = static_cast<PArgs*>(in); BString string; if (args->FindString("chars", &string) != B_OK) return B_ERROR; if (backend->Window()) backend->Window()->Lock(); for (int32 i = 0; i < string.CountChars(); i++) { char c = string.ByteAt(i); if (c) backend->AllowChar(c); } if (backend->Window()) backend->Window()->Unlock(); return B_OK; }
/* * Returns 0 if cancel was chose, otherwise * returns the game no * */ unsigned GameByID(int gameno /* default # */) { BTextView *T; BTextControl *tC; register int i; char buffer[256]; if (!gameno) gameno = 1; sprintf(buffer, "%d%c", gameno, 0); tC = new BTextControl( *(new BRect(10, 10, 20, 50)), "Game Number", buffer, NULL); T = tC->TextView(); /* * Make sure only #s can be entered */ for (i = 0; i < 256; i++) T->DisallowChar(i); for (i = '0'; i < '9' + 1; i++) T->AllowChar(i); AddChild(tC) Show(); // start running }
ID_Win::ID_Win(BLooper *l, unsigned int g): Txt_Ctl(NULL), done(0), Game(0), BWindow(BRect(100, 100, 300, 180), "New Game By ID", B_TITLED_WINDOW, B_NOT_RESIZABLE | /*B_NOT_CLOSABLE |*/ B_NOT_ZOOMABLE | B_NOT_MINIMIZABLE) { BView *back; BButton * Cancel; BButton * Accept; BTextView *T; register int i; loop = l; Game = g; back = new BView(Bounds(), NULL, B_FOLLOW_ALL, B_WILL_DRAW); back->SetViewColor(216, 216, 216); AddChild(back); Accept = new BButton( BRect(10, 40, 90, 55), "Accept", "Accept", new BMessage(ACCEPT_BUTTON)); Accept->MakeDefault(true); back->AddChild(Accept); Cancel = new BButton( BRect(120, 40, 190, 55), "Cancel", "Cancel", new BMessage(CANCEL_BUTTON)); back->AddChild(Cancel); Txt_Ctl = new BTextControl(BRect(10, 10, 190, 25), "", "Game Number", "", NULL); T = Txt_Ctl->TextView(); /* * Only allow #s in there. */ for (i = 0; i < 256; i++) T->DisallowChar(i); for (i = '0'; i < '9' + 1; i++) T->AllowChar(i); back->AddChild(Txt_Ctl); char buffer[64]; if (!Game) Game = rand(); sprintf(buffer, "%d", Game); Txt_Ctl->SetText(buffer); Txt_Ctl->MakeFocus(true); //Port = create_port(1, "ID Window Port"); Show(); }
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 */