From 8ca800097cebd4c21f9cc04b60e211da6d89da47 Mon Sep 17 00:00:00 2001 From: Noldor Date: Wed, 25 Feb 2009 17:32:51 +0000 Subject: Some fix/improvements in objects module git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3099 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/objects/class_button.cpp | 1 + src/modules/objects/class_datetimeedit.cpp | 93 +++++++++++-------------- src/modules/objects/class_datetimeedit.h | 8 ++- src/modules/objects/class_lineedit.cpp | 91 ++++++++++++++++++++++--- src/modules/objects/class_lineedit.h | 9 ++- src/modules/objects/class_painter.cpp | 105 ++++++++++++++++++++++++----- 6 files changed, 222 insertions(+), 85 deletions(-) (limited to 'src/modules/objects') diff --git a/src/modules/objects/class_button.cpp b/src/modules/objects/class_button.cpp index b4f450fed..282e3521c 100644 --- a/src/modules/objects/class_button.cpp +++ b/src/modules/objects/class_button.cpp @@ -64,6 +64,7 @@ @properties: !pr: $scaledContents() This property holds whether the label will scale its contents to fill all available space. + */ diff --git a/src/modules/objects/class_datetimeedit.cpp b/src/modules/objects/class_datetimeedit.cpp index 12d84005e..037b8e474 100644 --- a/src/modules/objects/class_datetimeedit.cpp +++ b/src/modules/objects/class_datetimeedit.cpp @@ -59,10 +59,10 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_datetimeedit,"datetimeedit","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,date) - /*KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,text) - KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,clickEvent) - KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,setImage) -*/ + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,setDate) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,setTime) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_datetimeedit,time) + KVSO_END_REGISTERCLASS(KviKvsObject_datetimeedit) KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_datetimeedit,KviKvsObject_widget) @@ -79,7 +79,6 @@ bool KviKvsObject_datetimeedit::init(KviKvsRunTimeContext *,KviKvsVariantList *) QDateTimeEdit *obj=new QDateTimeEdit(QDate::currentDate(),parentScriptWidget()); obj->setObjectName(getName()); setObject(obj,true); -// connect(widget(),SIGNAL(clicked()),this,SLOT(slotClicked())); return true; } @@ -96,63 +95,47 @@ KVSO_CLASS_FUNCTION(datetimeedit,date) return true; } -/* -KVSO_CLASS_FUNCTION(button,setText) +KVSO_CLASS_FUNCTION(datetimeedit,setDate) { - CHECK_INTERNAL_POINTER(widget()) - QString szText; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("text",KVS_PT_STRING,0,szText) - KVSO_PARAMETERS_END(c) - ((QPushButton *)widget())->setText(szText); - return true; -} -KVSO_CLASS_FUNCTION(datetimeedit,setImage) -{ - CHECK_INTERNAL_POINTER(widget()) - KviKvsVariant icon; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("icon_or_hobject",KVS_PT_VARIANT,0,icon) - KVSO_PARAMETERS_END(c) - if(icon.isHObject()) - { - kvs_hobject_t hObj; - icon.asHObject(hObj); - KviKvsObject *pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObj); - if (!pObject) - { - c->warning(__tr2qs_ctx("Pixmap parameter is not an object!","objects")); - return true; - } - if(pObject->inheritsClass("pixmap")) - ((QPushButton *)widget())->setIcon(QIcon(*((KviKvsObject_pixmap *)pObject)->getPixmap())); - else{ - c->warning(__tr2qs_ctx("Object Pixmap required!","object")); - } - return true; - } - QString szIcon; - icon.asString(szIcon); - QPixmap * pix = g_pIconManager->getImage(szIcon); - if(pix) ((QPushButton *)widget())->setIcon(*pix); - else((QPushButton *)widget())->setIcon(QIcon()); - return true; + CHECK_INTERNAL_POINTER(widget()) + QString szFormat,szDate; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("format",KVS_PT_STRING,0,szFormat) + KVSO_PARAMETER("date",KVS_PT_STRING,0,szDate) + KVSO_PARAMETERS_END(c) + QDate date; + date=date.fromString(szDate,szFormat); + ((QDateTimeEdit *)widget())->setDate(date); + return true; } -KVSO_CLASS_FUNCTION(button,clickEvent) +KVSO_CLASS_FUNCTION(datetimeedit,time) { - emitSignal("clicked",c); - return true; -} -// slots -void KviKvsObject_datetimeedit::slotClicked() -{ - KviKvsVariantList *params=0; - callFunction(this,"clickEvent",params); + CHECK_INTERNAL_POINTER(widget()) + QString szFormat; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("format",KVS_PT_STRING,0,szFormat) + KVSO_PARAMETERS_END(c) + + c->returnValue()->setString(((QDateTimeEdit *)widget())->time().toString(szFormat)); + + return true; } -*/ +KVSO_CLASS_FUNCTION(datetimeedit,setTime) +{ + CHECK_INTERNAL_POINTER(widget()) + QString szFormat,szTime; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("format",KVS_PT_STRING,0,szFormat) + KVSO_PARAMETER("date",KVS_PT_STRING,0,szTime) + KVSO_PARAMETERS_END(c) + QTime time; + time=time.fromString(szTime,szFormat); + ((QDateTimeEdit *)widget())->setTime(time); + return true; +} #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_class_datetimeedit.moc" #endif //COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/objects/class_datetimeedit.h b/src/modules/objects/class_datetimeedit.h index 6d15beef8..9f8fbbeec 100644 --- a/src/modules/objects/class_datetimeedit.h +++ b/src/modules/objects/class_datetimeedit.h @@ -40,8 +40,12 @@ public: protected: virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams); - bool date(KviKvsObjectFunctionCall *c); -/* bool text(KviKvsObjectFunctionCall *c); + bool date(KviKvsObjectFunctionCall *c); + bool setDate(KviKvsObjectFunctionCall *c); + bool time(KviKvsObjectFunctionCall *c); + bool setTime(KviKvsObjectFunctionCall *c); + + /* bool text(KviKvsObjectFunctionCall *c); bool setImage(KviKvsObjectFunctionCall *c); bool clickEvent(KviKvsObjectFunctionCall *c); diff --git a/src/modules/objects/class_lineedit.cpp b/src/modules/objects/class_lineedit.cpp index 16dc14a7f..4c9e65ea9 100644 --- a/src/modules/objects/class_lineedit.cpp +++ b/src/modules/objects/class_lineedit.cpp @@ -29,6 +29,7 @@ #include "class_lineedit.h" #include #include +#include static const char * mode_tbl[] = { "Normal", "NoEcho", @@ -133,10 +134,10 @@ static const int mode_cod[] = { Sets the validation input mask to inputMask.[br] Example:[br] [br] - %esempio->$setInputMask( "+99 99 99 99 99;_" );[br] - %esempio->$setInputMask( "000.000.000.000;_" );[br] - %esempio->Ip Number Mask.[br] - %esempio->setInputMask( ">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#" );[br] + %ledit_example->$setInputMask( "+99 99 99 99 99;_" );[br] + %ledit_example->$setInputMask( "000.000.000.000;_" );[br] + %ledit_example->Ip Number Mask.[br] + %ledit_example->setInputMask( ">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#" );[br] [br] The mask format understands these mask characters:[br] Character Meaning[br] @@ -165,6 +166,18 @@ static const int mode_cod[] = { Called when the lineedit lost focus. !fn: $textChangedEvent() This event is called when the text changed, In $0 there is the new text. + !fn: $setCompleter(,) + Provides completions based on an stringlist. + Valid completion_mode are: + PopupCompletion: Current completions are displayed in a popup below the lineedit. + UnfilteredPopupCompletion: All possible completions are displayed in a popup window with the most likely suggestion selected. + InlineCompletion: Completions appear as selected text. + !fn: $disableCompleter() + Disable temporally the completer. + !fn: $enableCompleter() + Enable the completer. + !fn: $removeCompleter() + Remove the completer. @signals: !sg: $returnPressed() This signal is emitted by the default implementation of [classfnc]$returnPressedEvent[/classfnc](). @@ -181,6 +194,13 @@ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_lineedit,"lineedit","widget") KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,text) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,setText) + + // completer + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,setCompleter) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,enableCompleter) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,disableCompleter) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,unsetCompleter) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,maxLength) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,setMaxLength) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_lineedit,frame) @@ -208,18 +228,22 @@ KVSO_END_REGISTERCLASS(KviKvsObject_lineedit) KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_lineedit,KviKvsObject_widget) - +m_pCompleter=0; KVSO_END_CONSTRUCTOR(KviKvsObject_lineedit) - KVSO_BEGIN_DESTRUCTOR(KviKvsObject_lineedit) - +if (m_pCompleter) +{ + delete m_pCompleter; + m_pCompleter=0; +} KVSO_END_CONSTRUCTOR(KviKvsObject_lineedit) bool KviKvsObject_lineedit::init(KviKvsRunTimeContext *,KviKvsVariantList *) { SET_OBJECT(QLineEdit) + connect(widget(),SIGNAL(returnPressed()),this,SLOT(slotreturnPressed())); connect(widget(),SIGNAL(lostFocus()),this,SLOT(slotlostFocus())); connect(widget(),SIGNAL(textChanged(const QString & )),this,SLOT(slottextChanged(const QString & ))); @@ -262,8 +286,8 @@ KVSO_CLASS_FUNCTION(lineedit,maxLength) KVSO_CLASS_FUNCTION(lineedit,setMaxLength) { - CHECK_INTERNAL_POINTER(widget()) - kvs_uint_t iMaxlen; + CHECK_INTERNAL_POINTER(widget()) + kvs_uint_t iMaxlen; KVSO_PARAMETERS_BEGIN(c) KVSO_PARAMETER("maxlen",KVS_PT_UNSIGNEDINTEGER,0,iMaxlen) KVSO_PARAMETERS_END(c) @@ -425,6 +449,54 @@ KVSO_CLASS_FUNCTION(lineedit,setInputMask) return true; } +KVSO_CLASS_FUNCTION(lineedit,setCompleter) +{ + CHECK_INTERNAL_POINTER(widget()) + QStringList szCompletionList; + QString szMode; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("mode",KVS_PT_STRING,KVS_PF_OPTIONAL,szMode) + KVSO_PARAMETER("completion_list",KVS_PT_STRINGLIST,0,szCompletionList) + KVSO_PARAMETERS_END(c) + if(m_pCompleter) + { + delete m_pCompleter; + + } + m_pCompleter=new QCompleter(szCompletionList); + QCompleter::CompletionMode mode=QCompleter::PopupCompletion; + if(KviQString::equalCI(szMode,"InlineCompletion")) mode=QCompleter::InlineCompletion; + else if(KviQString::equalCI(szMode,"UnfilteredPopupCompletion")) mode=QCompleter::UnfilteredPopupCompletion; + else if(!KviQString::equalCI(szMode,"PopupCompletion")) + c->warning(__tr2qs_ctx("Unkonwn '%Q' completition mode, switching to default popupCompletition","objects"),&szMode); + m_pCompleter->setCompletionMode(mode); + ((QLineEdit *)widget())->setCompleter(m_pCompleter); + return true; +} +KVSO_CLASS_FUNCTION(lineedit,enableCompleter) +{ + CHECK_INTERNAL_POINTER(widget()) + if (m_pCompleter) ((QLineEdit *)widget())->setCompleter(m_pCompleter); + return true; +} +KVSO_CLASS_FUNCTION(lineedit,disableCompleter) +{ + CHECK_INTERNAL_POINTER(widget()) + ((QLineEdit *)widget())->setCompleter(0); + return true; +} +KVSO_CLASS_FUNCTION(lineedit,unsetCompleter) +{ + CHECK_INTERNAL_POINTER(widget()) + if (m_pCompleter){ + ((QLineEdit *)widget())->setCompleter(0); + delete m_pCompleter; + m_pCompleter=0; + } + return true; +} + + KVSO_CLASS_FUNCTION(lineedit,returnPressedEvent) { emitSignal("returnPressed",c); @@ -464,6 +536,7 @@ void KviKvsObject_lineedit::slottextChanged(const QString &text) } + #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_class_lineedit.moc" #endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/objects/class_lineedit.h b/src/modules/objects/class_lineedit.h index ab19251f0..c59c31268 100644 --- a/src/modules/objects/class_lineedit.h +++ b/src/modules/objects/class_lineedit.h @@ -30,7 +30,7 @@ #include "class_widget.h" //#warning "Signals !" - +#include #include "object_macros.h" class KviKvsObject_lineedit : public KviKvsObject_widget @@ -40,10 +40,15 @@ public: KVSO_DECLARE_OBJECT(KviKvsObject_lineedit) public: QWidget * widget() { return (QWidget *)object(); }; +protected: + QCompleter * m_pCompleter; protected: virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams); - + bool setCompleter(KviKvsObjectFunctionCall *c); + bool enableCompleter(KviKvsObjectFunctionCall *c); + bool disableCompleter(KviKvsObjectFunctionCall *c); + bool unsetCompleter(KviKvsObjectFunctionCall *c); bool text(KviKvsObjectFunctionCall *c); bool setText(KviKvsObjectFunctionCall *c); diff --git a/src/modules/objects/class_painter.cpp b/src/modules/objects/class_painter.cpp index 5991585ee..df12d24a6 100644 --- a/src/modules/objects/class_painter.cpp +++ b/src/modules/objects/class_painter.cpp @@ -33,7 +33,7 @@ #include "kvi_error.h" #include "kvi_iconmanager.h" #include "kvi_malloc.h" - + #include #include #include @@ -1028,24 +1028,81 @@ KVSO_CLASS_FUNCTION(painter,begin) CHECK_INTERNAL_POINTER(m_pPainter) KviKvsObject * pObject; kvs_hobject_t hObject; + KviKvsVariant *v; + QString szFileName; + kvs_int_t i; KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("paint_device",KVS_PT_HOBJECT,0,hObject) + KVSO_PARAMETER("paint_device",KVS_PT_VARIANT,0,v) + KVSO_PARAMETER("y",KVS_PT_INT,KVS_PF_OPTIONAL,i) + KVSO_PARAMETER("file_name",KVS_PT_STRING,KVS_PF_OPTIONAL,szFileName) KVSO_PARAMETERS_END(c) - pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); - if (!pObject) - { + debug ("check device"); + QPaintDevice * pd; + if(v->isString()) + { + QString szDev; + v->asString(szDev); + if(KviQString::equalCI(szDev,"printer") || KviQString::equalCI(szDev,"pdf")) + { + if (m_pPrinter) delete m_pPrinter; + m_pPrinter=new QPrinter(); + if ( KviQString::equalCI(szDev,"pdf")) + { + // m_pPrinter=new QPrinter(); + if(szFileName.isEmpty()) + { + c->warning(__tr2qs_ctx("Missing filename","objects")); + return true; + } + m_pPrinter->setOutputFormat(QPrinter::PdfFormat); + m_pPrinter->setOutputFileName(szFileName); + + } + else{ + QPrintDialog printDialog(m_pPrinter, 0); + if (printDialog.exec() == QDialog::Accepted) { + debug("papersize %d",m_pPrinter->paperSize()); + m_pPainter->begin(m_pPrinter); + return true; + } + else { + m_pPrinter=0; + return true; + } + } + //if (i==3) m_pPrinter->setPaperSize(QPrinter::A3); + //if (i==4) m_pPrinter->setPaperSize(QPrinter::A4); + } + else{ + c->warning(__tr2qs_ctx("No valid paint device","objects")); + return true; + } + m_pPainter->begin(m_pPrinter); + return true; + } + else if (v->isHObject()) + { + v->asHObject(hObject); + pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); + if (!pObject) + { c->warning(__tr2qs_ctx("Pixmap or Widget parameter is not an object","objects")); return true; - } - QPaintDevice * pd; - if(pObject->inheritsClass("pixmap"))pd=((KviKvsObject_pixmap *)pObject)->getPixmap(); - - else if (pObject->inheritsClass("widget")) pd=((KviKvsObject_widget *)pObject)->widget(); - else{ - c->warning(__tr2qs_ctx("Widget or Pixmap required ","objects")); - return true; - } - attachDevice(pObject,pd); + } + + if(pObject->inheritsClass("pixmap"))pd=((KviKvsObject_pixmap *)pObject)->getPixmap(); + else if (pObject->inheritsClass("widget")) pd=((KviKvsObject_widget *)pObject)->widget(); + else + { + c->warning(__tr2qs_ctx("Widget or Pixmap required ","objects")); + return true; + } + } + else { + c->warning(__tr2qs_ctx("No valid paint device","objects")); + return true; + } + attachDevice(pObject,pd); //if (pObject->inheritsClass("pixmap")) ((KviKvsObject_pixmap *)pObject)->pixmapChanged(); return true; } @@ -1067,12 +1124,26 @@ void KviKvsObject_painter::detachDevice() if(!m_pDeviceObject)return; disconnect(m_pDeviceObject,SIGNAL(aboutToDie()),this,SLOT(detachDevice())); m_pPainter->end(); + if (m_pPrinter) + { + delete m_pPrinter; + m_pPrinter=0; + } m_pDeviceObject = 0; } KVSO_CLASS_FUNCTION(painter,end) { - detachDevice(); + if(!m_pDeviceObject) + { + m_pPainter->end(); + if (m_pPrinter) + { + delete m_pPrinter; + m_pPrinter=0; + } + } + else detachDevice(); return true; } KVSO_CLASS_FUNCTION(painter,beginPdf) @@ -1084,7 +1155,7 @@ KVSO_CLASS_FUNCTION(painter,beginPdf) KVSO_PARAMETERS_END(c) if (m_pPrinter) delete m_pPrinter; m_pPrinter=new QPrinter();//QPrinter::HighResolution); - m_pPrinter->setOutputFormat(QPrinter::PdfFormat); + m_pPrinter->setOutputFormat(QPrinter::PdfFormat); m_pPrinter->setOutputFileName(szFileName); m_pPainter->begin(m_pPrinter); return true; -- cgit v1.3.1-10-gc9f91