static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { void (*qf)(void *); LRESULT lResult; if (handleParentMessages(hwnd, uMsg, wParam, lParam, &lResult) != FALSE) return lResult; switch (uMsg) { case WM_QUERYENDSESSION: // TODO block handler if (shouldQuit()) { uiQuit(); return TRUE; } return FALSE; case WM_WININICHANGE: issueWM_WININICHANGE(wParam, lParam); return 0; case msgQueued: qf = (void (*)(void *)) wParam; (*qf)((void *) lParam); return 0; } return DefWindowProcW(hwnd, uMsg, wParam, lParam); }
static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { void (*qf)(void *); LRESULT lResult; if (handleParentMessages(hwnd, uMsg, wParam, lParam, &lResult) != FALSE) return lResult; switch (uMsg) { case WM_QUERYENDSESSION: case msgConsoleEndSession: // TODO block handler if (shouldQuit()) { uiQuit(); return TRUE; } return FALSE; case WM_TIMER: if (wParam != resizeTimerID) break; if (SetTimer(utilWindow, resizeTimerID, resizeTimerInterval, NULL) == 0) logLastError("error resetting resize timer in utilWindowWndProc()"); doResizes(); return 0; case WM_WININICHANGE: issueWM_WININICHANGE(wParam, lParam); return 0; case msgQueued: qf = (void (*)(void *)) wParam; (*qf)((void *) lParam); return 0; } return DefWindowProcW(hwnd, uMsg, wParam, lParam); }
static int onClosing(uiWindow *w, void *data) { uiQuit(); return 1; }
static Janet janet_ui_quit(int32_t argc, Janet *argv) { assert_inited(); uiQuit(); return janet_wrap_nil(); }
int onClosing(uiWindow *w, void *data) { printf("in onClosing()\n"); uiQuit(); return 1; }
static int onClosing(uiWindow *w, void *data) { uiControlDestroy(uiControl(mainwin)); uiQuit(); return 0; }
Window::Window(string title) : title{title}, mainLayout{uiNewHorizontalBox()}, histogram(handler, datapoints, color) { mainwin = uiNewWindow(title.c_str(), 640, 480, 0); uiWindowSetMargined(mainwin, 1); uiBoxSetPadded(mainLayout, 1); uiWindowSetChild(mainwin, uiControl(mainLayout)); typedef void (*callback_handlerdraw_t)(uiAreaHandler*, uiArea*, uiAreaDrawParams*); Callback<void(uiAreaHandler*, uiArea*, uiAreaDrawParams*)>::func = std::bind(&Window::handlerDraw, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); callback_handlerdraw_t handlerDrawFunction = static_cast<callback_handlerdraw_t>(Callback<void(uiAreaHandler*, uiArea*, uiAreaDrawParams*)>::callback); typedef void (*callback_handlermouseevent_t)(uiAreaHandler*, uiArea*, uiAreaMouseEvent*); Callback<void(uiAreaHandler*, uiArea*, uiAreaMouseEvent*)>::func = std::bind(&Window::handlerMouseEvent, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); callback_handlermouseevent_t handlerMouseeventFunction = static_cast<callback_handlermouseevent_t>(Callback<void(uiAreaHandler*, uiArea*, uiAreaMouseEvent*)>::callback); // only draw and mouseEvent are implemented for now // they are "filled" by the widgets handler.Draw = handlerDrawFunction; handler.MouseEvent = handlerMouseeventFunction; handler.MouseCrossed = [] (uiAreaHandler *ha, uiArea *a, int left) {}; handler.DragBroken = [] (uiAreaHandler *ah, uiArea *a) {}; handler.KeyEvent = [] (uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e) {return 0;}; // reject all keys // todo: the data should be stored in the histogramm application, // not in the window // TODO: the datapoints and color are not passed correctly by reference! toolbox.attach(mainLayout); histogram.attachToolboxController(toolbox); histogram.attachHandlerController(this); histogram.attach(mainLayout); uiWindowOnClosing(mainwin, [](uiWindow *w, void *data) {uiControlDestroy(uiControl(w)); uiQuit(); return 0;}, NULL); typedef int (*callback_quitfunction_t)(void*); Callback<int(void*)>::func = std::bind(&Window::onQuit, this, std::placeholders::_1); callback_quitfunction_t quitFunction = static_cast<callback_quitfunction_t>(Callback<int(void*)>::callback); uiOnShouldQuit(quitFunction, NULL); }
static void onQuitClicked(uiMenuItem *item, uiWindow *w, void *data) { if (shouldQuit()) uiQuit(); }