12 #define LWRGB(red, green, blue) (0x01000000 | (red<<16) | (blue<<8) | green)
43 #define PAN_SETCONFIGTAG(pfunc,pan,tag) ( ival.intv.value=tag, (*pfunc->set)(pan, PAN_CONFIGTAG, (void *)&ival.intv.value) )
58 if (val.type == LWT_STRING)
60 delete [] val.str.buf;
77 val.type = LWT_STRING;
78 len = Max<int>(len, (int)s.length() + 1);
79 if (len < 2) len = 2048;
80 val.str.buf =
new char[len];
81 strcpy(val.str.buf, s.c_str());
88 val.type = LWT_INTEGER;
95 val.type = LWT_INTEGER;
102 val.type = LWT_FLOAT;
122 val.ivec.val[0] = v[0];
123 val.ivec.val[1] = v[1];
124 val.ivec.val[2] = v[2];
132 val.type = LWT_VFLOAT;
142 val.type = LWT_VFLOAT;
143 val.fvec.val[0] = v[0];
144 val.fvec.val[1] = v[1];
145 val.fvec.val[2] = v[2];
152 val.type = LWT_VFLOAT;
153 val.fvec.val[0] = v[0];
154 val.fvec.val[1] = v[1];
155 val.fvec.val[2] = v[2];
161 val.type = LWT_POINTER;
192 v[0] = val.ivec.val[0];
193 v[1] = val.ivec.val[1];
194 v[2] = val.ivec.val[2];
200 void getValue(
double &i,
double &j,
double &k)
const
220 LWValue *
get() {
return &val;}
231 LWDrawFuncs(DrawFuncs *_df = 0, LWPanelID _pan = 0) : df(_df), pan(_pan) {;}
235 df->drawPixel(pan, c, x, y);
240 df->drawRGBPixel(pan, r, g, b, x, y);
243 void drawLine(
int c,
int x1,
int y1,
int x2,
int y2)
const
245 df->drawLine(pan, c, x1, y1, x2, y2);
247 void drawLine(
int r,
int g,
int b,
int x1,
int y1,
int x2,
int y2)
const
249 drawBox(r, g, b, x1, y1, x2 - x1, y2 - y1);
252 void drawBox(
int c,
int x,
int y,
int w,
int h)
const
254 df->drawBox(pan, c, x, y, w, h);
265 void drawBox(
int r,
int g,
int b,
int x,
int y,
int w,
int h)
const
267 df->drawRGBBox(pan, r, g, b, x, y, w, h);
273 return df->textWidth(pan, const_cast<char *>(s.c_str()));
278 return df->textWidth(pan, const_cast<char *>(s.str().c_str()));
282 void drawText(
const std::string s,
int c,
int x,
int y)
const
284 df->drawText(pan, const_cast<char *>(s.c_str()), c, x, y);
287 void drawText(
const std::ostringstream &s,
int c,
int x,
int y)
const
289 df->drawText(pan, const_cast<char *>(s.str().c_str()), c, x, y);
291 void drawBorder(
int indent,
int x,
int y,
int w,
int h = 0)
const
293 df->drawBorder(pan, indent, x, y, w, h);
305 return df->dispMetrics();
311 template <
typename T>
316 static void cb_Event(LWControlID
id,
void *userdata);
318 static void cb_Draw(LWControlID
id,
void *userdata, DrMode mode);
320 static int cb_Count(
void *userdata);
322 static char *
cb_Name(
void *userdata,
int index);
328 static void *
cb_TreeChild(
void *userdata,
void *node,
int i);
332 static char *
cb_TreeInfo(
void *userdata,
void *node,
int *flags);
334 static void cb_TreeMove(
void *userdata,
void *node,
void *parent,
int i);
350 void get (
cTag tag, LWValue *val) { control->get(control, tag, val); }
354 void set (
cTag tag, LWValue *val) { control->set(control, tag, val); }
364 : ghosted(ctl.ghosted)
372 control = from.control;
373 ghosted = from.ghosted;
381 control =
static_cast<LWControl *
>(ctl);
386 return (
void *) control;
406 return (control == static_cast<LWControl *>(ctl));
420 return (control == ctl);
425 return (control != 0);
430 void Draw(DrMode mode = DR_RENDER)
432 if (control) control->draw(control, mode);
482 set(tag, dval.
get());
491 get(tag, dval.
get());
520 return (
GetInt(tag) != 0);
528 LWValue ival = {LWT_POINTER};
535 LWValue fval = {LWT_FLOAT};
537 return fval.flt.value;
576 #if LWPP_PANELS_API_VERSION > 19
603 MoveX(ref.
X() + ref.
W() + space);
618 MoveY(ref.
Y() + ref.
H() + space);
632 MoveX(ref.
X() + ref.
W() -
W() + nudge);
774 virtual const char *
getName() = 0;
835 if (node)
return node->
getInfo(flags);
861 bool close_on_destroy;
869 void get (
pTag tag,
void *data)
const {
globPtr->get(
id, tag, data);}
891 LWControl *
addControl (
const char *type, LWPanControlDesc *desc,
const char *label)
893 return globPtr->addControl(
id, const_cast<char *>(type), desc, const_cast<char *>(label));
899 close_on_destroy(false)
908 : close_on_destroy(true),
920 close_on_destroy(false)
928 if (close_on_destroy)
940 close_on_destroy =
false;
950 void Create (
const std::string _title,
bool _close_on_destroy =
true)
953 close_on_destroy = _close_on_destroy;
958 LWPanelID
GetID()
const {
return id; }
967 return globPtr->open(
id, flags);
975 return globPtr->open(
id, PANF_BLOCKING | PANF_CANCEL | PANF_FRAME | flags);
1032 void DrawLine(
int color,
int x1,
int y1,
int x2,
int y2)
1034 globPtr->drawFuncs->drawLine(
id, color, x1, y1, x2, y2);
1039 globPtr->drawFuncs->drawBorder(
id, indent, x, y, w, h);
1047 DrawLine(LWP_WHITE, width-18, height-2, width-2,height-18 );
1048 DrawLine(LWP_WHITE, width-14, height-2, width-2,height-14 );
1049 DrawLine(LWP_WHITE, width-10, height-2, width-2,height-10 );
1050 DrawLine(LWP_WHITE, width-6, height-2, width-2,height-6 );
1052 DrawLine(LWP_BLACK, width-17, height-2, width-2,height-17 );
1053 DrawLine(LWP_BLACK, width-13, height-2, width-2,height-13 );
1054 DrawLine(LWP_BLACK, width-9, height-2, width-2,height-9 );
1055 DrawLine(LWP_BLACK, width-5, height-2, width-2,height-5 );
1081 LWControl *
AddChoice (
const char *title,
const char **items,
bool orientation)
1083 LWPanControlDesc desc;
1084 desc.type = LWT_CHOICE;
1085 desc.choice.vertical = orientation ? MX_HCHOICE : MX_VCHOICE;
1086 desc.choice.items=items;
1087 return addControl(
"ChoiceControl", &desc, title);
1100 LWControl *
AddPopUp (
const char *title,
const char **items,
int width = 0)
1102 LWPanControlDesc desc;
1103 desc.type = LWT_CHOICE;
1104 desc.choice.vertical=width;
1105 desc.choice.items=items;
1106 return addControl(
"PopupControl", &desc, title);
1115 LWControl *
AddFloat (
const char *title, LWType type = LWT_FLOAT)
1117 LWPanControlDesc desc;
1119 return addControl(
"FloatControl", &desc, title);
1136 LWPanControlDesc desc;
1137 desc.type = LWT_FLOAT;
1138 return addControl(
"FloatInfoControl", &desc, title);
1149 LWPanControlDesc desc;
1151 return addControl(
"FVecControl", &desc, title);
1168 LWPanControlDesc desc;
1169 desc.type = LWT_VFLOAT;
1170 return addControl(
"FVecInfoControl", &desc, title);
1179 LWControl *
AddItem (
const char *title, LWItemType type,
int width = 0)
1181 LWPanControlDesc desc;
1182 desc.type=LWT_LWITEM;
1184 desc.lwitem.itemType=type;
1185 desc.lwitem.list=
NULL;
1186 desc.lwitem.count=0;
1187 desc.lwitem.width=width;
1188 return addControl(
"LWListControl", &desc, title);
1198 LWControl *
AddPickItem (
const char *title, LWItemType type,
int width)
1200 LWPanControlDesc desc;
1201 desc.type=LWT_LWITEM;
1203 desc.lwitem.itemType=type;
1204 desc.lwitem.list=
NULL;
1205 desc.lwitem.count=0;
1206 desc.lwitem.width=width;
1207 return addControl(
"LWPickListControl", &desc, title);
1218 LWPanControlDesc desc;
1219 desc.type=LWT_INTEGER;
1223 desc.area.width=width;
1226 return addControl(
"ButtonControl", &desc, title);
1237 LWPanControlDesc desc;
1238 desc.type=LWT_BOOLEAN;
1239 desc.area.width=width;
1241 return addControl(
"BoolControl", &desc, title);
1252 LWPanControlDesc desc;
1253 desc.type= (width == 0 ) ? LWT_BOOLEAN : LWT_AREA;
1254 desc.area.width=width;
1256 return addControl(
"BoolButtonControl", &desc, title);
1269 LWPanControlDesc desc;
1270 desc.type= LWT_INTEGER;
1271 return addControl(
"NumControl", &desc, title);
1283 LWPanControlDesc desc;
1284 desc.type= LWT_INTEGER;
1285 return addControl(
"NumInfoControl", &desc, title);
1298 LWControl *
AddSlider (
const char *title,
int min,
int max,
int width,
const char *type =
"SliderControl")
1300 LWPanControlDesc desc;
1301 desc.type=LWT_RANGE;
1302 desc.range.width=width;
1318 return AddSlider(title, min, max, width,
"VSlideControl");
1331 return AddSlider(title, min, max, width,
"HSlideControl");
1344 return AddSlider(title, min, max, width,
"UnboundSlideControl");
1357 return AddSlider(title, min, max, width,
"MiniSliderControl");
1367 LWControl *
AddVector (
const char *title,
const char *type =
"VecControl")
1369 LWPanControlDesc desc;
1370 desc.type = LWT_VINT;
1416 LWControl *
AddString (
const char *title,
int width,
const char *type =
"EditControl")
1418 LWPanControlDesc desc;
1419 desc.type = LWT_STRING;
1420 desc.string.width=width;
1439 LWControl *
AddFile (
const char *title,
int width) {
return AddString(title, width,
"FileControl");}
1456 LWControl *
AddLoad (
const char *title,
int width) {
return AddString(title, width,
"LoadControl");}
1473 LWControl *
AddSave (
const char *title,
int width) {
return AddString(title, width,
"SaveControl");}
1490 LWControl *
AddDir (
const char *title,
int width){
return AddString(title, width,
"DirControl");}
1507 LWControl *
AddText (
const char *title,
const char**text)
1509 LWPanControlDesc desc;
1510 desc.type = LWT_TEXT;
1511 desc.text.text=text;
1512 return addControl(
"TextControl", &desc, title);
1523 LWControl *
AddArea (
const char *title,
int width,
int height,
const char *type =
"AreaControl")
1525 LWPanControlDesc desc;
1526 desc.type = LWT_AREA;
1527 desc.area.width=width;
1528 desc.area.height=height;
1539 LWControl *
AddOpenGL (
const char *title,
int width,
int height) {
return AddArea(title, width, height,
"OpenGLControl");}
1549 LWControl *
AddCanvas (
const char *title,
int width,
int height) {
return AddArea(title, width, height,
"CanvasControl");}
1559 LWControl *
AddDragButton (
const char *title,
int width,
int height){
return AddArea(title, width, height,
"DragButtonControl");}
1582 LWControl *
AddDragArea (
const char *title,
int width,
int height){
return AddArea(title, width, height,
"DragAreaControl");}
1592 LWControl *
AddBorder (
const char *title,
int width,
int height){
return AddArea(title, width, height,
"BorderControl");}
1601 LWControl *
AddChannel (
const char *title,
int width,
int height){
return AddArea(title, width, height,
"ChannelControl");}
1613 LWPanControlDesc desc;
1614 desc.type = LWT_RANGE;
1615 desc.area.width=width;
1616 desc.area.height=height;
1617 return addControl(
"PaletteControl", &desc, title);
1627 LWPanControlDesc desc;
1628 desc.type = LWT_RANGE;
1631 return addControl(
"PercentControl", &desc, title);
1642 LWPanControlDesc desc;
1643 desc.type = LWT_RANGE;
1646 return addControl(
"AngleControl", &desc, title);
1676 LWControl *
AddCustomPopup (
const char *title,
int width,
int (*count)(
void *),
char *(*name)(
void *,
int))
1678 LWPanControlDesc desc;
1679 desc.type = LWT_POPUP;
1680 desc.popup.width=width;
1681 desc.popup.nameFn=name;
1682 desc.popup.countFn=count;
1683 return addControl(
"CustomPopupControl", &desc, title);
1711 template<
typename T>
1714 LWPanControlDesc desc;
1715 desc.type = LWT_POPUP;
1716 desc.popup.width=width;
1736 LWPanControlDesc desc;
1737 desc.type = LWT_CHOICE;
1738 desc.choice.vertical=MX_POPUP;
1739 desc.choice.items=items;
1740 return addControl(
"PopDownControl", &desc, title);
1751 LWControl *
AddTabs (
const char *title,
const char **items)
1753 LWPanControlDesc desc;
1754 desc.type = LWT_CHOICE;
1755 desc.choice.vertical=MX_HCHOICE;
1756 desc.choice.items=items;
1757 return addControl(
"TabChoiceControl", &desc, title);
1865 LWPanControlDesc desc;
1866 desc.type = LWT_XPANEL;
1867 desc.xpanel.xpan=xp;
1868 return addControl(
"XPanelControl", &desc, title);
1901 LWControl *
AddListbox (
const std::string &title,
int width,
int (*count)(
void *),
char *(*name)(
void *,
int),
int items,
int topVisible = 0)
1903 LWPanControlDesc desc;
1904 desc.type = LWT_POPUP;
1905 desc.listbox.width=width;
1906 desc.listbox.nameFn=name;
1907 desc.listbox.countFn=count;
1908 desc.listbox.visItems=items;
1909 desc.listbox.top = topVisible;
1910 return addControl(
"ListBoxControl", &desc, title.c_str());
2026 template<
typename T>
2027 LWControl *
AddListbox (
const std::string &title,
int width,
int items,
int topVisible = 0)
2029 LWPanControlDesc desc;
2030 desc.type = LWT_POPUP;
2031 desc.listbox.width=width;
2034 desc.listbox.visItems=items;
2035 desc.listbox.top = topVisible;
2040 template<
typename T>
2043 LWPanControlDesc desc;
2044 desc.type = LWT_POPUP;
2045 desc.listbox.width=width;
2048 desc.listbox.visItems=items;
2049 desc.listbox.top = topVisible;
2050 control =
addControl(
"ListBoxControl", &desc, title.c_str());
2053 template<
typename T>
2056 LWPanControlDesc desc;
2057 desc.type = LWT_POPUP;
2058 desc.listbox.width=width;
2061 desc.listbox.visItems=items;
2062 desc.listbox.top = topVisible;
2063 control =
addControl(
"ListBoxControl", &desc, 0);
2075 template<
typename T>
2078 LWPanControlDesc desc;
2079 desc.type = LWT_POPUP;
2080 desc.listbox.width=width;
2083 desc.listbox.visItems=items;
2084 desc.listbox.top = topVisible;
2276 int (*count)(
void *),
2277 char *(*name)(
void *,
int,
int),
2278 int (*colwidth)(
void *,
int i))
2280 LWPanControlDesc desc;
2281 desc.type = LWT_MLIST;
2282 desc.multiList.width=width;
2283 desc.multiList.nameFn=name;
2284 desc.multiList.countFn=count;
2285 desc.multiList.visItems = items;
2286 desc.multiList.top = topVisible;
2287 desc.multiList.colWidth=colwidth;
2288 return addControl(
"MultiListBoxControl", &desc, title);
2459 template<
typename T>
2462 LWPanControlDesc desc;
2463 desc.type = LWT_MLIST;
2464 desc.multiList.width=width;
2465 desc.multiList.visItems=items;
2466 desc.multiList.top=topVisible;
2475 template<
typename T>
2478 LWPanControlDesc desc;
2479 desc.type = LWT_MLIST;
2480 desc.multiList.width=width;
2481 desc.multiList.visItems=items;
2482 desc.multiList.top=topVisible;
2486 control =
addControl(
"MultiListBoxControl", &desc, title);
2492 template<
typename T>
2493 LWControl *
AddTree (
const char *title,
int width,
int height)
2495 LWPanControlDesc desc;
2496 desc.type = LWT_TREE;
2497 desc.tree.width=width;
2498 desc.tree.height=height;
2508 LWControl *
AddTree (
const char *title,
int width,
int height,
2509 int (*count)(
void *data,
void *node),
2510 void *(*leaf)(
void *data,
void *node,
int i),
2511 char *(*info)(
void *data,
void *node,
int *nodeFlags),
2512 void (*move)(
void *data,
void *node,
void *parentNode,
int i) = 0
2515 LWPanControlDesc desc;
2516 desc.type = LWT_TREE;
2517 desc.tree.width=width;
2518 desc.tree.height=height;
2519 desc.tree.infoFn=info;
2520 desc.tree.countFn=count;
2521 desc.tree.leafFn=leaf;
2522 desc.tree.moveFn=move;
2523 return addControl(
"TreeControl", &desc, title);
2548 return pval.ptr.ptr;
2585 template <
typename T>
2601 template<
typename T>
static void cb_PanDraw(LWPanelID
id,
void *userdata, DrMode DrawMode)
2603 if (T *instance = static_cast<T *>(userdata))
2605 instance->panelDraw(
LWPanel(
id), DrawMode);
2610 template<
typename T>
static void cb_PanActivate(LWPanelID
id,
void *userdata);
2613 template<
typename T>
static void cb_PanOpen(LWPanelID
id,
void *userdata);
2616 template<
typename T>
static void cb_PanClose(LWPanelID
id,
void *userdata);
2619 template<
typename T>
static int cb_PanKeyDown (LWPanelID
id,
void *userdata, LWDualKey key);
2622 template<
typename T>
static int cb_PanKeyUp (LWPanelID
id,
void *userdata, LWDualKey key);
2625 template<
typename T>
static void cb_PanMouseButton (LWPanelID
id,
void *userdata,
int qualifiers,
int x,
int y);
2628 template<
typename T>
static void cb_PanMouseMove (LWPanelID
id,
void *userdata,
int qualifiers,
int x,
int y);
2630 template<
typename T>
static void cb_PanResize (LWPanelID
id,
void *userdata,
int w,
int h);
2658 id =
globPtr->create(w, h, flags);
2662 globPtr->drawPixel(
id, c, x, y);
2666 globPtr->drawRGBPixel(
id, r, g, b, x, y);
2670 lastX = x; lastY = y;
2679 globPtr->drawLine(
id, c, x1, y1, x2, y2);
2683 globPtr->drawBox(
id, c, x, y, w, h);
2685 void drawBox(
int r,
int g,
int b,
int x,
int y,
int w,
int h)
2687 globPtr->drawRGBBox(
id, r, g, b, x, y, w, h);
2690 void drawRoundBox(
int c,
int x,
int y,
int w,
int h,
int bevel = 2);
2692 void fillRoundBox(
int c,
int x,
int y,
int w,
int h,
int bevel = 2);
2696 globPtr->eraseBox(
id, x, y, w, h);
2700 globPtr->drawBorder(
id, indent, x, y, w, h);
2704 globPtr->drawText(
id, const_cast<char *>(s.c_str()), c, x, y);
2706 void blitPanel(
int srcx,
int srcy, LWPanelID pan,
int destx,
int desty,
int w,
int h)
2708 globPtr->blitPanel(
id, srcx, srcy, pan, destx, desty, w, h);
2714 void blitRaster(LWRasterID raster,
int srcx,
int srcy,
int destx,
int desty,
int w,
int h)
2716 globPtr->blitRaster(
id, srcx, srcy, raster, destx, desty, w, h);
2720 blitRaster(raster.id, srcx, srcy, destx, desty, w, h);
2749 template<
typename T>
2755 return static_cast<T *
>(panel.GetUserData());
2762 template <
typename T>
2766 if (T *eventHandler = getEventHandler<T>(control))
2768 eventHandler->controlEvent(control);
2772 template <
typename T>
2776 if (T *eventHandler = getEventHandler<T>(control))
2778 eventHandler->controlDraw(control, mode);
2782 template <
typename T>
2785 PanelControl control(static_cast<LWControlID>(userdata));
2786 if (T *eventHandler = getEventHandler<T>(control))
2788 return eventHandler->controlCount(control);
2793 template <
typename T>
2796 PanelControl control(static_cast<LWControlID>(userdata));
2797 if (T *eventHandler = getEventHandler<T>(control))
2799 return const_cast<char *
>(eventHandler->controlName(control, index));
2801 return const_cast<char *
>(
"");
2804 template <
typename T>
2807 PanelControl control(static_cast<LWControlID>(userdata));
2808 if (T *eventHandler = getEventHandler<T>(control))
2810 return const_cast<char *
>(eventHandler->controlMultiListName(control, index, column));
2812 return const_cast<char *
>(
"");
2815 template <
typename T>
2818 PanelControl control(static_cast<LWControlID>(userdata));
2819 if (T *eventHandler = getEventHandler<T>(control))
2821 return eventHandler->controlMultiListColumnWidth(control, index);
2826 template <
typename T>
2829 PanelControl control(static_cast<LWControlID>(userdata));
2830 if (T *eventHandler = getEventHandler<T>(control))
2832 return eventHandler->controlTreeChild(control, (
PanelTreeNode *)node, i);
2837 template <
typename T>
2840 PanelControl control(static_cast<LWControlID>(userdata));
2841 if (T *eventHandler = getEventHandler<T>(control))
2843 return eventHandler->controlTreeCount(control, (
PanelTreeNode *)node);
2848 template <
typename T>
2851 PanelControl control(static_cast<LWControlID>(userdata));
2852 if (T *eventHandler = getEventHandler<T>(control))
2854 return const_cast<char *
>(eventHandler->controlTreeInfo(control, (
PanelTreeNode *)node, flags));
2856 return const_cast<char *
>(
"");
2859 template <
typename T>
2862 PanelControl control(static_cast<LWControlID>(userdata));
2863 if (T *eventHandler = getEventHandler<T>(control))
2865 eventHandler->controlTreeMove(control, (
PanelTreeNode *)node, parent, i);
2875 template<
typename T>
2878 if (T *instance = static_cast<T *>(userdata))
2880 instance->panelActivate(
LWPanel(
id));
2884 template<
typename T>
2887 if (T *instance = static_cast<T *>(userdata))
2889 instance->panelOpen(
LWPanel(
id));
2893 template<
typename T>
2896 if (T *instance = static_cast<T *>(userdata))
2898 instance->panelClose(
LWPanel(
id));
2902 template<
typename T>
2905 if (T *instance = static_cast<T *>(userdata))
2907 return instance->panelKeyDown(
LWPanel(
id), key);
2912 template<
typename T>
2915 if (T *instance = static_cast<T *>(userdata))
2917 return instance->panelKeyUp(
LWPanel(
id),key);
2923 template<
typename T>
2926 if (T *instance = static_cast<T *>(userdata))
2928 return instance->panelMouseButton(
LWPanel(
id), qualifiers, x, y);
2932 template<
typename T>
2935 if (T *instance = static_cast<T *>(userdata))
2937 instance->panelMouseMove(
LWPanel(
id), qualifiers, x, y);
2942 template<
typename T>
2945 if (T *instance = static_cast<T *>(userdata))
2947 instance->panelResize(
LWPanel(
id), w, h);
2960 const unsigned char *image;
2965 void draw(LWControlID control, DrMode drawmode);
2967 AboutPanel(
const std::string title,
const char**message,
const unsigned char *_image = 0,
int w = 0,
int h = 0);
2970 static void UserDraw( LWControlID control,
void *userdata, DrMode drawmode );
2983 LogPanel(
const std::string &title,
int width = 600,
int height = 20)
2984 :
LWPanel (title), w(width), h(height)
2986 void Open(
const std::string &name);
3000 bool isMouseDown()
const {
return (mQualifier & MOUSE_DOWN) == MOUSE_DOWN;}
3001 bool isCtrl()
const {
return (mQualifier & IQ_CTRL) == IQ_CTRL;}
3002 bool isShift()
const {
return (mQualifier & IQ_SHIFT) == IQ_SHIFT;}
3003 bool isAlt()
const {
return (mQualifier & IQ_ALT) == IQ_ALT;}
3004 bool isConstrain()
const {
return (mQualifier & IQ_CONSTRAIN) == IQ_CONSTRAIN;}
3005 bool isAdjust()
const {
return (mQualifier & IQ_ADJUST) == IQ_ADJUST;}
3010 #endif // LWPP_PANEL_H