/* * Copyright 2024, Santiago Lema * All rights reserved. Distributed under the terms of the MIT license. */ #include "App.h" #include "MainWindow.h" #include #include #include "Utils.h" #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "Application" const char *kApplicationSignature = "application/x-vnd.SLema-DumBer"; App::App() : BApplication(kApplicationSignature) { BMessage s = LoadMessageFromFile(kSettingsFileName); if (s.what=='STNG') settingsMessage = s; else { settingsMessage.what = 'STNG'; settingsMessage.AddInt32("settings_format_version", 1); // Initial data } MainWindow *m = new MainWindow(); m->SetLook(B_DOCUMENT_WINDOW_LOOK); m->SetFeel(B_NORMAL_WINDOW_FEEL); m->SetSizeLimits(350,B_SIZE_UNLIMITED,300,B_SIZE_UNLIMITED); mainWindow = m; mainWindow->Show(); } App::~App() {} void App::AboutRequested() { BAboutWindow *about = new BAboutWindow(B_TRANSLATE_SYSTEM_NAME("DumBer"), kApplicationSignature); about->AddDescription(B_TRANSLATE("about_body")); about->AddCopyright(2025, "Santiago Lema"); about->AddText("e-mail me at haiku@lema.org"); about->AddText("or find me on the fediverse as\n@santi@gone.lema.org"); about->Show(); } void App::MessageReceived(BMessage *message) { switch (message->what) { case kSettingsUpdate: { // NO DO NOT CLEAR message, we can just overwrite one field and save the whole thing each time //settingsMessage.MakeEmpty(); std::cout << "Received settings update: " ; int32 count = message->CountNames(B_ANY_TYPE); for (int32 index = 0; index < count; ++index) { char* name; uint32 type; int32 itemCount; std::cout << "Received settings update - key: " << name; // Retrieve information about the item at the index if (message->GetInfo(B_ANY_TYPE, index, &name, &type, &itemCount) == B_NO_ERROR) { if (type == B_STRING_TYPE) { BString value; if (message->FindString(name, &value) == B_NO_ERROR) { settingsMessage.AddString(name, value); } } } } SaveMessageToFile(settingsMessage,kSettingsFileName); } break; default: { // message->PrintToStream(); BHandler::MessageReceived( message); // call the parent handler for other messages // _infoView->SetText(message->FindMessage()); break; } } // end switch } // end function int main() { App *app = new App(); app->Run(); delete app; return 0; }