KDevelop API Documentation

kdevbuildsystem.h

Go to the documentation of this file.
00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 Alexander Dymo <cloudtemple@mksat.net>
00003    Copyright (C) 2003 Roberto Raggi <roberto@kdevelop.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018    Boston, MA 02111-1307, USA.
00019 */
00020 #ifndef _KDEVBUILDSYSTEM_H_
00021 #define _KDEVBUILDSYSTEM_H_
00022 
00023 #include <qobject.h>
00024 
00025 #include <kurl.h>
00026 
00027 #include <qmap.h>
00028 #include <qvariant.h>
00029 #include <qvaluelist.h>
00030 #include <qwidget.h>
00031 #include <qdom.h>
00032 
00033 #include "kdevproject.h"
00034 
00035 #include "propertylist.h"
00036 #include "multiproperty.h"
00037 
00038 class BuildFileItem;
00039 class BuildGroupItem;
00040 class BuildTargetItem;
00041 class KDialogBase;
00042 
00043 class BuildBaseItem
00044 {
00045 public:
00046     enum
00047     {
00048     Group,
00049     Target,
00050     File,
00051     
00052     Custom=1000
00053     };
00054 
00055 public:
00056     BuildBaseItem( int type, BuildBaseItem* parent=0 );
00057     virtual ~BuildBaseItem();
00058 
00059     virtual int type() const { return m_type; }
00060     virtual QString name() const { return m_name; }
00061 
00062     BuildBaseItem* parent() { return m_parent; }
00063     const BuildBaseItem* parent() const { return m_parent; }
00064 
00065     PropertyLib::PropertyList& attributes() { return m_attributes; }
00066     PropertyLib::PropertyList *pAttributes() { return &m_attributes; }
00067 
00068 //    bool hasAttribute( const QString& name ) const { return m_attributes.contains( name ); }
00069     QVariant attribute( const QString& name ) { return m_attributes[name]->value(); }
00070     void setAttribute( const QString& name, const QVariant& value ) { m_attributes[name]->setValue(value); }
00071 
00072     virtual QString path();
00073 
00074 protected:
00075     QString m_name;
00076 
00077 private:
00078     int m_type;
00079     BuildBaseItem* m_parent;
00080     PropertyLib::PropertyList m_attributes;
00081 
00082 private:
00083     BuildBaseItem( const BuildBaseItem& source );
00084     void operator = ( const BuildBaseItem& source );
00085 };
00086 
00087 class BuildGroupItem: public BuildBaseItem
00088 {
00089 public:
00090     BuildGroupItem( const QString& name, BuildGroupItem* parent=0 );
00091     virtual ~BuildGroupItem();
00092 
00093     BuildGroupItem* parentGroup() { return m_parentGroup; }
00094     const BuildGroupItem* parentGroup() const { return m_parentGroup; }
00095 
00096     void insertGroup( BuildGroupItem* group );
00097     void removeGroup( BuildGroupItem* group );
00098     BuildGroupItem* takeGroup( BuildGroupItem* group );
00099     BuildGroupItem* groupByname( const QString& groupName );
00100     QValueList<BuildGroupItem*> groups() { return m_subGroups; }
00101 
00102     void insertTarget( BuildTargetItem* target );
00103     void removeTarget( BuildTargetItem* target );
00104     BuildTargetItem* takeTarget( BuildTargetItem* target );
00105     BuildTargetItem* targetByName( const QString& targetName );
00106     QValueList<BuildTargetItem*> targets() { return m_targets; }
00107 
00108 private:
00109     BuildGroupItem* m_parentGroup;
00110     QValueList<BuildGroupItem*> m_subGroups;
00111     QValueList<BuildTargetItem*> m_targets;
00112 
00113 private:
00114     BuildGroupItem( const BuildGroupItem& source );
00115     void operator = ( const BuildGroupItem& source );
00116 };
00117 
00118 class BuildTargetItem: public BuildBaseItem
00119 {
00120 public:
00121     BuildTargetItem( const QString& name, BuildGroupItem* parent );
00122     virtual ~BuildTargetItem();
00123 
00124     BuildGroupItem* parentGroup() { return m_parentGroup; }
00125     const BuildGroupItem* parentGroup() const { return m_parentGroup; }
00126 
00127     void insertFile( BuildFileItem* file );
00128     void removeFile( BuildFileItem* file );
00129     BuildFileItem* takeFile( BuildFileItem* file );
00130     BuildFileItem* fileByName( const QString& fileName );
00131     QValueList<BuildFileItem*> files() { return m_files; }
00132 
00133 private:
00134     BuildGroupItem* m_parentGroup;
00135     QValueList<BuildFileItem*> m_files;
00136 
00137 private:
00138     BuildTargetItem( const BuildTargetItem& source );
00139     void operator = ( const BuildTargetItem& source );
00140 };
00141 
00142 class BuildFileItem: public BuildBaseItem
00143 {
00144 public:
00145     BuildFileItem( const KURL& url, BuildTargetItem* parentTarget );
00146     virtual ~BuildFileItem();
00147 
00148     BuildTargetItem* parentTarget() { return m_parentTarget; }
00149     const BuildTargetItem* parentTarget() const { return m_parentTarget; }
00150 
00151     const KURL& url() const { return m_url; }
00152     virtual QString name() const { return m_url.fileName(); }
00153 
00154 private:
00155     KURL m_url;
00156     BuildTargetItem* m_parentTarget;
00157 
00158 private:
00159     BuildFileItem( const BuildFileItem& source );
00160     void operator = ( const BuildFileItem& source );
00161 };
00162 
00163 class BuildItemConfigWidget: public QWidget{
00164     Q_OBJECT
00165 public:
00166     BuildItemConfigWidget(BuildBaseItem *it, QWidget *parent = 0, const char *name = 0);
00167 public slots:
00168     virtual void accept();
00169 };
00170 
00171 class ProjectConfigTab: public QWidget{
00172 public:
00173     ProjectConfigTab(QWidget *parent = 0, const char *name = 0);
00174     virtual QDomDocument configuration() = 0;
00175 };
00176 
00184 class KDevBuildSystem : public QObject
00185 {
00186     Q_OBJECT
00187 
00188 public:
00189     KDevBuildSystem( QObject *parent=0, const char *name=0 );
00190     virtual ~KDevBuildSystem();
00191 
00192     virtual void initProject(KDevProject *project);
00193     virtual KDevProject *project();
00194 
00196     virtual QString buildSystemName() = 0;
00200     virtual void createBuildSystem(BuildBaseItem*) = 0;
00201 
00203     virtual void build(BuildBaseItem* it = 0) = 0;
00204 
00206     virtual void install(BuildBaseItem* it = 0) = 0;
00207 
00209     virtual void execute(BuildBaseItem* it = 0) = 0;
00210 
00212     virtual void clean(BuildBaseItem* it = 0) = 0;
00213 
00215     virtual void configureBuildItem(KDialogBase *, BuildBaseItem*);
00220     virtual QValueList<ProjectConfigTab *> confWidgets() = 0;
00221 
00225     //@todo adymo: implement
00226     virtual void addDefaultBuildWidget(KDialogBase *dlg, QWidget *parent, BuildBaseItem*);
00227 
00228 protected:
00229     virtual void updateDefaultBuildWidget();
00230 
00231 private:
00232     KDevProject *m_project;
00233 };
00234 
00235 
00236 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:52 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003