00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _CPPNEWCLASSDLG_H_
00017 #define _CPPNEWCLASSDLG_H_
00018
00019 #include <qlineedit.h>
00020 #include <qlistview.h>
00021 #include <qwidgetstack.h>
00022
00023 #include "codemodel.h"
00024 #include "cppnewclassdlgbase.h"
00025
00026 class KDevLanguageSupport;
00027 class KDevProject;
00028 class QPopupMenu;
00029 class KCompletion;
00030
00031
00032 template<class T>
00033 class PCheckListItem: public QCheckListItem{
00034 public:
00035
00036 PCheckListItem ( T item, QCheckListItem * parent, const QString & text, Type tt = Controller ):
00037 QCheckListItem ( parent, text, tt ), m_item(item) {}
00038
00039 PCheckListItem ( T item, QCheckListItem * parent, QListViewItem * after, const QString & text, Type tt = Controller ):
00040 QCheckListItem ( parent, after, text, tt ), m_item(item) {}
00041
00042 PCheckListItem ( T item, QListViewItem * parent, const QString & text, Type tt = Controller ):
00043 QCheckListItem ( parent, text, tt ), m_item(item) {}
00044
00045 PCheckListItem ( T item, QListViewItem * parent, QListViewItem * after, const QString & text, Type tt = Controller ):
00046 QCheckListItem ( parent, after, text, tt ), m_item(item) {}
00047
00048 PCheckListItem ( T item, QListView * parent, const QString & text, Type tt = Controller ):
00049 QCheckListItem ( parent, text, tt ), m_item(item) {}
00050
00051 PCheckListItem ( T item, QListView * parent, QListViewItem * after, const QString & text, Type tt = Controller ):
00052 QCheckListItem ( parent, after, text, tt ), m_item(item) {}
00053
00054 PCheckListItem ( T item, QListViewItem * parent, const QString & text, const QPixmap & p ):
00055 QCheckListItem ( parent, text, p ), m_item(item) {}
00056
00057 PCheckListItem ( T item, QListView * parent, const QString & text, const QPixmap & p ):
00058 QCheckListItem ( parent, text, p ), m_item(item) {}
00059
00060 T item()
00061 {
00062 return m_item;
00063 }
00064
00065 QString templateAddition;
00066
00067 private:
00068 T m_item;
00069 };
00070
00071 template<class T>
00072 class PListViewItem: public QListViewItem{
00073 public:
00074
00075 PListViewItem ( T item, QListViewItem * parent, QListViewItem * after, const QString & text ):
00076 QListViewItem ( parent, after, text ), m_item(item) {}
00077
00078 PListViewItem ( T item, QListViewItem * parent, const QString & text ):
00079 QListViewItem ( parent, text ), m_item(item) {}
00080
00081 PListViewItem ( T item, QListView * parent, const QString & text ):
00082 QListViewItem ( parent, text ), m_item(item) {}
00083
00084 PListViewItem ( T item, QListView * parent, QListViewItem * after, const QString & text ):
00085 QListViewItem ( parent, after, text ), m_item(item) {}
00086
00087 T item()
00088 {
00089 return m_item;
00090 }
00091
00092 QString templateAddition;
00093 private:
00094 T m_item;
00095 };
00096
00097
00098 class CppNewClassDialog : public CppNewClassDialogBase
00099 {
00100 Q_OBJECT
00101
00102 public:
00103 CppNewClassDialog(KDevLanguageSupport *part, QWidget *parent=0, const char *name=0);
00104 ~CppNewClassDialog();
00105
00106 protected:
00107 virtual void accept();
00108 virtual void classNameChanged(const QString &text);
00109 virtual void classNamespaceChanged(const QString &text);
00110 virtual void headerChanged();
00111 virtual void implementationChanged();
00112 virtual void nameHandlerChanged(const QString &text);
00113 virtual void baseclassname_changed(const QString &text);
00114 virtual void baseIncludeChanged(const QString &text);
00115
00116 virtual void addBaseClass();
00117 virtual void remBaseClass();
00118 virtual void remBaseClassOnly();
00119 virtual void currBaseNameChanged(const QString &text);
00120 virtual void currBasePrivateSet();
00121 virtual void currBaseProtectedSet();
00122 virtual void currBasePublicSet();
00123 virtual void currBaseVirtualChanged(int val);
00124 virtual void currBaseSelected(QListViewItem *it);
00125 virtual void scopeboxActivated(int value);
00126
00127 virtual void checkObjCInheritance(int val);
00128 virtual void checkQWidgetInheritance(int val);
00129
00130 virtual void upbaseclass_button_clicked();
00131 virtual void downbaseclass_button_clicked();
00132 virtual void baseclasses_view_selectionChanged();
00133
00134 virtual void newTabSelected(const QString &text);
00135 virtual void newTabSelected(QWidget *w);
00136 virtual void access_view_mouseButtonPressed( int button, QListViewItem * item, const QPoint &p, int c );
00137 virtual void changeToPrivate();
00138 virtual void changeToProtected();
00139 virtual void changeToPublic();
00140 virtual void changeToInherited();
00141 virtual void methods_view_mouseButtonPressed(int button ,QListViewItem * item, const QPoint&p ,int c);
00142 virtual void extendFunctionality();
00143 virtual void replaceFunctionality();
00144 virtual void to_constructors_list_clicked();
00145 virtual void clear_selection_button_clicked();
00146 virtual void selectall_button_clicked();
00147 virtual void gtk_box_stateChanged(int val);
00148 virtual void qobject_box_stateChanged(int val);
00149
00150 void reloadAdvancedInheritance(bool clean = false);
00151 void parseClass(QString clName, QString inheritance);
00152 void addToConstructorsList(QCheckListItem *myClass, FunctionDom method);
00153 void addToMethodsList(QListViewItem *parent, FunctionDom method);
00154 void addToUpgradeList(QListViewItem *parent, FunctionDom method, QString modifier);
00155 void addToUpgradeList(QListViewItem *parent, VariableDom attr, QString modifier);
00156 void clearConstructorsList(bool clean = false);
00157 void clearMethodsList(bool clean = false);
00158 void clearUpgradeList(bool clean = false);
00159 bool isConstructor(QString className, const FunctionDom &method);
00160 bool isDestructor(QString className, const FunctionDom &method);
00161
00162 private:
00163
00164 bool headerModified;
00165 bool baseincludeModified;
00166 bool implementationModified;
00167 QString m_parse;
00168 QPopupMenu *accessMenu;
00169 QPopupMenu *overMenu;
00170 KDevLanguageSupport *m_part;
00171
00172
00173 QString interface_url;
00174 QString implementation_url;
00175 QString interface_suffix;
00176 QString implementation_suffix;
00177 QStringList currNamespace;
00178 bool lowercase_filenames;
00179 QStringList currBaseClasses;
00180 KCompletion * compBasename;
00181 KCompletion * compNamespace;
00182
00183 void setCompletionBasename(CodeModel *model);
00184 void addCompletionBasenameNamespacesRecursive(const NamespaceDom & namespaceDom, const QString & namespaceParent = "");
00185 void setCompletionNamespaceRecursive(const NamespaceDom & namespaceDom, const QString & namespaceParent = "");
00186 void setStateOfInheritanceEditors(bool state, bool hideList = true);
00187 void setAccessForBase(QString baseclass, QString newAccess);
00188 void setAccessForItem(QListViewItem *curr, QString newAccess, bool isPublic);
00189 void remClassFromAdv(QString text);
00190 void checkUpButtonState();
00191 void checkDownButtonState();
00192 void updateConstructorsOrder();
00193
00194 QString classNameFormatted();
00195 QString templateStrFormatted();
00196 QString templateParamsFormatted();
00197 QString classNameFormatted(const QString &);
00198 QString templateStrFormatted(const QString &);
00199 QString templateParamsFormatted(const QString &);
00200 QString templateActualParamsFormatted(const QString &);
00201 void removeTemplateParams(QString &);
00202
00203 friend class ClassGenerator;
00204
00206 class ClassGenerator {
00207
00208 public:
00209 ClassGenerator(CppNewClassDialog& _dlg) : dlg(_dlg) {}
00210 bool generate();
00211
00212 private:
00213 bool validateInput();
00214 void common_text();
00215 void gen_implementation();
00216 void gen_interface();
00217 void genMethodDeclaration(FunctionDom method, QString className, QString templateStr,
00218 QString *adv_h, QString *adv_cpp, bool extend, QString baseClassName );
00219
00220 void beautifyHeader(QString &templ, QString &headerGuard,
00221 QString &includeBaseHeader, QString &author, QString &doc, QString &className, QString &templateStr,
00222 QString &baseclass, QString &inheritance, QString &qobjectStr, QString &args,
00223 QString &header, QString &namespaceBeg, QString &constructors, QString &advH_public, QString &advH_public_slots,
00224 QString &advH_protected, QString &advH_protected_slots, QString &advH_private, QString &advH_private_slots,
00225 QString &namespaceEnd);
00226 void beautifySource(QString &templ, QString &header, QString &className, QString &namespaceBeg,
00227 QString &constructors, QString &advCpp, QString &namespaceEnd, QString &implementation);
00228
00229 QString className;
00230 QString templateStr;
00231 QString templateParams;
00232 QString header;
00233 QString implementation;
00234
00235 QString advConstructorsHeader;
00236 QString advConstructorsSource;
00237
00238 KDevProject *project;
00239 QString subDir, headerPath, implementationPath;
00240 QString doc;
00241 QString namespaceStr;
00242 bool childClass;
00243 bool objc;
00244 bool qobject;
00245 bool gtk;
00246 QStringList namespaces;
00247 QString namespaceBeg, namespaceEnd;
00248 QString argsH;
00249 QString argsCpp;
00250
00251 QString advH_public;
00252 QString advH_public_slots;
00253 QString advH_protected;
00254 QString advH_protected_slots;
00255 QString advH_private;
00256 QString advH_private_slots;
00257 QString advCpp;
00258
00259
00260 CppNewClassDialog& dlg;
00261 };
00262
00263
00265 friend class CppNewClassDialog::ClassGenerator;
00266 };
00267
00268 #endif