You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/modules/options/mkcreateinstanceproc.sh

442 lines
14 KiB

#!/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)(TQWidget *);
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 TQObject
{
Q_OBJECT
public:
KviOptionsInstanceManager();
virtual ~KviOptionsInstanceManager();
protected:
KviPointerList<KviOptionsWidgetInstanceEntry> * m_pInstanceTree;
public:
KviPointerList<KviOptionsWidgetInstanceEntry> * 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<KviOptionsWidgetInstanceEntry> * l);
KviOptionsWidgetInstanceEntry * findInstanceEntry(const TQObject * 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 (stefanek@tin.it)
//
// 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)
{
//tqDebug("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 {
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,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,TQPoint(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
######################################################################################################