From 5cc6199846f7e797df52a9dad916f27bf3d6265d Mon Sep 17 00:00:00 2001 From: Noldor Date: Wed, 26 Aug 2009 15:32:22 +0000 Subject: Fixed kvs widgets on statusbar and some doc fixes git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3428 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/objects/class_workspace.cpp | 183 ++++++++++++++++++++++---------- 1 file changed, 125 insertions(+), 58 deletions(-) (limited to 'src/modules/objects/class_workspace.cpp') diff --git a/src/modules/objects/class_workspace.cpp b/src/modules/objects/class_workspace.cpp index 5afe3b7ce..3eacf610b 100644 --- a/src/modules/objects/class_workspace.cpp +++ b/src/modules/objects/class_workspace.cpp @@ -30,8 +30,9 @@ #include "kvi_locale.h" #include "kvi_iconmanager.h" -#include - +#include +#include +#include /* @doc: workspace @keyterms: @@ -77,7 +78,7 @@ {[br] constructor[br] {[br] - $$->$setGeometry(%X,%Y,100,100)[br] + $$->$setGeometry(%X,%Y,100,100)[br](KviKvsObjectFunctionCall *c $$->%label=$new(label,$$)[br] $$->%label->$settext("Another class by N\&G")[br] $$->%label->$setautoresize(1)[br] @@ -162,96 +163,162 @@ */ KVSO_BEGIN_REGISTERCLASS(KviKvsObject_workspace,"workspace","widget") - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"activeWindow", functionactiveWindow); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"scrollBarsEnabled", functionscrollBarsEnabled); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"setscrollBarsEnabled", functionsetscrollBarsEnabled); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"cascade", functioncascade); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"tile", functiontile); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"closeActiveWindow", functioncloseActiveWindow); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"closeAllWindows", functioncloseAllWindows); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"activateNextWindow", functionactivateNextWindow); - KVSO_REGISTER_HANDLER(KviKvsObject_workspace,"activatePrevWindow", functionactivatePrevWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,addSubWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,removeSubWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,activeWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,scrollBarsEnabled); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,setscrollBarsEnabled); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,cascade); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,tile); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,closeActiveWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,closeAllWindows); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,activateNextWindow); + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_workspace,activatePrevWindow); KVSO_END_REGISTERCLASS(KviKvsObject_workspace) KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_workspace,KviKvsObject_widget) - +pWidgetDict=new QHash; KVSO_END_CONSTRUCTOR(KviKvsObject_workspace) - KVSO_BEGIN_DESTRUCTOR(KviKvsObject_workspace) - +if (pWidgetDict) +{ + pWidgetDict->clear(); + delete pWidgetDict; + pWidgetDict=0; +} KVSO_END_CONSTRUCTOR(KviKvsObject_workspace) bool KviKvsObject_workspace::init(KviKvsRunTimeContext * ,KviKvsVariantList *) { - SET_OBJECT(QWorkspace); + SET_OBJECT(QMdiArea); return true; } -bool KviKvsObject_workspace::functionactiveWindow(KviKvsObjectFunctionCall *c) +KVSO_CLASS_FUNCTION(workspace,addSubWindow) { - //if(widget()) c->returnValue()->setHObject((unsigned long)(((QWorkspace *)widget())->activeWindow())); - // FIXME! - c->returnValue()->setHObject(0); - return true; //?pFIX ME? + CHECK_INTERNAL_POINTER(widget()) + KviKvsObject * pObject; + kvs_hobject_t hObject; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject) + KVSO_PARAMETERS_END(c) + pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); + CHECK_HOBJECT_IS_WIDGET(pObject) + QMdiSubWindow *pMdi=((QMdiArea *)object())->addSubWindow(((QWidget *)(pObject->object()))); + pWidgetDict->insert(hObject,pMdi); + ((QMdiArea *)object())->setActiveSubWindow(pMdi); + return true; } - -bool KviKvsObject_workspace::functionscrollBarsEnabled(KviKvsObjectFunctionCall *c) +KVSO_CLASS_FUNCTION(workspace,removeSubWindow) { - if(widget()) - c->returnValue()->setBoolean(((QWorkspace *)widget())->scrollBarsEnabled()); - return true; + CHECK_INTERNAL_POINTER(widget()) + KviKvsObject * pObject; + kvs_hobject_t hObject; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject) + KVSO_PARAMETERS_END(c) + pObject=KviKvsKernel::instance()->objectController()->lookupObject(hObject); + CHECK_HOBJECT_IS_WIDGET(pObject) + QMdiSubWindow *pMdiSubWindow=pWidgetDict->value(hObject); + if(pMdiSubWindow) + { + ((QMdiArea *)object())->removeSubWindow(pMdiSubWindow); + pWidgetDict->remove(hObject); + } + else c->warning(__tr2qs_ctx("The widget must be a subwindow of this workspace","objects")); + return true; } -bool KviKvsObject_workspace::functionsetscrollBarsEnabled(KviKvsObjectFunctionCall *c) +KVSO_CLASS_FUNCTION(workspace,cascade) { - bool bEnabled; - KVSO_PARAMETERS_BEGIN(c) - KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) - KVSO_PARAMETERS_END(c) - if(widget()) - ((QWorkspace *)widget())->setScrollBarsEnabled(bEnabled); - return true; + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->cascadeSubWindows(); + return true; } - -bool KviKvsObject_workspace::functioncascade(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,tile) { - if(widget()) - ((QWorkspace *)widget())->cascade(); - return true; + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->tileSubWindows(); + return true; +} +KVSO_CLASS_FUNCTION(workspace,closeActiveWindow) +{ + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->closeActiveSubWindow(); + return true; } -bool KviKvsObject_workspace::functiontile(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,closeAllWindows) { - if(widget()) - ((QWorkspace *)widget())->tile(); - return true; + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->closeAllSubWindows(); + return true; } -bool KviKvsObject_workspace::functioncloseActiveWindow(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,activateNextWindow) { - if(widget()) - ((QWorkspace *)widget())->closeActiveWindow(); - return true; + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->activateNextSubWindow(); + return true; } -bool KviKvsObject_workspace::functioncloseAllWindows(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,activatePrevWindow) { - if(widget()) - ((QWorkspace *)widget())->closeAllWindows(); - return true; + CHECK_INTERNAL_POINTER(widget()) + ((QMdiArea *)widget())->activatePreviousSubWindow(); + return true; } -bool KviKvsObject_workspace::functionactivateNextWindow(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,activeWindow) { - if(widget()) - ((QWorkspace *)widget())->activateNextWindow(); + CHECK_INTERNAL_POINTER(widget()) + QMdiSubWindow *pActiveMdi=((QMdiArea *)widget())->activeSubWindow(); + if (pActiveMdi) + { + QHashIterator t(*pWidgetDict); + while (t.hasNext()) + { + t.next(); + kvs_hobject_t hObject=t.key(); + QMdiSubWindow *pMdi=t.value(); + if (pMdi==pActiveMdi) + { + c->returnValue()->setHObject(hObject); + break; + } + } + } + else c->returnValue()->setHObject((kvs_hobject_t)0); + return true; +} +KVSO_CLASS_FUNCTION(workspace,scrollBarsEnabled) +{ + CHECK_INTERNAL_POINTER(widget()) + bool bEnabled; + if(((QMdiArea *)widget())->verticalScrollBarPolicy()!=Qt::ScrollBarAlwaysOff) bEnabled=true; + else bEnabled=false; + c->returnValue()->setBoolean(bEnabled); return true; } -bool KviKvsObject_workspace::functionactivatePrevWindow(KviKvsObjectFunctionCall *) +KVSO_CLASS_FUNCTION(workspace,setscrollBarsEnabled) { - if(widget()) - ((QWorkspace *)widget())->activatePreviousWindow(); - return true; + CHECK_INTERNAL_POINTER(widget()) + bool bEnabled; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled) + KVSO_PARAMETERS_END(c) + if(bEnabled) + { + ((QMdiArea *)widget())->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + ((QMdiArea *)widget())->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + } + else + { + ((QMdiArea *)widget())->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + ((QMdiArea *)widget())->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + } + return true; } + -- cgit v1.3.1-10-gc9f91