Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
d690a844
Commit
d690a844
authored
Mar 13, 2009
by
Roberto Raggi
Browse files
Imrpvoed the importer.
parent
78210a5c
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/plugins/genericprojectmanager/genericproject.cpp
View file @
d690a844
...
...
@@ -130,6 +130,9 @@ void GenericProject::parseProject()
_files
=
convertToAbsoluteFiles
(
projectInfo
.
value
(
QLatin1String
(
"files"
)).
toStringList
());
_generated
=
convertToAbsoluteFiles
(
projectInfo
.
value
(
QLatin1String
(
"generated"
)).
toStringList
());
_defines
=
projectInfo
.
value
(
QLatin1String
(
"defines"
)).
toStringList
();
_projectIncludePaths
=
projectInfo
.
value
(
QLatin1String
(
"includePaths"
)).
toStringList
();
qDebug
()
<<
"project include paths:"
<<
_projectIncludePaths
;
}
void
GenericProject
::
refresh
()
...
...
@@ -158,7 +161,7 @@ void GenericProject::refresh()
allIncludePaths
.
append
(
headerPath
.
path
());
}
allIncludePaths
+=
i
ncludePaths
();
allIncludePaths
+=
this
->
allI
ncludePaths
();
pinfo
.
frameworkPaths
=
allFrameworkPaths
;
pinfo
.
includePaths
=
allIncludePaths
;
...
...
@@ -184,6 +187,18 @@ QStringList GenericProject::convertToAbsoluteFiles(const QStringList &paths) con
return
absolutePaths
;
}
QStringList
GenericProject
::
allIncludePaths
()
const
{
QStringList
paths
;
paths
+=
_includePaths
;
paths
+=
_projectIncludePaths
;
paths
.
removeDuplicates
();
return
paths
;
}
QStringList
GenericProject
::
projectIncludePaths
()
const
{
return
_projectIncludePaths
;
}
QStringList
GenericProject
::
files
()
const
{
return
_files
;
}
...
...
@@ -398,7 +413,11 @@ void GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead
toolChainId
=
QLatin1String
(
"gcc"
);
setToolChainId
(
toolChainId
.
toLower
());
// ### move
setIncludePaths
(
reader
.
restoreValue
(
QLatin1String
(
"includePaths"
)).
toStringList
());
const
QStringList
userIncludePaths
=
reader
.
restoreValue
(
QLatin1String
(
"includePaths"
)).
toStringList
();
setIncludePaths
(
allIncludePaths
());
parseProject
();
refresh
();
...
...
@@ -440,7 +459,8 @@ GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project)
// include paths
QListView
*
includePathsView
=
new
QListView
;
_includePathsModel
=
new
ListModel
(
this
);
_includePathsModel
->
setStringList
(
_project
->
includePaths
());
_includePathsModel
->
setStringList
(
_project
->
allIncludePaths
());
includePathsView
->
setModel
(
_includePathsModel
);
fl
->
addRow
(
tr
(
"Include paths:"
),
includePathsView
);
...
...
src/plugins/genericprojectmanager/genericproject.h
View file @
d690a844
...
...
@@ -89,6 +89,8 @@ public:
QStringList
defines
()
const
;
void
setDefines
(
const
QStringList
&
defines
);
QStringList
allIncludePaths
()
const
;
QStringList
projectIncludePaths
()
const
;
QStringList
files
()
const
;
QStringList
generated
()
const
;
QString
toolChainId
()
const
;
...
...
@@ -112,6 +114,7 @@ private:
QStringList
_files
;
QStringList
_generated
;
QStringList
_includePaths
;
QStringList
_projectIncludePaths
;
QStringList
_defines
;
GenericProjectNode
*
_rootNode
;
...
...
src/plugins/genericprojectmanager/genericprojectnodes.cpp
View file @
d690a844
...
...
@@ -115,16 +115,21 @@ ProjectExplorer::FolderNode *GenericProjectNode::findOrCreateFolderByName(const
folderName
+=
QLatin1Char
(
'/'
);
// ### FIXME
}
FolderNode
*
folder
=
_folderByName
.
value
(
folderName
);
if
(
!
folder
)
{
folder
=
new
FolderNode
(
components
.
at
(
end
-
1
));
_folderByName
.
insert
(
folderName
,
folder
);
FolderNode
*
parent
=
findOrCreateFolderByName
(
components
,
end
-
1
);
if
(
!
parent
)
parent
=
this
;
addFolderNodes
(
QList
<
FolderNode
*>
()
<<
folder
,
parent
);
}
const
QString
component
=
components
.
at
(
end
-
1
);
if
(
component
.
isEmpty
())
return
this
;
else
if
(
FolderNode
*
folder
=
_folderByName
.
value
(
folderName
))
return
folder
;
FolderNode
*
folder
=
new
FolderNode
(
component
);
_folderByName
.
insert
(
folderName
,
folder
);
FolderNode
*
parent
=
findOrCreateFolderByName
(
components
,
end
-
1
);
if
(
!
parent
)
parent
=
this
;
addFolderNodes
(
QList
<
FolderNode
*>
()
<<
folder
,
parent
);
return
folder
;
}
...
...
src/plugins/genericprojectmanager/genericprojectwizard.cpp
View file @
d690a844
#include
"genericprojectwizard.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/mimedatabase.h>
#include
<projectexplorer/projectexplorer.h>
#include
<utils/pathchooser.h>
#include
<QtGui/QWizard>
#include
<QtGui/QFormLayout>
#include
<QtCore/QDir>
#include
<QtCore/QtDebug>
#include
<QtGui/QWizard>
#include
<QtGui/QFormLayout>
#include
<QtGui/QListView>
#include
<QtGui/QTreeView>
#include
<QtGui/QDirModel>
using
namespace
GenericProjectManager
::
Internal
;
using
namespace
Core
::
Utils
;
GenericProjectWizard
::
GenericProjectWizard
()
:
Core
::
BaseFileWizard
(
parameters
())
namespace
{
class
DirModel
:
public
QDirModel
{
public:
DirModel
(
QObject
*
parent
)
:
QDirModel
(
parent
)
{
setFilter
(
QDir
::
Dirs
|
QDir
::
NoDotAndDotDot
);
}
virtual
~
DirModel
()
{
}
public:
virtual
int
columnCount
(
const
QModelIndex
&
)
const
{
return
1
;
}
virtual
Qt
::
ItemFlags
flags
(
const
QModelIndex
&
index
)
const
{
return
QDirModel
::
flags
(
index
)
|
Qt
::
ItemIsUserCheckable
;
}
virtual
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
{
if
(
index
.
column
()
==
0
&&
role
==
Qt
::
CheckStateRole
)
{
if
(
_selectedPaths
.
contains
(
index
))
return
Qt
::
Checked
;
return
Qt
::
Unchecked
;
}
return
QDirModel
::
data
(
index
,
role
);
}
virtual
bool
setData
(
const
QModelIndex
&
index
,
const
QVariant
&
value
,
int
role
)
{
if
(
index
.
column
()
==
0
&&
role
==
Qt
::
CheckStateRole
)
{
if
(
value
.
toBool
())
_selectedPaths
.
insert
(
index
);
else
_selectedPaths
.
remove
(
index
);
return
true
;
}
return
QDirModel
::
setData
(
index
,
value
,
role
);
}
void
clearSelectedPaths
()
{
_selectedPaths
.
clear
();
}
QSet
<
QString
>
selectedPaths
()
const
{
QSet
<
QString
>
paths
;
foreach
(
const
QModelIndex
&
index
,
_selectedPaths
)
paths
.
insert
(
filePath
(
index
));
return
paths
;
}
private:
QSet
<
QModelIndex
>
_selectedPaths
;
};
}
// end of anonymous namespace
//////////////////////////////////////////////////////////////////////////////
// GenericProjectWizardDialog
//////////////////////////////////////////////////////////////////////////////
GenericProjectWizardDialog
::
GenericProjectWizardDialog
(
QWidget
*
parent
)
:
QWizard
(
parent
)
{
setWindowTitle
(
tr
(
"Import Existing Project"
));
// first page
QWizardPage
*
firstPage
=
new
QWizardPage
;
firstPage
->
setTitle
(
tr
(
"Project"
));
QFormLayout
*
layout
=
new
QFormLayout
(
firstPage
);
_pathChooser
=
new
PathChooser
;
layout
->
addRow
(
tr
(
"Source Directory:"
),
_pathChooser
);
_firstPageId
=
addPage
(
firstPage
);
#if 0
// second page
QWizardPage *secondPage = new QWizardPage;
secondPage->setTitle(tr("Second Page Title"));
QFormLayout *secondPageLayout = new QFormLayout(secondPage);
_dirView = new QTreeView;
_dirModel = new DirModel(this);
_dirView->setModel(_dirModel);
Core::ICore *core = Core::ICore::instance();
Core::MimeDatabase *mimeDatabase = core->mimeDatabase();
const QStringList suffixes = mimeDatabase->suffixes();
QStringList nameFilters;
foreach (const QString &suffix, suffixes) {
QString nameFilter;
nameFilter.append(QLatin1String("*."));
nameFilter.append(suffix);
nameFilters.append(nameFilter);
}
_filesView = new QListView;
_filesModel = new QDirModel(this);
_filesModel->setNameFilters(nameFilters);
_filesModel->setFilter(QDir::Files);
connect(_dirView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this, SLOT(updateFilesView(QModelIndex,QModelIndex)));
secondPageLayout->addRow(_dirView);
secondPageLayout->addRow(_filesView);
_secondPageId = addPage(secondPage);
#endif
}
GenericProjectWizard
::~
GenericProjectWizard
()
GenericProjectWizardDialog
::~
GenericProjectWizardDialog
()
{
}
QString
GenericProjectWizardDialog
::
path
()
const
{
return
_pathChooser
->
path
();
}
void
GenericProjectWizardDialog
::
updateFilesView
(
const
QModelIndex
&
current
,
const
QModelIndex
&
)
{
if
(
!
current
.
isValid
())
_filesView
->
setModel
(
0
);
else
{
const
QString
selectedPath
=
_dirModel
->
filePath
(
current
);
if
(
!
_filesView
->
model
())
_filesView
->
setModel
(
_filesModel
);
_filesView
->
setRootIndex
(
_filesModel
->
index
(
selectedPath
));
}
}
void
GenericProjectWizardDialog
::
initializePage
(
int
id
)
{
if
(
id
==
_secondPageId
)
{
using
namespace
Core
::
Utils
;
const
QString
projectPath
=
_pathChooser
->
path
();
QDirModel
*
dirModel
=
qobject_cast
<
QDirModel
*>
(
_dirView
->
model
());
_dirView
->
setRootIndex
(
dirModel
->
index
(
projectPath
));
}
}
bool
GenericProjectWizardDialog
::
validateCurrentPage
()
{
using
namespace
Core
::
Utils
;
if
(
currentId
()
==
_firstPageId
)
{
return
!
_pathChooser
->
path
().
isEmpty
();
}
else
if
(
currentId
()
==
_secondPageId
)
{
return
true
;
}
return
QWizard
::
validateCurrentPage
();
}
GenericProjectWizard
::
GenericProjectWizard
()
:
Core
::
BaseFileWizard
(
parameters
())
{
}
GenericProjectWizard
::~
GenericProjectWizard
()
{
}
Core
::
BaseFileWizardParameters
GenericProjectWizard
::
parameters
()
{
static
Core
::
BaseFileWizardParameters
parameters
(
ProjectWizard
);
...
...
@@ -35,42 +212,94 @@ QWizard *GenericProjectWizard::createWizardDialog(QWidget *parent,
const
QString
&
defaultPath
,
const
WizardPageList
&
extensionPages
)
const
{
QWizard
*
wizard
=
new
QWizard
(
parent
);
wizard
->
setWindowTitle
(
tr
(
"Import Existing Project"
));
GenericProjectWizardDialog
*
wizard
=
new
GenericProjectWizardDialog
(
parent
);
setupWizard
(
wizard
);
QWizardPage
*
firstPage
=
new
QWizard
Page
;
firstPage
->
setTitle
(
tr
(
"Project"
)
);
foreach
(
QWizardPage
*
p
,
extension
Page
s
)
wizard
->
addPage
(
p
);
QFormLayout
*
layout
=
new
QFormLayout
(
firstPage
);
return
wizard
;
}
PathChooser
*
pathChooser
=
new
PathChooser
;
pathChooser
->
setObjectName
(
"pathChooser"
);
layout
->
addRow
(
tr
(
"Source Directory:"
),
pathChooser
);
void
GenericProjectWizard
::
getFileList
(
const
QDir
&
dir
,
const
QString
&
projectRoot
,
const
QStringList
&
suffixes
,
QStringList
*
files
,
QStringList
*
paths
)
const
{
const
QFileInfoList
fileInfoList
=
dir
.
entryInfoList
(
QDir
::
Files
|
QDir
::
Dirs
|
QDir
::
NoDotAndDotDot
|
QDir
::
NoSymLinks
);
wizard
->
addPage
(
firstPage
);
foreach
(
const
QFileInfo
&
fileInfo
,
fileInfoList
)
{
QString
filePath
=
fileInfo
.
absoluteFilePath
();
filePath
=
filePath
.
mid
(
projectRoot
.
length
()
+
1
);
foreach
(
QWizardPage
*
p
,
extensionPages
)
wizard
->
addPage
(
p
);
if
(
fileInfo
.
isDir
()
&&
isValidDir
(
fileInfo
))
{
getFileList
(
QDir
(
fileInfo
.
absoluteFilePath
()),
projectRoot
,
suffixes
,
files
,
paths
);
return
wizard
;
if
(
!
paths
->
contains
(
filePath
))
paths
->
append
(
filePath
);
}
else
if
(
suffixes
.
contains
(
fileInfo
.
suffix
()))
files
->
append
(
filePath
);
}
}
bool
GenericProjectWizard
::
isValidDir
(
const
QFileInfo
&
fileInfo
)
const
{
const
QString
fileName
=
fileInfo
.
fileName
();
const
QString
suffix
=
fileInfo
.
suffix
();
if
(
fileName
.
startsWith
(
QLatin1Char
(
'.'
)))
return
false
;
else
if
(
fileName
==
QLatin1String
(
"CVS"
))
return
false
;
// ### user include/exclude
return
true
;
}
Core
::
GeneratedFiles
GenericProjectWizard
::
generateFiles
(
const
QWizard
*
w
,
QString
*
errorMessage
)
const
{
PathChooser
*
pathChooser
=
w
->
findChild
<
PathChooser
*>
(
"pathChooser"
);
const
QString
projectName
=
QFileInfo
(
pathChooser
->
path
()).
baseName
()
+
QLatin1String
(
".creator"
);
const
QDir
dir
(
pathChooser
->
path
());
const
GenericProjectWizardDialog
*
wizard
=
qobject_cast
<
const
GenericProjectWizardDialog
*>
(
w
);
const
QString
projectPath
=
wizard
->
path
();
const
QString
projectName
=
QFileInfo
(
projectPath
).
baseName
()
+
QLatin1String
(
".creator"
);
const
QDir
dir
(
projectPath
);
Core
::
ICore
*
core
=
Core
::
ICore
::
instance
();
Core
::
MimeDatabase
*
mimeDatabase
=
core
->
mimeDatabase
();
const
QStringList
suffixes
=
mimeDatabase
->
suffixes
();
// ### FIXME: use the mimetype database.
// ### FIXME: import nested folders.
const
QStringList
sources
=
dir
.
entryList
(
QStringList
()
<<
"Makefile"
<<
"*.c"
<<
"*.cpp"
<<
"*.h"
,
QDir
::
Files
);
QStringList
sources
,
paths
;
getFileList
(
dir
,
projectPath
,
suffixes
,
&
sources
,
&
paths
);
Core
::
MimeType
headerTy
=
mimeDatabase
->
findByType
(
QLatin1String
(
"text/x-chdr"
));
QStringList
nameFilters
;
foreach
(
const
QRegExp
&
rx
,
headerTy
.
globPatterns
())
nameFilters
.
append
(
rx
.
pattern
());
QStringList
includePaths
;
foreach
(
const
QString
&
path
,
paths
)
{
QFileInfo
fileInfo
(
dir
,
path
);
QDir
thisDir
(
fileInfo
.
absoluteFilePath
());
if
(
!
thisDir
.
entryList
(
nameFilters
,
QDir
::
Files
).
isEmpty
())
includePaths
.
append
(
path
);
}
QString
projectContents
;
QTextStream
stream
(
&
projectContents
);
stream
<<
"files="
<<
sources
.
join
(
","
);
stream
<<
endl
;
stream
<<
"includePaths="
<<
includePaths
.
join
(
","
);
stream
<<
endl
;
Core
::
GeneratedFile
file
(
QFileInfo
(
dir
,
projectName
).
absoluteFilePath
());
// ### fixme
file
.
setContents
(
projectContents
);
...
...
src/plugins/genericprojectmanager/genericprojectwizard.h
View file @
d690a844
...
...
@@ -2,10 +2,53 @@
#define GENERICPROJECTWIZARD_H
#include
<coreplugin/basefilewizard.h>
#include
<utils/pathchooser.h>
#include
<QWizard>
QT_BEGIN_NAMESPACE
class
QListView
;
class
QTreeView
;
class
QDirModel
;
class
QModelIndex
;
class
QDir
;
class
QStringList
;
class
QFileInfo
;
QT_END_NAMESPACE
namespace
GenericProjectManager
{
namespace
Internal
{
class
GenericProjectWizardDialog
:
public
QWizard
{
Q_OBJECT
public:
GenericProjectWizardDialog
(
QWidget
*
parent
=
0
);
virtual
~
GenericProjectWizardDialog
();
QString
path
()
const
;
private
Q_SLOTS
:
void
updateFilesView
(
const
QModelIndex
&
current
,
const
QModelIndex
&
previous
);
protected:
virtual
void
initializePage
(
int
id
);
virtual
bool
validateCurrentPage
();
private:
int
_firstPageId
;
int
_secondPageId
;
Core
::
Utils
::
PathChooser
*
_pathChooser
;
QTreeView
*
_dirView
;
QDirModel
*
_dirModel
;
QListView
*
_filesView
;
QDirModel
*
_filesModel
;
};
class
GenericProjectWizard
:
public
Core
::
BaseFileWizard
{
Q_OBJECT
...
...
@@ -25,6 +68,13 @@ protected:
QString
*
errorMessage
)
const
;
virtual
bool
postGenerateFiles
(
const
Core
::
GeneratedFiles
&
l
,
QString
*
errorMessage
);
bool
isValidDir
(
const
QFileInfo
&
fileInfo
)
const
;
void
getFileList
(
const
QDir
&
dir
,
const
QString
&
projectRoot
,
const
QStringList
&
suffixes
,
QStringList
*
files
,
QStringList
*
paths
)
const
;
};
}
// end of namespace Internal
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment