From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- utils/mxtk/mxwidget.cpp | 306 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 306 insertions(+) create mode 100644 utils/mxtk/mxwidget.cpp (limited to 'utils/mxtk/mxwidget.cpp') diff --git a/utils/mxtk/mxwidget.cpp b/utils/mxtk/mxwidget.cpp new file mode 100644 index 0000000..a7e6b26 --- /dev/null +++ b/utils/mxtk/mxwidget.cpp @@ -0,0 +1,306 @@ +// +// mxToolKit (c) 1999 by Mete Ciragan +// +// file: mxWidget.cpp +// implementation: Win32 API +// last modified: Mar 19 1999, Mete Ciragan +// copyright: The programs and associated files contained in this +// distribution were developed by Mete Ciragan. The programs +// are not in the public domain, but they are freely +// distributable without licensing fees. These programs are +// provided without guarantee or warrantee expressed or +// implied. +// +#include "mxtk/mxWidget.h" +#include +#include +#include +#include +#include + +void mxTab_resizeChild (HWND hwnd); +void mx_addWidget (mxWidget *widget); +void mx_removeWidget (mxWidget *widget); + + + +class mxWidget_i +{ +public: + mxWindow *d_parent_p; + HWND d_hwnd; + void *d_userData; + int d_type; +}; + + + +mxWidget::mxWidget (mxWindow *parent, int x, int y, int w, int h, const char *label) +{ + d_this = new mxWidget_i; + + setHandle (0); + setType (-1); + setParent (parent); + setBounds (x, y, w, h); + setVisible (true); + setEnabled (true); + setId (0); + setUserData (0); + setLabel (label); + + mx_addWidget (this); +} + + + +mxWidget::~mxWidget () +{ + mx_removeWidget (this); + + if (d_this->d_type == MX_MENU || + d_this->d_type == MX_MENUBAR || + d_this->d_type == MX_POPUPMENU) + DestroyMenu ((HMENU) d_this->d_hwnd); + else + DestroyWindow (d_this->d_hwnd); + + delete d_this; +} + +bool mxWidget::CanClose() +{ + // Assume yes + return true; +} + +void mxWidget::OnDelete() +{ + // Nothing +} + +void +mxWidget::setHandle (void *handle) +{ + d_this->d_hwnd = (HWND) handle; +} + + + +void +mxWidget::setType (int type) +{ + d_this->d_type = type; +} + + + +void +mxWidget::setParent (mxWindow *parentWindow) +{ + d_this->d_parent_p = parentWindow; +} + + + +void +mxWidget::setBounds (int x, int y, int w, int h) +{ + char str[128]; + GetClassName (d_this->d_hwnd, str, 128); + + if (!strcmp (str, "COMBOBOX")) + MoveWindow (d_this->d_hwnd, x, y, w, h + 100, TRUE); + else + MoveWindow (d_this->d_hwnd, x, y, w, h, TRUE); + + if (!strcmp (str, WC_TABCONTROL)) + mxTab_resizeChild (d_this->d_hwnd); +} + + + +void +mxWidget::setLabel (const char *format, ... ) +{ + if (format == NULL) + { + if (d_this->d_hwnd) + { + SetWindowText (d_this->d_hwnd, NULL); + } + return; + } + + va_list argptr; + static char string[1024]; + + va_start (argptr, format); + vsprintf (string, format,argptr); + va_end (argptr); + + if (d_this->d_hwnd) + { + SetWindowText (d_this->d_hwnd, string); + } +} + + +void +mxWidget::setVisible (bool b) +{ + if (b) + SetWindowPos (d_this->d_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); + else + ShowWindow (d_this->d_hwnd, SW_HIDE); +} + + + +void +mxWidget::setEnabled (bool b) +{ + EnableWindow (d_this->d_hwnd, b); +} + + + +void +mxWidget::setId (int id) +{ + SetWindowLong (d_this->d_hwnd, GWL_ID, (LONG) id); +} + + + +void +mxWidget::setUserData (void *userData) +{ + d_this->d_userData = userData; +} + + + +void* +mxWidget:: getHandle () const +{ + return (void *) d_this->d_hwnd; +} + + + +int +mxWidget::getType () const +{ + return d_this->d_type; +} + + + +mxWindow* +mxWidget::getParent () const +{ + return d_this->d_parent_p; +} + + + +int +mxWidget::x () const +{ + RECT rc; + GetWindowRect (d_this->d_hwnd, &rc); + return (int) rc.left; +} + + + +int +mxWidget::y () const +{ + RECT rc; + GetWindowRect (d_this->d_hwnd, &rc); + return (int) rc.top; +} + + + +int +mxWidget::w () const +{ + RECT rc; + GetWindowRect (d_this->d_hwnd, &rc); + return (int) (rc.right - rc.left); +} + + + +int +mxWidget::h () const +{ + RECT rc; + GetWindowRect (d_this->d_hwnd, &rc); + return (int) (rc.bottom - rc.top); +} + + + +int +mxWidget::w2 () const +{ + RECT rc; + GetClientRect (d_this->d_hwnd, &rc); + return (int) (rc.right - rc.left); +} + + + +int +mxWidget::h2 () const +{ + RECT rc; + GetClientRect (d_this->d_hwnd, &rc); + return (int) (rc.bottom - rc.top); +} + + + +const char* +mxWidget::getLabel () const +{ + static char label[256]; + GetWindowText (d_this->d_hwnd, label, 256); + return label; +} + + + +bool +mxWidget::isVisible () const +{ + return ( IsWindowVisible (d_this->d_hwnd) ? true : false ); +} + + + +bool +mxWidget::isEnabled () const +{ + return ( IsWindowEnabled (d_this->d_hwnd) ? true : false ); +} + + + +int +mxWidget::getId () const +{ + return (int) GetWindowLong (d_this->d_hwnd, GWL_ID); +} + + + +void* +mxWidget::getUserData () const +{ + return d_this->d_userData; +} -- cgit v1.2.3