Skip to content
Snippets Groups Projects
Commit 44a3f5f6 authored by gambas's avatar gambas
Browse files

Control.Parent now ignores the inner containers of Container controls made in Gambas.

[GB.GTK]
* NEW: Control.Parent now ignores the inner containers of Container controls made in Gambas.
* NEW: Control._Parent is the old Parent property renamed.

[GB.GTK3]
* NEW: Control.Parent now ignores the inner containers of Container controls made in Gambas.
* NEW: Control._Parent is the old Parent property renamed.

[GB.QT4]
* NEW: Control.Parent now ignores the inner containers of Container controls made in Gambas.
* NEW: Control._Parent is the old Parent property renamed.

[GB.QT5]
* NEW: Control.Parent now ignores the inner containers of Container controls made in Gambas.
* NEW: Control._Parent is the old Parent property renamed.
parent 9b779654
Branches
Tags
No related merge requests found
Pipeline #37179391 passed
......@@ -401,6 +401,8 @@ BEGIN_PROPERTY(UserControl_Container)
if (!ct)
{
if (THIS_CONT != THIS)
WIDGET_CONT->setProxyContainerFor(NULL);
THIS_UC->container = THIS;
WIDGET->setProxyContainer(NULL);
WIDGET->setProxy(NULL);
......@@ -432,16 +434,20 @@ BEGIN_PROPERTY(UserControl_Container)
return;
}
gColor bg = THIS_UC->container->ob.widget->background();
gColor fg = THIS_UC->container->ob.widget->foreground();
gColor bg = WIDGET_CONT->background();
gColor fg = WIDGET_CONT->foreground();
if (THIS_CONT != THIS)
WIDGET_CONT->setProxyContainerFor(NULL);
THIS_UC->container = (CCONTAINER *)GetObject(((gContainer *)ct->ob.widget)->proxyContainer());
WIDGET->setProxyContainer(WIDGET_CONT->proxyContainer());
WIDGET->setProxy(THIS_UC->container->ob.widget);
THIS_UC->container->ob.widget->setBackground(bg);
THIS_UC->container->ob.widget->setForeground(fg);
WIDGET->setProxyContainer(WIDGET_CONT->proxyContainer());
WIDGET->setProxy(WIDGET_CONT);
WIDGET_CONT->setProxyContainerFor(WIDGET);
WIDGET_CONT->setBackground(bg);
WIDGET_CONT->setForeground(fg);
WIDGET_CONT->performArrange();
END_PROPERTY
......
......@@ -787,7 +787,19 @@ BEGIN_PROPERTY(CWIDGET_foreground)
END_PROPERTY
BEGIN_PROPERTY(CWIDGET_parent)
BEGIN_PROPERTY(Control_Parent)
gContainer *parent = CONTROL->parent();
while (parent->proxyContainerFor())
parent = parent->proxyContainerFor();
GB.ReturnObject(GetObject(parent));
END_PROPERTY
BEGIN_PROPERTY(Control__Parent)
GB.ReturnObject(GetObject(CONTROL->parent()));
......@@ -988,7 +1000,8 @@ GB_DESC CWidgetDesc[] =
GB_PROPERTY("Proxy", "Control", Control_Proxy),
GB_PROPERTY("NoTabFocus", "b", Control_NoTabFocus),
GB_PROPERTY_READ("Parent", "Container", CWIDGET_parent),
GB_PROPERTY_READ("Parent", "Container", Control_Parent),
GB_PROPERTY_READ("_Parent", "Container", Control__Parent),
GB_PROPERTY_READ("Window", "Window", CWIDGET_window),
GB_PROPERTY_READ("Id", "i", CWIDGET_id),
GB_PROPERTY_READ("Handle", "i", CWIDGET_id),
......
......@@ -231,6 +231,7 @@ void gContainer::initialize()
onArrange = NULL;
onBeforeArrange = NULL;
_proxyContainer = NULL;
_proxyContainerFor = NULL;
_client_x = -1;
_client_y = -1;
_client_w = 0;
......
......@@ -107,7 +107,9 @@ public:
virtual void setVisible(bool vl);
gContainer *proxyContainer() { return _proxyContainer ? _proxyContainer : this; }
void setProxyContainer(gContainer *proxy) { if (_proxyContainer != this) _proxyContainer = proxy; else _proxyContainer = 0; }
void setProxyContainer(gContainer *proxy) { if (_proxyContainer != this) _proxyContainer = proxy; else _proxyContainer = NULL; }
gContainer *proxyContainerFor() { return _proxyContainerFor; }
void setProxyContainerFor(gContainer *proxy) { if (proxy != this) _proxyContainerFor = proxy; else _proxyContainerFor = NULL; }
void disableArrangement();
void enableArrangement();
......@@ -137,6 +139,7 @@ private:
void initialize();
gContainerArrangement arrangement;
gContainer *_proxyContainer;
gContainer *_proxyContainerFor;
unsigned _did_arrangement : 1;
unsigned _no_arrangement : 7;
};
......
......@@ -48,7 +48,7 @@ typedef
unsigned dirty : 1;
unsigned autoresize : 1;
unsigned invert : 1;
unsigned _reserved: 9;
unsigned _reserved: 8;
}
CARRANGEMENT;
......
......@@ -240,6 +240,19 @@ void *CWIDGET_get_parent(void *_object)
return CWidget::get(parent);
}
void *CWIDGET_get_parent_container(void *_object)
{
void *parent = CWIDGET_get_parent(THIS);
if (!parent)
return NULL;
if (EXT(parent) && EXT(parent)->container_for)
parent = EXT(parent)->container_for;
return parent;
}
int CWIDGET_get_handle(void *_object)
{
return (int)WIDGET->winId();
......@@ -1661,6 +1674,13 @@ END_PROPERTY
BEGIN_PROPERTY(Control_Parent)
GB.ReturnObject(CWIDGET_get_parent_container(THIS));
END_PROPERTY
BEGIN_PROPERTY(Control__Parent)
GB.ReturnObject(CWIDGET_get_parent(THIS));
END_PROPERTY
......@@ -3383,6 +3403,7 @@ GB_DESC CControlDesc[] =
GB_PROPERTY("NoTabFocus", "b", Control_NoTabFocus),
GB_PROPERTY_READ("Parent", "Container", Control_Parent),
GB_PROPERTY_READ("_Parent", "Container", Control__Parent),
GB_PROPERTY_READ("Window", "Window", Control_Window),
GB_PROPERTY_READ("Id", "i", Control_Id),
GB_PROPERTY_READ("Handle", "i", Control_Id),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment