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
1738d08f
Commit
1738d08f
authored
Apr 12, 2011
by
hjk
Browse files
projectexplorer: move project{Context,Language} from IProjectManager to Project
Reviewed-by: dt
parent
4a338a51
Changes
18
Hide whitespace changes
Inline
Side-by-side
src/plugins/cmakeprojectmanager/cmakeproject.cpp
View file @
1738d08f
...
...
@@ -99,6 +99,9 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName)
m_rootNode
(
new
CMakeProjectNode
(
m_fileName
)),
m_lastEditor
(
0
)
{
setProjectContext
(
Core
::
Context
(
CMakeProjectManager
::
Constants
::
PROJECTCONTEXT
));
setProjectLanguage
(
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
));
m_file
=
new
CMakeFile
(
this
,
fileName
);
connect
(
this
,
SIGNAL
(
addedTarget
(
ProjectExplorer
::
Target
*
)),
...
...
src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp
View file @
1738d08f
...
...
@@ -63,9 +63,6 @@ using namespace CMakeProjectManager::Internal;
CMakeManager
::
CMakeManager
(
CMakeSettingsPage
*
cmakeSettingsPage
)
:
m_settingsPage
(
cmakeSettingsPage
)
{
m_projectContext
=
Core
::
Context
(
CMakeProjectManager
::
Constants
::
PROJECTCONTEXT
);
m_projectLanguage
=
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
);
ProjectExplorer
::
ProjectExplorerPlugin
*
projectExplorer
=
ProjectExplorer
::
ProjectExplorerPlugin
::
instance
();
connect
(
projectExplorer
,
SIGNAL
(
aboutToShowContextMenu
(
ProjectExplorer
::
Project
*
,
ProjectExplorer
::
Node
*
)),
this
,
SLOT
(
updateContextMenu
(
ProjectExplorer
::
Project
*
,
ProjectExplorer
::
Node
*
)));
...
...
@@ -79,14 +76,16 @@ CMakeManager::CMakeManager(CMakeSettingsPage *cmakeSettingsPage)
Core
::
ActionContainer
*
msubproject
=
am
->
actionContainer
(
ProjectExplorer
::
Constants
::
M_SUBPROJECTCONTEXT
);
const
Core
::
Context
projectContext
(
CMakeProjectManager
::
Constants
::
PROJECTCONTEXT
);
m_runCMakeAction
=
new
QAction
(
QIcon
(),
tr
(
"Run CMake"
),
this
);
Core
::
Command
*
command
=
am
->
registerAction
(
m_runCMakeAction
,
Constants
::
RUNCMAKE
,
m_
projectContext
);
Core
::
Command
*
command
=
am
->
registerAction
(
m_runCMakeAction
,
Constants
::
RUNCMAKE
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
mbuild
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_BUILD_PROJECT
);
connect
(
m_runCMakeAction
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
runCMake
()));
m_runCMakeActionContextMenu
=
new
QAction
(
QIcon
(),
tr
(
"Run CMake"
),
this
);
command
=
am
->
registerAction
(
m_runCMakeActionContextMenu
,
Constants
::
RUNCMAKECONTEXTMENU
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_runCMakeActionContextMenu
,
Constants
::
RUNCMAKECONTEXTMENU
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
mproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
msubproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
...
...
@@ -133,16 +132,6 @@ void CMakeManager::runCMake(ProjectExplorer::Project *project)
}
}
Core
::
Context
CMakeManager
::
projectContext
()
const
{
return
m_projectContext
;
}
Core
::
Context
CMakeManager
::
projectLanguage
()
const
{
return
m_projectLanguage
;
}
ProjectExplorer
::
Project
*
CMakeManager
::
openProject
(
const
QString
&
fileName
)
{
// TODO check whether this project is already opened
...
...
src/plugins/cmakeprojectmanager/cmakeprojectmanager.h
View file @
1738d08f
...
...
@@ -66,9 +66,6 @@ class CMakeManager : public ProjectExplorer::IProjectManager
public:
CMakeManager
(
CMakeSettingsPage
*
cmakeSettingsPage
);
virtual
Core
::
Context
projectContext
()
const
;
virtual
Core
::
Context
projectLanguage
()
const
;
virtual
ProjectExplorer
::
Project
*
openProject
(
const
QString
&
fileName
);
virtual
QString
mimeType
()
const
;
...
...
@@ -95,8 +92,6 @@ private:
void
runCMake
(
ProjectExplorer
::
Project
*
project
);
static
QString
qtVersionForQMake
(
const
QString
&
qmakePath
);
static
QPair
<
QString
,
QString
>
findQtDir
(
const
Utils
::
Environment
&
env
);
Core
::
Context
m_projectContext
;
Core
::
Context
m_projectLanguage
;
CMakeSettingsPage
*
m_settingsPage
;
QAction
*
m_runCMakeAction
;
QAction
*
m_runCMakeActionContextMenu
;
...
...
src/plugins/genericprojectmanager/genericproject.cpp
View file @
1738d08f
...
...
@@ -47,6 +47,7 @@
#include
<utils/pathchooser.h>
#include
<utils/qtcassert.h>
#include
<coreplugin/icore.h>
#include
<coreplugin/icontext.h>
#include
<QtCore/QDir>
#include
<QtCore/QProcessEnvironment>
...
...
@@ -72,6 +73,9 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
m_fileName
(
fileName
),
m_toolChain
(
0
)
{
setProjectContext
(
Core
::
Context
(
GenericProjectManager
::
Constants
::
PROJECTCONTEXT
));
setProjectLanguage
(
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
));
QFileInfo
fileInfo
(
m_fileName
);
QDir
dir
=
fileInfo
.
dir
();
...
...
src/plugins/genericprojectmanager/genericprojectmanager.cpp
View file @
1738d08f
...
...
@@ -46,20 +46,7 @@
using
namespace
GenericProjectManager
::
Internal
;
Manager
::
Manager
()
{
m_projectContext
=
Core
::
Context
(
GenericProjectManager
::
Constants
::
PROJECTCONTEXT
);
m_projectLanguage
=
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
);
}
Core
::
Context
Manager
::
projectContext
()
const
{
return
m_projectContext
;
}
Core
::
Context
Manager
::
projectLanguage
()
const
{
return
m_projectLanguage
;
}
{
}
QString
Manager
::
mimeType
()
const
{
...
...
src/plugins/genericprojectmanager/genericprojectmanager.h
View file @
1738d08f
...
...
@@ -35,7 +35,6 @@
#define GENERICPROJECTMANAGER_H
#include
<projectexplorer/iprojectmanager.h>
#include
<coreplugin/icontext.h>
namespace
GenericProjectManager
{
namespace
Internal
{
...
...
@@ -49,9 +48,6 @@ class Manager : public ProjectExplorer::IProjectManager
public:
Manager
();
virtual
Core
::
Context
projectContext
()
const
;
virtual
Core
::
Context
projectLanguage
()
const
;
virtual
QString
mimeType
()
const
;
virtual
ProjectExplorer
::
Project
*
openProject
(
const
QString
&
fileName
);
...
...
@@ -61,8 +57,6 @@ public:
void
unregisterProject
(
GenericProject
*
project
);
private:
Core
::
Context
m_projectContext
;
Core
::
Context
m_projectLanguage
;
QList
<
GenericProject
*>
m_projects
;
};
...
...
src/plugins/projectexplorer/iprojectmanager.h
View file @
1738d08f
...
...
@@ -53,9 +53,6 @@ class PROJECTEXPLORER_EXPORT IProjectManager
public:
IProjectManager
()
{}
virtual
Core
::
Context
projectContext
()
const
=
0
;
//TODO move into project
virtual
Core
::
Context
projectLanguage
()
const
=
0
;
//TODO move into project
virtual
QString
mimeType
()
const
=
0
;
virtual
Project
*
openProject
(
const
QString
&
fileName
)
=
0
;
};
...
...
src/plugins/projectexplorer/project.cpp
View file @
1738d08f
...
...
@@ -42,6 +42,7 @@
#include
"userfileaccessor.h"
#include
<coreplugin/ifile.h>
#include
<coreplugin/icontext.h>
#include
<extensionsystem/pluginmanager.h>
#include
<limits>
#include
<utils/qtcassert.h>
...
...
@@ -60,12 +61,15 @@ namespace ProjectExplorer {
// Project
// -------------------------------------------------------------------------
class
ProjectPrivate
{
class
ProjectPrivate
{
public:
ProjectPrivate
();
QList
<
Target
*>
m_targets
;
Target
*
m_activeTarget
;
EditorConfiguration
*
m_editorConfiguration
;
Core
::
Context
m_projectContext
;
Core
::
Context
m_projectLanguage
;
};
ProjectPrivate
::
ProjectPrivate
()
:
...
...
@@ -301,4 +305,24 @@ QString Project::generatedUiHeader(const QString & /* formFile */) const
return
QString
();
}
void
Project
::
setProjectContext
(
Core
::
Context
context
)
{
d
->
m_projectContext
=
context
;
}
void
Project
::
setProjectLanguage
(
Core
::
Context
language
)
{
d
->
m_projectLanguage
=
language
;
}
Core
::
Context
Project
::
projectContext
()
const
{
return
d
->
m_projectContext
;
}
Core
::
Context
Project
::
projectLanguage
()
const
{
return
d
->
m_projectLanguage
;
}
}
// namespace ProjectExplorer
src/plugins/projectexplorer/project.h
View file @
1738d08f
...
...
@@ -42,6 +42,7 @@
namespace
Core
{
class
IFile
;
class
Context
;
}
namespace
ProjectExplorer
{
...
...
@@ -51,7 +52,6 @@ class IProjectManager;
class
EditorConfiguration
;
class
ProjectNode
;
class
Target
;
class
ITargetFactory
;
class
ProjectPrivate
;
class
PROJECTEXPLORER_EXPORT
Project
...
...
@@ -119,6 +119,9 @@ public:
QString
projectDirectory
()
const
;
static
QString
projectDirectory
(
const
QString
&
proFile
);
virtual
Core
::
Context
projectContext
()
const
;
virtual
Core
::
Context
projectLanguage
()
const
;
signals:
void
fileListChanged
();
...
...
@@ -145,6 +148,9 @@ protected:
// Note: Do not forget to call your base class' fromMap method!
virtual
bool
fromMap
(
const
QVariantMap
&
map
);
virtual
void
setProjectContext
(
Core
::
Context
context
);
virtual
void
setProjectLanguage
(
Core
::
Context
language
);
private
slots
:
void
changeEnvironment
();
void
changeBuildConfigurationEnabled
();
...
...
src/plugins/projectexplorer/projectexplorer.cpp
View file @
1738d08f
...
...
@@ -1502,12 +1502,12 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
Core
::
Context
newContext
;
if
(
d
->
m_currentProject
)
{
oldContext
.
add
(
d
->
m_currentProject
->
projectManager
()
->
projectContext
());
oldContext
.
add
(
d
->
m_currentProject
->
projectManager
()
->
projectLanguage
());
oldContext
.
add
(
d
->
m_currentProject
->
projectContext
());
oldContext
.
add
(
d
->
m_currentProject
->
projectLanguage
());
}
if
(
project
)
{
newContext
.
add
(
project
->
projectManager
()
->
projectContext
());
newContext
.
add
(
project
->
projectManager
()
->
projectLanguage
());
newContext
.
add
(
project
->
projectContext
());
newContext
.
add
(
project
->
projectLanguage
());
}
core
->
updateAdditionalContexts
(
oldContext
,
newContext
);
...
...
src/plugins/qmlprojectmanager/qmlproject.cpp
View file @
1738d08f
...
...
@@ -37,6 +37,7 @@
#include
"fileformat/qmlprojectitem.h"
#include
"qmlprojectrunconfiguration.h"
#include
"qmlprojecttarget.h"
#include
"qmlprojectconstants.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/messagemanager.h>
...
...
@@ -58,6 +59,9 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
m_modelManager
(
ExtensionSystem
::
PluginManager
::
instance
()
->
getObject
<
QmlJS
::
ModelManagerInterface
>
()),
m_fileWatcher
(
new
ProjectExplorer
::
FileWatcher
(
this
))
{
setProjectContext
(
Core
::
Context
(
QmlProjectManager
::
Constants
::
PROJECTCONTEXT
));
setProjectLanguage
(
Core
::
Context
(
QmlProjectManager
::
Constants
::
LANG_QML
));
QFileInfo
fileInfo
(
m_fileName
);
m_projectName
=
fileInfo
.
completeBaseName
();
...
...
src/plugins/qmlprojectmanager/qmlprojectmanager.cpp
View file @
1738d08f
...
...
@@ -49,19 +49,8 @@ namespace Internal {
Manager
::
Manager
()
{
m_projectContext
=
Core
::
Context
(
QmlProjectManager
::
Constants
::
PROJECTCONTEXT
);
m_projectLanguage
=
Core
::
Context
(
QmlProjectManager
::
Constants
::
LANG_QML
);
}
Manager
::~
Manager
()
{
}
Core
::
Context
Manager
::
projectContext
()
const
{
return
m_projectContext
;
}
Core
::
Context
Manager
::
projectLanguage
()
const
{
return
m_projectLanguage
;
}
QString
Manager
::
mimeType
()
const
{
return
QLatin1String
(
Constants
::
QMLMIMETYPE
);
}
...
...
src/plugins/qmlprojectmanager/qmlprojectmanager.h
View file @
1738d08f
...
...
@@ -49,10 +49,6 @@ class Manager: public ProjectExplorer::IProjectManager
public:
Manager
();
virtual
~
Manager
();
virtual
Core
::
Context
projectContext
()
const
;
virtual
Core
::
Context
projectLanguage
()
const
;
virtual
QString
mimeType
()
const
;
virtual
ProjectExplorer
::
Project
*
openProject
(
const
QString
&
fileName
);
...
...
@@ -63,8 +59,6 @@ public:
void
unregisterProject
(
QmlProject
*
project
);
private:
Core
::
Context
m_projectContext
;
Core
::
Context
m_projectLanguage
;
QList
<
QmlProject
*>
m_projects
;
};
...
...
src/plugins/qt4projectmanager/qt4project.cpp
View file @
1738d08f
...
...
@@ -46,6 +46,7 @@
#include
"qmldumptool.h"
#include
<coreplugin/icore.h>
#include
<coreplugin/icontext.h>
#include
<coreplugin/messagemanager.h>
#include
<coreplugin/coreconstants.h>
#include
<coreplugin/progressmanager/progressmanager.h>
...
...
@@ -57,6 +58,7 @@
#include
<projectexplorer/buildenvironmentwidget.h>
#include
<projectexplorer/customexecutablerunconfiguration.h>
#include
<projectexplorer/projectexplorer.h>
#include
<projectexplorer/projectexplorerconstants.h>
#include
<utils/qtcassert.h>
#include
<QtCore/QDebug>
...
...
@@ -261,6 +263,9 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
m_asyncUpdateState
(
NoState
),
m_cancelEvaluate
(
false
)
{
setProjectContext
(
Core
::
Context
(
Qt4ProjectManager
::
Constants
::
PROJECT_ID
));
setProjectLanguage
(
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
));
m_asyncUpdateTimer
.
setSingleShot
(
true
);
m_asyncUpdateTimer
.
setInterval
(
3000
);
connect
(
&
m_asyncUpdateTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
asyncUpdate
()));
...
...
src/plugins/qt4projectmanager/qt4projectmanager.cpp
View file @
1738d08f
...
...
@@ -203,16 +203,6 @@ void Qt4Manager::uiEditorContentsChanged()
m_dirty
=
true
;
}
Core
::
Context
Qt4Manager
::
projectContext
()
const
{
return
m_plugin
->
projectContext
();
}
Core
::
Context
Qt4Manager
::
projectLanguage
()
const
{
return
Core
::
Context
(
ProjectExplorer
::
Constants
::
LANG_CXX
);
}
QString
Qt4Manager
::
mimeType
()
const
{
return
QLatin1String
(
Qt4ProjectManager
::
Constants
::
PROFILE_MIMETYPE
);
...
...
src/plugins/qt4projectmanager/qt4projectmanager.h
View file @
1738d08f
...
...
@@ -78,10 +78,6 @@ public:
ProjectExplorer
::
ProjectExplorerPlugin
*
projectExplorer
()
const
;
// ProjectExplorer::IProjectManager
Core
::
Context
projectContext
()
const
;
Core
::
Context
projectLanguage
()
const
;
virtual
QString
mimeType
()
const
;
ProjectExplorer
::
Project
*
openProject
(
const
QString
&
fileName
);
...
...
src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
View file @
1738d08f
...
...
@@ -108,7 +108,7 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
bool
Qt4ProjectManagerPlugin
::
initialize
(
const
QStringList
&
arguments
,
QString
*
errorMessage
)
{
Q_UNUSED
(
arguments
)
m_projectContext
=
Core
::
Context
(
Qt4ProjectManager
::
Constants
::
PROJECT_ID
);
const
Core
::
Context
project
Context
(
Qt4ProjectManager
::
Constants
::
PROJECT_ID
);
ProFileParser
::
initialize
();
ProFileEvaluator
::
initialize
();
...
...
@@ -199,13 +199,13 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
QIcon
qmakeIcon
(
QLatin1String
(
":/qt4projectmanager/images/run_qmake.png"
));
qmakeIcon
.
addFile
(
QLatin1String
(
":/qt4projectmanager/images/run_qmake_small.png"
));
m_runQMakeAction
=
new
QAction
(
qmakeIcon
,
tr
(
"Run qmake"
),
this
);
command
=
am
->
registerAction
(
m_runQMakeAction
,
Constants
::
RUNQMAKE
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_runQMakeAction
,
Constants
::
RUNQMAKE
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
mbuild
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_BUILD_PROJECT
);
connect
(
m_runQMakeAction
,
SIGNAL
(
triggered
()),
m_qt4ProjectManager
,
SLOT
(
runQMake
()));
m_runQMakeActionContextMenu
=
new
QAction
(
qmakeIcon
,
tr
(
"Run qmake"
),
this
);
command
=
am
->
registerAction
(
m_runQMakeActionContextMenu
,
Constants
::
RUNQMAKECONTEXTMENU
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_runQMakeActionContextMenu
,
Constants
::
RUNQMAKECONTEXTMENU
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
mproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
msubproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
...
...
@@ -214,7 +214,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
QIcon
buildIcon
(
ProjectExplorer
::
Constants
::
ICON_BUILD
);
buildIcon
.
addFile
(
ProjectExplorer
::
Constants
::
ICON_BUILD_SMALL
);
m_buildSubProjectContextMenu
=
new
QAction
(
buildIcon
,
tr
(
"Build"
),
this
);
command
=
am
->
registerAction
(
m_buildSubProjectContextMenu
,
Constants
::
BUILDSUBDIR
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_buildSubProjectContextMenu
,
Constants
::
BUILDSUBDIR
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
msubproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
connect
(
m_buildSubProjectContextMenu
,
SIGNAL
(
triggered
()),
m_qt4ProjectManager
,
SLOT
(
buildSubDirContextMenu
()));
...
...
@@ -222,7 +222,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
QIcon
rebuildIcon
(
ProjectExplorer
::
Constants
::
ICON_REBUILD
);
rebuildIcon
.
addFile
(
ProjectExplorer
::
Constants
::
ICON_REBUILD_SMALL
);
m_rebuildSubProjectContextMenu
=
new
QAction
(
rebuildIcon
,
tr
(
"Rebuild"
),
this
);
command
=
am
->
registerAction
(
m_rebuildSubProjectContextMenu
,
Constants
::
REBUILDSUBDIR
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_rebuildSubProjectContextMenu
,
Constants
::
REBUILDSUBDIR
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
msubproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
connect
(
m_rebuildSubProjectContextMenu
,
SIGNAL
(
triggered
()),
m_qt4ProjectManager
,
SLOT
(
rebuildSubDirContextMenu
()));
...
...
@@ -230,7 +230,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
QIcon
cleanIcon
(
ProjectExplorer
::
Constants
::
ICON_CLEAN
);
cleanIcon
.
addFile
(
ProjectExplorer
::
Constants
::
ICON_CLEAN_SMALL
);
m_cleanSubProjectContextMenu
=
new
QAction
(
cleanIcon
,
tr
(
"Clean"
),
this
);
command
=
am
->
registerAction
(
m_cleanSubProjectContextMenu
,
Constants
::
CLEANSUBDIR
,
m_
projectContext
);
command
=
am
->
registerAction
(
m_cleanSubProjectContextMenu
,
Constants
::
CLEANSUBDIR
,
projectContext
);
command
->
setAttribute
(
Core
::
Command
::
CA_Hide
);
msubproject
->
addAction
(
command
,
ProjectExplorer
::
Constants
::
G_PROJECT_BUILD
);
connect
(
m_cleanSubProjectContextMenu
,
SIGNAL
(
triggered
()),
m_qt4ProjectManager
,
SLOT
(
cleanSubDirContextMenu
()));
...
...
src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
View file @
1738d08f
...
...
@@ -65,8 +65,6 @@ public:
bool
initialize
(
const
QStringList
&
arguments
,
QString
*
error_message
);
void
extensionsInitialized
();
Core
::
Context
projectContext
()
const
{
return
m_projectContext
;
}
private
slots
:
void
updateContextMenu
(
ProjectExplorer
::
Project
*
project
,
ProjectExplorer
::
Node
*
node
);
...
...
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