Core: make ICore interface static

This mainly serves two purposes:
(a) it saves a function call in ICore::instance()->foo() vs ICore::foo() at runtime
(b) it saves typing and reduces line noise when reading

It's also (mostly) source compatible, as ICore::instance()->foo() remains compilable.

Change-Id: Icf7be0bce17fefe3560473534a8991ff79cbecc3
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
This commit is contained in:
hjk
2012-01-18 23:25:34 +01:00
parent 951b1120d6
commit 0fbd7f320f
10 changed files with 269 additions and 406 deletions

View File

@@ -1,241 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**************************************************************************/
#include "coreimpl.h"
#include "mainwindow.h"
#include <QtCore/QDir>
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtGui/QStatusBar>
namespace Core {
namespace Internal {
// The Core Singleton
static CoreImpl *m_instance = 0;
} // namespace Internal
} // namespace Core
using namespace Core;
using namespace Core::Internal;
ICore* ICore::instance()
{
return m_instance;
}
CoreImpl::CoreImpl(MainWindow *mainwindow)
{
m_instance = this;
m_mainwindow = mainwindow;
}
CoreImpl::~CoreImpl()
{
m_instance = 0;
}
void CoreImpl::showNewItemDialog(const QString &title,
const QList<IWizard *> &wizards,
const QString &defaultLocation)
{
m_mainwindow->showNewItemDialog(title, wizards, defaultLocation);
}
bool CoreImpl::showOptionsDialog(const QString &group, const QString &page, QWidget *parent)
{
return m_mainwindow->showOptionsDialog(group, page, parent);
}
bool CoreImpl::showWarningWithOptions(const QString &title, const QString &text,
const QString &details,
const QString &settingsCategory,
const QString &settingsId,
QWidget *parent)
{
return m_mainwindow->showWarningWithOptions(title, text,
details, settingsCategory,
settingsId, parent);
}
ActionManager *CoreImpl::actionManager() const
{
return m_mainwindow->actionManager();
}
FileManager *CoreImpl::fileManager() const
{
return m_mainwindow->fileManager();
}
MessageManager *CoreImpl::messageManager() const
{
return m_mainwindow->messageManager();
}
EditorManager *CoreImpl::editorManager() const
{
return m_mainwindow->editorManager();
}
ProgressManager *CoreImpl::progressManager() const
{
return m_mainwindow->progressManager();
}
ScriptManager *CoreImpl::scriptManager() const
{
return m_mainwindow->scriptManager();
}
VariableManager *CoreImpl::variableManager() const
{
return m_mainwindow->variableManager();
}
VcsManager *CoreImpl::vcsManager() const
{
return m_mainwindow->vcsManager();
}
ModeManager *CoreImpl::modeManager() const
{
return m_mainwindow->modeManager();
}
MimeDatabase *CoreImpl::mimeDatabase() const
{
return m_mainwindow->mimeDatabase();
}
HelpManager *CoreImpl::helpManager() const
{
return m_mainwindow->helpManager();
}
QSettings *CoreImpl::settings(QSettings::Scope scope) const
{
return m_mainwindow->settings(scope);
}
SettingsDatabase *CoreImpl::settingsDatabase() const
{
return m_mainwindow->settingsDatabase();
}
QPrinter *CoreImpl::printer() const
{
return m_mainwindow->printer();
}
QString CoreImpl::userInterfaceLanguage() const
{
return qApp->property("qtc_locale").toString();
}
#ifdef Q_OS_MAC
# define SHARE_PATH "/../Resources"
#else
# define SHARE_PATH "/../share/qtcreator"
#endif
QString CoreImpl::resourcePath() const
{
return QDir::cleanPath(QCoreApplication::applicationDirPath() + QLatin1String(SHARE_PATH));
}
QString CoreImpl::userResourcePath() const
{
// Create qtcreator dir if it doesn't yet exist
const QString configDir = QFileInfo(settings(QSettings::UserScope)->fileName()).path();
const QString urp = configDir + QLatin1String("/qtcreator");
QFileInfo fi(urp + QLatin1Char('/'));
if (!fi.exists()) {
QDir dir;
if (!dir.mkpath(urp))
qWarning() << "could not create" << urp;
}
return urp;
}
IContext *CoreImpl::currentContextObject() const
{
return m_mainwindow->currentContextObject();
}
QMainWindow *CoreImpl::mainWindow() const
{
return m_mainwindow;
}
QStatusBar *CoreImpl::statusBar() const
{
return m_mainwindow->statusBar();
}
void CoreImpl::updateAdditionalContexts(const Context &remove, const Context &add)
{
m_mainwindow->updateAdditionalContexts(remove, add);
}
bool CoreImpl::hasContext(int context) const
{
return m_mainwindow->hasContext(context);
}
void CoreImpl::addContextObject(IContext *context)
{
m_mainwindow->addContextObject(context);
}
void CoreImpl::removeContextObject(IContext *context)
{
m_mainwindow->removeContextObject(context);
}
void CoreImpl::openFiles(const QStringList &arguments, ICore::OpenFilesFlags flags)
{
m_mainwindow->openFiles(arguments, flags);
}
void CoreImpl::emitNewItemsDialogRequested()
{
emit newItemsDialogRequested();
}

View File

@@ -1,106 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**************************************************************************/
#ifndef COREIMPL_H
#define COREIMPL_H
#include "icore.h"
namespace Core {
namespace Internal {
class MainWindow;
class CoreImpl : public ICore
{
Q_OBJECT
public:
CoreImpl(MainWindow *mainwindow);
~CoreImpl();
void showNewItemDialog(const QString &title,
const QList<IWizard *> &wizards,
const QString &defaultLocation = QString());
bool showOptionsDialog(const QString &group = QString(),
const QString &page = QString(),
QWidget *parent = 0);
bool showWarningWithOptions(const QString &title, const QString &text,
const QString &details = QString(),
const QString &settingsCategory = QString(),
const QString &settingsId = QString(),
QWidget *parent = 0);
ActionManager *actionManager() const;
FileManager *fileManager() const ;
MessageManager *messageManager() const;
EditorManager *editorManager() const;
ProgressManager *progressManager() const;
ScriptManager *scriptManager() const;
VariableManager *variableManager() const;
VcsManager *vcsManager() const;
ModeManager *modeManager() const;
MimeDatabase *mimeDatabase() const;
HelpManager *helpManager() const;
QSettings *settings(QSettings::Scope scope = QSettings::UserScope) const;
SettingsDatabase *settingsDatabase() const;
QPrinter *printer() const;
QString userInterfaceLanguage() const;
QString resourcePath() const;
QString userResourcePath() const;
IContext *currentContextObject() const;
QMainWindow *mainWindow() const;
QStatusBar *statusBar() const;
// Adds and removes additional active contexts, these contexts are appended
// to the currently active contexts.
void updateAdditionalContexts(const Context &remove, const Context &add);
bool hasContext(int context) const;
void addContextObject(IContext *context);
void removeContextObject(IContext *context);
void openFiles(const QStringList &fileNames, ICore::OpenFilesFlags flags);
void emitNewItemsDialogRequested();
private:
MainWindow *m_mainwindow;
friend class MainWindow;
};
} // namespace Internal
} // namespace Core
#endif // COREIMPL_H

View File

@@ -57,7 +57,6 @@ SOURCES += mainwindow.cpp \
coreplugin.cpp \
variablemanager.cpp \
modemanager.cpp \
coreimpl.cpp \
basefilewizard.cpp \
generatedfile.cpp \
plugindialog.cpp \
@@ -160,7 +159,6 @@ HEADERS += mainwindow.h \
coreplugin.h \
variablemanager.h \
modemanager.h \
coreimpl.h \
basefilewizard.h \
generatedfile.h \
plugindialog.h \

View File

@@ -31,7 +31,7 @@
**************************************************************************/
#include "iwizard.h"
#include "coreimpl.h"
#include "icore.h"
#include <extensionsystem/pluginmanager.h>
@@ -145,8 +145,7 @@ template <class Predicate>
QList<IWizard*> findWizards(Predicate predicate)
{
// Hack: Trigger delayed creation of wizards
if (Core::Internal::CoreImpl *ci = qobject_cast<Core::Internal::CoreImpl*>(ICore::instance()))
ci->emitNewItemsDialogRequested();
ICore::emitNewItemsDialogRequested();
// Filter all wizards
const QList<IWizard*> allWizards = IWizard::allWizards();
QList<IWizard*> rc;
@@ -160,8 +159,7 @@ template <class Predicate>
QList<IWizard*> IWizard::allWizards()
{
// Hack: Trigger delayed creation of wizards
if (Core::Internal::CoreImpl *ci = qobject_cast<Core::Internal::CoreImpl*>(ICore::instance()))
ci->emitNewItemsDialogRequested();
ICore::emitNewItemsDialogRequested();
return ExtensionSystem::PluginManager::instance()->getObjects<IWizard>();
}

View File

@@ -32,7 +32,7 @@
#include "editorview.h"
#include "editormanager.h"
#include "coreimpl.h"
#include "icore.h"
#include "minisplitter.h"
#include "openeditorsmodel.h"
@@ -139,7 +139,7 @@ EditorView::~EditorView()
void EditorView::closeView()
{
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
IEditor *editor = currentEditor();
if (editor)
em->closeEditor(editor);
@@ -406,7 +406,7 @@ void EditorView::updateCurrentPositionInNavigationHistory()
void EditorView::goBackInNavigationHistory()
{
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
updateCurrentPositionInNavigationHistory();
while (m_currentNavigationHistoryPosition > 0) {
--m_currentNavigationHistoryPosition;
@@ -431,7 +431,7 @@ void EditorView::goBackInNavigationHistory()
void EditorView::goForwardInNavigationHistory()
{
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
updateCurrentPositionInNavigationHistory();
if (m_currentNavigationHistoryPosition >= m_navigationHistory.size()-1)
return;
@@ -490,12 +490,12 @@ void SplitterOrView::mousePressEvent(QMouseEvent *e)
if (e->button() != Qt::LeftButton)
return;
setFocus(Qt::MouseFocusReason);
CoreImpl::instance()->editorManager()->setCurrentView(this);
ICore::instance()->editorManager()->setCurrentView(this);
}
void SplitterOrView::paintEvent(QPaintEvent *)
{
if (CoreImpl::instance()->editorManager()->currentSplitterOrView() != this)
if (ICore::instance()->editorManager()->currentSplitterOrView() != this)
return;
if (!m_view || hasEditors())
@@ -657,7 +657,7 @@ void SplitterOrView::split(Qt::Orientation orientation)
m_splitter = new MiniSplitter(this);
m_splitter->setOrientation(orientation);
m_layout->addWidget(m_splitter);
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
Core::IEditor *e = m_view->currentEditor();
SplitterOrView *view = 0;
@@ -710,7 +710,7 @@ void SplitterOrView::unsplitAll()
void SplitterOrView::unsplitAll_helper()
{
if (!m_isRoot && m_view)
CoreImpl::instance()->editorManager()->emptyView(m_view);
ICore::instance()->editorManager()->emptyView(m_view);
if (m_splitter) {
for (int i = 0; i < m_splitter->count(); ++i) {
if (SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i))) {
@@ -726,7 +726,7 @@ void SplitterOrView::unsplit()
return;
Q_ASSERT(m_splitter->count() == 1);
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
SplitterOrView *childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
QSplitter *oldSplitter = m_splitter;
m_splitter = 0;
@@ -771,7 +771,7 @@ QByteArray SplitterOrView::saveState() const
<< static_cast<SplitterOrView*>(m_splitter->widget(1))->saveState();
} else {
IEditor* e = editor();
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
// don't save state of temporary or ad-hoc editors
if (e && (e->isTemporary() || e->file()->fileName().isEmpty())) {
@@ -812,7 +812,7 @@ void SplitterOrView::restoreState(const QByteArray &state)
static_cast<SplitterOrView*>(m_splitter->widget(0))->restoreState(first);
static_cast<SplitterOrView*>(m_splitter->widget(1))->restoreState(second);
} else if (mode == "editor" || mode == "currenteditor") {
EditorManager *em = CoreImpl::instance()->editorManager();
EditorManager *em = ICore::instance()->editorManager();
QString fileName;
QString id;
QByteArray editorState;

View File

@@ -343,3 +343,213 @@
\brief Sent just after a new \a context became the current context
(meaning that its widget got focus), or if the additional context ids changed.
*/
#include "icore.h"
#include "mainwindow.h"
#include <QtCore/QDir>
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtGui/QStatusBar>
namespace Core {
// The Core Singleton
static ICore *m_instance = 0;
namespace Internal {
static MainWindow *m_mainwindow;
} // namespace Internal
using namespace Core::Internal;
ICore *ICore::instance()
{
return m_instance;
}
ICore::ICore(MainWindow *mainwindow)
{
m_instance = this;
m_mainwindow = mainwindow;
}
ICore::~ICore()
{
m_instance = 0;
}
void ICore::showNewItemDialog(const QString &title,
const QList<IWizard *> &wizards,
const QString &defaultLocation)
{
m_mainwindow->showNewItemDialog(title, wizards, defaultLocation);
}
bool ICore::showOptionsDialog(const QString &group, const QString &page, QWidget *parent)
{
return m_mainwindow->showOptionsDialog(group, page, parent);
}
bool ICore::showWarningWithOptions(const QString &title, const QString &text,
const QString &details,
const QString &settingsCategory,
const QString &settingsId,
QWidget *parent)
{
return m_mainwindow->showWarningWithOptions(title, text,
details, settingsCategory,
settingsId, parent);
}
ActionManager *ICore::actionManager()
{
return m_mainwindow->actionManager();
}
FileManager *ICore::fileManager()
{
return m_mainwindow->fileManager();
}
MessageManager *ICore::messageManager()
{
return m_mainwindow->messageManager();
}
EditorManager *ICore::editorManager()
{
return m_mainwindow->editorManager();
}
ProgressManager *ICore::progressManager()
{
return m_mainwindow->progressManager();
}
ScriptManager *ICore::scriptManager()
{
return m_mainwindow->scriptManager();
}
VariableManager *ICore::variableManager()
{
return m_mainwindow->variableManager();
}
VcsManager *ICore::vcsManager()
{
return m_mainwindow->vcsManager();
}
ModeManager *ICore::modeManager()
{
return m_mainwindow->modeManager();
}
MimeDatabase *ICore::mimeDatabase()
{
return m_mainwindow->mimeDatabase();
}
HelpManager *ICore::helpManager()
{
return m_mainwindow->helpManager();
}
QSettings *ICore::settings(QSettings::Scope scope)
{
return m_mainwindow->settings(scope);
}
SettingsDatabase *ICore::settingsDatabase()
{
return m_mainwindow->settingsDatabase();
}
QPrinter *ICore::printer()
{
return m_mainwindow->printer();
}
QString ICore::userInterfaceLanguage()
{
return qApp->property("qtc_locale").toString();
}
#ifdef Q_OS_MAC
# define SHARE_PATH "/../Resources"
#else
# define SHARE_PATH "/../share/qtcreator"
#endif
QString ICore::resourcePath()
{
return QDir::cleanPath(QCoreApplication::applicationDirPath() + QLatin1String(SHARE_PATH));
}
QString ICore::userResourcePath()
{
// Create qtcreator dir if it doesn't yet exist
const QString configDir = QFileInfo(settings(QSettings::UserScope)->fileName()).path();
const QString urp = configDir + QLatin1String("/qtcreator");
QFileInfo fi(urp + QLatin1Char('/'));
if (!fi.exists()) {
QDir dir;
if (!dir.mkpath(urp))
qWarning() << "could not create" << urp;
}
return urp;
}
IContext *ICore::currentContextObject()
{
return m_mainwindow->currentContextObject();
}
QMainWindow *ICore::mainWindow()
{
return m_mainwindow;
}
QStatusBar *ICore::statusBar()
{
return m_mainwindow->statusBar();
}
void ICore::updateAdditionalContexts(const Context &remove, const Context &add)
{
m_mainwindow->updateAdditionalContexts(remove, add);
}
bool ICore::hasContext(int context)
{
return m_mainwindow->hasContext(context);
}
void ICore::addContextObject(IContext *context)
{
m_mainwindow->addContextObject(context);
}
void ICore::removeContextObject(IContext *context)
{
m_mainwindow->removeContextObject(context);
}
void ICore::openFiles(const QStringList &arguments, ICore::OpenFilesFlags flags)
{
m_mainwindow->openFiles(arguments, flags);
}
void ICore::emitNewItemsDialogRequested()
{
emit m_instance->newItemsDialogRequested();
}
} // namespace Core

View File

@@ -63,60 +63,63 @@ class SettingsDatabase;
class VariableManager;
class VcsManager;
namespace Internal { class MainWindow; }
class CORE_EXPORT ICore : public QObject
{
Q_OBJECT
public:
ICore() {}
virtual ~ICore() {}
friend class Internal::MainWindow;
explicit ICore(Internal::MainWindow *mw);
~ICore();
public:
static ICore *instance();
virtual void showNewItemDialog(const QString &title,
const QList<IWizard *> &wizards,
const QString &defaultLocation = QString()) = 0;
static void showNewItemDialog(const QString &title,
const QList<IWizard *> &wizards,
const QString &defaultLocation = QString());
virtual bool showOptionsDialog(const QString &group = QString(),
const QString &page = QString(),
QWidget *parent = 0) = 0;
static bool showOptionsDialog(const QString &group = QString(),
const QString &page = QString(),
QWidget *parent = 0);
virtual bool showWarningWithOptions(const QString &title, const QString &text,
static bool showWarningWithOptions(const QString &title, const QString &text,
const QString &details = QString(),
const QString &settingsCategory = QString(),
const QString &settingsId = QString(),
QWidget *parent = 0) = 0;
QWidget *parent = 0);
virtual ActionManager *actionManager() const = 0;
virtual FileManager *fileManager() const = 0;
virtual MessageManager *messageManager() const = 0;
virtual EditorManager *editorManager() const = 0;
virtual ProgressManager *progressManager() const = 0;
virtual ScriptManager *scriptManager() const = 0;
virtual VariableManager *variableManager() const = 0;
virtual VcsManager *vcsManager() const = 0;
virtual ModeManager *modeManager() const = 0;
virtual MimeDatabase *mimeDatabase() const = 0;
virtual HelpManager *helpManager() const = 0;
static ActionManager *actionManager();
static FileManager *fileManager();
static MessageManager *messageManager();
static EditorManager *editorManager();
static ProgressManager *progressManager();
static ScriptManager *scriptManager();
static VariableManager *variableManager();
static VcsManager *vcsManager();
static ModeManager *modeManager();
static MimeDatabase *mimeDatabase();
static HelpManager *helpManager();
virtual QSettings *settings(QSettings::Scope scope = QSettings::UserScope) const = 0;
virtual SettingsDatabase *settingsDatabase() const = 0;
virtual QPrinter *printer() const = 0;
virtual QString userInterfaceLanguage() const = 0;
static QSettings *settings(QSettings::Scope scope = QSettings::UserScope);
static SettingsDatabase *settingsDatabase();
static QPrinter *printer();
static QString userInterfaceLanguage();
virtual QString resourcePath() const = 0;
virtual QString userResourcePath() const = 0;
static QString resourcePath();
static QString userResourcePath();
virtual QMainWindow *mainWindow() const = 0;
virtual QStatusBar *statusBar() const = 0;
static QMainWindow *mainWindow();
static QStatusBar *statusBar();
virtual IContext *currentContextObject() const = 0;
static IContext *currentContextObject();
// Adds and removes additional active contexts, these contexts are appended
// to the currently active contexts.
virtual void updateAdditionalContexts(const Context &remove, const Context &add) = 0;
virtual bool hasContext(int context) const = 0;
virtual void addContextObject(IContext *context) = 0;
virtual void removeContextObject(IContext *context) = 0;
static void updateAdditionalContexts(const Context &remove, const Context &add);
static bool hasContext(int context);
static void addContextObject(IContext *context);
static void removeContextObject(IContext *context);
enum OpenFilesFlags {
None = 0,
@@ -125,7 +128,9 @@ public:
/// Stop loading once the first file fails to load
StopOnLoadFail = 4
};
virtual void openFiles(const QStringList &fileNames, OpenFilesFlags flags = None) = 0;
static void openFiles(const QStringList &fileNames, OpenFilesFlags flags = None);
static void emitNewItemsDialogRequested();
signals:
void coreAboutToOpen();

View File

@@ -34,7 +34,7 @@
#include "actioncontainer.h"
#include "command.h"
#include "actionmanager_p.h"
#include "coreimpl.h"
#include "icore.h"
#include "coreconstants.h"
#include "editormanager.h"
#include "externaltool.h"
@@ -127,7 +127,7 @@ enum { debugMainWindow = 0 };
MainWindow::MainWindow() :
EventFilteringMainWindow(),
m_coreImpl(new CoreImpl(this)),
m_coreImpl(new ICore(this)),
m_additionalContexts(Constants::C_GLOBAL),
m_settings(ExtensionSystem::PluginManager::instance()->settings()),
m_globalSettings(ExtensionSystem::PluginManager::instance()->globalSettings()),

View File

@@ -70,7 +70,6 @@ class VcsManager;
namespace Internal {
class ActionManagerPrivate;
class CoreImpl;
class FancyTabWidget;
class GeneralSettings;
class ProgressManagerPrivate;
@@ -180,7 +179,7 @@ private:
void readSettings();
void writeSettings();
CoreImpl *m_coreImpl;
ICore *m_coreImpl;
Context m_additionalContexts;
QSettings *m_settings;
QSettings *m_globalSettings;

View File

@@ -33,7 +33,7 @@
#include "projectwizardpage.h"
#include "ui_projectwizardpage.h"
#include <coreplugin/coreimpl.h>
#include <coreplugin/icore.h>
#include <vcsbase/vcsbaseconstants.h>
#include <QtCore/QDir>