📄 cwidget.cpp
字号:
if (current) GB.ReturnObject(CWidget::get(current)); else GB.ReturnNull();END_PROPERTYBEGIN_METHOD(CWIDGET_refresh, GB_INTEGER x; GB_INTEGER y; GB_INTEGER w; GB_INTEGER h) int x, y, w, h; if (!MISSING(x) && !MISSING(y)) { x = VARG(x); y = VARG(y); w = VARGOPT(w, QWIDGET(_object)->width()); h = VARGOPT(h, QWIDGET(_object)->height()); QWIDGET(_object)->repaint(x, y, w, h); } else QWIDGET(_object)->repaint();END_METHODBEGIN_METHOD_VOID(CWIDGET_set_focus) QWidget *toplevel; CWINDOW *win; toplevel = WIDGET->topLevelWidget(); if (toplevel->isVisible()) WIDGET->setFocus(); else if (toplevel != WIDGET) { win = (CWINDOW *)CWidget::get(toplevel); GB.Unref((void **)&win->focus); win->focus = THIS; GB.Ref(THIS); }END_METHODBEGIN_PROPERTY(CWIDGET_tag) if (READ_PROPERTY) GB.ReturnPtr(GB_T_VARIANT, &OBJECT(CWIDGET)->tag); else { GB.StoreVariant(PROP(GB_VARIANT), (void *)&(OBJECT(CWIDGET)->tag)); //printf("Set Tag %p : %i\n", _object, OBJECT(CWIDGET)->tag.type); }END_METHODBEGIN_PROPERTY(CWIDGET_mouse) QWidget *wid = QWIDGET(_object); int shape; if (READ_PROPERTY) { if (wid->ownCursor()) { shape = wid->cursor().shape(); if (shape == Qt::BitmapCursor) GB.ReturnInteger(CMOUSE_CUSTOM); else GB.ReturnInteger(shape); } else GB.ReturnInteger(CMOUSE_DEFAULT); } else set_mouse(wid, VPROP(GB_INTEGER), THIS->cursor);END_METHODBEGIN_PROPERTY(CWIDGET_cursor) if (READ_PROPERTY) GB.ReturnObject(THIS->cursor); else { GB.StoreObject(PROP(GB_OBJECT), &THIS->cursor); set_mouse(WIDGET, CMOUSE_CUSTOM, THIS->cursor); }END_PROPERTY#if 0/*static QColor get_background(CWIDGET *_object, QWidget *wid){ QPalette pal(wid->palette()); QColorGroup::ColorRole role = (QColorGroup::ColorRole)OBJECT(CWIDGET)->background; return pal.color(QPalette::Active, role);}static void test_color(CWIDGET *_object, QWidget *wid){ QColor b, f, bp, fp; if (!wid->ownPalette() || !wid->parentWidget()) return; f = wid->paletteForegroundColor(); fp = wid->parentWidget()->paletteForegroundColor(); if (f != fp) return; b = get_background(_object, wid); bp = get_background(CWidget::get(wid->parentWidget()), wid->parentWidget()); if (b != bp) return; wid->unsetPalette();}*/BEGIN_PROPERTY(CWIDGET_background) QWidget *wid = QWIDGET(_object); QPalette pal(wid->palette()); QColorGroup::ColorRole role = (QColorGroup::ColorRole)OBJECT(CWIDGET)->background; //qDebug("bm = %d (%d %d)", wid->backgroundMode(), QWidget::PaletteButton, QWidget::PaletteBase); if (READ_PROPERTY) GB.ReturnInteger(pal.color(QPalette::Active, role).rgb() & 0xFFFFFF); else { pal.setColor(role, QColor((QRgb)VPROP(GB_INTEGER))); wid->setPalette(pal); //test_color((CWIDGET *)_object, wid); }#if 0 if (READ_PROPERTY) GB.ReturnInteger((long)(WIDGET->paletteBackgroundColor().rgb() & 0xFFFFFF)); else WIDGET->setPaletteBackgroundColor(QColor((QRgb)PROPERTY(long)));#endifEND_PROPERTYBEGIN_PROPERTY(CWIDGET_foreground) QWidget *wid; if (GB.Is(_object, GB.FindClass("Container"))) wid = ((CCONTAINER *)_object)->container; else wid = QWIDGET(_object); if (READ_PROPERTY) { GB.ReturnInteger((long)(wid->paletteForegroundColor().rgb() & 0xFFFFFF)); return; } else { QPalette pal(QWIDGET(_object)->palette()); pal.setColor(QColorGroup::Foreground, QColor((QRgb)VPROP(GB_INTEGER))); pal.setColor(QColorGroup::Text, QColor((QRgb)VPROP(GB_INTEGER))); wid->setPalette(pal); //test_color((CWIDGET *)_object, wid); }END_PROPERTY#endifBEGIN_PROPERTY(CWIDGET_background) if (READ_PROPERTY) GB.ReturnInteger(WIDGET->paletteBackgroundColor().rgb() & 0xFFFFFF); else WIDGET->setPaletteBackgroundColor(QColor((QRgb)VPROP(GB_INTEGER)));END_PROPERTYBEGIN_PROPERTY(CWIDGET_foreground) if (READ_PROPERTY) GB.ReturnInteger(WIDGET->paletteForegroundColor().rgb() & 0xFFFFFF); else WIDGET->setPaletteForegroundColor(QColor((QRgb)VPROP(GB_INTEGER)));END_PROPERTYBEGIN_PROPERTY(CWIDGET_parent) QWidget *parent = QWIDGET(_object)->parentWidget(); if (!parent) GB.ReturnObject(NULL); else GB.ReturnObject(CWidget::get(parent));END_PROPERTYBEGIN_PROPERTY(CWIDGET_window) QWidget *wid = WIDGET->topLevelWidget(); if (!wid) GB.ReturnObject(NULL); else GB.ReturnObject(CWidget::get(wid));END_PROPERTYBEGIN_PROPERTY(CWIDGET_id) GB.ReturnInteger((long)WIDGET->winId());END_PROPERTYBEGIN_PROPERTY(CWIDGET_tooltip) char *tooltip; QWidget *w; if (READ_PROPERTY) GB.ReturnString(THIS->tooltip); else { GB.StoreString(PROP(GB_STRING), &(THIS->tooltip)); w = WIDGET; if (w->inherits("QScrollView")) w = ((QScrollView *)w)->viewport(); tooltip = THIS->tooltip; if (tooltip) QToolTip::add(w, TO_QSTRING(tooltip)); else QToolTip::remove(w); }END_PROPERTYBEGIN_METHOD_VOID(CWIDGET_grab) GB.ReturnObject(CPICTURE_grab(QWIDGET(_object)));END_METHODBEGIN_METHOD(CWIDGET_drag, GB_VARIANT data; GB_STRING format) CDRAG_drag(OBJECT(CWIDGET), &VARG(data), MISSING(format) ? NULL : ARG(format));END_METHODBEGIN_PROPERTY(CWIDGET_drop) if (READ_PROPERTY) GB.ReturnBoolean(WIDGET->acceptDrops()); else { WIDGET->setAcceptDrops(VPROP(GB_BOOLEAN)); if (WIDGET->inherits("QScrollView")) ((QScrollView *)WIDGET)->viewport()->setAcceptDrops(VPROP(GB_BOOLEAN)); }END_PROPERTYBEGIN_PROPERTY(CWIDGET_border_full) QFrame *wid = (QFrame *)QWIDGET(_object); int border, lw; if (READ_PROPERTY) { if (wid->frameStyle() == (QFrame::Box + QFrame::Plain)) border = BORDER_PLAIN; else if (wid->frameStyle() == (QFrame::StyledPanel + QFrame::Sunken)) border = BORDER_SUNKEN; else if (wid->frameStyle() == (QFrame::StyledPanel + QFrame::Raised)) border = BORDER_RAISED; else if (wid->frameStyle() == (QFrame::Box + QFrame::Sunken)) border = BORDER_ETCHED; else border = BORDER_NONE; GB.ReturnInteger(border); } else { lw = 1; switch (VPROP(GB_INTEGER)) { case BORDER_PLAIN: border = QFrame::Box + QFrame::Plain; break; case BORDER_SUNKEN: border = QFrame::StyledPanel + QFrame::Sunken; lw = 2; break; case BORDER_RAISED: border = QFrame::StyledPanel + QFrame::Raised; lw = 2; break; case BORDER_ETCHED: border = QFrame::Box + QFrame::Sunken; break; default: border = QFrame::NoFrame; break; } wid->setFrameStyle(border); wid->setLineWidth(lw); wid->repaint(); }END_PROPERTYBEGIN_PROPERTY(CWIDGET_border_simple) QFrame *wid = (QFrame *)QWIDGET(_object); if (READ_PROPERTY) { GB.ReturnBoolean(wid->frameStyle() != QFrame::NoFrame); } else { //qDebug("frameStyle = %d", wid->frameStyle()); if (VPROP(GB_BOOLEAN)) { wid->setFrameStyle(QFrame::LineEditPanel + QFrame::Sunken); //wid->setFrameStyle(QFrame::LineEditPanel); //wid->setLineWidth(2); } else { wid->setFrameStyle(QFrame::NoFrame); } //qDebug("--> %d", wid->frameStyle()); wid->repaint(); }END_PROPERTYBEGIN_PROPERTY(CWIDGET_scrollbar) QScrollView *wid = (QScrollView *)QWIDGET(_object); long scroll; if (READ_PROPERTY) { scroll = 0; if (wid->hScrollBarMode() == QScrollView::Auto) scroll += 1; if (wid->vScrollBarMode() == QScrollView::Auto) scroll += 2; GB.ReturnInteger(scroll); } else { scroll = VPROP(GB_INTEGER) & 3; wid->setHScrollBarMode( (scroll & 1) ? QScrollView::Auto : QScrollView::AlwaysOff); wid->setVScrollBarMode( (scroll & 2) ? QScrollView::Auto : QScrollView::AlwaysOff); }END_PROPERTYGB_DESC CWidgetDesc[] ={ GB_DECLARE("Control", sizeof(CWIDGET)), GB_HOOK_NEW(NULL), GB_HOOK_CHECK(CWIDGET_check), GB_METHOD("_free", NULL, CWIDGET_delete, NULL), GB_METHOD("Move", NULL, CWIDGET_move, "(X)i(Y)i[(Width)i(Height)i]"), GB_METHOD("Resize", NULL, CWIDGET_resize, "(Width)i(Height)i"), GB_METHOD("Delete", NULL, CWIDGET_delete, NULL), GB_METHOD("Show", NULL, CWIDGET_show, NULL), GB_METHOD("Hide", NULL, CWIDGET_hide, NULL), GB_METHOD("Raise", NULL, CWIDGET_raise, NULL), GB_METHOD("Lower", NULL, CWIDGET_lower, NULL), //GB_METHOD("MoveUnder", NULL, CWIDGET_move_under, "(Control)Control;"), GB_PROPERTY_READ("Next", "Control", CWIDGET_next), GB_PROPERTY_READ("Previous", "Control", CWIDGET_previous), GB_METHOD("SetFocus", NULL, CWIDGET_set_focus, NULL), GB_METHOD("Refresh", NULL, CWIDGET_refresh, "[(X)i(Y)i(Width)i(Height)i]"), GB_METHOD("Grab", "Picture", CWIDGET_grab, NULL), GB_METHOD("Drag", NULL, CWIDGET_drag, "(Data)v[(Format)s]"), GB_PROPERTY("X", "i", CWIDGET_x), GB_PROPERTY("Y", "i", CWIDGET_y), GB_PROPERTY_READ("ScreenX", "i", CWIDGET_screen_x), GB_PROPERTY_READ("ScreenY", "i", CWIDGET_screen_y), GB_PROPERTY("W", "i", CWIDGET_w), GB_PROPERTY("H", "i", CWIDGET_h), GB_PROPERTY("Left", "i", CWIDGET_x), GB_PROPERTY("Top", "i", CWIDGET_y), GB_PROPERTY("Width", "i", CWIDGET_w), GB_PROPERTY("Height", "i", CWIDGET_h), //GB_PROPERTY("Name", "s", CWIDGET_name), GB_PROPERTY("Visible", "b", CWIDGET_visible), GB_PROPERTY("Enabled", "b", CWIDGET_enabled), GB_PROPERTY("Expand", "b", CWIDGET_expand), GB_PROPERTY("Font", "Font", CWIDGET_font), GB_PROPERTY("Background", "i", CWIDGET_background), GB_PROPERTY("BackColor", "i", CWIDGET_background), GB_PROPERTY("Foreground", "i", CWIDGET_foreground), GB_PROPERTY("ForeColor", "i", CWIDGET_foreground), GB_PROPERTY("Design", "b", CWIDGET_design), GB_PROPERTY("Tag", "v", CWIDGET_tag), GB_PROPERTY("Mouse", "i" MOUSE_CONSTANTS, CWIDGET_mouse), GB_PROPERTY("Cursor", "Cursor", CWIDGET_cursor), GB_PROPERTY("ToolTip", "s", CWIDGET_tooltip), GB_PROPERTY("Drop", "b", CWIDGET_drop), GB_PROPERTY_READ("Parent", "Container", CWIDGET_parent), GB_PROPERTY_READ("Window", "Window", CWIDGET_window), GB_PROPERTY_READ("Id", "i", CWIDGET_id), GB_PROPERTY_READ("Handle", "i", CWIDGET_id), //GB_EVENT("Delete", NULL, NULL, &EVENT_Destroy), GB_EVENT("Enter", NULL, NULL, &EVENT_Enter), GB_EVENT("GotFocus", NULL, NULL, &EVENT_GotFocus), GB_EVENT("LostFocus", NULL, NULL, &EVENT_LostFocus), GB_EVENT("KeyPress", NULL, NULL, &EVENT_KeyPress), GB_EVENT("KeyRelease", NULL, NULL, &EVENT_KeyRelease), GB_EVENT("Leave", NULL, NULL, &EVENT_Leave), GB_EVENT("MouseDown", NULL, NULL, &EVENT_MouseDown), GB_EVENT("MouseMove", NULL, NULL, &EVENT_MouseMove), GB_EVENT("MouseUp", NULL, NULL, &EVENT_MouseUp), GB_EVENT("MouseWheel", NULL, NULL, &EVENT_MouseWheel), GB_EVENT("DblClick", NULL, NULL, &EVENT_DblClick), GB_EVENT("Menu", NULL, NULL, &EVENT_Menu), GB_EVENT("Drag", NULL, NULL, &EVENT_Drag), GB_EVENT("DragMove", NULL, NULL, &EVENT_DragMove), GB_EVENT("Drop", NULL, NULL, &EVENT_Drop), //GB_EVENT("Move", NULL, NULL, &EVENT_Move), //GB_EVENT("Resize", NULL, NULL, &EVENT_Resize), //GB_EVENT("Show", "b", NULL, &EVENT_Show), //GB_EVENT("Hide", "b", NULL, &EVENT_Hide), GB_CONSTANT("_DefaultEvent", "s", "MouseDown"), GB_CONSTANT("_Properties", "s", CWIDGET_PROPERTIES), GB_END_DECLARE};/* Classe CWidget */CWidget CWidget::manager;QPtrDict<CWIDGET> CWidget::dict;bool CWidget::real;CWIDGET *CWidget::enter = NULL;//QPtrDict<char> CWidget::propDict;bool haveChildren;void CWidget::installFilter(QObject *o){ QObjectList *children; QObject *child; children = (QObjectList *)(o->children()); o->installEventFilter(&manager); if (!children) return; child = children->first(); while (child) { if (child->isWidgetType()) { haveChildren = true; //child->installEventFilter(&manager); CWidget::installFilter(child); } child = children->next(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -