#!/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) # ##################################################################################################### INSTANCES_H=@CMAKE_CURRENT_BINARY_DIR@/instances.h INSTANCES_CPP=@CMAKE_CURRENT_BINARY_DIR@/instances.cpp echo "" > $INSTANCES_H ###################################################################################################### cat >> $INSTANCES_H < * pChildList; bool bDoInsert; // a helper for KviOptionsDialog::fillListView() } KviOptionsWidgetInstanceEntry; class KviOptionsInstanceManager : public TQObject { TQ_OBJECT public: KviOptionsInstanceManager(); virtual ~KviOptionsInstanceManager(); protected: KviPointerList * m_pInstanceTree; public: KviPointerList * instanceEntryTree(){ return m_pInstanceTree; }; KviOptionsWidget * getInstance(KviOptionsWidgetInstanceEntry * e,TQWidget * par); KviOptionsWidgetInstanceEntry * findInstanceEntry(const char * clName); void cleanup(KviModule * m); protected: KviOptionsWidgetInstanceEntry * findInstanceEntry(const char * clName,KviPointerList * l); KviOptionsWidgetInstanceEntry * findInstanceEntry(const TQObject * ptr,KviPointerList * l); void deleteInstanceTree(KviPointerList * 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'` echo "" > $INSTANCES_CPP ###################################################################################################### cat >> $INSTANCES_CPP <> $INSTANCES_CPP done ###################################################################################################### cat >> $INSTANCES_CPP <> $INSTANCES_CPP echo "_createInstanceProc(TQWidget * parent)" >> $INSTANCES_CPP echo "{" >> $INSTANCES_CPP echo " return new $aclass(parent);" >> $INSTANCES_CPP echo "}" >> $INSTANCES_CPP echo "" >> $INSTANCES_CPP done ###################################################################################################### cat >> $INSTANCES_CPP <> $INSTANCES_CPP echo "static const char * g_szClassName_$aclass = \"$aclass\";" >> $INSTANCES_CPP done ###################################################################################################### cat >> $INSTANCES_CPP <; m_pInstanceTree->setAutoDelete(true); EOF ###################################################################################################### CLASSDIR="@CMAKE_CURRENT_BINARY_DIR@/.classtmp" mkdir -p $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 "" >> $INSTANCES_CPP found= for anum in $DECLARED; do if [ "$anum" = "$1" ]; then found="yes" break fi done if [ -z "$found" ]; then echo "$3 KviOptionsWidgetInstanceEntry * e$1;" >> $INSTANCES_CPP DECLARED="$DECLARED $1" fi echo "$3 e$1 = new KviOptionsWidgetInstanceEntry;" >> $INSTANCES_CPP echo -n "$3 e$1->createProc = &class$2" >> $INSTANCES_CPP echo "_createInstanceProc;" >> $INSTANCES_CPP echo "$3 e$1->pWidget = 0;" >> $INSTANCES_CPP echo "$3 e$1->szClassName = g_szClassName_$2;" >> $INSTANCES_CPP echo "$3 e$1->iIcon = KVI_OPTIONS_WIDGET_ICON_$2;" >> $INSTANCES_CPP echo "$3 #ifdef KVI_OPTIONS_WIDGET_PRIORITY_$2" >> $INSTANCES_CPP echo "$3 e$1->iPriority = KVI_OPTIONS_WIDGET_PRIORITY_$2;" >> $INSTANCES_CPP echo "$3 #else" >> $INSTANCES_CPP echo "$3 e$1->iPriority = 0;" >> $INSTANCES_CPP echo "$3 #endif" >> $INSTANCES_CPP echo "$3 #ifdef KVI_OPTIONS_WIDGET_KEYWORDS_$2" >> $INSTANCES_CPP echo "$3 e$1->szKeywordsNoLocale = KVI_OPTIONS_WIDGET_KEYWORDS_$2;" >> $INSTANCES_CPP echo "$3 e$1->szKeywords = __tr2qs_ctx_no_xgettext(e$1->szKeywordsNoLocale.utf8().data(),\"options\");;" >> $INSTANCES_CPP echo "$3 #endif" >> $INSTANCES_CPP echo "$3 #ifdef KVI_OPTIONS_WIDGET_GROUP_$2" >> $INSTANCES_CPP echo "$3 e$1->szGroup = KVI_OPTIONS_WIDGET_GROUP_$2;" >> $INSTANCES_CPP echo "$3 #else" >> $INSTANCES_CPP echo "$3 e$1->szGroup = \"general\";" >> $INSTANCES_CPP echo "$3 #endif" >> $INSTANCES_CPP echo "$3 #ifdef KVI_OPTIONS_WIDGET_CONTAINER_$2" >> $INSTANCES_CPP echo "$3 e$1->bIsContainer = KVI_OPTIONS_WIDGET_CONTAINER_$2;" >> $INSTANCES_CPP echo "$3 #else" >> $INSTANCES_CPP echo "$3 e$1->bIsContainer = false;" >> $INSTANCES_CPP echo "$3 #endif" >> $INSTANCES_CPP echo "$3 #ifdef KVI_OPTIONS_WIDGET_NOTCONTAINED_$2" >> $INSTANCES_CPP echo "$3 e$1->bIsNotContained = KVI_OPTIONS_WIDGET_NOTCONTAINED_$2;" >> $INSTANCES_CPP echo "$3 #else" >> $INSTANCES_CPP echo "$3 e$1->bIsNotContained = false;" >> $INSTANCES_CPP echo "$3 #endif" >> $INSTANCES_CPP echo "$3 e$1->szNameNoLocale = g_szName_$2;" >> $INSTANCES_CPP echo "$3 e$1->szName = __tr2qs_ctx_no_xgettext(g_szName_$2,\"options\");" >> $INSTANCES_CPP if [ "$1" = "0" ]; then echo "$3 m_pInstanceTree->append(e$1);" >> $INSTANCES_CPP else VAL=`expr $1 - 1` echo "$3 e$VAL->pChildList->append(e$1);" >> $INSTANCES_CPP 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 "" >> $INSTANCES_CPP echo "$3 e$1->pChildList = new KviPointerList;" >> $INSTANCES_CPP echo "$3 e$1->pChildList->setAutoDelete(true);" >> $INSTANCES_CPP NEXTLEVEL=`expr $1 + 1` addchildren $NEXTLEVEL $achild "$3 " else echo "$3 e$1->pChildList = 0;" >> $INSTANCES_CPP fi done fi } addchildren 0 NOPARENT "" rm -fr $CLASSDIR ###################################################################################################### cat >> $INSTANCES_CPP < * l) { if(l) { for(KviOptionsWidgetInstanceEntry * e = l->first();e;e = l->next()) { if(e->pWidget) { if(e->pWidget->parent()->inherits("KviOptionsWidgetContainer")) { disconnect(e->pWidget,TQ_SIGNAL(destroyed()),this,TQ_SLOT(widgetDestroyed())); delete e->pWidget->parent(); e->pWidget = 0; } else { tqDebug("Ops...i have deleted the options dialog ?"); } } //else tqDebug("Clas %s has no widget",e->szName); if(e->pChildList)deleteInstanceTree(e->pChildList); } delete l; } } KviOptionsInstanceManager::~KviOptionsInstanceManager() { if(m_pInstanceTree)tqDebug("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,TQWidget * par) { if(!e)return 0; if(!(e->pWidget)) { e->pWidget = e->createProc(par); g_iOptionWidgetInstances++; connect(e->pWidget,TQ_SIGNAL(destroyed()),this,TQ_SLOT(widgetDestroyed())); } if(e->pWidget->parent() != par) { TQWidget * oldPar = (TQWidget *)e->pWidget->parent(); e->pWidget->reparent(par,TQPoint(0,0)); delete oldPar; } if(e->bIsContainer) { // need to create the container structure! e->pWidget->createTabbedPage(); if(e->pChildList) { KviPointerList 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 TQObject * ptr,KviPointerList * 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 * 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 "instances.moc" EOF ######################################################################################################