⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbutton.cpp

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CPP
字号:
/***************************************************************************  CButton.cpp  The Button and ToggleButton  class  (c) 2000-2003 Beno� 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.***************************************************************************/#define __CBUTTON_CPP#include <qapplication.h>#include <qevent.h>#include <qframe.h>#include <qpushbutton.h>#include <qtoolbutton.h>#include <qsizepolicy.h>#include <qiconset.h>#include <qlayout.h>#include "gambas.h"#include "CWidget.h"#include "CPicture.h"#include "CWindow.h"#include "CButton.h"/*#define DEBUG_CBUTTON*/DECLARE_EVENT(EVENT_Click);DECLARE_EVENT(EVENT_ClickToggle);DECLARE_EVENT(EVENT_ClickTool);BEGIN_METHOD(CBUTTON_new, GB_OBJECT parent)  MyPushButton *wid = new MyPushButton(CONTAINER(VARG(parent)));  QObject::connect(wid, SIGNAL(clicked()), &CButton::manager, SLOT(clicked()));  CWIDGET_new(wid, (void *)_object, "Button");  OBJECT(CBUTTON)->picture = NULL;  //wid->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));  wid->setAutoDefault(false);  wid->show();END_METHODBEGIN_METHOD(CTOGGLEBUTTON_new, GB_OBJECT parent)  QPushButton *wid = new MyPushButton(CONTAINER(VARG(parent)));  QObject::connect(wid, SIGNAL(toggled(bool)), &CButton::manager, SLOT(clickedToggle()));  CWIDGET_new(wid, (void *)_object, "ToggleButton");  OBJECT(CBUTTON)->picture = NULL;  //wid->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));  wid->setAutoDefault(false);  wid->setToggleButton(TRUE);  wid->show();END_METHODBEGIN_METHOD(CTOOLBUTTON_new, GB_OBJECT parent)  QToolButton *wid = new QToolButton(CONTAINER(VARG(parent)));  QObject::connect(wid, SIGNAL(clicked()), &CButton::manager, SLOT(clickedTool()));  CWIDGET_new(wid, (void *)_object);  //wid->setToggleButton(TRUE);  wid->setTextPosition(QToolButton::Right);  wid->setAutoRaise(true);  wid->show();END_METHOD/*BEGIN_METHOD(CTOOLBUTTON_new, void *parent)  QToolButton *wid = new QToolButton(CONTAINER(PARAM(parent)));  QObject::connect(wid, SIGNAL(clicked()), &CButton::manager, SLOT(clickedTool()));  CWIDGET_new(wid, (void *)_object, "ToolButton");  OBJECT(CBUTTON)->picture = NULL;  wid->show();END_METHOD*/BEGIN_METHOD_VOID(CBUTTON_free)  CLEAR_PICTURE(&(OBJECT(CBUTTON)->picture));  //CALL_METHOD_VOID(CWIDGET_delete);END_METHODstatic void set_button(CBUTTON *_object, const char *text){  QPixmap p;  QString qtext;  if (text == NULL)    qtext = WIDGET->text();  else    qtext = TO_QSTRING(text);  if (THIS->picture)  {    p = *(THIS->picture->pixmap);    WIDGET->setText(qtext);    if (qtext.length())    {      WIDGET->setIconSet(QIconSet(p, QIconSet::Small));    }    else    {      WIDGET->setPixmap(p);      if (WIDGET->iconSet())        WIDGET->setIconSet(QIconSet());    }  }  else  {    if (WIDGET->pixmap())      WIDGET->setPixmap(QPixmap());    if (WIDGET->iconSet())      WIDGET->setIconSet(QIconSet());    WIDGET->setText(qtext);  }  WIDGET->calcMinimumHeight();}static void set_tool_button(CBUTTON *_object, const char *text){  QPixmap p;  QString qtext;  if (text == NULL)    qtext = WIDGET_TOOL->textLabel();  else    qtext = TO_QSTRING(text);  if (THIS->picture)  {    p = *(THIS->picture->pixmap);    WIDGET_TOOL->setTextLabel(qtext);    WIDGET_TOOL->setIconSet(QIconSet(p, QIconSet::Small));    WIDGET_TOOL->setUsesTextLabel(qtext.length() > 0);  }  else  {    WIDGET_TOOL->setIconSet(QIconSet());    WIDGET_TOOL->setTextLabel(qtext);    WIDGET_TOOL->setUsesTextLabel(qtext.length() > 0);  }  CWidget::resetTooltip((CWIDGET *)_object);}BEGIN_PROPERTY(CBUTTON_text)  if (READ_PROPERTY)    GB.ReturnNewZeroString(TO_UTF8(WIDGET->text()));  else    set_button(THIS, GB.ToZeroString(PROP(GB_STRING)));END_PROPERTYBEGIN_PROPERTY(CBUTTON_picture)  if (READ_PROPERTY)    GB.ReturnObject(THIS->picture);  else  {    GB.StoreObject(PROP(GB_OBJECT), (void **)&(THIS->picture));    set_button(THIS, NULL);  }END_PROPERTYBEGIN_PROPERTY(CTOOLBUTTON_text)  if (READ_PROPERTY)    GB.ReturnNewZeroString(TO_UTF8(WIDGET->text()));  else    set_tool_button(THIS, GB.ToZeroString(PROP(GB_STRING)));END_PROPERTYBEGIN_PROPERTY(CTOOLBUTTON_picture)  if (READ_PROPERTY)    GB.ReturnObject(THIS->picture);  else  {    GB.StoreObject(PROP(GB_OBJECT), (void **)&(THIS->picture));    set_tool_button(THIS, NULL);  }END_PROPERTY/*BEGIN_PROPERTY(CTOOLBUTTON_picture)  QToolButton *wid = QTOOLBUTTON(_object);  char **pict = (char **)&(OBJECT(CBUTTON)->picture);  if (READ_PROPERTY)    GB.ReturnString(*pict, 0);  else    wid->setIconSet(QIconSet(*PIXMAP_set_widget(PROPERTY(GB_STRING), pict), QIconSet::Small));END_PROPERTY*/BEGIN_PROPERTY(CBUTTON_value)  if (READ_PROPERTY)    GB.ReturnBoolean(0);  else if (VPROP(GB_BOOLEAN))    WIDGET->animateClick();END_PROPERTYBEGIN_PROPERTY(CTOGGLEBUTTON_value)  if (READ_PROPERTY)    GB.ReturnBoolean(WIDGET->isOn());  else    WIDGET->setOn(VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CTOOLBUTTON_value)  if (READ_PROPERTY)    GB.ReturnBoolean(WIDGET_TOOL->isOn());  else  {    WIDGET_TOOL->setOn(VPROP(GB_BOOLEAN));    qApp->postEvent(WIDGET_TOOL, new QEvent(QEvent::Leave));  }END_PROPERTYBEGIN_PROPERTY(CBUTTON_flat)  if (READ_PROPERTY)    GB.ReturnBoolean(WIDGET->isFlat());  else    WIDGET->setFlat(VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CBUTTON_border)  if (READ_PROPERTY)    GB.ReturnBoolean(!WIDGET->isFlat());  else    WIDGET->setFlat(!VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CTOOLBUTTON_border)  if (READ_PROPERTY)    GB.ReturnBoolean(!WIDGET_TOOL->autoRaise());  else    WIDGET_TOOL->setAutoRaise(!VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CTOOLBUTTON_toggle)  if (READ_PROPERTY)    GB.ReturnBoolean(WIDGET_TOOL->isToggleButton());  else    WIDGET_TOOL->setToggleButton(VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CBUTTON_default)  MyMainWindow *top = (MyMainWindow *)WIDGET->topLevelWidget();  if (READ_PROPERTY)    GB.ReturnBoolean(top->defaultButton() == WIDGET);  else    top->setDefaultButton(WIDGET, VPROP(GB_BOOLEAN));END_PROPERTYBEGIN_PROPERTY(CBUTTON_cancel)  MyMainWindow *top = (MyMainWindow *)WIDGET->topLevelWidget();  if (READ_PROPERTY)    GB.ReturnBoolean(top->cancelButton() == WIDGET);  else    top->setCancelButton(WIDGET, VPROP(GB_BOOLEAN));END_PROPERTYGB_DESC CButtonDesc[] ={  GB_DECLARE("Button", sizeof(CBUTTON)), GB_INHERITS("Control"),  GB_METHOD("_new", NULL, CBUTTON_new, "(Parent)Container;"),  GB_METHOD("_free", NULL, CBUTTON_free, NULL),  GB_PROPERTY("Text", "s", CBUTTON_text),  GB_PROPERTY("Caption", "s", CBUTTON_text),  GB_PROPERTY("Picture", "Picture", CBUTTON_picture),  //GB_PROPERTY("Flat", "b", CBUTTON_flat),  GB_PROPERTY("Border", "b", CBUTTON_border),  GB_PROPERTY("Default", "b", CBUTTON_default),  GB_PROPERTY("Cancel", "b", CBUTTON_cancel),  GB_PROPERTY("Value", "b", CBUTTON_value),  GB_CONSTANT("_Properties", "s", CBUTTON_PROPERTIES),  GB_CONSTANT("_DefaultEvent", "s", "Click"),  GB_EVENT("Click", NULL, NULL, &EVENT_Click),  GB_END_DECLARE};GB_DESC CToggleButtonDesc[] ={  GB_DECLARE("ToggleButton", sizeof(CBUTTON)), GB_INHERITS("Control"),  GB_METHOD("_new", NULL, CTOGGLEBUTTON_new, "(Parent)Container;"),  GB_METHOD("_free", NULL, CBUTTON_free, NULL),  GB_PROPERTY("Text", "s", CBUTTON_text),  GB_PROPERTY("Caption", "s", CBUTTON_text),  GB_PROPERTY("Picture", "Picture", CBUTTON_picture),  GB_PROPERTY("Value", "b", CTOGGLEBUTTON_value),  //GB_PROPERTY("Flat", "b", CBUTTON_flat),  GB_PROPERTY("Border", "b", CBUTTON_border),  GB_CONSTANT("_Properties", "s", CTOGGLEBUTTON_PROPERTIES),  GB_CONSTANT("_DefaultEvent", "s", "Click"),  GB_EVENT("Click", NULL, NULL, &EVENT_ClickToggle),  GB_END_DECLARE};GB_DESC CToolButtonDesc[] ={  GB_DECLARE("ToolButton", sizeof(CBUTTON)), GB_INHERITS("Control"),  GB_METHOD("_new", NULL, CTOOLBUTTON_new, "(Parent)Container;"),  GB_METHOD("_free", NULL, CBUTTON_free, NULL),  GB_PROPERTY("Text", "s", CTOOLBUTTON_text),  GB_PROPERTY("Caption", "s", CTOOLBUTTON_text),  GB_PROPERTY("Picture", "Picture", CTOOLBUTTON_picture),  GB_PROPERTY("Value", "b", CTOOLBUTTON_value),  GB_PROPERTY("Toggle", "b", CTOOLBUTTON_toggle),  GB_PROPERTY("Border", "b", CTOOLBUTTON_border),  GB_CONSTANT("_Properties", "s", CTOOLBUTTON_PROPERTIES),  GB_CONSTANT("_DefaultEvent", "s", "Click"),  GB_EVENT("Click", NULL, NULL, &EVENT_ClickTool),  GB_END_DECLARE};/***************************************************************************  class MyPushButton***************************************************************************/MyPushButton::MyPushButton(QWidget *parent) :  QPushButton(parent){  //if (layout())  //  layout()->setResizeMode(QLayout::FreeResize);  calcMinimumHeight();}MyPushButton::~MyPushButton(){  MyMainWindow *top = (MyMainWindow *)(this->topLevelWidget());  top->setDefaultButton(this, false);  top->setCancelButton(this, false);}/*QSize MyPushButton::sizeHint(void) const{  return QSize(width(), height());}*/void MyPushButton::fontChange(const QFont &font){  QWidget::fontChange(font);  calcMinimumHeight();}void MyPushButton::calcMinimumHeight(){  if (text().length())  {    QFontMetrics fm = fontMetrics();    setMinimumHeight(fm.lineSpacing() + 4);  }  else    setMinimumHeight(0);}/* Class CButton */CButton CButton::manager;void CButton::clicked(void){  RAISE_EVENT(EVENT_Click);}void CButton::clickedToggle(void){  RAISE_EVENT(EVENT_ClickToggle);}void CButton::clickedTool(void){  RAISE_EVENT(EVENT_ClickTool);}/*GB_DESC CToolButtonDesc[] ={  GB_DECLARE("ToolButton", sizeof(CBUTTON)), GB_INHERITS("Control"),  GB_METHOD("_new", NULL, CTOOLBUTTON_new, "Container;"),  GB_METHOD("_free", NULL, CBUTTON_delete, NULL),  GB_PROPERTY("Text", "s", CBUTTON_text),  GB_PROPERTY("Caption", "s", CBUTTON_text),  GB_PROPERTY("Picture", "s", CTOOLBUTTON_picture),  GB_PROPERTY("Value", "b", CBUTTON_value),  GB_PROPERTY("Flat", "b", CBUTTON_flat),  GB_EVENT("Click", NULL, NULL, &EVENT_ClickTool),  GB_END_DECLARE};*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -