43f26cd8ff
* NEW: gb.qt5 component. [EXAMPLES] * BUG: Fix WebBrowser example. [INTERPRETER] * NEW: Fix compilation of EXEC and SHELL for older bytecode versions. [GB.DB.FORM] * NEW: Display the busy mouse cursor while loading SQL data. [GB.QT4] * NEW: Support for QT5. [GB.QT5] * NEW: Initial version of the QT5 component. Not everything is working. There is no Embedder and TrayIcon controls. git-svn-id: svn://localhost/gambas/trunk@7062 867c0c6c-44f3-4631-809d-bfa615b0a4ec
182 lines
4.1 KiB
C++
182 lines
4.1 KiB
C++
/***************************************************************************
|
|
|
|
CCheckBox.cpp
|
|
|
|
(c) 2000-2013 Benoît Minisini <gambas@users.sourceforge.net>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA.
|
|
|
|
***************************************************************************/
|
|
|
|
#define __CCHECKBOX_CPP
|
|
|
|
#include "gambas.h"
|
|
|
|
#include <QResizeEvent>
|
|
|
|
#include "CCheckBox.h"
|
|
|
|
/** MyCheckBox *************************************************************/
|
|
|
|
MyCheckBox::MyCheckBox(QWidget *parent) : QCheckBox(parent)
|
|
{
|
|
_autoResize = false;
|
|
}
|
|
|
|
|
|
void MyCheckBox::changeEvent(QEvent *e)
|
|
{
|
|
QCheckBox::changeEvent(e);
|
|
if (e->type() == QEvent::FontChange || e->type() == QEvent::StyleChange)
|
|
adjust();
|
|
}
|
|
|
|
void MyCheckBox::adjust(bool force)
|
|
{
|
|
void *_object = CWidget::getReal(this);
|
|
bool a;
|
|
QSize hint;
|
|
|
|
if (!THIS || (!_autoResize && !force) || CWIDGET_test_flag(THIS, WF_DESIGN) || text().length() <= 0)
|
|
return;
|
|
|
|
a = _autoResize;
|
|
_autoResize = false;
|
|
hint = sizeHint();
|
|
CWIDGET_resize(THIS, hint.width(), qMax(hint.height(), height()));
|
|
_autoResize = a;
|
|
}
|
|
|
|
void MyCheckBox::resizeEvent(QResizeEvent *e)
|
|
{
|
|
QCheckBox::resizeEvent(e);
|
|
|
|
if (_autoResize && e->oldSize().width() != e->size().width())
|
|
adjust();
|
|
}
|
|
|
|
/** CheckBox ***************************************************************/
|
|
|
|
DECLARE_EVENT(EVENT_Click);
|
|
|
|
|
|
BEGIN_METHOD(CCHECKBOX_new, GB_OBJECT parent)
|
|
|
|
QCheckBox *wid = new MyCheckBox(QCONTAINER(VARG(parent)));
|
|
|
|
QObject::connect(wid, SIGNAL(stateChanged(int)), &CCheckBox::manager, SLOT(clicked()));
|
|
|
|
wid->setMinimumHeight(wid->sizeHint().height());
|
|
|
|
CWIDGET_new(wid, (void *)_object);
|
|
|
|
END_METHOD
|
|
|
|
|
|
BEGIN_PROPERTY(CheckBox_Text)
|
|
|
|
if (READ_PROPERTY)
|
|
RETURN_NEW_STRING(WIDGET->text());
|
|
else
|
|
{
|
|
WIDGET->setText(QSTRING_PROP());
|
|
WIDGET->adjust();
|
|
}
|
|
|
|
END_PROPERTY
|
|
|
|
|
|
BEGIN_PROPERTY(CheckBox_Value)
|
|
|
|
/*if (READ_PROPERTY)
|
|
GB.ReturnBoolean(WIDGET->isChecked());
|
|
else
|
|
WIDGET->setChecked(VPROP(GB_BOOLEAN));*/
|
|
|
|
if (READ_PROPERTY)
|
|
{
|
|
switch(WIDGET->checkState())
|
|
{
|
|
case Qt::Unchecked: GB.ReturnInteger(0); break;
|
|
case Qt::Checked: GB.ReturnInteger(-1); break;
|
|
case Qt::PartiallyChecked: GB.ReturnInteger(1); break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (WIDGET->isTristate() && VPROP(GB_INTEGER) == 1)
|
|
WIDGET->setCheckState(Qt::PartiallyChecked);
|
|
else
|
|
WIDGET->setCheckState(VPROP(GB_INTEGER) == 0 ? Qt::Unchecked : Qt::Checked);
|
|
}
|
|
|
|
END_PROPERTY
|
|
|
|
|
|
BEGIN_PROPERTY(CheckBox_TriState)
|
|
|
|
if (READ_PROPERTY)
|
|
GB.ReturnBoolean(WIDGET->isTristate());
|
|
else
|
|
WIDGET->setTristate(VPROP(GB_BOOLEAN));
|
|
|
|
END_PROPERTY
|
|
|
|
|
|
BEGIN_PROPERTY(CheckBox_AutoResize)
|
|
|
|
if (READ_PROPERTY)
|
|
GB.ReturnBoolean(WIDGET->isAutoResize());
|
|
else
|
|
WIDGET->setAutoResize(VPROP(GB_BOOLEAN));
|
|
|
|
END_PROPERTY
|
|
|
|
|
|
GB_DESC CCheckBoxDesc[] =
|
|
{
|
|
GB_DECLARE("CheckBox", sizeof(CCHECKBOX)), GB_INHERITS("Control"),
|
|
|
|
GB_METHOD("_new", NULL, CCHECKBOX_new, "(Parent)Container;"),
|
|
|
|
GB_CONSTANT("False", "i", 0),
|
|
GB_CONSTANT("True", "i", -1),
|
|
GB_CONSTANT("None", "i", 1),
|
|
|
|
GB_PROPERTY("Text", "s", CheckBox_Text),
|
|
GB_PROPERTY("Caption", "s", CheckBox_Text),
|
|
GB_PROPERTY("Value", "i", CheckBox_Value),
|
|
GB_PROPERTY("Tristate", "b", CheckBox_TriState),
|
|
GB_PROPERTY("AutoResize", "b", CheckBox_AutoResize),
|
|
|
|
CHECKBOX_DESCRIPTION,
|
|
|
|
GB_EVENT("Click", NULL, NULL, &EVENT_Click),
|
|
|
|
GB_END_DECLARE
|
|
};
|
|
|
|
|
|
/** CCheckBox *************************************************************/
|
|
|
|
CCheckBox CCheckBox::manager;
|
|
|
|
void CCheckBox::clicked(void)
|
|
{
|
|
RAISE_EVENT_ACTION(EVENT_Click);
|
|
}
|
|
|
|
|