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.
293 lines
9.8 KiB
293 lines
9.8 KiB
/***************************************************************************
|
|
* Copyright (C) 1998 by Sandy Meier *
|
|
* smeier@rz.uni-potsdam.de *
|
|
* Copyright (C) 2002 by Bernd Gehrmann *
|
|
* bernd@kdevelop.org *
|
|
* Copyright (C) 2003 by Alexander Dymo *
|
|
* cloudtemple@mksat.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 option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef _CPPNEWCLASSDLG_H_
|
|
#define _CPPNEWCLASSDLG_H_
|
|
|
|
#include <qlineedit.h>
|
|
#include <qlistview.h>
|
|
#include <qwidgetstack.h>
|
|
|
|
#include "codemodel.h"
|
|
#include "cppnewclassdlgbase.h"
|
|
|
|
class CppSupportPart;
|
|
class KDevProject;
|
|
class QPopupMenu;
|
|
class KCompletion;
|
|
class CodeModel;
|
|
|
|
|
|
template <class T>
|
|
class PCheckListItem: public QCheckListItem
|
|
{
|
|
public:
|
|
|
|
PCheckListItem ( T item, QCheckListItem * parent, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QCheckListItem * parent, QListViewItem * after, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, after, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListViewItem * parent, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListViewItem * parent, QListViewItem * after, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, after, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListView * parent, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListView * parent, QListViewItem * after, const QString & text, Type tt = Controller ) :
|
|
QCheckListItem ( parent, after, text, tt ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListViewItem * parent, const QString & text, const QPixmap & p ) :
|
|
QCheckListItem ( parent, text, p ), m_item( item )
|
|
{}
|
|
|
|
PCheckListItem ( T item, QListView * parent, const QString & text, const QPixmap & p ) :
|
|
QCheckListItem ( parent, text, p ), m_item( item )
|
|
{}
|
|
|
|
T item()
|
|
{
|
|
return m_item;
|
|
}
|
|
|
|
QString templateAddition;
|
|
|
|
private:
|
|
T m_item;
|
|
};
|
|
|
|
template <class T>
|
|
class PListViewItem: public QListViewItem
|
|
{
|
|
public:
|
|
|
|
PListViewItem ( T item, QListViewItem * parent, QListViewItem * after, const QString & text ) :
|
|
QListViewItem ( parent, after, text ), m_item( item )
|
|
{}
|
|
|
|
PListViewItem ( T item, QListViewItem * parent, const QString & text ) :
|
|
QListViewItem ( parent, text ), m_item( item )
|
|
{}
|
|
|
|
PListViewItem ( T item, QListView * parent, const QString & text ) :
|
|
QListViewItem ( parent, text ), m_item( item )
|
|
{}
|
|
|
|
PListViewItem ( T item, QListView * parent, QListViewItem * after, const QString & text ) :
|
|
QListViewItem ( parent, after, text ), m_item( item )
|
|
{}
|
|
|
|
T item()
|
|
{
|
|
return m_item;
|
|
}
|
|
|
|
QString templateAddition;
|
|
private:
|
|
T m_item;
|
|
};
|
|
|
|
|
|
class CppNewClassDialog : public CppNewClassDialogBase
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
CppNewClassDialog( CppSupportPart *part, QWidget *parent = 0, const char *name = 0 );
|
|
~CppNewClassDialog();
|
|
|
|
protected:
|
|
virtual void accept();
|
|
virtual void classNameChanged( const QString &text );
|
|
virtual void classNamespaceChanged( const QString &text );
|
|
virtual void headerChanged();
|
|
virtual void implementationChanged();
|
|
virtual void nameHandlerChanged( const QString &text );
|
|
virtual void baseclassname_changed( const QString &text );
|
|
virtual void baseIncludeChanged( const QString &text );
|
|
|
|
virtual void addBaseClass();
|
|
virtual void remBaseClass();
|
|
virtual void remBaseClassOnly();
|
|
virtual void currBaseNameChanged( const QString &text );
|
|
virtual void currBasePrivateSet();
|
|
virtual void currBaseProtectedSet();
|
|
virtual void currBasePublicSet();
|
|
virtual void currBaseVirtualChanged( int val );
|
|
virtual void currBaseSelected( QListViewItem *it );
|
|
virtual void scopeboxActivated( int value );
|
|
|
|
virtual void checkObjCInheritance( int val );
|
|
virtual void checkQWidgetInheritance( int val );
|
|
|
|
virtual void upbaseclass_button_clicked();
|
|
virtual void downbaseclass_button_clicked();
|
|
virtual void baseclasses_view_selectionChanged();
|
|
|
|
virtual void newTabSelected( const QString &text );
|
|
virtual void newTabSelected( QWidget *w );
|
|
virtual void access_view_mouseButtonPressed( int button, QListViewItem * item, const QPoint &p, int c );
|
|
virtual void changeToPrivate();
|
|
virtual void changeToProtected();
|
|
virtual void changeToPublic();
|
|
virtual void changeToInherited();
|
|
virtual void methods_view_mouseButtonPressed( int button , QListViewItem * item, const QPoint&p , int c );
|
|
virtual void extendFunctionality();
|
|
virtual void replaceFunctionality();
|
|
virtual void to_constructors_list_clicked();
|
|
virtual void clear_selection_button_clicked();
|
|
virtual void selectall_button_clicked();
|
|
virtual void gtk_box_stateChanged( int val );
|
|
virtual void qobject_box_stateChanged( int val );
|
|
virtual void headeronly_box_stateChanged(int val);
|
|
|
|
void reloadAdvancedInheritance( bool clean = false );
|
|
void parseClass( QString clName, QString inheritance );
|
|
void parsePCSClass( QString clName, QString inheritance );
|
|
void addToConstructorsList( QCheckListItem *myClass, FunctionDom method );
|
|
void addToMethodsList( QListViewItem *parent, FunctionDom method );
|
|
void addToUpgradeList( QListViewItem *parent, FunctionDom method, QString modifier );
|
|
void addToUpgradeList( QListViewItem *parent, VariableDom attr, QString modifier );
|
|
void clearConstructorsList( bool clean = false );
|
|
void clearMethodsList( bool clean = false );
|
|
void clearUpgradeList( bool clean = false );
|
|
bool isConstructor( QString className, const FunctionDom &method );
|
|
bool isDestructor( QString className, const FunctionDom &method );
|
|
|
|
private:
|
|
|
|
bool headerModified;
|
|
bool baseincludeModified;
|
|
bool implementationModified;
|
|
QString m_parse;
|
|
QPopupMenu *accessMenu;
|
|
QPopupMenu *overMenu;
|
|
CppSupportPart *m_part;
|
|
CodeModel *myModel;
|
|
|
|
// configuration variables
|
|
QString interface_url;
|
|
QString implementation_url;
|
|
QString interface_suffix;
|
|
QString implementation_suffix;
|
|
QStringList currNamespace;
|
|
bool lowercase_filenames;
|
|
QStringList currBaseClasses;
|
|
KCompletion * compBasename;
|
|
KCompletion * compNamespace;
|
|
|
|
void setCompletionBasename( CodeModel *model );
|
|
void addCompletionBasenameNamespacesRecursive( const NamespaceDom & namespaceDom, const QString & namespaceParent = "" );
|
|
void setCompletionNamespaceRecursive( const NamespaceDom & namespaceDom, const QString & namespaceParent = "" );
|
|
void setStateOfInheritanceEditors( bool state, bool hideList = true );
|
|
void setAccessForBase( QString baseclass, QString newAccess );
|
|
void setAccessForItem( QListViewItem *curr, QString newAccess, bool isPublic );
|
|
void remClassFromAdv( QString text );
|
|
void checkUpButtonState();
|
|
void checkDownButtonState();
|
|
void updateConstructorsOrder();
|
|
|
|
QString classNameFormatted();
|
|
QString templateStrFormatted();
|
|
QString templateParamsFormatted();
|
|
QString classNameFormatted( const QString & );
|
|
QString templateStrFormatted( const QString & );
|
|
QString templateParamsFormatted( const QString & );
|
|
QString templateActualParamsFormatted( const QString & );
|
|
void removeTemplateParams( QString & );
|
|
|
|
friend class ClassGenerator;
|
|
|
|
//! The class that translates UI input to a class
|
|
class ClassGenerator
|
|
{
|
|
|
|
public:
|
|
ClassGenerator( CppNewClassDialog& _dlg ) : dlg( _dlg )
|
|
{}
|
|
bool generate();
|
|
|
|
private:
|
|
bool validateInput();
|
|
void common_text();
|
|
void gen_implementation();
|
|
void gen_interface();
|
|
void genMethodDeclaration( FunctionDom method, QString className, QString templateStr,
|
|
QString *adv_h, QString *adv_cpp, bool extend, QString baseClassName );
|
|
|
|
void beautifyHeader( QString &templ, QString &headerGuard,
|
|
QString &includeBaseHeader, QString &author, QString &doc, QString &className, QString &templateStr,
|
|
QString &baseclass, QString &inheritance, QString &qobjectStr, QString &args,
|
|
QString &header, QString &namespaceBeg, QString &constructors, QString &advH_public,
|
|
QString &advH_public_slots,
|
|
QString &advH_protected, QString &advH_protected_slots, QString &advH_private, QString &advH_private_slots,
|
|
QString &namespaceEnd );
|
|
void beautifySource( QString &templ, QString &header, QString &className, QString &namespaceBeg,
|
|
QString &constructors, QString &advCpp, QString &namespaceEnd, QString &implementation );
|
|
|
|
QString className;
|
|
QString templateStr;
|
|
QString templateParams;
|
|
QString header;
|
|
QString implementation;
|
|
|
|
QString advConstructorsHeader;
|
|
QString advConstructorsSource;
|
|
|
|
KDevProject *project;
|
|
QString subDir, headerPath, implementationPath;
|
|
QString doc;
|
|
QString namespaceStr;
|
|
bool childClass;
|
|
bool objc;
|
|
bool qobject;
|
|
bool gtk;
|
|
bool headeronly;
|
|
QStringList namespaces;
|
|
QString namespaceBeg, namespaceEnd;
|
|
QString argsH;
|
|
QString argsCpp;
|
|
|
|
QString advH_public;
|
|
QString advH_public_slots;
|
|
QString advH_protected;
|
|
QString advH_protected_slots;
|
|
QString advH_private;
|
|
QString advH_private_slots;
|
|
QString advCpp;
|
|
|
|
|
|
CppNewClassDialog& dlg;
|
|
};
|
|
|
|
|
|
//! workaround to make gcc 2.95.x happy
|
|
friend class CppNewClassDialog::ClassGenerator;
|
|
};
|
|
|
|
#endif
|
|
// kate: indent-mode csands; tab-width 4;
|
|
|