diff options
Diffstat (limited to 'src/modules/options/mkcreateinstanceproc.sh')
-rwxr-xr-x | src/modules/options/mkcreateinstanceproc.sh | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/src/modules/options/mkcreateinstanceproc.sh b/src/modules/options/mkcreateinstanceproc.sh new file mode 100755 index 00000000..97be80b5 --- /dev/null +++ b/src/modules/options/mkcreateinstanceproc.sh @@ -0,0 +1,441 @@ +#!/bin/sh + +##################################################################################################### +# +# Generator for instances.h and instances.cpp +# +# This file is part of the KVirc irc client distribution +# Copyright (C) 2001-2006 Szymon Stefanek (pragma at kvirc dot net) +# +##################################################################################################### + + +echo "" > instances.h + +###################################################################################################### +cat >> instances.h <<EOF + +#ifndef __OPTIONS_INSTANCES_H__ +#define __OPTIONS_INSTANCES_H__ + +// +// File : instances.h +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 2001-2006 Szymon Stefanek (pragma at kvirc dot 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 +// of the License, or (at your opinion) 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. +// + +// +// Instance creation routines for the KVIrc options module +// DO NOT EDIT THIS FILE!! ALL CHANGES WILL BE LOST!! +// This file is automatically generated by mkcreateinstanceproc.sh +// so any change should go in that script +// + +#include "kvi_optionswidget.h" +#include "kvi_module.h" +#include "kvi_pointerlist.h" +#include "kvi_qstring.h" + +typedef struct _KviOptionsWidgetInstanceEntry KviOptionsWidgetInstanceEntry; + + +typedef struct _KviOptionsWidgetInstanceEntry +{ + KviOptionsWidget * (*createProc)(QWidget *); + KviOptionsWidget * pWidget; // singleton + int iIcon; + QString szName; + QString szNameNoLocale; + const char * szClassName; + int iPriority; + QString szKeywords; + QString szKeywordsNoLocale; + QString szGroup; + bool bIsContainer; + bool bIsNotContained; + KviPointerList<KviOptionsWidgetInstanceEntry> * pChildList; + bool bDoInsert; // a helper for KviOptionsDialog::fillListView() +} KviOptionsWidgetInstanceEntry; + + +class KviOptionsInstanceManager : public QObject +{ + Q_OBJECT +public: + KviOptionsInstanceManager(); + virtual ~KviOptionsInstanceManager(); +protected: + KviPointerList<KviOptionsWidgetInstanceEntry> * m_pInstanceTree; +public: + KviPointerList<KviOptionsWidgetInstanceEntry> * instanceEntryTree(){ return m_pInstanceTree; }; + KviOptionsWidget * getInstance(KviOptionsWidgetInstanceEntry * e,QWidget * par); + KviOptionsWidgetInstanceEntry * findInstanceEntry(const char * clName); + void cleanup(KviModule * m); +protected: + KviOptionsWidgetInstanceEntry * findInstanceEntry(const char * clName,KviPointerList<KviOptionsWidgetInstanceEntry> * l); + KviOptionsWidgetInstanceEntry * findInstanceEntry(const QObject * ptr,KviPointerList<KviOptionsWidgetInstanceEntry> * l); + void deleteInstanceTree(KviPointerList<KviOptionsWidgetInstanceEntry> * l); +protected slots: + void widgetDestroyed(); +}; + +#endif //__OPTIONS_INSTANCES_H__ + +EOF +###################################################################################################### + +CLASS_LIST=`grep -h "[ ]*\:[ ]*public[ ]*KviOptionsWidget" optw_*.h | sed -e 's/[ ]*\:[ ]*public[ ]*KviOptionsWidget'//g | sed -e 's/[ ]*class[ ]*//g'` + + +TARGET="instances.cpp" + +echo "" > $TARGET + +###################################################################################################### +cat >> instances.cpp <<EOF + +// +// File : instances.cpp +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 2001 Szymon Stefanek ([email protected]) +// +// 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 +// of the License, or (at your opinion) 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. +// + +// +// Instance creation routines for the KVIrc options module +// DO NOT EDIT THIS FILE!! ALL CHANGES WILL BE LOST!! +// This file is automatically generated by mkcreateinstanceproc.sh +// so any change should go in that script +// + +EOF +###################################################################################################### + + +for afile in optw_*.h; do + echo "#include \"$afile\"" >> $TARGET +done + +###################################################################################################### +cat >> instances.cpp <<EOF + +#include "kvi_locale.h" +#include "kvi_iconmanager.h" +#include "instances.h" + +int g_iOptionWidgetInstances = 0; + +EOF +###################################################################################################### + + +for aclass in $CLASS_LIST; do + echo -n "KviOptionsWidget * class$aclass" >> $TARGET + echo "_createInstanceProc(QWidget * parent)" >> $TARGET + echo "{" >> $TARGET + echo " return new $aclass(parent);" >> $TARGET + echo "}" >> $TARGET + echo "" >> $TARGET +done + +###################################################################################################### +cat >> instances.cpp <<EOF + + +EOF +###################################################################################################### + +for aclass in $CLASS_LIST; do + echo "static const char * g_szName_$aclass = KVI_OPTIONS_WIDGET_NAME_$aclass;" >> $TARGET + echo "static const char * g_szClassName_$aclass = \"$aclass\";" >> $TARGET +done + +###################################################################################################### +cat >> instances.cpp <<EOF + +KviOptionsInstanceManager::KviOptionsInstanceManager() +: QObject(0) +{ + + //debug("Instantiating"); + // Create the global widget dict : case sensitive , do not copy keys + m_pInstanceTree = new KviPointerList<KviOptionsWidgetInstanceEntry>; + m_pInstanceTree->setAutoDelete(true); + +EOF +###################################################################################################### + +CLASSDIR=".classtmp" + +mkdir -p $CLASSDIR + +rm -f $CLASSDIR/* + +for aclass in $CLASS_LIST; do + PARENT=`grep -h "KVI_OPTIONS_WIDGET_PARENT_$aclass" optw_*.h | sed -e 's/#define//g' | sed -e s/KVI_OPTIONS_WIDGET_PARENT_$aclass//g | sed -e 's/[ ]*//g'` + if [ -z "$PARENT" ]; then + PARENT="NOPARENT" + fi + echo $aclass >> $CLASSDIR/$PARENT +done + +SPACES="" + +printclass() +{ + echo "" >> $TARGET + found= + for anum in $DECLARED; do + if [ "$anum" = "$1" ]; then + found="yes" + break + fi + done + if [ -z "$found" ]; then + echo "$3 KviOptionsWidgetInstanceEntry * e$1;" >> $TARGET + DECLARED="$DECLARED $1" + fi + echo "$3 e$1 = new KviOptionsWidgetInstanceEntry;" >> $TARGET + echo -n "$3 e$1->createProc = &class$2" >> $TARGET + echo "_createInstanceProc;" >> $TARGET + echo "$3 e$1->pWidget = 0;" >> $TARGET + echo "$3 e$1->szClassName = g_szClassName_$2;" >> $TARGET + echo "$3 e$1->iIcon = KVI_OPTIONS_WIDGET_ICON_$2;" >> $TARGET + + echo "$3 #ifdef KVI_OPTIONS_WIDGET_PRIORITY_$2" >> $TARGET + echo "$3 e$1->iPriority = KVI_OPTIONS_WIDGET_PRIORITY_$2;" >> $TARGET + echo "$3 #else" >> $TARGET + echo "$3 e$1->iPriority = 0;" >> $TARGET + echo "$3 #endif" >> $TARGET + + echo "$3 #ifdef KVI_OPTIONS_WIDGET_KEYWORDS_$2" >> $TARGET + echo "$3 e$1->szKeywordsNoLocale = KVI_OPTIONS_WIDGET_KEYWORDS_$2;" >> $TARGET + echo "$3 e$1->szKeywords = __tr2qs_ctx_no_xgettext(e$1->szKeywordsNoLocale,\"options\");;" >> $TARGET + echo "$3 #endif" >> $TARGET + + echo "$3 #ifdef KVI_OPTIONS_WIDGET_GROUP_$2" >> $TARGET + echo "$3 e$1->szGroup = KVI_OPTIONS_WIDGET_GROUP_$2;" >> $TARGET + echo "$3 #else" >> $TARGET + echo "$3 e$1->szGroup = \"general\";" >> $TARGET + echo "$3 #endif" >> $TARGET + + echo "$3 #ifdef KVI_OPTIONS_WIDGET_CONTAINER_$2" >> $TARGET + echo "$3 e$1->bIsContainer = KVI_OPTIONS_WIDGET_CONTAINER_$2;" >> $TARGET + echo "$3 #else" >> $TARGET + echo "$3 e$1->bIsContainer = false;" >> $TARGET + echo "$3 #endif" >> $TARGET + + echo "$3 #ifdef KVI_OPTIONS_WIDGET_NOTCONTAINED_$2" >> $TARGET + echo "$3 e$1->bIsNotContained = KVI_OPTIONS_WIDGET_NOTCONTAINED_$2;" >> $TARGET + echo "$3 #else" >> $TARGET + echo "$3 e$1->bIsNotContained = false;" >> $TARGET + echo "$3 #endif" >> $TARGET + + echo "$3 e$1->szNameNoLocale = g_szName_$2;" >> $TARGET + echo "$3 e$1->szName = __tr2qs_ctx_no_xgettext(g_szName_$2,\"options\");" >> $TARGET + + if [ "$1" = "0" ]; then + echo "$3 m_pInstanceTree->append(e$1);" >> $TARGET + else + VAL=`expr $1 - 1` + echo "$3 e$VAL->pChildList->append(e$1);" >> $TARGET + fi +} + +addchildren() +{ + if [ -f "$CLASSDIR/$2" ]; then + LEVEL=`cat $CLASSDIR/$2` + for achild in $LEVEL; do + printclass $1 $achild "$3" + if [ -f "$CLASSDIR/$achild" ]; then + echo "" >> $TARGET + echo "$3 e$1->pChildList = new KviPointerList<KviOptionsWidgetInstanceEntry>;" >> $TARGET + echo "$3 e$1->pChildList->setAutoDelete(true);" >> $TARGET + NEXTLEVEL=`expr $1 + 1` + addchildren $NEXTLEVEL $achild "$3 " + else + echo "$3 e$1->pChildList = 0;" >> $TARGET + fi + done + fi +} + +addchildren 0 NOPARENT "" + + +rm -fr $CLASSDIR + +###################################################################################################### +cat >> $TARGET <<EOF + +} + +void KviOptionsInstanceManager::deleteInstanceTree(KviPointerList<KviOptionsWidgetInstanceEntry> * l) +{ + if(l) + { + for(KviOptionsWidgetInstanceEntry * e = l->first();e;e = l->next()) + { + if(e->pWidget) + { + if(e->pWidget->parent()->inherits("KviOptionsWidgetContainer")) + { + disconnect(e->pWidget,SIGNAL(destroyed()),this,SLOT(widgetDestroyed())); + delete e->pWidget->parent(); + e->pWidget = 0; + } else { + debug("Ops...i have deleted the options dialog ?"); + } + } //else debug("Clas %s has no widget",e->szName); + if(e->pChildList)deleteInstanceTree(e->pChildList); + } + delete l; + } +} + + +KviOptionsInstanceManager::~KviOptionsInstanceManager() +{ + if(m_pInstanceTree)debug("Ops...KviOptionsInstanceManager::cleanup() not called ?"); +} + +void KviOptionsInstanceManager::cleanup(KviModule * m) +{ + deleteInstanceTree(m_pInstanceTree); + m_pInstanceTree = 0; +} + +void KviOptionsInstanceManager::widgetDestroyed() +{ + KviOptionsWidgetInstanceEntry * e = findInstanceEntry(sender(),m_pInstanceTree); + if(e)e->pWidget = 0; + if(g_iOptionWidgetInstances > 0)g_iOptionWidgetInstances--; + +} + +KviOptionsWidget * KviOptionsInstanceManager::getInstance(KviOptionsWidgetInstanceEntry * e,QWidget * par) +{ + if(!e)return 0; + if(!(e->pWidget)) + { + e->pWidget = e->createProc(par); + g_iOptionWidgetInstances++; + connect(e->pWidget,SIGNAL(destroyed()),this,SLOT(widgetDestroyed())); + } + if(e->pWidget->parent() != par) + { + QWidget * oldPar = (QWidget *)e->pWidget->parent(); + e->pWidget->reparent(par,QPoint(0,0)); + delete oldPar; + } + if(e->bIsContainer) + { + // need to create the container structure! + e->pWidget->createTabbedPage(); + if(e->pChildList) + { + KviPointerList<KviOptionsWidgetInstanceEntry> tmp; + tmp.setAutoDelete(false); + + for(KviOptionsWidgetInstanceEntry * e2 = e->pChildList->first();e2;e2 = e->pChildList->next()) + { + // add only non containers and widgets not explicitly marked as noncontained + if((!e2->bIsContainer) && (!e2->bIsNotContained)) + { + KviOptionsWidgetInstanceEntry * ee = tmp.first(); + int idx = 0; + while(ee) + { + if(ee->iPriority >= e2->iPriority)break; + idx++; + ee = tmp.next(); + } + tmp.insert(idx,e2); + } + } + + for(KviOptionsWidgetInstanceEntry * e3 = tmp.last();e3;e3 = tmp.prev()) + { + KviOptionsWidget * ow = getInstance(e3,e->pWidget->tabWidget()); + e->pWidget->addOptionsWidget(e3->szName,*(g_pIconManager->getSmallIcon(e3->iIcon)),ow); + } + } + } + return e->pWidget; +} + +KviOptionsWidgetInstanceEntry * KviOptionsInstanceManager::findInstanceEntry(const QObject * ptr,KviPointerList<KviOptionsWidgetInstanceEntry> * l) +{ + if(l) + { + for(KviOptionsWidgetInstanceEntry * e = l->first();e;e = l->next()) + { + if(ptr == e->pWidget)return e; + if(e->pChildList) + { + KviOptionsWidgetInstanceEntry * e2 = findInstanceEntry(ptr,e->pChildList); + if(e2)return e2; + } + } + } + return 0; +} + +KviOptionsWidgetInstanceEntry * KviOptionsInstanceManager::findInstanceEntry(const char * clName,KviPointerList<KviOptionsWidgetInstanceEntry> * l) +{ + if(l) + { + for(KviOptionsWidgetInstanceEntry * e = l->first();e;e = l->next()) + { + if(kvi_strEqualCI(e->szClassName,clName))return e; + if(e->pChildList) + { + KviOptionsWidgetInstanceEntry * e2 = findInstanceEntry(clName,e->pChildList); + if(e2)return e2; + } + } + } + return 0; +} + +KviOptionsWidgetInstanceEntry * KviOptionsInstanceManager::findInstanceEntry(const char * clName) +{ + return findInstanceEntry(clName,m_pInstanceTree); +} + + +#include "m_instances.moc" + +EOF +###################################################################################################### + |