void ResourceEditWindow::Load(const char *resource_file) { m_resource_filename.Set(resource_file); SetText(resource_file); // Set the text of the source view m_source_edit->SetText(""); if (TBFile *file = TBFile::Open(m_resource_filename, TBFile::MODE_READ)) { TBTempBuffer buffer; if (buffer.Reserve(file->Size())) { uint32 size_read = file->Read(buffer.GetData(), 1, buffer.GetCapacity()); m_source_edit->SetText(buffer.GetData(), size_read); } delete file; } else // Error, show message { TBStr text; text.SetFormatted("Could not load file %s", resource_file); if (TBMessageWindow *msg_win = new TBMessageWindow(GetParentRoot(), TBIDC(""))) msg_win->Show("Error loading resource", text); } RefreshFromSource(); }
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Set the current path to the directory of the app so we find assets also when visual studio start it. char modname[MAX_PATH]; GetModuleFileName(NULL, modname, MAX_PATH); TBTempBuffer buf; buf.AppendPath(modname); SetCurrentDirectory(buf.GetData()); // Crank up windows timer resolution (it's awfully low res normally). Note: This affects battery time! timeBeginPeriod(1); int ret = app_main(); timeEndPeriod(1); return ret; }
void TBHashTable::Debug() { TBTempBuffer line; line.AppendString("Hash table: "); int total_count = 0; for (uint32 i = 0; i < m_num_buckets; i++) { int count = 0; ITEM *item = m_buckets[i]; while (item) { count++; item = item->next; } TBStr tmp; tmp.SetFormatted("%d ", count); line.AppendString(tmp); total_count += count; } TBStr tmp; tmp.SetFormatted(" (total: %d of %d buckets)\n", total_count, m_num_buckets); line.AppendString(tmp); TBDebugOut(line.GetData()); }
virtual bool OnEvent(const TBWidgetEvent &ev) { if (ev.type == EVENT_TYPE_CLICK) { TBEditField *edit = GetWidgetByIDAndType<TBEditField>(TBIDC("editfield")); if (!edit) return false; if (ev.target->GetID() == TBIDC("clear")) { edit->SetText(""); return true; } else if (ev.target->GetID() == TBIDC("undo")) { edit->GetStyleEdit()->Undo(); return true; } else if (ev.target->GetID() == TBIDC("redo")) { edit->GetStyleEdit()->Redo(); return true; } else if (ev.target->GetID() == TBIDC("menu")) { static TBGenericStringItemSource source; if (!source.GetNumItems()) { source.AddItem(new TBGenericStringItem("Default font", TBIDC("default font"))); source.AddItem(new TBGenericStringItem("Default font (larger)", TBIDC("large font"))); source.AddItem(new TBGenericStringItem("RGB font (Neon)", TBIDC("rgb font Neon"))); source.AddItem(new TBGenericStringItem("RGB font (Orangutang)", TBIDC("rgb font Orangutang"))); source.AddItem(new TBGenericStringItem("RGB font (Orange)", TBIDC("rgb font Orange"))); source.AddItem(new TBGenericStringItem("-")); source.AddItem(new TBGenericStringItem("Glyph cache stresstest (CJK)", TBIDC("CJK"))); source.AddItem(new TBGenericStringItem("-")); source.AddItem(new TBGenericStringItem("Toggle wrapping", TBIDC("toggle wrapping"))); source.AddItem(new TBGenericStringItem("-")); source.AddItem(new TBGenericStringItem("Align left", TBIDC("align left"))); source.AddItem(new TBGenericStringItem("Align center", TBIDC("align center"))); source.AddItem(new TBGenericStringItem("Align right", TBIDC("align right"))); } if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("popup_menu"))) menu->Show(&source, TBPopupAlignment()); return true; } else if (ev.target->GetID() == TBIDC("popup_menu")) { if (ev.ref_id == TBIDC("default font")) edit->SetFontDescription(TBFontDescription()); else if (ev.ref_id == TBIDC("large font")) { TBFontDescription fd = g_font_manager->GetDefaultFontDescription(); fd.SetSize(28); edit->SetFontDescription(fd); } else if (ev.ref_id == TBIDC("rgb font Neon")) { TBFontDescription fd = edit->GetCalculatedFontDescription(); fd.SetID(TBIDC("Neon")); edit->SetFontDescription(fd); } else if (ev.ref_id == TBIDC("rgb font Orangutang")) { TBFontDescription fd = edit->GetCalculatedFontDescription(); fd.SetID(TBIDC("Orangutang")); edit->SetFontDescription(fd); } else if (ev.ref_id == TBIDC("rgb font Orange")) { TBFontDescription fd = edit->GetCalculatedFontDescription(); fd.SetID(TBIDC("Orange")); edit->SetFontDescription(fd); } else if (ev.ref_id == TBIDC("CJK")) { TBTempBuffer buf; for (int i = 0, cp = 0x4E00; cp <= 0x9FCC; cp++, i++) { char utf8[8]; int len = utf8::encode(cp, utf8); buf.Append(utf8, len); if (i % 64 == 63) buf.Append("\n", 1); } edit->GetStyleEdit()->SetText(buf.GetData(), buf.GetAppendPos()); } else if (ev.ref_id == TBIDC("toggle wrapping")) edit->SetWrapping(!edit->GetWrapping()); else if (ev.ref_id == TBIDC("align left")) edit->SetTextAlign(TB_TEXT_ALIGN_LEFT); else if (ev.ref_id == TBIDC("align center")) edit->SetTextAlign(TB_TEXT_ALIGN_CENTER); else if (ev.ref_id == TBIDC("align right")) edit->SetTextAlign(TB_TEXT_ALIGN_RIGHT); return true; } } return DemoWindow::OnEvent(ev); }
// TBWidgetListener virtual bool OnWidgetInvokeEvent(TBWidget *widget, const TBWidgetEvent &ev) { // Skip these events for now if (ev.IsPointerEvent()) return false; // Always ignore activity in this window (or we might get endless recursion) if (TBWindow *window = widget->GetParentWindow()) if (TBSafeCast<DebugSettingsWindow>(window)) return false; TBTempBuffer buf; buf.AppendString(GetEventTypeStr(ev.type)); buf.AppendString(" ("); buf.AppendString(widget->GetClassName()); buf.AppendString(")"); buf.AppendString(" id: "); buf.AppendString(GetIDString(ev.target->GetID())); if (ev.ref_id) { buf.AppendString(", ref_id: "); buf.AppendString(GetIDString(ev.ref_id)); } if (ev.type == EVENT_TYPE_CHANGED) { TBStr extra, text; if (ev.target->GetText(text) && text.Length() > 24) sprintf(text.CStr() + 20, "..."); extra.SetFormatted(", value: %.2f (\"%s\")", ev.target->GetValueDouble(), text.CStr()); buf.AppendString(extra); } buf.AppendString("\n"); // Append the line to the output textfield TBStyleEdit *se = output->GetStyleEdit(); se->selection.SelectNothing(); se->AppendText(buf.GetData(), TB_ALL_TO_TERMINATION, true); se->ScrollIfNeeded(false, true); // Remove lines from the top if we exceed the height limit. const int height_limit = 2000; int current_height = se->GetContentHeight(); if (current_height > height_limit) { se->caret.Place(TBPoint(0, current_height - height_limit)); se->selection.SelectToCaret(se->blocks.GetFirst(), 0); se->Delete(); } return false; }