diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 6cfec71e0f6..3acd76af8fd 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -75,7 +75,7 @@ Q_DECLARE_METATYPE(Core::IEditor*)
using namespace Core;
using namespace Core::Internal;
-enum { debugEditorManager=0 };
+enum { debugEditorManager=1 };
static inline ExtensionSystem::PluginManager *pluginManager()
{
diff --git a/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml b/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
index d3ff62dbea5..c45a828b200 100644
--- a/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
+++ b/src/plugins/genericprojectmanager/GenericProject.mimetypes.xml
@@ -1,8 +1,28 @@
+
Generic Qt Creator Project file
+
+
+
+ Generic Project Files
+
+
+
+
+
+ Generic Project Include Paths
+
+
+
+
+
+ Generic Project Configuration File
+
+
+
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 55190077899..9e1c52efb68 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -113,32 +113,72 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
_file = new GenericProjectFile(this, fileName);
_rootNode = new GenericProjectNode(this, _file);
+
+ _manager->registerProject(this);
}
GenericProject::~GenericProject()
{
qDebug() << Q_FUNC_INFO;
+ _manager->unregisterProject(this);
+
delete _rootNode;
delete _toolChain;
}
+QStringList GenericProject::readLines(const QString &absoluteFileName) const
+{
+ QStringList lines;
+
+ QFile file(absoluteFileName);
+ if (file.open(QFile::ReadOnly)) {
+ QTextStream stream(&file);
+
+ forever {
+ QString line = stream.readLine();
+ if (line.isNull())
+ break;
+
+ line = line.trimmed();
+ if (line.isEmpty())
+ continue;
+
+ lines.append(line);
+ }
+ }
+
+ return lines;
+}
+
+
void GenericProject::parseProject()
{
+ const QFileInfo projectFileInfo(_fileName);
+ const QDir projectDir = projectFileInfo.dir();
+ const QString projectName = projectFileInfo.baseName();
+ const QFileInfo projectFiles(projectDir, projectName + QLatin1String(".files"));
+ const QFileInfo projectIncludes(projectDir, projectName + QLatin1String(".includes"));
+ const QFileInfo projectConfig(projectDir, projectName + QLatin1String(".config"));
+
QSettings projectInfo(_fileName, QSettings::IniFormat);
- _files = convertToAbsoluteFiles(projectInfo.value(QLatin1String("files")).toStringList());
+ _files = convertToAbsoluteFiles(readLines(projectFiles.absoluteFilePath()));
+ _projectIncludePaths = readLines(projectIncludes.absoluteFilePath());
+
_generated = convertToAbsoluteFiles(projectInfo.value(QLatin1String("generated")).toStringList());
_defines = projectInfo.value(QLatin1String("defines")).toStringList();
_projectIncludePaths = projectInfo.value(QLatin1String("includePaths")).toStringList();
-
- qDebug() << "project include paths:" << _projectIncludePaths;
+
+ emit fileListChanged();
}
void GenericProject::refresh()
{
qDebug() << Q_FUNC_INFO;
+ parseProject();
+
_rootNode->refresh();
CppTools::CppModelManagerInterface *modelManager =
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 5ed588d7f09..c5cb8bcf8a0 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -106,6 +106,8 @@ protected:
private:
void parseProject();
+ QStringList readLines(const QString &absoluteFileName) const;
+
Manager *_manager;
QString _fileName;
GenericProjectFile *_file;
diff --git a/src/plugins/genericprojectmanager/genericprojectconstants.h b/src/plugins/genericprojectmanager/genericprojectconstants.h
index 7a47effaff4..d05c922b5e0 100644
--- a/src/plugins/genericprojectmanager/genericprojectconstants.h
+++ b/src/plugins/genericprojectmanager/genericprojectconstants.h
@@ -33,10 +33,24 @@
namespace GenericProjectManager {
namespace Constants {
-const char *const PROJECTCONTEXT = "GenericProject.ProjectContext";
-const char *const GENERICMIMETYPE = "text/x-generic-project";
-const char *const MAKESTEP = "GenericProjectManager.MakeStep";
+const char *const PROJECTCONTEXT = "GenericProject.ProjectContext";
+const char *const GENERICMIMETYPE = "text/x-generic-project"; // ### FIXME
+const char *const MAKESTEP = "GenericProjectManager.MakeStep";
+// contexts
+const char *const C_FILESEDITOR = ".files Editor";
+
+// kinds
+const char *const PROJECT_KIND = "Generic";
+
+const char *const FILES_EDITOR = ".files Editor";
+const char *const FILES_MIMETYPE = "application/vnd.nokia.qt.generic.files";
+
+const char *const INCLUDES_EDITOR = ".includes Editor";
+const char *const INCLUDES_MIMETYPE = "application/vnd.nokia.qt.generic.includes";
+
+const char *const CONFIG_EDITOR = ".includes Editor";
+const char *const CONFIG_MIMETYPE = "application/vnd.nokia.qt.generic.config";
} // namespace Constants
} // namespace GenericProjectManager
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
new file mode 100644
index 00000000000..c072d641f95
--- /dev/null
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp
@@ -0,0 +1,136 @@
+#include "genericprojectfileseditor.h"
+#include "genericprojectmanager.h"
+#include "genericprojectconstants.h"
+
+#include
+#include
+
+#include
+
+using namespace GenericProjectManager;
+using namespace GenericProjectManager::Internal;
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditable
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesFactory::ProjectFilesFactory(Manager *manager,
+ TextEditor::TextEditorActionHandler *handler)
+ : Core::IEditorFactory(manager),
+ _manager(manager),
+ _actionHandler(handler)
+{
+ _mimeTypes.append(QLatin1String(Constants::FILES_MIMETYPE));
+ _mimeTypes.append(QLatin1String(Constants::INCLUDES_MIMETYPE));
+}
+
+ProjectFilesFactory::~ProjectFilesFactory()
+{ }
+
+Manager *ProjectFilesFactory::manager() const
+{ return _manager; }
+
+Core::IEditor *ProjectFilesFactory::createEditor(QWidget *parent)
+{
+ ProjectFilesEditor *ed = new ProjectFilesEditor(parent, this, _actionHandler);
+ // ### initialize
+ return ed->editableInterface();
+}
+
+QStringList ProjectFilesFactory::mimeTypes() const
+{ return _mimeTypes; }
+
+QString ProjectFilesFactory::kind() const
+{ return QLatin1String(Constants::FILES_EDITOR); }
+
+Core::IFile *ProjectFilesFactory::open(const QString &fileName)
+{
+ qDebug() << Q_FUNC_INFO << fileName;
+
+ Core::EditorManager *editorManager = Core::EditorManager::instance();
+
+ if (Core::IEditor *editor = editorManager->openEditor(fileName, kind()))
+ return editor->file();
+
+ return 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditable
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesEditable::ProjectFilesEditable(ProjectFilesEditor *editor)
+ : TextEditor::BaseTextEditorEditable(editor)
+{
+ Core::UniqueIDManager *uidm = Core::UniqueIDManager::instance();
+ _context << uidm->uniqueIdentifier(Constants::C_FILESEDITOR);
+}
+
+ProjectFilesEditable::~ProjectFilesEditable()
+{ }
+
+QList ProjectFilesEditable::context() const
+{ return _context; }
+
+const char *ProjectFilesEditable::kind() const
+{ return Constants::FILES_EDITOR; }
+
+bool ProjectFilesEditable::duplicateSupported() const
+{ return true; }
+
+Core::IEditor *ProjectFilesEditable::duplicate(QWidget *parent)
+{
+ ProjectFilesEditor *parentEditor = qobject_cast(editor());
+ ProjectFilesEditor *editor = new ProjectFilesEditor(parent,
+ parentEditor->factory(),
+ parentEditor->actionHandler());
+ return editor->editableInterface();
+
+
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesEditor
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesEditor::ProjectFilesEditor(QWidget *parent, ProjectFilesFactory *factory,
+ TextEditor::TextEditorActionHandler *handler)
+ : TextEditor::BaseTextEditor(parent),
+ _factory(factory),
+ _actionHandler(handler)
+{
+ Manager *manager = factory->manager();
+ ProjectFilesDocument *doc = new ProjectFilesDocument(manager);
+ setBaseTextDocument(doc);
+}
+
+ProjectFilesEditor::~ProjectFilesEditor()
+{ }
+
+ProjectFilesFactory *ProjectFilesEditor::factory() const
+{ return _factory; }
+
+TextEditor::TextEditorActionHandler *ProjectFilesEditor::actionHandler() const
+{ return _actionHandler; }
+
+TextEditor::BaseTextEditorEditable *ProjectFilesEditor::createEditableInterface()
+{ return new ProjectFilesEditable(this); }
+
+////////////////////////////////////////////////////////////////////////////////////////
+// ProjectFilesDocument
+////////////////////////////////////////////////////////////////////////////////////////
+ProjectFilesDocument::ProjectFilesDocument(Manager *manager)
+ : _manager(manager)
+{
+ setMimeType(QLatin1String(Constants::FILES_MIMETYPE));
+}
+
+ProjectFilesDocument::~ProjectFilesDocument()
+{ }
+
+bool ProjectFilesDocument::save(const QString &name)
+{
+ if (! BaseTextDocument::save(name))
+ return false;
+
+ _manager->notifyChanged(name);
+ return true;
+}
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.h b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
new file mode 100644
index 00000000000..14077aca5b7
--- /dev/null
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
@@ -0,0 +1,94 @@
+#ifndef GENERICPROJECTFILESEDITOR_H
+#define GENERICPROJECTFILESEDITOR_H
+
+#include
+#include
+
+#include
+
+namespace GenericProjectManager {
+namespace Internal {
+
+class Manager;
+class ProjectFilesEditable;
+class ProjectFilesEditor;
+class ProjectFilesDocument;
+class ProjectFilesFactory;
+
+class ProjectFilesFactory: public Core::IEditorFactory
+{
+ Q_OBJECT
+
+public:
+ ProjectFilesFactory(Manager *manager, TextEditor::TextEditorActionHandler *handler);
+ virtual ~ProjectFilesFactory();
+
+ Manager *manager() const;
+
+ virtual Core::IEditor *createEditor(QWidget *parent);
+
+ virtual QStringList mimeTypes() const;
+ virtual QString kind() const;
+ virtual Core::IFile *open(const QString &fileName);
+
+private:
+ Manager *_manager;
+ TextEditor::TextEditorActionHandler *_actionHandler;
+ QStringList _mimeTypes;
+};
+
+class ProjectFilesEditable: public TextEditor::BaseTextEditorEditable
+{
+ Q_OBJECT
+
+public:
+ ProjectFilesEditable(ProjectFilesEditor *editor);
+ virtual ~ProjectFilesEditable();
+
+ virtual QList context() const;
+ virtual const char *kind() const;
+
+ virtual bool duplicateSupported() const;
+ virtual Core::IEditor *duplicate(QWidget *parent);
+
+private:
+ QList _context;
+};
+
+class ProjectFilesEditor: public TextEditor::BaseTextEditor
+{
+ Q_OBJECT
+
+public:
+ ProjectFilesEditor(QWidget *parent, ProjectFilesFactory *factory,
+ TextEditor::TextEditorActionHandler *handler);
+ virtual ~ProjectFilesEditor();
+
+ ProjectFilesFactory *factory() const;
+ TextEditor::TextEditorActionHandler *actionHandler() const;
+
+ virtual TextEditor::BaseTextEditorEditable *createEditableInterface();
+
+private:
+ ProjectFilesFactory *_factory;
+ TextEditor::TextEditorActionHandler *_actionHandler;
+};
+
+class ProjectFilesDocument: public TextEditor::BaseTextDocument
+{
+ Q_OBJECT
+
+public:
+ ProjectFilesDocument(Manager *manager);
+ virtual ~ProjectFilesDocument();
+
+ virtual bool save(const QString &name);
+
+private:
+ Manager *_manager;
+};
+
+} // end of namespace Internal
+} // end of namespace GenericProjectManager
+
+#endif // GENERICPROJECTFILESEDITOR_H
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
index 28a629b011d..61fba763c97 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
@@ -35,6 +35,8 @@
#include
#include
+#include
+
using namespace GenericProjectManager::Internal;
Manager::Manager()
@@ -60,9 +62,24 @@ ProjectExplorer::Project *Manager::openProject(const QString &fileName)
{
QFileInfo fileInfo(fileName);
- if (fileInfo.isFile())
- return new GenericProject(this, fileName);
+ if (fileInfo.isFile()) {
+ GenericProject *project = new GenericProject(this, fileName);
+ return project;
+ }
return 0;
}
+void Manager::registerProject(GenericProject *project)
+{ _projects.append(project); }
+
+void Manager::unregisterProject(GenericProject *project)
+{ _projects.removeAll(project); }
+
+void Manager::notifyChanged(const QString &fileName)
+{
+ foreach (GenericProject *project, _projects) {
+ project->refresh();
+ }
+}
+
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.h b/src/plugins/genericprojectmanager/genericprojectmanager.h
index 56da9865190..608313e13f0 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.h
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.h
@@ -35,6 +35,8 @@
namespace GenericProjectManager {
namespace Internal {
+class GenericProject;
+
class Manager: public ProjectExplorer::IProjectManager
{
Q_OBJECT
@@ -49,9 +51,15 @@ public:
virtual QString mimeType() const;
virtual ProjectExplorer::Project *openProject(const QString &fileName);
+ void notifyChanged(const QString &fileName);
+
+ void registerProject(GenericProject *project);
+ void unregisterProject(GenericProject *project);
+
private:
int _projectContext;
int _projectLanguage;
+ QList _projects;
};
} // namespace Internal
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro
index 57a849d161b..fa8bb3a987e 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.pro
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro
@@ -8,6 +8,7 @@ HEADERS = genericproject.h \
genericprojectconstants.h \
genericprojectnodes.h \
genericprojectwizard.h \
+ genericprojectfileseditor.h \
pkgconfigtool.h \
makestep.h
SOURCES = genericproject.cpp \
@@ -15,6 +16,7 @@ SOURCES = genericproject.cpp \
genericprojectmanager.cpp \
genericprojectnodes.cpp \
genericprojectwizard.cpp \
+ genericprojectfileseditor.cpp \
pkgconfigtool.cpp \
makestep.cpp
RESOURCES += genericproject.qrc
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
index 75d70955a6e..2fe1e713910 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp
@@ -30,21 +30,30 @@
#include "genericprojectplugin.h"
#include "genericprojectmanager.h"
#include "genericprojectwizard.h"
+#include "genericprojectconstants.h"
+#include "genericprojectfileseditor.h"
#include "makestep.h"
#include
#include
+#include
+
#include
#include
+using namespace GenericProjectManager;
using namespace GenericProjectManager::Internal;
GenericProjectPlugin::GenericProjectPlugin()
+ : _projectFilesEditorFactory(0)
{ }
GenericProjectPlugin::~GenericProjectPlugin()
-{ }
+{
+ removeObject(_projectFilesEditorFactory);
+ delete _projectFilesEditorFactory;
+}
bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage)
{
@@ -58,7 +67,15 @@ bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage
if (! mimeDB->addMimeTypes(mimetypesXml, errorMessage))
return false;
- addAutoReleasedObject(new Manager);
+ Manager *manager = new Manager;
+
+ TextEditor::TextEditorActionHandler *actionHandler =
+ new TextEditor::TextEditorActionHandler(Constants::C_FILESEDITOR);
+
+ _projectFilesEditorFactory = new ProjectFilesFactory(manager, actionHandler);
+ addObject(_projectFilesEditorFactory);
+
+ addAutoReleasedObject(manager);
addAutoReleasedObject(new MakeBuildStepFactory);
addAutoReleasedObject(new GenericProjectWizard);
diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.h b/src/plugins/genericprojectmanager/genericprojectplugin.h
index 287ef500ff1..e78d975e21f 100644
--- a/src/plugins/genericprojectmanager/genericprojectplugin.h
+++ b/src/plugins/genericprojectmanager/genericprojectplugin.h
@@ -37,6 +37,8 @@
namespace GenericProjectManager {
namespace Internal {
+class ProjectFilesFactory;
+
class GenericProjectPlugin: public ExtensionSystem::IPlugin
{
Q_OBJECT
@@ -47,6 +49,9 @@ public:
virtual bool initialize(const QStringList &arguments, QString *errorString);
virtual void extensionsInitialized();
+
+private:
+ ProjectFilesFactory *_projectFilesEditorFactory;
};
} // namespace Internal