diff --git a/doc/doc.pri b/doc/doc.pri index e9e34fe733b..4207e364c76 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -9,7 +9,11 @@ unix { QHP_FILE = $$OUT_PWD/doc/html/qtcreator.qhp QCH_FILE = $$OUT_PWD/doc/qtcreator.qch -html_docs.commands =$$QDOC $$PWD/qtcreator.qdocconf +unix { +html_docs.commands = $$QDOC $$PWD/qtcreator.qdocconf +} else { +html_docs.commands = \"$$QDOC $$PWD/qtcreator.qdocconf\" +} html_docs.depends += $$PWD/qtcreator.qdoc $$PWD/qtcreator.qdocconf html_docs.files = $$QHP_FILE diff --git a/doc/qtcreator-session-manager.png b/doc/qtcreator-session-manager.png new file mode 100644 index 00000000000..66f387ac5da Binary files /dev/null and b/doc/qtcreator-session-manager.png differ diff --git a/doc/qtcreator-session-menu.png b/doc/qtcreator-session-menu.png new file mode 100644 index 00000000000..eaae9ef1465 Binary files /dev/null and b/doc/qtcreator-session-menu.png differ diff --git a/doc/qtcreator-vcs-annotate.png b/doc/qtcreator-vcs-annotate.png new file mode 100644 index 00000000000..87b7ed11735 Binary files /dev/null and b/doc/qtcreator-vcs-annotate.png differ diff --git a/doc/qtcreator-vcs-commit.png b/doc/qtcreator-vcs-commit.png new file mode 100644 index 00000000000..2c58ad57732 Binary files /dev/null and b/doc/qtcreator-vcs-commit.png differ diff --git a/doc/qtcreator-vcs-describe.png b/doc/qtcreator-vcs-describe.png new file mode 100644 index 00000000000..d0949b1e59e Binary files /dev/null and b/doc/qtcreator-vcs-describe.png differ diff --git a/doc/qtcreator-vcs-diff.png b/doc/qtcreator-vcs-diff.png new file mode 100644 index 00000000000..fdb9a0f5da8 Binary files /dev/null and b/doc/qtcreator-vcs-diff.png differ diff --git a/doc/qtcreator-vcs-gitbranch.png b/doc/qtcreator-vcs-gitbranch.png new file mode 100644 index 00000000000..398de10ee65 Binary files /dev/null and b/doc/qtcreator-vcs-gitbranch.png differ diff --git a/doc/qtcreator-vcs-log.png b/doc/qtcreator-vcs-log.png new file mode 100644 index 00000000000..e74cd3dade8 Binary files /dev/null and b/doc/qtcreator-vcs-log.png differ diff --git a/doc/qtcreator-vcs-pane.png b/doc/qtcreator-vcs-pane.png new file mode 100644 index 00000000000..faea0cf32e1 Binary files /dev/null and b/doc/qtcreator-vcs-pane.png differ diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index 3c50c9d4280..4f393ec9dc1 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -20,9 +20,9 @@ \table \row - \o \inlineimage qtcreator-screenshots.png + \o \inlineimage qtcreator-screenshots.png \row - \o Qt Creator includes a wide range of useful features. Among them are: + \o Qt Creator includes a wide range of useful features. Among them are: \list 1 \o \bold{Smart Code Editor}: The code editor provides syntax highlighting as well as code completion. @@ -49,8 +49,11 @@ \list \o \l{A Quick Tour of Qt Creator} \o \l{Creating a Project in Qt Creator} + \o \l{The Code Editor} \o \l{Build Settings} + \o \l{Qt Version Management} \o \l{Writing a Simple Program with Qt Creator} + \o \l{Qt Creator and Version Control Systems} \o \l{Navigating Quickly Around Your Code with Locator} \o \l{Debugging with Qt Creator} \o \l{Tips and Tricks} @@ -154,21 +157,20 @@ \section1 Session Management in Qt Creator - ### screenshot - In Qt Creator, a session is a collection of loaded projects, opened files, editor settings, and so on. When you run Qt Creator, you have a default session. You can create a new session using the \gui{Session Manager...}, available in the \gui{File -> Session} menu. + + \image qtcreator-session-manager.png + + To switch between sessions, select \gui{File -> Session}. If you do not create and select any session, Qt Creator will always use the default session. -\omit - session management can also store project dependencies, thorbjorn is - currently working on it -\endomit + \image qtcreator-session-menu.png \section1 Qt Help Integration @@ -206,10 +208,74 @@ are available to help speed up the process of developing your application. */ +/*! \contentspage index.html + \previouspage creator-quick-tour.html + \page creator-code-editor.html + \nextpage creator-build-settings.html + + \title The Code Editor + + ### SCREENSHOT of the editor in action + + + \table + \row + \i Block navigation + \i To navigate between blocks, e.g., from one \bold{\{} to another + \bold{\}} , use \key{Ctrl+[} and \key{Ctrl+]}. + \row + \i Block selection + \i To select a current block, use \key{Ctrl+U}. Pressing + \key{Ctrl+U} again extends the selection to the parent block. + To deselect, use \key{Ctrl+Shift+U}. + \row + \i Moving lines up and down + \i + + \row + \i Completion + \i + + \row + \i Indenting Blocks + \i + \row + \i Commenting or Uncommenting Blocks + \i + + \row + \i Switch between Header and Source + \i Use \key{F4}. + + \row + \i Increasing and Decreasing Font Size + \i Use \key{Ctrl+Scroll Wheel} + + \row + \i Follow Symbols under The Cursor + \i Use \key{F2} and \key{Shift+F2}. This feature works with + namespaces, classes, methods, variables, include statements, + and macros. + \endtable + + + More: + + Collapse + + Up/Down/Page Up/Page Down - hold ctrl to prevent the cursor from moving + + + + To switch to an external editor, select \gui{Open in external editor} from + the \gui{Edit -> Advanced} menu. + +*/ + /*! \contentspage index.html - \previouspage creator-quick-tour.html + \previouspage creator-code-editor.html \page creator-build-settings.html \nextpage creator-creating-project.html @@ -266,8 +332,23 @@ remove the build step. You will still be able to debug applications, but the contents of Qt and STL data types will not be displayed properly. + \section1 Dependencies - \section1 Qt Version Management + If you have multiple projects loaded in your session, you can configure + dependencies between them. This will affect the build order of your + projects. To do this, go the the \bold{Dependencies} tab after selecting + the project for which you want to configure the dependencies, and then use + the checkboxes to check which of the other projects is a dependency. + +*/ + +/*! + \contentspage index.html + \previouspage creator-build-settings.html + \page creator-version-management.html + \nextpage creator-creating-project.html + + \title Qt Version Management Qt Creator allows you to use multiple versions of Qt installed on your hard disk and switch between them easily. @@ -692,6 +773,136 @@ */ +/*! + \contentspage index.html + \previouspage creator-navigation.html + \page creator-version-control.html + \nextpage creator-debugging.html + + \title Qt Creator and Version Control Systems + + \table + \caption Version control systems supported by Qt Creator + \row + \i \bold{git} + \i \l{http://git-scm.com/} + \row + \i \bold{Subversion} + \i \l{http://subversion.tigris.org/} + \row + \i \bold{Perforce} + \i \l{http://www.perforce.com} + \endtable + + + \section1 Setup + + Qt Creator uses the version control system's command line clients to + access your repositories. To set it up, you must ensure that these command + line clients can be located via the \c{PATH} environment variable. You can + specify the path to the command line client's executable in the settings + pages that can be found under \gui{Options...} in the \gui{Tools} menu. + + + \section1 Usage + + You can find the version control menu entires in a sub-menu of the + \gui{Tools} menu. The version control system displayed here is the system + that manages the current project. + + Each version control system adds a pane to the \gui{Application Output} + panes within which it will log the commands it executes, prepended by a + timestamp and the relevant output. + + \image qtcreator-vcs-pane.png + + + \section2 Addings Files + + When you create a new file or a new project, the wizards will display page + requesting whether the files should be added to a version control system. + This depends on whether the parent directory or the project is already + under version control and the system supports the concept of adding files, + e.g., \bold{Perforce} and \bold{Subversion}. Alternatively, you can also + add files later on using the version control tool menus. + + With \bold{git}, there is no concept of adding files. Instead, all modified + files must be \e{staged} for a commit. + + + \section2 Viewing Diff Output + + All version control systems provide menu options to \e{diff} the current + file or project - comparing with the latest version stored in the + repository and displaying the differences. In Qt Creator, a diff is + displayed in a read-only editor. If the file is accessible, you can double + -click on a selected diff chunk and Qt Creator will open an editor + displaying the file, scrolled to the line in question. + + \image qtcreator-vcs-diff.png + + + \section2 Viewing Versioning History and Change Details + + The versioning history of a file can be displayed by selecting the + \gui{Log} (for \bold{git}) or \gui{Filelog} (for \bold{Perforce} and + \bold{Subversion}) option. Typically, the log output will contain the + date, the commit message, and a change or revision identifier. If you + click on the identifier, a description of the change including the diff + will be displayed. + + \image qtcreator-vcs-log.png + \image qtcreator-vcs-describe.png + + + \section2 Annotating Files + + Annotation views are obtained by selecting \gui{Annotate} or \gui{Blame}. + This will display the lines of the file prepended by the change identifier + they originate from. Clicking on the change identifier shows a detailed + description of the file. + + + \section2 Committing Changes + + Once you have finished making changes, you can submit them to the version + control system by choosing \gui{Commit} or \gui{Submit}. Qt Creator will + display a commit page containing a text editor, where you can enter your + commit message, and a checkable list of modified files to be included. + When you are done, click \gui{Commit} to start committing. In addition, + there is a \gui{Diff selected} button that brings up a diff view of the + files selected in the file list. Since the commit page is just another + editor, you can go back to it by closing the diff view. Alternatively, you + can view it from the editor combo box showing the \gui{Opened files}. + + \image qtcreator-vcs-commit.png + + + \section2 Menu Entries Specific to git + + The git sub-menu contains additional entries: + + \table + \row + \i \gui{Stash} + \i Stash local changes prior to executing a \bold{pull}. + \row + \i \gui{Pull} + \i Pull changes from the remote repository. If there are locally + modified files, you will be prompted to stash those changes. + \row + \i \gui{Branches...} + \i Displays the branch dialog showing the local branches at the + top and remote branches at the bottom. To switch to the local + branch, simply double-click on it. Double-clicking on a remote + branch will first create a local branch with the same name that + tracks the remote branch, and then switch to it. + + \image qtcreator-vcs-gitbranch.png + \endtable + +*/ + /*! \contentspage index.html @@ -1017,8 +1228,8 @@ \bold{Keyboard Shortcuts} - Qt Creator provides a lot of useful keyboard shortcuts. A complete list can - be found \l{Keyboard Shortcuts}{here}. + Qt Creator provides a lot of useful keyboard shortcuts. Some useful + shortcuts can be found \l{Keyboard Shortcuts}{here}. \bold{Running Qt Creator from the Command Line} @@ -1065,25 +1276,41 @@ \o Meaning \row - \o System Qt \target glossary-system-qt + \o + \raw HTML + System Qt + \endraw + \target glossary-system-qt \o The version of Qt installed on your system. This is the Qt version for the \c qmake command found in your \c PATH. \row - \o Default Qt \target glossary-default-qt + \o + \raw HTML + Default Qt + \endraw + \target glossary-default-qt \o The version of Qt configured in \gui{Tools -> Options -> Qt 4 -> Default Qt Version}. This is the Qt version used by your new projects. It defaults to System Qt. \row - \o Project Qt \target glossary-project-qt + \o + \raw HTML + Project Qt + \endraw + \target glossary-project-qt \o The version of Qt configured in \gui{Build&Run -> Build Settings -> Build Configurations}. This is the Qt version that is actually used by a particular project. It defaults to Default Qt. \row - \o Shadow Build \target glossary-shadow-build + \o + \raw HTML + Shadow Build + \endraw + \target glossary-shadow-build \o Shadow building means building a project in a separate directory, the \e{build directory}. The build directory is different from the source directory. One of the benefits of diff --git a/scripts/shipping/prepare-linux-qt-for-shipping.sh b/scripts/shipping/prepare-linux-qt-for-shipping.sh index d56a58763ea..10f4620a2cd 100755 --- a/scripts/shipping/prepare-linux-qt-for-shipping.sh +++ b/scripts/shipping/prepare-linux-qt-for-shipping.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash -workdir=/home/berlin/dev/qt-4.4.3-temp -destdir=/home/berlin/dev/qt-4.4.3-shipping -dir=qt-x11-opensource-src-4.4.3 +version=4.4.3 +workdir=/home/berlin/dev/qt-${version}-temp +destdir=/home/berlin/dev/qt-${version}-shipping +dir=qt-x11-opensource-src-${version} file_tar="${dir}.tar" file_tar_gz="${file_tar}.gz" [ -z ${MAKE} ] && MAKE=make @@ -44,7 +45,7 @@ download() { mirror=http://wftp.tu-chemnitz.de/pub/Qt/qt/source ;; esac - wget "${mirror}/${file}" || die "Download failed" + wget "${mirror}/${file_tar_gz}" || die "Download failed" } unpack() { @@ -55,7 +56,7 @@ unpack() { build() { ( - cd "${dir}" + cd "${dir}" || die "cd failed" if [ ! -f config.status ] ; then env -i PATH=${envpath} ./configure \ -prefix "${destdir}" \ @@ -75,11 +76,44 @@ build() { ret=$?; [ ${ret} = 0 ] || exit ${ret} } +fix_rpath() { + folder=$1 + pattern=$2 + rpath=$3 + ( + cd "${destdir}" || die "cd failed" + while read file ; do + echo "Fixing ${file}" + chrpath -r "${rpath}" "${file}" 2>&1 | sed 's/^/\t/' + done < <(find "${folder}" -type f -name "${pattern}") + ) + ret=$?; [ ${ret} = 0 ] || exit ${ret} +} + inst() { ( - cd "${dir}" - mkdir -p "${destdir}" - env -i "${MAKE}" install || die "make install failed" + cd "${dir}" || die "cd failed" + if [ ! -d "${destdir}" ]; then + mkdir -p "${destdir}" + env -i "${MAKE}" install || die "make install failed" + fi + + cd "${destdir}" || die "cd failed" + + # Fix files bin/* + fix_rpath bin '*' '$ORIGIN/../lib' + + # Fix files lib/*.so + fix_rpath lib '*.so.?.?.?' '$ORIGIN' + fix_rpath lib '*.so.?.?.?.debug' '$ORIGIN' + + # Fix files examples/tools/*/*/*.so + fix_rpath examples/tools '*.so' '$ORIGIN/../../../lib' + fix_rpath examples/tools '*.so.debug' '$ORIGIN/../../../lib' + + # Fix files plugins/*/*.so + fix_rpath plugins '*.so' '$ORIGIN/../../lib' + fix_rpath plugins '*.so.debug' '$ORIGIN/../../lib' ) ret=$?; [ ${ret} = 0 ] || exit ${ret} } diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp index ae9f39469a0..eefa3d5b9fe 100644 --- a/shared/cplusplus/Parser.cpp +++ b/shared/cplusplus/Parser.cpp @@ -751,6 +751,9 @@ bool Parser::parseCvQualifiers(SpecifierAST *&node) spec->specifier_token = consumeToken(); *ast = spec; ast = &(*ast)->next; + } else if(LA() == T___ATTRIBUTE__) { + parseAttributeSpecifier(*ast); + ast = &(*ast)->next; } else { break; } diff --git a/shared/scriptwrapper/interface_wrap_helpers.h b/shared/scriptwrapper/interface_wrap_helpers.h index 0ead88f90fc..8ec308fe7e1 100644 --- a/shared/scriptwrapper/interface_wrap_helpers.h +++ b/shared/scriptwrapper/interface_wrap_helpers.h @@ -34,7 +34,6 @@ #ifndef INTERFACE_WRAP_HELPERS_H #define INTERFACE_WRAP_HELPERS_H -#include #include namespace SharedTools { diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 6ed55492e50..e7d3011a767 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -963,7 +963,21 @@ void Preprocessor::processElif(TokenIterator firstToken, TokenIterator lastToken } else if (iflevel == 0 && !skipping()) { // std::cerr << "*** WARNING #else without #if" << std::endl; } else if (!_true_test[iflevel] && !_skipping[iflevel - 1]) { - const Value result = evalExpression(tk.dot(), lastToken, _source); + + const char *first = startOfToken(*tk); + const char *last = startOfToken(*lastToken); + + MacroExpander expandCondition (env); + QByteArray condition; + condition.reserve(256); + expandCondition(first, last, &condition); + + QVector tokens = tokenize(condition); + + const Value result = evalExpression(tokens.constBegin(), + tokens.constEnd() - 1, + condition); + _true_test[iflevel] = ! result.is_zero (); _skipping[iflevel] = result.is_zero (); } else { diff --git a/src/libs/extensionsystem/ExtensionSystemInterfaces b/src/libs/extensionsystem/ExtensionSystemInterfaces deleted file mode 100644 index 7f42b55e89a..00000000000 --- a/src/libs/extensionsystem/ExtensionSystemInterfaces +++ /dev/null @@ -1,39 +0,0 @@ -/*************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Qt Software Information (qt-info@nokia.com) -** -** -** Non-Open Source Usage -** -** Licensees may use this file in accordance with the Qt Beta Version -** License Agreement, Agreement version 2.2 provided with the Software or, -** alternatively, in accordance with the terms contained in a written -** agreement between you and Nokia. -** -** GNU General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging -** of this file. Please review the following information to ensure GNU -** General Public Licensing requirements will be met: -** -** http://www.fsf.org/licensing/licenses/info/GPLv2.html and -** http://www.gnu.org/copyleft/gpl.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt GPL Exception -** version 1.3, included in the file GPL_EXCEPTION.txt in this package. -** -***************************************************************************/ - -#include "extensionsystem/pluginmanager.h" -#include "extensionsystem/pluginspec.h" -#include "extensionsystem/iplugin.h" -#include "extensionsystem/pluginview.h" -#include "extensionsystem/pluginerrorview.h" -#include "extensionsystem/plugindetailsview.h" diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 883459ba7d7..7e3d15dc4c1 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -35,22 +35,23 @@ #include "bineditor.h" #include "bineditorconstants.h" +#include #include #include #include #include #include -#include -#include +#include #include +#include +#include #include #include -#include -#include -#include -#include +#include #include +#include +#include #include #include @@ -204,7 +205,7 @@ public: break; } - switch (Core::Utils::reloadPrompt(fileName, BinEditorPlugin::core()->mainWindow())) { + switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) { case Core::Utils::ReloadCurrent: open(fileName); break; @@ -230,12 +231,15 @@ class BinEditorInterface : public Core::IEditor { Q_OBJECT public: - BinEditorInterface(BinEditor *parent ) : Core::IEditor(parent) { + BinEditorInterface(BinEditor *parent) + : Core::IEditor(parent) + { + Core::ICore *core = Core::ICore::instance(); m_editor = parent; m_file = new BinEditorFile(parent); - m_context << BinEditorPlugin::core()->uniqueIDManager()-> + m_context << core->uniqueIDManager()-> uniqueIdentifier(Core::Constants::K_DEFAULT_BINARY_EDITOR); - m_context << BinEditorPlugin::core()->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR); + m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR); m_cursorPositionLabel = new Core::Utils::LineColumnLabel; QHBoxLayout *l = new QHBoxLayout; @@ -316,7 +320,8 @@ QString BinEditorFactory::kind() const Core::IFile *BinEditorFactory::open(const QString &fileName) { - Core::IEditor *iface = m_owner->m_core->editorManager()->openEditor(fileName, kind()); + Core::ICore *core = Core::ICore::instance(); + Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind()); return iface ? iface->file() : 0; } @@ -336,8 +341,7 @@ QStringList BinEditorFactory::mimeTypes() const BinEditorPlugin *BinEditorPlugin::m_instance = 0; -BinEditorPlugin::BinEditorPlugin() : - m_core(0) +BinEditorPlugin::BinEditorPlugin() { m_undoAction = m_redoAction = m_copyAction = m_selectAllAction = 0; m_instance = this; @@ -353,16 +357,11 @@ BinEditorPlugin *BinEditorPlugin::instance() return m_instance; } -Core::ICore *BinEditorPlugin::core() -{ - return m_instance->m_core; -} - QAction *BinEditorPlugin::registerNewAction(const QString &id, const QString &title) { QAction *result = new QAction(title, this); - m_core->actionManager()->registerAction(result, id, m_context); + Core::ICore::instance()->actionManager()->registerAction(result, id, m_context); return result; } @@ -385,7 +384,8 @@ void BinEditorPlugin::initializeEditor(BinEditor *editor) QObject::connect(editor, SIGNAL(modificationChanged(bool)), editorInterface, SIGNAL(changed())); editor->setEditorInterface(editorInterface); - m_context << BinEditorPlugin::core()->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR); + Core::ICore *core = Core::ICore::instance(); + m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::C_BINEDITOR); if (!m_undoAction) { m_undoAction = registerNewAction(QLatin1String(Core::Constants::UNDO), this, SLOT(undoAction()), @@ -415,13 +415,16 @@ void BinEditorPlugin::initializeEditor(BinEditor *editor) aggregate->add(editor); } -bool BinEditorPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) +bool BinEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/bineditor/BinEditor.mimetypes.xml"), errorMessage)) + Q_UNUSED(arguments); + Q_UNUSED(errorMessage); + + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/bineditor/BinEditor.mimetypes.xml"), errorMessage)) return false; - connect(m_core, SIGNAL(contextAboutToChange(Core::IContext *)), + connect(core, SIGNAL(contextAboutToChange(Core::IContext *)), this, SLOT(updateCurrentEditor(Core::IContext *))); addAutoReleasedObject(new BinEditorFactory(this)); diff --git a/src/plugins/bineditor/bineditorplugin.h b/src/plugins/bineditor/bineditorplugin.h index 51ff129dd62..ddc4333acdb 100644 --- a/src/plugins/bineditor/bineditorplugin.h +++ b/src/plugins/bineditor/bineditorplugin.h @@ -62,7 +62,6 @@ public: ~BinEditorPlugin(); static BinEditorPlugin *instance(); - static Core::ICore *core(); bool initialize(const QStringList &arguments, QString *error_message = 0); void extensionsInitialized(); diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp index 88857a81fb7..3d9ea294d92 100644 --- a/src/plugins/bookmarks/bookmarkmanager.cpp +++ b/src/plugins/bookmarks/bookmarkmanager.cpp @@ -37,10 +37,11 @@ #include "bookmarksplugin.h" #include "bookmarks_global.h" -#include -#include #include +#include #include +#include +#include #include #include @@ -49,6 +50,7 @@ #include #include +#include #include Q_DECLARE_METATYPE(Bookmarks::Internal::Bookmark*) @@ -56,6 +58,7 @@ Q_DECLARE_METATYPE(Bookmarks::Internal::Bookmark*) using namespace Bookmarks; using namespace Bookmarks::Internal; using namespace ProjectExplorer; +using namespace Core; BookmarkDelegate::BookmarkDelegate(QObject *parent) : QStyledItemDelegate(parent), m_normalPixmap(0), m_selectedPixmap(0) @@ -212,8 +215,7 @@ BookmarkView::BookmarkView(QWidget *parent) this, SLOT(gotoBookmark(const QModelIndex &))); m_bookmarkContext = new BookmarkContext(this); - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - core->addContextObject(m_bookmarkContext); + ICore::instance()->addContextObject(m_bookmarkContext); setItemDelegate(new BookmarkDelegate(this)); setFrameStyle(QFrame::NoFrame); @@ -223,8 +225,7 @@ BookmarkView::BookmarkView(QWidget *parent) BookmarkView::~BookmarkView() { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - core->removeContextObject(m_bookmarkContext); + ICore::instance()->removeContextObject(m_bookmarkContext); } void BookmarkView::contextMenuEvent(QContextMenuEvent *event) @@ -244,13 +245,11 @@ void BookmarkView::contextMenuEvent(QContextMenuEvent *event) connect(removeAll, SIGNAL(triggered()), this, SLOT(removeAll())); - menu.exec(mapToGlobal(event->pos())); } void BookmarkView::removeFromContextMenu() { - removeBookmark(m_contextMenuIndex); } @@ -294,7 +293,7 @@ void BookmarkView::gotoBookmark(const QModelIndex &index) BookmarkContext::BookmarkContext(BookmarkView *widget) : m_bookmarkView(widget) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = ICore::instance(); m_context << core->uniqueIDManager()->uniqueIdentifier(Constants::BOOKMARKS_CONTEXT); } @@ -313,15 +312,14 @@ QWidget *BookmarkContext::widget() //// BookmarkManager::BookmarkManager() : - m_core(BookmarksPlugin::core()), m_bookmarkIcon(QIcon(QLatin1String(":/bookmarks/images/bookmark.png"))) { m_selectionModel = new QItemSelectionModel(this, this); - connect(m_core, SIGNAL(contextChanged(Core::IContext*)), + connect(Core::ICore::instance(), SIGNAL(contextChanged(Core::IContext*)), this, SLOT(updateActionStatus())); - ExtensionSystem::PluginManager *pm = m_core->pluginManager(); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ProjectExplorerPlugin *projectExplorer = pm->getObject(); connect(projectExplorer->session(), SIGNAL(sessionLoaded()), @@ -511,7 +509,8 @@ void BookmarkManager::documentPrevNext(bool next) nextLine = markLine; } - m_core->editorManager()->addCurrentPositionToNavigationHistory(true); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + em->addCurrentPositionToNavigationHistory(true); if (next) { if (nextLine == -1) editor->gotoLine(firstLine); @@ -523,7 +522,7 @@ void BookmarkManager::documentPrevNext(bool next) else editor->gotoLine(prevLine); } - m_core->editorManager()->addCurrentPositionToNavigationHistory(); + em->addCurrentPositionToNavigationHistory(); } void BookmarkManager::next() @@ -555,16 +554,17 @@ void BookmarkManager::prev() TextEditor::ITextEditor *BookmarkManager::currentTextEditor() const { - Core::IEditor *currEditor = m_core->editorManager()->currentEditor(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + Core::IEditor *currEditor = em->currentEditor(); if (!currEditor) return 0; return qobject_cast(currEditor); } /* Returns the current session. */ -SessionManager* BookmarkManager::sessionManager() const +SessionManager *BookmarkManager::sessionManager() const { - ExtensionSystem::PluginManager *pm = m_core->pluginManager(); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ProjectExplorerPlugin *pe = pm->getObject(); return pe->session(); } diff --git a/src/plugins/bookmarks/bookmarkmanager.h b/src/plugins/bookmarks/bookmarkmanager.h index 1763b4e5260..0a422e5b239 100644 --- a/src/plugins/bookmarks/bookmarkmanager.h +++ b/src/plugins/bookmarks/bookmarkmanager.h @@ -48,7 +48,6 @@ class SessionManager; } namespace Core { -class ICore; class IEditor; } @@ -131,7 +130,6 @@ private: typedef QMap DirectoryFileBookmarksMap; DirectoryFileBookmarksMap m_bookmarksMap; - Core::ICore *m_core; QIcon m_bookmarkIcon; diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp index 55b28ec82a3..d7051fab068 100644 --- a/src/plugins/bookmarks/bookmarksplugin.cpp +++ b/src/plugins/bookmarks/bookmarksplugin.cpp @@ -35,16 +35,17 @@ #include "bookmarkmanager.h" #include "bookmarks_global.h" -#include -#include #include #include #include #include #include #include +#include +#include +#include -#include +#include #include #include @@ -56,7 +57,7 @@ using namespace TextEditor; BookmarksPlugin *BookmarksPlugin::m_instance = 0; BookmarksPlugin::BookmarksPlugin() - : m_bookmarkManager(0), m_core(0) + : m_bookmarkManager(0) { m_instance = this; } @@ -67,13 +68,13 @@ void BookmarksPlugin::extensionsInitialized() bool BookmarksPlugin::initialize(const QStringList & /*arguments*/, QString *) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - Core::ActionManager *am = m_core->actionManager(); + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); - QList context = QList() << m_core->uniqueIDManager()-> + QList context = QList() << core->uniqueIDManager()-> uniqueIdentifier(Constants::BOOKMARKS_CONTEXT); QList textcontext, globalcontext; - textcontext << m_core->uniqueIDManager()-> + textcontext << core->uniqueIDManager()-> uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); globalcontext << Core::Constants::C_GLOBAL_ID; @@ -171,7 +172,7 @@ bool BookmarksPlugin::initialize(const QStringList & /*arguments*/, QString *) this, SLOT(bookmarkMarginActionTriggered())); // EditorManager - QObject *editorManager = m_core->editorManager(); + QObject *editorManager = core->editorManager(); connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)), this, SLOT(editorAboutToClose(Core::IEditor*))); connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)), diff --git a/src/plugins/bookmarks/bookmarksplugin.h b/src/plugins/bookmarks/bookmarksplugin.h index f4853c48cb8..ef3cfbe0236 100644 --- a/src/plugins/bookmarks/bookmarksplugin.h +++ b/src/plugins/bookmarks/bookmarksplugin.h @@ -45,7 +45,6 @@ class QMenu; QT_END_NAMESPACE namespace Core { -class ICore; class IEditor; } @@ -67,7 +66,6 @@ public: ~BookmarksPlugin(); static BookmarksPlugin *instance() { return m_instance; } - static Core::ICore *core() { return m_instance->m_core; } bool initialize(const QStringList &arguments, QString *error_message); void extensionsInitialized(); @@ -85,7 +83,6 @@ private slots: private: static BookmarksPlugin *m_instance; BookmarkManager *m_bookmarkManager; - Core::ICore *m_core; QAction *m_toggleAction; QAction *m_prevAction; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index d98539969af..effe432e36a 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -80,13 +80,14 @@ CMakeProject::~CMakeProject() // TODO make this function work even if it is reparsing void CMakeProject::parseCMakeLists(const QDir &directory) { - createCbpFile(directory); + createCbpFile(buildDirectory(QString())); - QString cbpFile = findCbpFile(directory); + QString cbpFile = findCbpFile(buildDirectory(QString())); CMakeCbpParser cbpparser; qDebug()<<"Parsing file "< CMakeProject::dependencies() -{ - return QList(); -} - QList CMakeProject::dependsOn() { return QList(); @@ -240,7 +236,7 @@ QString CMakeProject::buildDirectory(const QString &buildConfiguration) const { QString buildDirectory = value(buildConfiguration, "buildDirectory").toString(); if (buildDirectory.isEmpty()) - buildDirectory = QFileInfo(m_fileName).absolutePath(); + buildDirectory = QFileInfo(m_fileName).absolutePath() + "/qtcreator-build"; return buildDirectory; } @@ -469,6 +465,8 @@ void CMakeCbpParser::parseProject() readNext(); if (isEndElement()) { return; + } else if (name() == "Option") { + parseOption(); } else if (name() == "Unit") { parseUnit(); } else if (name() == "Build") { @@ -521,7 +519,7 @@ void CMakeCbpParser::parseTargetOption() { if (attributes().hasAttribute("output")) m_target.executable = attributes().value("output").toString(); - else if (attributes().hasAttribute("type") && attributes().value("type") == "1") + else if (attributes().hasAttribute("type") && (attributes().value("type") == "1" || attributes().value("type") == "0")) m_targetType = true; else if (attributes().hasAttribute("working_dir")) m_target.workingDirectory = attributes().value("working_dir").toString(); @@ -537,6 +535,26 @@ void CMakeCbpParser::parseTargetOption() } } +QString CMakeCbpParser::projectName() const +{ + return m_projectName; +} + +void CMakeCbpParser::parseOption() +{ + if (attributes().hasAttribute("title")) + m_projectName = attributes().value("title").toString(); + + while (!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if(isStartElement()) { + parseUnknownElement(); + } + } +} + void CMakeCbpParser::parseMakeCommand() { while (!atEnd()) { diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index cad7b5fe5df..a71ca7c8b00 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -73,7 +73,6 @@ public: virtual Core::IFile *file() const; virtual ProjectExplorer::IProjectManager *projectManager() const; - virtual QList dependencies(); //NBS TODO remove virtual QList dependsOn(); //NBS TODO implement dependsOn virtual bool isApplication() const; @@ -118,6 +117,7 @@ private: CMakeManager *m_manager; QString m_fileName; CMakeFile *m_file; + QString m_projectName; // TODO probably need a CMake specific node structure CMakeProjectNode* m_rootNode; @@ -137,10 +137,12 @@ public: QList fileList(); QStringList includeFiles(); QList targets(); + QString projectName() const; private: void parseCodeBlocks_project_file(); void parseProject(); void parseBuild(); + void parseOption(); void parseTarget(); void parseTargetOption(); void parseMakeCommand(); @@ -157,6 +159,7 @@ private: CMakeTarget m_target; bool m_targetType; QList m_targets; + QString m_projectName; }; class CMakeFile : public Core::IFile diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index 1f4bc59e9ef..966c0144355 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -37,7 +37,6 @@ #include "cmakeprojectconstants.h" #include -#include #include #include @@ -45,7 +44,7 @@ using namespace CMakeProjectManager::Internal; CMakeManager::CMakeManager() { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); m_projectContext = core->uniqueIDManager()->uniqueIdentifier(CMakeProjectManager::Constants::PROJECTCONTEXT); m_projectLanguage = core->uniqueIDManager()->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX); } diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp index e1b2b1279b6..29ad08ec5f1 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp @@ -40,7 +40,7 @@ #include #include -#include +#include #include @@ -56,7 +56,7 @@ CMakeProjectPlugin::~CMakeProjectPlugin() bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":cmakeproject/CMakeProject.mimetypes.xml"), errorMessage)) return false; addAutoReleasedObject(new CMakeManager()); diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp index 3932d42598b..9101801ac73 100644 --- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp +++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp @@ -61,7 +61,7 @@ namespace { You get the only implementation of this class from the core interface ICore::actionManager() method, e.g. \code - ExtensionSystem::PluginManager::instance()->getObject()->actionManager() + Core::ICore::instance()->actionManager() \endcode The main reasons for the need of this class is to provide a central place where the user @@ -80,8 +80,7 @@ namespace { So to register a globally active action "My Action" put the following in your plugin's IPlugin::initialize method: \code - Core::ActionManager *am = ExtensionSystem::PluginManager::instance() - ->getObject()->actionManager(); + Core::ActionManager *am = Core::ICore::instance()->actionManager(); QAction *myAction = new QAction(tr("My Action"), this); Core::Command *cmd = am->registerAction(myAction, "myplugin.myaction", diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp index aad82af6677..17cf04615b5 100644 --- a/src/plugins/coreplugin/basefilewizard.cpp +++ b/src/plugins/coreplugin/basefilewizard.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -345,28 +346,19 @@ void WizardEventLoop::rejected() // ---------------- BaseFileWizardPrivate struct BaseFileWizardPrivate { - explicit BaseFileWizardPrivate(const Core::BaseFileWizardParameters ¶meters, - Core::ICore *core); + explicit BaseFileWizardPrivate(const Core::BaseFileWizardParameters ¶meters) + : m_parameters(parameters), m_wizardDialog(0) + {} const Core::BaseFileWizardParameters m_parameters; QWizard *m_wizardDialog; - Core::ICore *m_core; }; -Core::BaseFileWizardPrivate::BaseFileWizardPrivate(const BaseFileWizardParameters ¶meters, - Core::ICore *core) : - m_parameters(parameters), - m_wizardDialog(0), - m_core(core) -{ -} - // ---------------- Wizard BaseFileWizard::BaseFileWizard(const BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent) : IWizard(parent), - m_d(new BaseFileWizardPrivate(parameters, core)) + m_d(new BaseFileWizardPrivate(parameters)) { } @@ -517,13 +509,14 @@ bool BaseFileWizard::postGenerateFiles(const GeneratedFiles &l, QString *errorMe { // File mode: open the editors in file mode and ensure editor pane const Core::GeneratedFiles::const_iterator cend = l.constEnd(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); for (Core::GeneratedFiles::const_iterator it = l.constBegin(); it != cend; ++it) { - if (!m_d->m_core->editorManager()->openEditor(it->path(), it->editorKind())) { + if (!em->openEditor(it->path(), it->editorKind())) { *errorMessage = tr("Failed to open an editor for %1").arg(it->path()); return false; } } - m_d->m_core->editorManager()->ensureEditorManagerVisible(); + em->ensureEditorManagerVisible(); return true; } @@ -534,7 +527,6 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l if (debugWizard) qDebug() << Q_FUNC_INFO << location << files; - bool existingFilesFound = false; bool oddStuffFound = false; @@ -581,7 +573,7 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l const QString messageFormat = tr("The following files already exist in the directory %1:\n" "%2.\nWould you like to overwrite them?"); const QString message = messageFormat.arg(location).arg(fileNamesMsgPart); - const bool yes = (QMessageBox::question(core()->mainWindow(), + const bool yes = (QMessageBox::question(Core::ICore::instance()->mainWindow(), tr("Existing files"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) @@ -589,11 +581,6 @@ BaseFileWizard::OverwriteResult BaseFileWizard::promptOverwrite(const QString &l return yes ? OverwriteOk : OverwriteCanceled; } -Core::ICore *BaseFileWizard::core() const -{ - return m_d->m_core; -} - QList BaseFileWizard::allWizards() { return ExtensionSystem::PluginManager::instance()->getObjects(); @@ -636,19 +623,18 @@ QString BaseFileWizard::buildFileName(const QString &path, QString BaseFileWizard::preferredSuffix(const QString &mimeType) const { - const QString rc = m_d->m_core->mimeDatabase()->preferredSuffixByType(mimeType); + const QString rc = Core::ICore::instance()->mimeDatabase()->preferredSuffixByType(mimeType); if (rc.isEmpty()) qWarning("%s: WARNING: Unable to find a preferred suffix for %s.", Q_FUNC_INFO, mimeType.toUtf8().constData()); return rc; } -// ------------- StandardFileWizard( +// ------------- StandardFileWizard StandardFileWizard::StandardFileWizard(const BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent) : - BaseFileWizard(parameters, core, parent) + BaseFileWizard(parameters, parent) { } diff --git a/src/plugins/coreplugin/basefilewizard.h b/src/plugins/coreplugin/basefilewizard.h index 40e98793cb9..5f0a1ec9b55 100644 --- a/src/plugins/coreplugin/basefilewizard.h +++ b/src/plugins/coreplugin/basefilewizard.h @@ -50,7 +50,6 @@ QT_END_NAMESPACE namespace Core { -class ICore; class IEditor; class IFileWizardExtension; @@ -69,7 +68,7 @@ public: GeneratedFile(); explicit GeneratedFile(const QString &path); GeneratedFile(const GeneratedFile &); - GeneratedFile &operator=(const GeneratedFile&); + GeneratedFile &operator=(const GeneratedFile &); ~GeneratedFile(); // Full path of the file should be created, or the suggested file name @@ -107,19 +106,19 @@ public: void setKind(IWizard::Kind k); QIcon icon() const; - void setIcon(const QIcon&); + void setIcon(const QIcon &icon); QString description() const; - void setDescription(const QString &); + void setDescription(const QString &description); QString name() const; - void setName(const QString &); + void setName(const QString &name); QString category() const; - void setCategory(const QString &); + void setCategory(const QString &category); QString trCategory() const; - void setTrCategory(const QString &); + void setTrCategory(const QString &trCategory); private: QSharedDataPointer m_d; @@ -172,7 +171,7 @@ public: protected: typedef QList WizardPageList; - explicit BaseFileWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent = 0); + explicit BaseFileWizard(const BaseFileWizardParameters ¶meters, QObject *parent = 0); // Overwrite to create the wizard dialog on the parent, adding // the extension pages. @@ -197,8 +196,6 @@ protected: OverwriteResult promptOverwrite(const QString &location, const QStringList &files, QString *errorMessage) const; - Core::ICore *core() const; - private: BaseFileWizardPrivate *m_d; }; @@ -213,7 +210,7 @@ class CORE_EXPORT StandardFileWizard : public BaseFileWizard Q_OBJECT protected: - explicit StandardFileWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent = 0); + explicit StandardFileWizard(const BaseFileWizardParameters ¶meters, QObject *parent = 0); // Implemented to create a Core::Utils::FileWizardDialog virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/coreplugin/baseview.cpp b/src/plugins/coreplugin/baseview.cpp index f3dd93f5155..ae93c281fa5 100644 --- a/src/plugins/coreplugin/baseview.cpp +++ b/src/plugins/coreplugin/baseview.cpp @@ -33,7 +33,7 @@ #include "baseview.h" -#include +#include using namespace Core; diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index 822e452c350..c16838fb049 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -34,8 +34,6 @@ #ifndef CORECONSTANTS_H #define CORECONSTANTS_H -#include - namespace Core { namespace Constants { @@ -122,6 +120,7 @@ const char * const EXIT = "QtCreator.Exit"; const char * const OPTIONS = "QtCreator.Options"; const char * const TOGGLE_SIDEBAR = "QtCreator.ToggleSidebar"; +const char * const TOGGLE_FULLSCREEN = "QtCreator.ToggleFullScreen"; const char * const MINIMIZE_WINDOW = "QtCreator.MinimizeWindow"; const char * const ZOOM_WINDOW = "QtCreator.ZoomWindow"; @@ -146,7 +145,7 @@ const char * const ABOUT_WORKBENCH = "QtCreator.AboutWorkbench"; const char * const ABOUT_PLUGINS = "QtCreator.AboutPlugins"; const char * const ABOUT_QT = "QtCreator.AboutQt"; const char * const S_RETURNTOEDITOR = "QtCreator.ReturnToEditor"; -const char * const OPEN_IN_EXTERNAL_EDITOR = "QtCreattor.OpenInExternalEditor"; +const char * const OPEN_IN_EXTERNAL_EDITOR = "QtCreator.OpenInExternalEditor"; // default groups const char * const G_DEFAULT_ONE = "QtCreator.Group.Default.One"; @@ -174,11 +173,18 @@ const char * const G_FILE_OTHER = "QtCreator.Group.File.Other"; const char * const G_EDIT_UNDOREDO = "QtCreator.Group.Edit.UndoRedo"; const char * const G_EDIT_COPYPASTE = "QtCreator.Group.Edit.CopyPaste"; const char * const G_EDIT_SELECTALL = "QtCreator.Group.Edit.SelectAll"; -const char * const G_EDIT_FORMAT = "QtCreator.Group.Edit.Format"; +const char * const G_EDIT_ADVANCED = "QtCreator.Group.Edit.Advanced"; const char * const G_EDIT_FIND = "QtCreator.Group.Edit.Find"; const char * const G_EDIT_OTHER = "QtCreator.Group.Edit.Other"; +// advanced edit menu groups + +const char * const G_EDIT_FORMAT = "QtCreator.Group.Edit.Format"; +const char * const G_EDIT_COLLAPSING = "QtCreator.Group.Edit.Collapsing"; +const char * const G_EDIT_FONT = "QtCreator.Group.Edit.Font"; +const char * const G_EDIT_EDITOR = "QtCreator.Group.Edit.Editor"; + // window menu groups const char * const G_WINDOW_SIZE = "QtCreator.Group.Window.Size"; const char * const G_WINDOW_PANES = "QtCreator.Group.Window.Panes"; @@ -188,6 +194,7 @@ const char * const G_WINDOW_NAVIGATE = "QtCreator.Group.Window.Navigate"; const char * const G_WINDOW_NAVIGATE_GROUPS = "QtCreator.Group.Window.Navigate.Groups"; const char * const G_WINDOW_OTHER = "QtCreator.Group.Window.Other"; const char * const G_WINDOW_LIST = "QtCreator.Group.Window.List"; +const char * const G_WINDOW_FULLSCREEN = "QtCreator.Group.Window.Fullscreen"; // help groups (global) const char * const G_HELP_HELP = "QtCreator.Group.Help.Help"; diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp index 68653b52fc7..9f8ec24b576 100644 --- a/src/plugins/coreplugin/coreimpl.cpp +++ b/src/plugins/coreplugin/coreimpl.cpp @@ -36,12 +36,21 @@ #include #include +namespace Core { +namespace Internal { + +// The Core Singleton +static CoreImpl *m_instance = 0; + +} // namespace Internal +} // namespace Core + + using namespace Core; using namespace Core::Internal; -CoreImpl *CoreImpl::m_instance = 0; -CoreImpl *CoreImpl::instance() +ICore* ICore::instance() { return m_instance; } @@ -190,3 +199,4 @@ void CoreImpl::openFiles(const QStringList &arguments) { m_mainwindow->openFiles(arguments); } + diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h index b09de4101f6..a845a4b9905 100644 --- a/src/plugins/coreplugin/coreimpl.h +++ b/src/plugins/coreplugin/coreimpl.h @@ -45,8 +45,6 @@ class CoreImpl : public ICore Q_OBJECT public: - static CoreImpl *instance(); - CoreImpl(MainWindow *mainwindow); ~CoreImpl() {} @@ -93,8 +91,6 @@ public: private: MainWindow *m_mainwindow; friend class MainWindow; - - static CoreImpl *m_instance; }; } // namespace Internal diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 4b18570037a..b947b54827c 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -39,7 +39,9 @@ #include "modemanager.h" #include "fileiconprovider.h" -#include +#include + +#include #if !defined(QT_NO_WEBKIT) #include #include diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 669ea09bf92..547c0f2d40d 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -34,6 +34,8 @@ #include "settingsdialog.h" #include "coreimpl.h" +#include + #include #include @@ -58,7 +60,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, const QString &initialCategory, QMap categories; QList pages = - CoreImpl::instance()->pluginManager()->getObjects(); + ExtensionSystem::PluginManager::instance()->getObjects(); int index = 0; foreach (IOptionsPage *page, pages) { diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 72751522ad2..4572fef6f25 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -53,6 +53,8 @@ #include #include +#include + #include #include @@ -77,6 +79,11 @@ using namespace Core::Internal; enum { debugEditorManager=0 }; +static inline ExtensionSystem::PluginManager *pluginManager() +{ + return ExtensionSystem::PluginManager::instance(); +} + //===================EditorManager===================== EditorManagerPlaceHolder *EditorManagerPlaceHolder::m_current = 0; @@ -201,6 +208,16 @@ EditorManagerPrivate::~EditorManagerPrivate() EditorManager *EditorManager::m_instance = 0; +static Command *createSeparator(ActionManager *am, QObject *parent, + const QString &name, + const QList &context) +{ + QAction *tmpaction = new QAction(parent); + tmpaction->setSeparator(true); + Command *cmd = am->registerAction(tmpaction, name, context); + return cmd; +} + EditorManager::EditorManager(ICore *core, QWidget *parent) : QWidget(parent), m_d(new EditorManagerPrivate(core, parent)) @@ -338,12 +355,24 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) : ActionContainer *medit = am->actionContainer(Constants::M_EDIT); ActionContainer *advancedMenu = am->createMenu(Constants::M_EDIT_ADVANCED); - medit->addMenu(advancedMenu, Constants::G_EDIT_FORMAT); + medit->addMenu(advancedMenu, Constants::G_EDIT_ADVANCED); advancedMenu->menu()->setTitle(tr("&Advanced")); + advancedMenu->appendGroup(Constants::G_EDIT_FORMAT); + advancedMenu->appendGroup(Constants::G_EDIT_COLLAPSING); + advancedMenu->appendGroup(Constants::G_EDIT_FONT); + advancedMenu->appendGroup(Constants::G_EDIT_EDITOR); + + // Advanced menu separators + cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Collapsing"), editManagerContext); + advancedMenu->addAction(cmd, Constants::G_EDIT_COLLAPSING); + cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Font"), editManagerContext); + advancedMenu->addAction(cmd, Constants::G_EDIT_FONT); + cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Editor"), editManagerContext); + advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR); cmd = am->registerAction(m_d->m_openInExternalEditorAction, Constants::OPEN_IN_EXTERNAL_EDITOR, editManagerContext); cmd->setDefaultKeySequence(QKeySequence(tr("Alt+V,Alt+I"))); - advancedMenu->addAction(cmd); + advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR); connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor())); @@ -367,11 +396,12 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) : EditorManager::~EditorManager() { if (m_d->m_core) { + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); if (m_d->m_coreListener) { - m_d->m_core->pluginManager()->removeObject(m_d->m_coreListener); + pm->removeObject(m_d->m_coreListener); delete m_d->m_coreListener; } - m_d->m_core->pluginManager()->removeObject(m_d->m_openEditorsFactory); + pm->removeObject(m_d->m_openEditorsFactory); delete m_d->m_openEditorsFactory; } delete m_d; @@ -383,10 +413,11 @@ void EditorManager::init() context << m_d->m_core->uniqueIDManager()->uniqueIdentifier("QtCreator.OpenDocumentsView"); m_d->m_coreListener = new EditorClosingCoreListener(this); - m_d->m_core->pluginManager()->addObject(m_d->m_coreListener); + + pluginManager()->addObject(m_d->m_coreListener); m_d->m_openEditorsFactory = new OpenEditorsViewFactory(); - m_d->m_core->pluginManager()->addObject(m_d->m_openEditorsFactory); + pluginManager()->addObject(m_d->m_openEditorsFactory); } QSize EditorManager::minimumSizeHint() const @@ -568,7 +599,7 @@ bool EditorManager::closeEditors(const QList editorsToClose, bool askA QList acceptedEditors; //ask all core listeners to check whether the editor can be closed const QList listeners = - m_d->m_core->pluginManager()->getObjects(); + pluginManager()->getObjects(); foreach (IEditor *editor, editorsToClose) { bool editorAccepted = true; foreach (ICoreListener *listener, listeners) { @@ -680,7 +711,7 @@ EditorManager::EditorFactoryList EditorManager::editorFactories(const MimeType &mimeType, bool bestMatchOnly) const { EditorFactoryList rc; - const EditorFactoryList allFactories = m_d->m_core->pluginManager()->getObjects(); + const EditorFactoryList allFactories = pluginManager()->getObjects(); mimeTypeFactoryRecursion(m_d->m_core->mimeDatabase(), mimeType, allFactories, bestMatchOnly, &rc); if (debugEditorManager) qDebug() << Q_FUNC_INFO << mimeType.type() << " returns " << rc; @@ -707,7 +738,7 @@ IEditor *EditorManager::createEditor(const QString &editorKind, factories = editorFactories(mimeType, true); } else { // Find by editor kind - const EditorFactoryList allFactories = m_d->m_core->pluginManager()->getObjects(); + const EditorFactoryList allFactories = pluginManager()->getObjects(); const EditorFactoryList::const_iterator acend = allFactories.constEnd(); for (EditorFactoryList::const_iterator ait = allFactories.constBegin(); ait != acend; ++ait) { if (editorKind == (*ait)->kind()) { diff --git a/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp b/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp index 91a0895e548..7d27b72e737 100644 --- a/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp +++ b/src/plugins/coreplugin/editormanager/stackededitorgroup.cpp @@ -80,6 +80,7 @@ StackedEditorGroup::StackedEditorGroup(QWidget *parent) : tl->setMargin(0); { m_editorList->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_editorList->setSizeAdjustPolicy(QComboBox::AdjustToContents); m_editorList->setMinimumContentsLength(20); m_proxyModel.setSourceModel(model()); m_proxyModel.sort(0); @@ -297,9 +298,9 @@ void StackedEditorGroup::setCurrentEditor(IEditor *editor) void StackedEditorGroup::checkEditorStatus() { - IEditor *editor = qobject_cast(sender()); - if (editor == currentEditor()) - updateEditorStatus(editor); + IEditor *editor = qobject_cast(sender()); + if (editor == currentEditor()) + updateEditorStatus(editor); } void StackedEditorGroup::updateEditorStatus(IEditor *editor) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 5d6d3274177..5654c885758 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -51,10 +51,7 @@ You should never create a subclass of this interface. The one and only instance is created by the Core plugin. You can access this instance - from your plugin via the plugin manager, e.g. - \code - ExtensionSystem::PluginManager::instance()->getObject(); - \endcode + from your plugin through \c{Core::instance()}. \mainclass */ diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 7244782b495..565b8589345 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -35,36 +35,30 @@ #define ICORE_H #include "core_global.h" -#include #include -#include QT_BEGIN_NAMESPACE -class QSettings; -class QStatusBar; -class QFocusEvent; class QMainWindow; class QPrinter; +class QSettings; +template class QList; QT_END_NAMESPACE namespace Core { -// forward declarations class ActionManager; -class IFile; -class FileManager; -class MessageManager; -class IEditor; -class UniqueIDManager; class EditorManager; +class FileManager; +class IContext; +class IWizard; +class MessageManager; +class MimeDatabase; +class ModeManager; class ProgressManager; class ScriptManager; +class UniqueIDManager; class VariableManager; -class IContext; class VCSManager; -class ModeManager; -class IWizard; -class MimeDatabase; class CORE_EXPORT ICore : public QObject { @@ -74,6 +68,8 @@ public: ICore() {} virtual ~ICore() {} + static ICore *instance(); + virtual QStringList showNewItemDialog(const QString &title, const QList &wizards, const QString &defaultLocation = QString()) = 0; @@ -85,7 +81,6 @@ public: virtual FileManager *fileManager() const = 0; virtual UniqueIDManager *uniqueIDManager() const = 0; virtual MessageManager *messageManager() const = 0; - virtual ExtensionSystem::PluginManager *pluginManager() const = 0; virtual EditorManager *editorManager() const = 0; virtual ProgressManager *progressManager() const = 0; virtual ScriptManager *scriptManager() const = 0; diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 32879ecf8a6..c1347c3ef70 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -70,22 +70,23 @@ #include "basefilewizard.h" #include +#include -#include #include +#include #include #include -#include +#include -#include -#include #include -#include #include -#include +#include +#include #include -#include +#include #include +#include +#include /* #ifdef Q_OS_UNIX @@ -142,6 +143,7 @@ MainWindow::MainWindow() : m_exitAction(0), m_optionsAction(0), m_toggleSideBarAction(0), + m_toggleFullScreenAction(0), #ifdef Q_OS_MAC m_minimizeAction(0), m_zoomAction(0), @@ -186,6 +188,7 @@ MainWindow::MainWindow() : QCoreApplication::setOrganizationName(QLatin1String("Nokia")); QSettings::setDefaultFormat(QSettings::IniFormat); QString baseName = qApp->style()->objectName(); +#ifdef Q_WS_X11 if (baseName == "windows") { // Sometimes we get the standard windows 95 style as a fallback // e.g. if we are running on a KDE4 desktop @@ -195,18 +198,19 @@ MainWindow::MainWindow() : else baseName = "cleanlooks"; } +#endif qApp->setStyle(new ManhattanStyle(baseName)); statusBar()->setProperty("p_styled", true); } -void MainWindow::toggleNavigation() +void MainWindow::setSidebarVisible(bool visible) { if (NavigationWidgetPlaceHolder::current()) { - if (m_navigationWidget->isSuppressed()) { + if (m_navigationWidget->isSuppressed() && visible) { m_navigationWidget->setShown(true); m_navigationWidget->setSuppressed(false); } else { - m_navigationWidget->setShown(!m_navigationWidget->isShown()); + m_navigationWidget->setShown(visible); } } } @@ -398,7 +402,7 @@ void MainWindow::registerDefaultContainers() medit->appendGroup(Constants::G_EDIT_UNDOREDO); medit->appendGroup(Constants::G_EDIT_COPYPASTE); medit->appendGroup(Constants::G_EDIT_SELECTALL); - medit->appendGroup(Constants::G_EDIT_FORMAT); + medit->appendGroup(Constants::G_EDIT_ADVANCED); medit->appendGroup(Constants::G_EDIT_FIND); medit->appendGroup(Constants::G_EDIT_OTHER); @@ -428,9 +432,9 @@ void MainWindow::registerDefaultContainers() ac->appendGroup(Constants::G_HELP_ABOUT); } -static Command *createSeparator(ActionManagerPrivate *am, QObject *parent, - const QString &name, - const QList &context) +static Command *createSeparator(ActionManager *am, QObject *parent, + const QString &name, + const QList &context) { QAction *tmpaction = new QAction(parent); tmpaction->setSeparator(true); @@ -445,7 +449,6 @@ void MainWindow::registerDefaultActions() ActionContainer *medit = am->actionContainer(Constants::M_EDIT); ActionContainer *mtools = am->actionContainer(Constants::M_TOOLS); ActionContainer *mwindow = am->actionContainer(Constants::M_WINDOW); - Q_UNUSED(mwindow) ActionContainer *mhelp = am->actionContainer(Constants::M_HELP); // File menu separators @@ -462,7 +465,7 @@ void MainWindow::registerDefaultActions() mfile->addAction(cmd, Constants::G_FILE_OTHER); // Edit menu separators - cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext); + cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext); medit->addAction(cmd, Constants::G_EDIT_COPYPASTE); cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.SelectAll"), m_globalContext); @@ -471,8 +474,8 @@ void MainWindow::registerDefaultActions() cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Find"), m_globalContext); medit->addAction(cmd, Constants::G_EDIT_FIND); - cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Format"), m_globalContext); - medit->addAction(cmd, Constants::G_EDIT_FORMAT); + cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Advanced"), m_globalContext); + medit->addAction(cmd, Constants::G_EDIT_ADVANCED); //Tools menu separators cmd = createSeparator(am, this, QLatin1String("QtCreator.Tools.Sep.Options"), m_globalContext); @@ -625,7 +628,7 @@ void MainWindow::registerDefaultActions() // Toggle Sidebar Action m_toggleSideBarAction = new QAction(QIcon(Constants::ICON_TOGGLE_SIDEBAR), - tr("Toggle Sidebar"), this); + tr("Show Sidebar"), this); m_toggleSideBarAction->setCheckable(true); cmd = am->registerAction(m_toggleSideBarAction, Constants::TOGGLE_SIDEBAR, m_globalContext); #ifdef Q_OS_MAC @@ -633,11 +636,24 @@ void MainWindow::registerDefaultActions() #else cmd->setDefaultKeySequence(QKeySequence("Alt+0")); #endif - connect(m_toggleSideBarAction, SIGNAL(triggered()), this, SLOT(toggleNavigation())); + connect(m_toggleSideBarAction, SIGNAL(triggered(bool)), this, SLOT(setSidebarVisible(bool))); m_toggleSideBarButton->setDefaultAction(cmd->action()); mwindow->addAction(cmd, Constants::G_WINDOW_PANES); m_toggleSideBarAction->setEnabled(false); +#if !defined(Q_OS_MAC) + // Toggle Full Screen + m_toggleFullScreenAction = new QAction(tr("Toggle Fullscreen"), this); + m_toggleFullScreenAction->setCheckable(true); + m_toggleFullScreenAction->setChecked(false); + cmd = am->registerAction(m_toggleFullScreenAction, + Constants::TOGGLE_FULLSCREEN, m_globalContext); + cmd->setDefaultKeySequence(QKeySequence("Ctrl+Shift+F11")); + mwindow->addAction(cmd, Constants::G_WINDOW_SIZE); + connect(m_toggleFullScreenAction, SIGNAL(triggered(bool)), + this, SLOT(setFullScreen(bool))); +#endif + //About IDE Action #ifdef Q_OS_MAC tmpaction = new QAction(tr("About &Qt Creator"), this); // it's convention not to add dots to the about menu @@ -682,8 +698,8 @@ void MainWindow::openFile() static QList getNonEditorFileFactories() { - const ICore *core = CoreImpl::instance(); - const QList allFileFactories = core->pluginManager()->getObjects(); + const QList allFileFactories = + ExtensionSystem::PluginManager::instance()->getObjects(); QList nonEditorFileFactories; foreach (IFileFactory *factory, allFileFactories) { if (!qobject_cast(factory)) @@ -914,13 +930,18 @@ void MainWindow::changeEvent(QEvent *e) qDebug() << "main window activated"; emit windowActivated(); } -#ifdef Q_OS_MAC } else if (e->type() == QEvent::WindowStateChange) { +#ifdef Q_OS_MAC bool minimized = isMinimized(); if (debugMainWindow) qDebug() << "main window state changed to minimized=" << minimized; m_minimizeAction->setEnabled(!minimized); m_zoomAction->setEnabled(!minimized); +#else + QWindowStateChangeEvent *ev = + static_cast(e); + bool isFullScreen = (ev->oldState() & Qt::WindowFullScreen) != 0; + m_toggleFullScreenAction->setChecked(!isFullScreen); #endif } } @@ -1110,3 +1131,19 @@ QPrinter *MainWindow::printer() const m_printer = new QPrinter(QPrinter::HighResolution); return m_printer; } + +void MainWindow::setFullScreen(bool on) +{ + if (bool(windowState() & Qt::WindowFullScreen) == on) + return; + + if (on) { + setWindowState(windowState() | Qt::WindowFullScreen); + //statusBar()->hide(); + //menuBar()->hide(); + } else { + setWindowState(windowState() & ~Qt::WindowFullScreen); + //menuBar()->show(); + //statusBar()->show(); + } +} diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h index 4a1c08f16ef..e1fb1d9c662 100644 --- a/src/plugins/coreplugin/mainwindow.h +++ b/src/plugins/coreplugin/mainwindow.h @@ -137,6 +137,7 @@ public slots: void newFile(); void openFileWith(); void exit(); + void setFullScreen(bool on); QStringList showNewItemDialog(const QString &title, const QList &wizards, @@ -157,7 +158,7 @@ private slots: void aboutQtCreator(); void aboutPlugins(); void updateFocusWidget(QWidget *old, QWidget *now); - void toggleNavigation(); + void setSidebarVisible(bool visible); void destroyVersionDialog(); private: @@ -213,6 +214,7 @@ private: QAction *m_exitAction; QAction *m_optionsAction; QAction *m_toggleSideBarAction; + QAction *m_toggleFullScreenAction; #ifdef Q_OS_MAC QAction *m_minimizeAction; QAction *m_zoomAction; diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index 579881a215d..24a0b6eac37 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -46,6 +46,8 @@ #include #include +#include + #include #include @@ -215,7 +217,7 @@ void ModeManager::currentTabChanged(int index) // FIXME: This hardcoded context update is required for the Debug and Edit modes, since // they use the editor widget, which is already a context widget so the main window won't // go further up the parent tree to find the mode context. - CoreImpl *core = CoreImpl::instance(); + ICore *core = ICore::instance(); foreach (const int context, m_addedContexts) core->removeAdditionalContext(context); diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp index f6b586f7603..1141909aa0c 100644 --- a/src/plugins/coreplugin/navigationwidget.cpp +++ b/src/plugins/coreplugin/navigationwidget.cpp @@ -39,15 +39,16 @@ #include #include #include -#include +#include + +#include +#include #include #include -#include -#include #include -#include -#include +#include +#include Q_DECLARE_METATYPE(Core::INavigationWidgetFactory *) @@ -315,8 +316,8 @@ void NavigationWidget::objectAdded(QObject * obj) if (!factory) return; - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - Core::ActionManager *am = core->actionManager(); + ICore *core = ICore::instance(); + ActionManager *am = core->actionManager(); QList navicontext = QList() << core->uniqueIDManager()-> uniqueIdentifier(Core::Constants::C_NAVIGATION_PANE); @@ -398,9 +399,8 @@ NavigationSubWidget::~NavigationSubWidget() void NavigationSubWidget::setCurrentIndex(int index) { // Remove toolbutton - foreach (QWidget *w, m_additionalToolBarWidgets) { + foreach (QWidget *w, m_additionalToolBarWidgets) delete w; - } // Remove old Widget delete m_navigationWidget; @@ -465,8 +465,7 @@ void NavigationSubWidget::setFactory(INavigationWidgetFactory *factory) void NavigationSubWidget::setFactory(const QString &name) { - for (int i = 0; i < m_navigationComboBox->count(); ++i) - { + for (int i = 0; i < m_navigationComboBox->count(); ++i) { INavigationWidgetFactory *factory = m_navigationComboBox->itemData(i).value(); if (factory->displayName() == name) diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index e5f756a498f..7169249cfaa 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -42,12 +42,13 @@ #include #include +#include + #include #include #include #include #include -#include #include #include #include @@ -393,8 +394,7 @@ void OutputPane::showPage(int idx, bool focus) if (!OutputPanePlaceHolder::m_current) { // In this mode we don't have a placeholder // switch to the output mode and switch the page - ICore *core = m_pluginManager->getObject(); - core->modeManager()->activateMode(Constants::MODE_OUTPUT); + ICore::instance()->modeManager()->activateMode(Constants::MODE_OUTPUT); ensurePageVisible(idx); } else { // else we make that page visible @@ -409,14 +409,13 @@ void OutputPane::showPage(int idx, bool focus) void OutputPane::togglePage(bool focus) { int idx = findIndexForPage(qobject_cast(sender())); - if(OutputPanePlaceHolder::m_current + if (OutputPanePlaceHolder::m_current && OutputPanePlaceHolder::m_current->isVisible() && m_widgetComboBox->itemData(m_widgetComboBox->currentIndex()).toInt() == idx) { slotHide(); } else { showPage(idx, focus); } - } void OutputPane::setCloseable(bool b) diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp index 1ac21ca743c..937af4f66a3 100644 --- a/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp +++ b/src/plugins/coreplugin/scriptmanager/scriptmanager.cpp @@ -35,7 +35,6 @@ #include "qworkbench_wrapper.h" #include "metatypedeclarations.h" -#include #include #include #include diff --git a/src/plugins/coreplugin/viewmanager.cpp b/src/plugins/coreplugin/viewmanager.cpp index 0db47634729..052e2dee522 100644 --- a/src/plugins/coreplugin/viewmanager.cpp +++ b/src/plugins/coreplugin/viewmanager.cpp @@ -40,21 +40,13 @@ #include #include -#include #include +#include #include -#include -#include -#include -#include #include #include -#include -#include #include -#include -#include using namespace Core; using namespace Core::Internal; diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp index 1ab4daa0a4a..af4cbabbbe8 100644 --- a/src/plugins/cpaster/cpasterplugin.cpp +++ b/src/plugins/cpaster/cpasterplugin.cpp @@ -38,17 +38,18 @@ #include "splitter.h" #include "view.h" -#include -#include -#include -#include -#include #include +#include #include -#include +#include +#include +#include #include +#include +#include +#include -#include +#include #include #include #include @@ -62,8 +63,6 @@ using namespace CodePaster; using namespace Core; using namespace TextEditor; -Core::ICore *gCoreInstance = NULL; - CodepasterPlugin::CodepasterPlugin() : m_settingsPage(0), m_fetcher(0), m_poster(0) { @@ -83,11 +82,9 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m Q_UNUSED(arguments); Q_UNUSED(error_message); - gCoreInstance = ExtensionSystem::PluginManager::instance()->getObject(); - // Create the globalcontext list to register actions accordingly QList globalcontext; - globalcontext << gCoreInstance->uniqueIDManager()-> + globalcontext << ICore::instance()->uniqueIDManager()-> uniqueIdentifier(Core::Constants::C_GLOBAL); // Create the settings Page @@ -95,7 +92,7 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m addObject(m_settingsPage); //register actions - Core::ActionManager *actionManager = gCoreInstance->actionManager(); + Core::ActionManager *actionManager = ICore::instance()->actionManager(); Core::ActionContainer *toolsContainer = actionManager->actionContainer(Core::Constants::M_TOOLS); @@ -132,7 +129,7 @@ void CodepasterPlugin::post() { if (m_poster) delete m_poster; - IEditor* editor = gCoreInstance->editorManager()->currentEditor(); + IEditor* editor = ICore::instance()->editorManager()->currentEditor(); ITextEditor* textEditor = qobject_cast(editor); if (!textEditor) return; @@ -243,7 +240,7 @@ void CustomFetcher::customRequestFinished(int, bool error) QByteArray data = body(); if (!m_listWidget) { QString title = QString::fromLatin1("Code Paster: %1").arg(m_id); - gCoreInstance->editorManager()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR + ICore::instance()->editorManager()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR , &title, data); } else { m_listWidget->clear(); @@ -283,7 +280,7 @@ void CustomPoster::customRequestFinished(int, bool error) if (!error) { if (m_copy) QApplication::clipboard()->setText(pastedUrl()); - gCoreInstance->messageManager()->printToOutputPane(pastedUrl(), m_output); + ICore::instance()->messageManager()->printToOutputPane(pastedUrl(), m_output); } else QMessageBox::warning(0, "Code Paster Error", "Some error occured while posting", QMessageBox::Ok); #if 0 // Figure out how to access diff --git a/src/plugins/cpaster/cpasterplugin.h b/src/plugins/cpaster/cpasterplugin.h index b6694be562c..56c41144a96 100644 --- a/src/plugins/cpaster/cpasterplugin.h +++ b/src/plugins/cpaster/cpasterplugin.h @@ -40,8 +40,8 @@ #include #include -#include #include +#include #include diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp index 33363063617..1907d6eebea 100644 --- a/src/plugins/cpaster/settingspage.cpp +++ b/src/plugins/cpaster/settingspage.cpp @@ -34,7 +34,6 @@ #include "settingspage.h" #include -#include #include #include @@ -46,10 +45,7 @@ using namespace CodePaster; SettingsPage::SettingsPage() { - Core::ICore *coreIFace = ExtensionSystem::PluginManager::instance()->getObject(); - if (coreIFace) - m_settings = coreIFace->settings(); - + m_settings = Core::ICore::instance()->settings(); if (m_settings) { m_settings->beginGroup("CodePaster"); m_username = m_settings->value("UserName", qgetenv("USER")).toString(); diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp index ecdcc110197..99db1ca123a 100644 --- a/src/plugins/cppeditor/cppclasswizard.cpp +++ b/src/plugins/cppeditor/cppclasswizard.cpp @@ -42,9 +42,6 @@ #include #include -#include -#include -#include #include #include @@ -124,8 +121,8 @@ CppClassWizardParameters CppClassWizardDialog::parameters() const // ========= CppClassWizard ========= CppClassWizard::CppClassWizard(const Core::BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent) : - Core::BaseFileWizard(parameters, core, parent) + QObject *parent) + : Core::BaseFileWizard(parameters, parent) { } diff --git a/src/plugins/cppeditor/cppclasswizard.h b/src/plugins/cppeditor/cppclasswizard.h index b117dc7ad09..987b6232d43 100644 --- a/src/plugins/cppeditor/cppclasswizard.h +++ b/src/plugins/cppeditor/cppclasswizard.h @@ -40,16 +40,13 @@ #include #include -QT_BEGIN_NAMESPACE -class QCheckBox; -class QComboBox; -QT_END_NAMESPACE - namespace Core { namespace Utils { - class NewClassWidget; -} -} + +class NewClassWidget; + +} // namespace Utils +} // namespace Core namespace CppEditor { namespace Internal { @@ -75,7 +72,8 @@ private: }; -struct CppClassWizardParameters { +struct CppClassWizardParameters +{ QString className; QString headerFile; QString sourceFile; @@ -83,9 +81,10 @@ struct CppClassWizardParameters { QString path; }; -class CppClassWizardDialog : public QWizard { - Q_DISABLE_COPY(CppClassWizardDialog) +class CppClassWizardDialog : public QWizard +{ Q_OBJECT + Q_DISABLE_COPY(CppClassWizardDialog) public: explicit CppClassWizardDialog(const QString &sourceSuffix, const QString &headerSuffix, @@ -104,7 +103,7 @@ class CppClassWizard : public Core::BaseFileWizard Q_OBJECT public: explicit CppClassWizard(const Core::BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent = 0); + QObject *parent = 0); protected: virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index c8e9a946b90..093c39611bb 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -65,21 +66,17 @@ #include #include -#include -#include #include #include #include #include -#include +#include #include #include #include #include #include #include -#include -#include using namespace CPlusPlus; using namespace CppEditor::Internal; @@ -142,15 +139,14 @@ QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &contex CPPEditorEditable::CPPEditorEditable(CPPEditor *editor) : BaseTextEditorEditable(editor) { - Core::ICore *core = CppPlugin::core(); + Core::ICore *core = Core::ICore::instance(); m_context << core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); m_context << core->uniqueIDManager()->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX); m_context << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); } -CPPEditor::CPPEditor(QWidget *parent) : - TextEditor::BaseTextEditor(parent), - m_core(CppPlugin::core()) +CPPEditor::CPPEditor(QWidget *parent) + : TextEditor::BaseTextEditor(parent) { setParenthesesMatchingEnabled(true); setMarksVisible(true); @@ -172,7 +168,8 @@ CPPEditor::CPPEditor(QWidget *parent) : /*ambiguousMember=*/ 0, Qt::WidgetShortcut); #endif - m_modelManager = m_core->pluginManager()->getObject(); + m_modelManager = ExtensionSystem::PluginManager::instance() + ->getObject(); if (m_modelManager) { connect(m_modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)), diff --git a/src/plugins/cppeditor/cppeditoractionhandler.cpp b/src/plugins/cppeditor/cppeditoractionhandler.cpp index f8f2510523b..0037f117562 100644 --- a/src/plugins/cppeditor/cppeditoractionhandler.cpp +++ b/src/plugins/cppeditor/cppeditoractionhandler.cpp @@ -38,10 +38,9 @@ using namespace CppEditor::Internal; -CPPEditorActionHandler::CPPEditorActionHandler(Core::ICore *core, - const QString &context, +CPPEditorActionHandler::CPPEditorActionHandler(const QString &context, uint optionalActions) - : TextEditor::TextEditorActionHandler(core, context, optionalActions) + : TextEditor::TextEditorActionHandler(context, optionalActions) { } CPPEditorActionHandler::~CPPEditorActionHandler() diff --git a/src/plugins/cppeditor/cppeditoractionhandler.h b/src/plugins/cppeditor/cppeditoractionhandler.h index 12428c3343e..d98d7f76588 100644 --- a/src/plugins/cppeditor/cppeditoractionhandler.h +++ b/src/plugins/cppeditor/cppeditoractionhandler.h @@ -44,8 +44,7 @@ class CPPEditorActionHandler : public TextEditor::TextEditorActionHandler Q_OBJECT public: - CPPEditorActionHandler(Core::ICore *core, - const QString &context, + CPPEditorActionHandler(const QString &context, uint optionalActions = None); virtual ~CPPEditorActionHandler(); diff --git a/src/plugins/cppeditor/cppfilewizard.cpp b/src/plugins/cppeditor/cppfilewizard.cpp index d65fed17669..795d9248c12 100644 --- a/src/plugins/cppeditor/cppfilewizard.cpp +++ b/src/plugins/cppeditor/cppfilewizard.cpp @@ -46,9 +46,8 @@ enum { debugWizard = 0 }; CppFileWizard::CppFileWizard(const BaseFileWizardParameters ¶meters, FileType type, - Core::ICore *core, QObject *parent) : - Core::StandardFileWizard(parameters, core, parent), + Core::StandardFileWizard(parameters, parent), m_type(type) { } diff --git a/src/plugins/cppeditor/cppfilewizard.h b/src/plugins/cppeditor/cppfilewizard.h index 51c91d9465c..e6328f2d32d 100644 --- a/src/plugins/cppeditor/cppfilewizard.h +++ b/src/plugins/cppeditor/cppfilewizard.h @@ -48,9 +48,9 @@ class CppFileWizard : public Core::StandardFileWizard public: typedef Core::BaseFileWizardParameters BaseFileWizardParameters; - explicit CppFileWizard(const BaseFileWizardParameters ¶meters, - FileType type, - Core::ICore *core, QObject *parent = 0); + CppFileWizard(const BaseFileWizardParameters ¶meters, + FileType type, + QObject *parent = 0); protected: static QString toAlphaNum(const QString &s); diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp index febf86f6510..5059a92d8b1 100644 --- a/src/plugins/cppeditor/cpphoverhandler.cpp +++ b/src/plugins/cppeditor/cpphoverhandler.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -55,23 +56,27 @@ #include #include +#include +#include +#include +#include #include #include #include #include -#include using namespace CppEditor::Internal; using namespace CPlusPlus; +using namespace Core; CppHoverHandler::CppHoverHandler(QObject *parent) : QObject(parent) - , m_core(CppPlugin::core()) , m_helpEngineNeedsSetup(false) { - m_modelManager = m_core->pluginManager()->getObject(); + m_modelManager = ExtensionSystem::PluginManager::instance()->getObject(); - QFileInfo fi(ExtensionSystem::PluginManager::instance()->getObject()->settings()->fileName()); + ICore *core = ICore::instance(); + QFileInfo fi(core->settings()->fileName()); // FIXME shouldn't the help engine create the directory if it doesn't exist? QDir directory(fi.absolutePath()+"/qtcreator"); if (!directory.exists()) @@ -86,7 +91,7 @@ CppHoverHandler::CppHoverHandler(QObject *parent) m_helpEngineNeedsSetup = m_helpEngine->registeredDocumentations().count() == 0; // Listen for editor opened events in order to connect to tooltip/helpid requests - connect(m_core->editorManager(), SIGNAL(editorOpened(Core::IEditor *)), + connect(core->editorManager(), SIGNAL(editorOpened(Core::IEditor *)), this, SLOT(editorOpened(Core::IEditor *))); } @@ -95,7 +100,7 @@ void CppHoverHandler::updateContextHelpId(TextEditor::ITextEditor *editor, int p updateHelpIdAndTooltip(editor, pos); } -void CppHoverHandler::editorOpened(Core::IEditor *editor) +void CppHoverHandler::editorOpened(IEditor *editor) { CPPEditorEditable *cppEditor = qobject_cast(editor); if (!cppEditor) @@ -113,9 +118,10 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint if (!editor) return; - const int dbgcontext = m_core->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER); + ICore *core = ICore::instance(); + const int dbgcontext = core->uniqueIDManager()->uniqueIdentifier(Debugger::Constants::C_GDBDEBUGGER); - if (m_core->hasContext(dbgcontext)) + if (core->hasContext(dbgcontext)) return; updateHelpIdAndTooltip(editor, pos); diff --git a/src/plugins/cppeditor/cpphoverhandler.h b/src/plugins/cppeditor/cpphoverhandler.h index 27daccc35d7..6833c9f5743 100644 --- a/src/plugins/cppeditor/cpphoverhandler.h +++ b/src/plugins/cppeditor/cpphoverhandler.h @@ -42,7 +42,6 @@ class QPoint; QT_END_NAMESPACE namespace Core { -class ICore; class IEditor; } @@ -74,7 +73,6 @@ private slots: private: void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos); - Core::ICore *m_core; CppTools::CppModelManagerInterface *m_modelManager; QHelpEngineCore *m_helpEngine; QString m_helpId; diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index 077bea90274..3d09e02fc02 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -40,6 +40,7 @@ #include "cppfilewizard.h" #include "cpphoverhandler.h" +#include #include #include #include @@ -63,7 +64,7 @@ static const char *sourceSuffixKeyC = "CppEditor/SourceSuffix"; using namespace CppEditor::Internal; -///////////////////////////////// CppPluginEditorFactory ////////////////////////////////// +//////////////////////////// CppPluginEditorFactory ///////////////////////////// CppPluginEditorFactory::CppPluginEditorFactory(CppPlugin *owner) : m_kind(QLatin1String(CppEditor::Constants::CPPEDITOR_KIND)), @@ -87,7 +88,7 @@ QString CppPluginEditorFactory::kind() const Core::IFile *CppPluginEditorFactory::open(const QString &fileName) { - Core::IEditor *iface = m_owner->m_core->editorManager()->openEditor(fileName, kind()); + Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind()); return iface ? iface->file() : 0; } @@ -110,7 +111,6 @@ QStringList CppPluginEditorFactory::mimeTypes() const CppPlugin *CppPlugin::m_instance = 0; CppPlugin::CppPlugin() : - m_core(0), m_actionHandler(0), m_factory(0) { @@ -130,11 +130,6 @@ CppPlugin *CppPlugin::instance() return m_instance; } -Core::ICore *CppPlugin::core() -{ - return m_instance->m_core; -} - void CppPlugin::initializeEditor(CPPEditor *editor) { // common actions @@ -159,14 +154,13 @@ void CppPlugin::initializeEditor(CPPEditor *editor) // auto completion connect(editor, SIGNAL(requestAutoCompletion(ITextEditable*, bool)), - TextEditor::Internal::CompletionSupport::instance(core()), SLOT(autoComplete(ITextEditable*, bool))); + TextEditor::Internal::CompletionSupport::instance(), SLOT(autoComplete(ITextEditable*, bool))); } bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) { - typedef TextEditor::TextEditorActionHandler TextEditorActionHandler; - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/cppeditor/CppEditor.mimetypes.xml"), errorMessage)) + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/cppeditor/CppEditor.mimetypes.xml"), errorMessage)) return false; m_factory = new CppPluginEditorFactory(this); @@ -180,21 +174,21 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess wizardParameters.setTrCategory(tr("C++")); wizardParameters.setDescription(tr("Creates a new C++ header file.")); wizardParameters.setName(tr("C++ Header File")); - addAutoReleasedObject(new CppFileWizard(wizardParameters, Header, m_core)); + addAutoReleasedObject(new CppFileWizard(wizardParameters, Header, core)); wizardParameters.setDescription(tr("Creates a new C++ source file.")); wizardParameters.setName(tr("C++ Source File")); - addAutoReleasedObject(new CppFileWizard(wizardParameters, Source, m_core)); + addAutoReleasedObject(new CppFileWizard(wizardParameters, Source, core)); wizardParameters.setKind(Core::IWizard::ClassWizard); wizardParameters.setName(tr("C++ Class")); wizardParameters.setDescription(tr("Creates a header and a source file for a new class.")); - addAutoReleasedObject(new CppClassWizard(wizardParameters, m_core)); + addAutoReleasedObject(new CppClassWizard(wizardParameters, core)); QList context; - context << m_core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); + context << core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); - Core::ActionManager *am = m_core->actionManager(); + Core::ActionManager *am = core->actionManager(); am->createMenu(CppEditor::Constants::M_CONTEXT); Core::Command *cmd; @@ -217,22 +211,21 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess am->actionContainer(CppEditor::Constants::M_CONTEXT)->addAction(cmd); am->actionContainer(CppTools::Constants::M_TOOLS_CPP)->addAction(cmd); - m_actionHandler = new CPPEditorActionHandler(m_core, - CppEditor::Constants::C_CPPEDITOR, + m_actionHandler = new CPPEditorActionHandler(CppEditor::Constants::C_CPPEDITOR, TextEditor::TextEditorActionHandler::Format | TextEditor::TextEditorActionHandler::UnCommentSelection | TextEditor::TextEditorActionHandler::UnCollapseAll); // Check Suffixes - if (const QSettings *settings = m_core->settings()) { + if (const QSettings *settings = core->settings()) { const QString headerSuffixKey = QLatin1String(headerSuffixKeyC); if (settings->contains(headerSuffixKey)) { const QString headerSuffix = settings->value(headerSuffixKey, QString()).toString(); if (!headerSuffix.isEmpty()) - m_core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_HEADER_MIMETYPE), headerSuffix); + core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_HEADER_MIMETYPE), headerSuffix); const QString sourceSuffix = settings->value(QLatin1String(sourceSuffixKeyC), QString()).toString(); if (!sourceSuffix.isEmpty()) - m_core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_SOURCE_MIMETYPE), sourceSuffix); + core->mimeDatabase()->setPreferredSuffix(QLatin1String(Constants::CPP_SOURCE_MIMETYPE), sourceSuffix); } } return true; @@ -245,7 +238,8 @@ void CppPlugin::extensionsInitialized() void CppPlugin::switchDeclarationDefinition() { - CPPEditor *editor = qobject_cast(m_core->editorManager()->currentEditor()->widget()); + Core::ICore *core = Core::ICore::instance(); + CPPEditor *editor = qobject_cast(core->editorManager()->currentEditor()->widget()); if (editor) { editor->switchDeclarationDefinition(); } @@ -253,7 +247,8 @@ void CppPlugin::switchDeclarationDefinition() void CppPlugin::jumpToDefinition() { - CPPEditor *editor = qobject_cast(m_core->editorManager()->currentEditor()->widget()); + Core::ICore *core = Core::ICore::instance(); + CPPEditor *editor = qobject_cast(core->editorManager()->currentEditor()->widget()); if (editor) { editor->jumpToDefinition(); } diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h index 52655e6ae70..c653866e271 100644 --- a/src/plugins/cppeditor/cppplugin.h +++ b/src/plugins/cppeditor/cppplugin.h @@ -65,7 +65,6 @@ public: ~CppPlugin(); static CppPlugin *instance(); - static Core::ICore *core(); bool initialize(const QStringList &arguments, QString *error_message = 0); void extensionsInitialized(); diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 49e7cbfc7db..75f64fea5da 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -51,6 +51,7 @@ #include #include +#include #include #include @@ -69,8 +70,6 @@ #include #include -//#include - using namespace CppTools; using namespace CppTools::Internal; using namespace CPlusPlus; @@ -434,10 +433,10 @@ Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc) modified within Workbench. */ -CppModelManager::CppModelManager(QObject *parent) : - CppModelManagerInterface(parent), - m_core(ExtensionSystem::PluginManager::instance()->getObject()) +CppModelManager::CppModelManager(QObject *parent) + : CppModelManagerInterface(parent) { + m_core = Core::ICore::instance(); // FIXME m_dirty = true; m_projectExplorer = ExtensionSystem::PluginManager::instance() diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index ca1c57f8635..849c3c691fd 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -46,7 +46,7 @@ namespace ProjectExplorer { namespace CppTools { -class CPPTOOLS_EXPORT CppModelManagerInterface: public QObject +class CPPTOOLS_EXPORT CppModelManagerInterface : public QObject { Q_OBJECT diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 5ec67bf4a35..c28c4a8127d 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -48,8 +48,9 @@ #include #include #include +#include -#include +#include #include #include #include @@ -64,10 +65,8 @@ enum { debug = 0 }; CppToolsPlugin *CppToolsPlugin::m_instance = 0; -CppToolsPlugin::CppToolsPlugin() : - m_core(0), - m_context(-1), - m_modelManager(0) +CppToolsPlugin::CppToolsPlugin() + : m_context(-1), m_modelManager(0) { m_instance = this; } @@ -78,21 +77,23 @@ CppToolsPlugin::~CppToolsPlugin() m_modelManager = 0; // deleted automatically } -bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *) +bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - Core::ActionManager *am = m_core->actionManager(); + Q_UNUSED(arguments); + Q_UNUSED(error); + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); // Objects m_modelManager = new CppModelManager(this); addAutoReleasedObject(m_modelManager); - m_completion = new CppCodeCompletion(m_modelManager, m_core); + m_completion = new CppCodeCompletion(m_modelManager, core); addAutoReleasedObject(m_completion); CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager, - m_core->editorManager()); + core->editorManager()); addAutoReleasedObject(quickOpenFilter); - addAutoReleasedObject(new CppClassesFilter(m_modelManager, m_core->editorManager())); - addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, m_core->editorManager())); + addAutoReleasedObject(new CppClassesFilter(m_modelManager, core->editorManager())); + addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, core->editorManager())); addAutoReleasedObject(new CompletionSettingsPage(m_completion)); // Menus @@ -104,7 +105,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *) mtools->addMenu(mcpptools); // Actions - m_context = m_core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); + m_context = core->uniqueIDManager()->uniqueIdentifier(CppEditor::Constants::C_CPPEDITOR); QList context = QList() << m_context; QAction *switchAction = new QAction(tr("Switch Header/Source"), this); @@ -114,7 +115,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *) connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource())); // Restore settings - QSettings *settings = m_core->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup(QLatin1String("CppTools")); settings->beginGroup(QLatin1String("Completion")); const bool caseSensitive = settings->value(QLatin1String("CaseSensitive"), true).toBool(); @@ -134,7 +135,7 @@ void CppToolsPlugin::extensionsInitialized() void CppToolsPlugin::shutdown() { // Save settings - QSettings *settings = m_core->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup(QLatin1String("CppTools")); settings->beginGroup(QLatin1String("Completion")); settings->setValue(QLatin1String("CaseSensitive"), m_completion->caseSensitivity() == Qt::CaseSensitive); @@ -146,14 +147,12 @@ void CppToolsPlugin::shutdown() void CppToolsPlugin::switchHeaderSource() { - if (!m_core) - return; - - Core::IEditor *editor = m_core->editorManager()->currentEditor(); + Core::EditorManager *editorManager = Core::ICore::instance()->editorManager(); + Core::IEditor *editor = editorManager->currentEditor(); QString otherFile = correspondingHeaderOrSource(editor->file()->fileName()); if (!otherFile.isEmpty()) { - m_core->editorManager()->openEditor(otherFile); - m_core->editorManager()->ensureEditorManagerVisible(); + editorManager->openEditor(otherFile); + editorManager->ensureEditorManagerVisible(); } } @@ -221,7 +220,7 @@ static QStringList matchingCandidateSuffixes(const Core::MimeDatabase *mimeDatas QString CppToolsPlugin::correspondingHeaderOrSourceI(const QString &fileName) const { - const Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + const Core::ICore *core = Core::ICore::instance(); const Core::MimeDatabase *mimeDatase = core->mimeDatabase(); ProjectExplorer::ProjectExplorerPlugin *explorer = ExtensionSystem::PluginManager::instance()->getObject(); diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index a55630e6c04..281fe1f708d 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -35,17 +35,13 @@ #define CPPTOOLS_H #include -#include +#include QT_BEGIN_NAMESPACE class QFileInfo; class QDir; QT_END_NAMESPACE -namespace Core { -class ICore; -} - namespace CppTools { namespace Internal { @@ -75,7 +71,6 @@ private: QString correspondingHeaderOrSourceI(const QString &fileName) const; QFileInfo findFile(const QDir &dir, const QString &name, const ProjectExplorer::Project *project) const; - Core::ICore *m_core; int m_context; CppModelManager *m_modelManager; CppCodeCompletion *m_completion; diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro index c9256caaa5f..469ea346011 100644 --- a/src/plugins/debugger/debugger.pro +++ b/src/plugins/debugger/debugger.pro @@ -26,11 +26,11 @@ HEADERS += attachexternaldialog.h \ disassemblerwindow.h \ gdbengine.h \ gdbmi.h \ - gdboptionpage.h \ idebuggerengine.h \ imports.h \ moduleshandler.h \ moduleswindow.h \ + outputcollector.h \ procinterrupt.h \ registerhandler.h \ registerwindow.h \ @@ -41,7 +41,7 @@ HEADERS += attachexternaldialog.h \ threadswindow.h \ watchhandler.h \ watchwindow.h - + SOURCES += attachexternaldialog.cpp \ attachremotedialog.cpp \ breakhandler.cpp \ @@ -55,10 +55,9 @@ SOURCES += attachexternaldialog.cpp \ disassemblerwindow.cpp \ gdbengine.cpp \ gdbmi.cpp \ - gdboptionpage.cpp \ - gdbengine.h \ moduleshandler.cpp \ moduleswindow.cpp \ + outputcollector.cpp \ procinterrupt.cpp \ registerhandler.cpp \ registerwindow.cpp \ diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index f268fbb3dda..7b0e6c24273 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -86,6 +86,18 @@ using namespace Debugger::Constants; static const QString tooltipIName = "tooltip"; + +DebuggerSettings::DebuggerSettings() +{ + m_autoRun = false; + m_autoQuit = false; + m_skipKnownFrames = false; + m_debugDumpers = false; + m_useToolTips = false; + m_useTerminal = false; + m_useCustomDumpers = true; +} + /////////////////////////////////////////////////////////////////////// // // BreakByFunctionDialog @@ -322,56 +334,6 @@ void DebuggerManager::init() m_breakAtMainAction = new QAction(this); m_breakAtMainAction->setText(tr("Set Breakpoint at Function 'main'")); - m_debugDumpersAction = new QAction(this); - m_debugDumpersAction->setText(tr("Debug Custom Dumpers")); - m_debugDumpersAction->setToolTip(tr("This is an internal tool to " - "make debugging the Custom Data Dumper code easier. " - "Using this action is in general not needed unless you " - "want do debug Qt Creator itself.")); - m_debugDumpersAction->setCheckable(true); - - m_skipKnownFramesAction = new QAction(this); - m_skipKnownFramesAction->setText(tr("Skip Known Frames When Stepping")); - m_skipKnownFramesAction->setToolTip(tr("After checking this option" - "'Step Into' combines in certain situations several steps, " - "leading to 'less noisy' debugging. So will, e.g., the atomic " - "reference counting code be skipped, and a single 'Step Into' " - "for a signal emission will end up directly in the slot connected " - "to it")); - m_skipKnownFramesAction->setCheckable(true); - - m_useCustomDumpersAction = new QAction(this); - m_useCustomDumpersAction->setText(tr("Use Custom Display for Qt Objects")); - m_useCustomDumpersAction->setToolTip(tr("Checking this will make the debugger " - "try to use code to format certain data (QObject, QString, ...) nicely. ")); - m_useCustomDumpersAction->setCheckable(true); - m_useCustomDumpersAction->setChecked(true); - - m_useFastStartAction = new QAction(this); - m_useFastStartAction->setText(tr("Fast Debugger Start")); - m_useFastStartAction->setToolTip(tr("Checking this will make the debugger " - "start fast by loading only very few debug symbols on start up. This " - "might lead to situations where breakpoints can not be set properly. " - "So uncheck this option if you experience breakpoint related problems.")); - m_useFastStartAction->setCheckable(true); - m_useFastStartAction->setChecked(true); - - m_useToolTipsAction = new QAction(this); - m_useToolTipsAction->setText(tr("Use Tooltips While Debugging")); - m_useToolTipsAction->setToolTip(tr("Checking this will make enable " - "tooltips for variable values during debugging. Since this can slow " - "down debugging and does not provide reliable information as it does " - "not use scope information, it is switched off by default.")); - m_useToolTipsAction->setCheckable(true); - m_useToolTipsAction->setChecked(false); - - // FIXME - m_useFastStartAction->setChecked(false); - m_useFastStartAction->setEnabled(false); - - m_dumpLogAction = new QAction(this); - m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes")); - m_watchAction = new QAction(this); m_watchAction->setText(tr("Add to Watch Window")); @@ -416,14 +378,6 @@ void DebuggerManager::init() connect(m_breakAtMainAction, SIGNAL(triggered()), this, SLOT(breakAtMain())); - connect(m_useFastStartAction, SIGNAL(triggered()), - this, SLOT(saveSessionData())); - connect(m_useCustomDumpersAction, SIGNAL(triggered()), - this, SLOT(saveSessionData())); - connect(m_skipKnownFramesAction, SIGNAL(triggered()), - this, SLOT(saveSessionData())); - connect(m_dumpLogAction, SIGNAL(triggered()), - this, SLOT(dumpLog())); connect(m_statusTimer, SIGNAL(timeout()), this, SLOT(clearStatusMessage())); @@ -636,9 +590,9 @@ void DebuggerManager::notifyInferiorPidChanged(int pid) emit inferiorPidChanged(pid); } -void DebuggerManager::showApplicationOutput(const QString &prefix, const QString &str) +void DebuggerManager::showApplicationOutput(const QString &str) { - emit applicationOutputAvailable(prefix, str); + emit applicationOutputAvailable(str); } void DebuggerManager::shutdown() @@ -947,16 +901,6 @@ void DebuggerManager::loadSessionData() { m_breakHandler->loadSessionData(); m_watchHandler->loadSessionData(); - - QVariant value; - querySessionValue(QLatin1String("UseFastStart"), &value); - m_useFastStartAction->setChecked(value.toBool()); - querySessionValue(QLatin1String("UseToolTips"), &value); - m_useToolTipsAction->setChecked(value.toBool()); - querySessionValue(QLatin1String("UseCustomDumpers"), &value); - m_useCustomDumpersAction->setChecked(!value.isValid() || value.toBool()); - querySessionValue(QLatin1String("SkipKnownFrames"), &value); - m_skipKnownFramesAction->setChecked(value.toBool()); engine()->loadSessionData(); } @@ -964,15 +908,6 @@ void DebuggerManager::saveSessionData() { m_breakHandler->saveSessionData(); m_watchHandler->saveSessionData(); - - setSessionValue(QLatin1String("UseFastStart"), - m_useFastStartAction->isChecked()); - setSessionValue(QLatin1String("UseToolTips"), - m_useToolTipsAction->isChecked()); - setSessionValue(QLatin1String("UseCustomDumpers"), - m_useCustomDumpersAction->isChecked()); - setSessionValue(QLatin1String("SkipKnownFrames"), - m_skipKnownFramesAction->isChecked()); engine()->saveSessionData(); } @@ -1139,22 +1074,22 @@ void DebuggerManager::setBusyCursor(bool busy) bool DebuggerManager::skipKnownFrames() const { - return m_skipKnownFramesAction->isChecked(); + return m_settings.m_skipKnownFrames; } bool DebuggerManager::debugDumpers() const { - return m_debugDumpersAction->isChecked(); + return m_settings.m_debugDumpers; } bool DebuggerManager::useCustomDumpers() const { - return m_useCustomDumpersAction->isChecked(); + return m_settings.m_useCustomDumpers; } bool DebuggerManager::useFastStart() const { - return 0; // && m_useFastStartAction->isChecked(); + return 0; // && m_settings.m_useFastStart; } void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber, diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index bde8ce449b1..5d5e7abd0da 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -166,9 +166,9 @@ private: virtual ThreadsHandler *threadsHandler() = 0; virtual WatchHandler *watchHandler() = 0; - virtual void showApplicationOutput(const QString &prefix, const QString &data) = 0; - virtual QAction *useCustomDumpersAction() const = 0; - virtual QAction *debugDumpersAction() const = 0; + virtual void showApplicationOutput(const QString &data) = 0; + //virtual QAction *useCustomDumpersAction() const = 0; + //virtual QAction *debugDumpersAction() const = 0; virtual bool skipKnownFrames() const = 0; virtual bool debugDumpers() const = 0; virtual bool useCustomDumpers() const = 0; @@ -180,6 +180,31 @@ private: }; +// +// DebuggerSettings +// + +class DebuggerSettings +{ +public: + DebuggerSettings(); + +public: + QString m_gdbCmd; + QString m_gdbEnv; + bool m_autoRun; + bool m_autoQuit; + + bool m_useCustomDumpers; + bool m_skipKnownFrames; + bool m_debugDumpers; + bool m_useFastStart; + bool m_useToolTips; + bool m_useTerminal; + + QString m_scriptFile; +}; + // // DebuggerManager // @@ -196,6 +221,7 @@ public: IDebuggerManagerAccessForEngines *engineInterface(); QMainWindow *mainWindow() const { return m_mainWindow; } QLabel *statusLabel() const { return m_statusLabel; } + DebuggerSettings *settings() { return &m_settings; } enum StartMode { startInternal, startExternal, attachExternal }; enum DebuggerType { GdbDebugger, ScriptDebugger, WinDebugger }; @@ -260,7 +286,7 @@ public slots: private slots: void showDebuggerOutput(const QString &prefix, const QString &msg); void showDebuggerInput(const QString &prefix, const QString &msg); - void showApplicationOutput(const QString &prefix, const QString &msg); + void showApplicationOutput(const QString &data); void reloadDisassembler(); void disassemblerDockToggled(bool on); @@ -286,9 +312,9 @@ private: StackHandler *stackHandler() { return m_stackHandler; } ThreadsHandler *threadsHandler() { return m_threadsHandler; } WatchHandler *watchHandler() { return m_watchHandler; } - QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; } - QAction *useToolTipsAction() const { return m_useToolTipsAction; } - QAction *debugDumpersAction() const { return m_debugDumpersAction; } + //QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; } + //QAction *useToolTipsAction() const { return m_useToolTipsAction; } + //QAction *debugDumpersAction() const { return m_debugDumpersAction; } bool skipKnownFrames() const; bool debugDumpers() const; bool useCustomDumpers() const; @@ -340,8 +366,7 @@ signals: void setSessionValueRequested(const QString &name, const QVariant &value); void configValueRequested(const QString &name, QVariant *value); void setConfigValueRequested(const QString &name, const QVariant &value); - void applicationOutputAvailable(const QString &prefix, const QString &msg); - + void applicationOutputAvailable(const QString &output); public: // FIXME: make private @@ -406,13 +431,6 @@ private: QAction *m_sepAction; QAction *m_stepIAction; QAction *m_nextIAction; - QAction *m_skipKnownFramesAction; - - QAction *m_debugDumpersAction; - QAction *m_useCustomDumpersAction; - QAction *m_useFastStartAction; - QAction *m_useToolTipsAction; - QAction *m_dumpLogAction; QWidget *m_breakWindow; QWidget *m_disassemblerWindow; @@ -432,9 +450,9 @@ private: IDebuggerEngine *engine(); IDebuggerEngine *m_engine; + DebuggerSettings m_settings; }; - } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 80acb59b92f..7fd564a3a05 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -36,12 +36,14 @@ #include "debuggerconstants.h" #include "debuggermanager.h" #include "debuggerrunner.h" -#include "gdboptionpage.h" #include "gdbengine.h" +#include "ui_gdboptionpage.h" + #include #include #include +#include #include #include #include @@ -57,6 +59,8 @@ #include +#include + #include #include @@ -73,6 +77,7 @@ #include #include +#include #include #include #include @@ -80,6 +85,8 @@ #include +namespace ExtensionSystem { class PluginManager; } + using namespace Core; using namespace Debugger::Constants; using namespace Debugger::Internal; @@ -99,13 +106,7 @@ const char * const JUMP_TO_LINE = "Debugger.JumpToLine"; const char * const TOGGLE_BREAK = "Debugger.ToggleBreak"; const char * const BREAK_BY_FUNCTION = "Debugger.BreakByFunction"; const char * const BREAK_AT_MAIN = "Debugger.BreakAtMain"; -const char * const DEBUG_DUMPERS = "Debugger.DebugDumpers"; const char * const ADD_TO_WATCH = "Debugger.AddToWatch"; -const char * const USE_CUSTOM_DUMPERS = "Debugger.UseCustomDumpers"; -const char * const USE_FAST_START = "Debugger.UseFastStart"; -const char * const USE_TOOL_TIPS = "Debugger.UseToolTips"; -const char * const SKIP_KNOWN_FRAMES = "Debugger.SkipKnownFrames"; -const char * const DUMP_LOG = "Debugger.DumpLog"; #ifdef Q_OS_MAC const char * const INTERRUPT_KEY = "Shift+F5"; @@ -143,6 +144,12 @@ const char * const ADD_TO_WATCH_KEY = "Ctrl+Alt+Q"; } // namespace Debugger +/////////////////////////////////////////////////////////////////////// +// +// DebugMode +// +/////////////////////////////////////////////////////////////////////// + namespace Debugger { namespace Internal { @@ -159,9 +166,6 @@ public: void shutdown() {} }; -} // namespace Internal -} // namespace Debugger - DebugMode::DebugMode(QObject *parent) : BaseMode(parent) { @@ -177,6 +181,9 @@ DebugMode::~DebugMode() EditorManager::instance()->setParent(0); } +} // namespace Internal +} // namespace Debugger + /////////////////////////////////////////////////////////////////////// // @@ -184,8 +191,10 @@ DebugMode::~DebugMode() // /////////////////////////////////////////////////////////////////////// -class Debugger::Internal::LocationMark - : public TextEditor::BaseTextMark +namespace Debugger { +namespace Internal { + +class LocationMark : public TextEditor::BaseTextMark { Q_OBJECT @@ -212,6 +221,110 @@ QIcon LocationMark::icon() const return icon; } +} // namespace Internal +} // namespace Debugger + + +/////////////////////////////////////////////////////////////////////// +// +// GdbOptionPage +// +/////////////////////////////////////////////////////////////////////// + +namespace Debugger { +namespace Internal { + +class GdbOptionPage : public Core::IOptionsPage +{ + Q_OBJECT + +public: + GdbOptionPage(DebuggerPlugin *plugin) : m_plugin(plugin) {} + + // IOptionsPage + QString name() const { return tr("Gdb"); } + QString category() const { return "Debugger"; } + QString trCategory() const { return tr("Debugger"); } + + QWidget *createPage(QWidget *parent); + void apply(); + void finish() {} // automatically calls "apply" + +private: + Ui::GdbOptionPage m_ui; + + DebuggerSettings m_settings; + DebuggerPlugin *m_plugin; +}; + +QWidget *GdbOptionPage::createPage(QWidget *parent) +{ + QWidget *w = new QWidget(parent); + m_settings = *m_plugin->m_manager->settings(); + m_ui.setupUi(w); + m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); + m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location")); + m_ui.gdbLocationChooser->setPath(m_settings.m_gdbCmd); + m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File); + m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); + m_ui.scriptFileChooser->setPath(m_settings.m_scriptFile); + m_ui.environmentEdit->setText(m_settings.m_gdbEnv); + m_ui.autoStartBox->setChecked(m_settings.m_autoRun); + m_ui.autoQuitBox->setChecked(m_settings.m_autoQuit); + + m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames); + m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers); + m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers); + m_ui.checkBoxFastStart->setChecked(m_settings.m_useFastStart); + m_ui.checkBoxUseToolTips->setChecked(m_settings.m_useToolTips); + m_ui.checkBoxUseTerminal->setChecked(m_settings.m_useTerminal); + +#ifndef QT_DEBUG +#if 0 + cmd = am->registerAction(m_manager->m_dumpLogAction, + Constants::DUMP_LOG, globalcontext); + //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L"))); + cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11"))); + mdebug->addAction(cmd); +#endif +#endif + + // FIXME + m_ui.autoStartBox->hide(); + m_ui.autoQuitBox->hide(); + m_ui.environmentEdit->hide(); + m_ui.labelEnvironment->hide(); + + m_ui.checkBoxFastStart->setChecked(false); + m_ui.checkBoxFastStart->hide(); + + //m_dumpLogAction = new QAction(this); + //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes")); + return w; +} + +void GdbOptionPage::apply() +{ + m_settings.m_gdbCmd = m_ui.gdbLocationChooser->path(); + m_settings.m_gdbEnv = m_ui.environmentEdit->text(); + m_settings.m_autoRun = m_ui.autoStartBox->isChecked(); + m_settings.m_autoQuit = m_ui.autoQuitBox->isChecked(); + m_settings.m_scriptFile = m_ui.scriptFileChooser->path(); + + m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked(); + m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked(); + m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked(); + m_settings.m_useFastStart = m_ui.checkBoxFastStart->isChecked(); + m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked(); + m_settings.m_useTerminal = m_ui.checkBoxUseTerminal->isChecked(); + + *m_plugin->m_manager->settings() = m_settings; + m_plugin->writeSettings(); +} + +} // namespace Internal +} // namespace Debugger + /////////////////////////////////////////////////////////////////////// // @@ -233,7 +346,7 @@ DebuggerPlugin::~DebuggerPlugin() static QSettings *settings() { - return ExtensionSystem::PluginManager::instance()->getObject()->settings(); + return ICore::instance()->settings(); } void DebuggerPlugin::shutdown() @@ -274,7 +387,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes m_pm = ExtensionSystem::PluginManager::instance(); - ICore *core = m_pm->getObject(); + ICore *core = ICore::instance(); QTC_ASSERT(core, return false); Core::ActionManager *am = core->actionManager(); @@ -409,34 +522,6 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes cmd = am->registerAction(sep, QLatin1String("Debugger.Sep2"), globalcontext); mdebug->addAction(cmd); - cmd = am->registerAction(m_manager->m_skipKnownFramesAction, - Constants::SKIP_KNOWN_FRAMES, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useCustomDumpersAction, - Constants::USE_CUSTOM_DUMPERS, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useFastStartAction, - Constants::USE_FAST_START, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useToolTipsAction, - Constants::USE_TOOL_TIPS, globalcontext); - mdebug->addAction(cmd); - -#ifdef QT_DEBUG - cmd = am->registerAction(m_manager->m_dumpLogAction, - Constants::DUMP_LOG, globalcontext); - //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L"))); - cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11"))); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_debugDumpersAction, - Constants::DEBUG_DUMPERS, debuggercontext); - mdebug->addAction(cmd); -#endif - sep = new QAction(this); sep->setSeparator(true); cmd = am->registerAction(sep, QLatin1String("Debugger.Sep4"), globalcontext); @@ -479,7 +564,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes m_generalOptionPage = 0; // FIXME: - m_generalOptionPage = new GdbOptionPage(&theGdbSettings()); + m_generalOptionPage = new GdbOptionPage(this); addObject(m_generalOptionPage); m_locationMark = 0; @@ -628,8 +713,7 @@ ProjectExplorer::ProjectExplorerPlugin *DebuggerPlugin::projectExplorer() const /*! Activates the previous mode when the current mode is the debug mode. */ void DebuggerPlugin::activatePreviousMode() { - ICore *core = m_pm->getObject(); - Core::ModeManager *const modeManager = core->modeManager(); + Core::ModeManager *const modeManager = ICore::instance()->modeManager(); if (modeManager->currentMode() == modeManager->mode(Constants::MODE_DEBUG) && !m_previousMode.isEmpty()) { @@ -640,7 +724,7 @@ void DebuggerPlugin::activatePreviousMode() void DebuggerPlugin::activateDebugMode() { - ICore *core = m_pm->getObject(); + ICore *core = ICore::instance(); Core::ModeManager *modeManager = core->modeManager(); m_previousMode = QLatin1String(modeManager->currentMode()->uniqueModeName()); modeManager->activateMode(QLatin1String(MODE_DEBUG)); @@ -648,7 +732,7 @@ void DebuggerPlugin::activateDebugMode() void DebuggerPlugin::queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **object) { - ICore *core = m_pm->getObject(); + ICore *core = ICore::instance(); if (!core || !core->editorManager()) return; Core::IEditor *editor = core->editorManager()->currentEditor(); @@ -711,7 +795,7 @@ void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor, const QPoint &point, int pos) { - if (!m_manager->useToolTipsAction()->isChecked()) + if (!m_manager->settings()->m_useToolTips) return; QPlainTextEdit *plaintext = qobject_cast(editor->widget()); @@ -787,7 +871,7 @@ void DebuggerPlugin::gotoLocation(const QString &fileName, int lineNumber, void DebuggerPlugin::changeStatus(int status) { bool startIsContinue = (status == DebuggerInferiorStopped); - ICore *core = m_pm->getObject(); + ICore *core = ICore::instance(); if (startIsContinue) { core->addAdditionalContext(m_gdbRunningContext); core->updateContext(); @@ -799,22 +883,59 @@ void DebuggerPlugin::changeStatus(int status) void DebuggerPlugin::writeSettings() const { - QSettings *s = settings(); QTC_ASSERT(m_manager, return); QTC_ASSERT(m_manager->mainWindow(), return); + + QSettings *s = settings(); + DebuggerSettings *m = m_manager->settings(); s->beginGroup(QLatin1String("DebugMode")); - s->setValue(QLatin1String("State"), m_manager->mainWindow()->saveState()); - s->setValue(QLatin1String("Locked"), m_toggleLockedAction->isChecked()); + s->setValue("State", m_manager->mainWindow()->saveState()); + s->setValue("Locked", m_toggleLockedAction->isChecked()); + s->setValue("Location", m->m_gdbCmd); + s->setValue("Environment", m->m_gdbEnv); + s->setValue("ScriptFile", m->m_scriptFile); + s->setValue("AutoRun", m->m_autoRun); + s->setValue("AutoQuit", m->m_autoQuit); + + s->setValue("UseFastStart", m->m_useFastStart); + s->setValue("UseToolTips", m->m_useToolTips); + s->setValue("UseTerminal", m->m_useTerminal); + s->setValue("UseCustomDumpers", m->m_useCustomDumpers); + s->setValue("SkipKnowFrames", m->m_skipKnownFrames); + s->setValue("DebugDumpers", m->m_debugDumpers); s->endGroup(); } void DebuggerPlugin::readSettings() { QSettings *s = settings(); + DebuggerSettings *m = &m_manager->m_settings; + + QString defaultCommand("gdb"); +#if defined(Q_OS_WIN32) + defaultCommand.append(".exe"); +#endif + QString defaultScript = ICore::instance()->resourcePath() + + QLatin1String("/gdb/qt4macros"); + s->beginGroup(QLatin1String("DebugMode")); - m_manager->mainWindow()->restoreState(s->value(QLatin1String("State"), QByteArray()).toByteArray()); - m_toggleLockedAction->setChecked(s->value(QLatin1String("Locked"), true).toBool()); + QByteArray ba = s->value("State", QByteArray()).toByteArray(); + m_toggleLockedAction->setChecked(s->value("Locked", true).toBool()); + m->m_gdbCmd = s->value("Location", defaultCommand).toString(); + m->m_scriptFile = s->value("ScriptFile", defaultScript).toString(); + m->m_gdbEnv = s->value("Environment", "").toString(); + m->m_autoRun = s->value("AutoRun", true).toBool(); + m->m_autoQuit = s->value("AutoQuit", true).toBool(); + + m->m_skipKnownFrames = s->value("SkipKnownFrames", false).toBool(); + m->m_debugDumpers = s->value("DebugDumpers", false).toBool(); + m->m_useCustomDumpers = s->value("UseCustomDupers", false).toBool(); + m->m_useFastStart = s->value("UseFastStart", false).toBool(); + m->m_useToolTips = s->value("UseToolTips", false).toBool(); + m->m_useTerminal = s->value("UseTerminal", false).toBool(); s->endGroup(); + + m_manager->mainWindow()->restoreState(ba); } void DebuggerPlugin::focusCurrentEditor(IMode *mode) diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h index 53f8490cfc3..4ab9c5b89f8 100644 --- a/src/plugins/debugger/debuggerplugin.h +++ b/src/plugins/debugger/debuggerplugin.h @@ -78,7 +78,6 @@ private slots: void changeStatus(int status); void requestMark(TextEditor::ITextEditor *editor, int lineNumber); void showToolTip(TextEditor::ITextEditor *editor, const QPoint &pnt, int pos); - void querySessionValue(const QString &name, QVariant *value); void setSessionValue(const QString &name, const QVariant &value); void queryConfigValue(const QString &name, QVariant *value); @@ -97,6 +96,7 @@ private: void writeSettings() const; friend class DebuggerManager; + friend class GdbOptionPage; friend class DebugMode; // FIXME: Just a hack now so that it can access the views ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const; diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 45eecd6514e..7f3e42f47fa 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -108,8 +108,8 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, { connect(m_manager, SIGNAL(debuggingFinished()), this, SLOT(debuggingFinished())); - connect(m_manager, SIGNAL(applicationOutputAvailable(QString, QString)), - this, SLOT(slotAddToOutputWindow(QString, QString))); + connect(m_manager, SIGNAL(applicationOutputAvailable(QString)), + this, SLOT(slotAddToOutputWindowInline(QString))); connect(m_manager, SIGNAL(inferiorPidChanged(qint64)), this, SLOT(bringApplicationToForeground(qint64))); } @@ -138,12 +138,9 @@ void DebuggerRunControl::start() debuggingFinished(); } -void DebuggerRunControl::slotAddToOutputWindow(const QString &prefix, const QString &line) +void DebuggerRunControl::slotAddToOutputWindowInline(const QString &data) { - Q_UNUSED(prefix); - foreach (const QString &l, line.split('\n')) - emit addToOutputWindow(this, prefix + Qt::escape(l)); - //emit addToOutputWindow(this, prefix + Qt::escape(line)); + emit addToOutputWindowInline(this, data); } void DebuggerRunControl::stop() diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index c10a84e4795..0c6d979c010 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -84,7 +84,7 @@ public: private slots: void debuggingFinished(); - void slotAddToOutputWindow(const QString &prefix, const QString &line); + void slotAddToOutputWindowInline(const QString &output); private: DebuggerManager *m_manager; diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 3190d1612a3..a6d426d21da 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -84,19 +84,6 @@ Q_DECLARE_METATYPE(Debugger::Internal::GdbMi); static const QString tooltipIName = "tooltip"; -/////////////////////////////////////////////////////////////////////// -// -// GdbSettings -// -/////////////////////////////////////////////////////////////////////// - -GdbSettings &Debugger::Internal::theGdbSettings() -{ - static GdbSettings settings; - return settings; -} - - /////////////////////////////////////////////////////////////////////// // // GdbCommandType @@ -265,7 +252,7 @@ void GdbEngine::init() m_pendingRequests = 0; m_gdbVersion = 100; m_shared = 0; - qq->debugDumpersAction()->setChecked(false); + m_outputCodec = QTextCodec::codecForLocale(); m_oldestAcceptableToken = -1; @@ -279,12 +266,9 @@ void GdbEngine::init() connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), q, SLOT(exitDebugger())); - connect(qq->debugDumpersAction(), SIGNAL(toggled(bool)), - this, SLOT(setDebugDumpers(bool))); - connect(qq->useCustomDumpersAction(), SIGNAL(toggled(bool)), - this, SLOT(setCustomDumpersWanted(bool))); - // Output + connect(&m_outputCollector, SIGNAL(byteDelivery(QByteArray)), + SLOT(readDebugeeOutput(QByteArray))); connect(this, SIGNAL(gdbResponseAvailable()), this, SLOT(handleResponse()), Qt::QueuedConnection); @@ -294,8 +278,8 @@ void GdbEngine::init() connect(this, SIGNAL(gdbInputAvailable(QString,QString)), q, SLOT(showDebuggerInput(QString,QString)), Qt::QueuedConnection); - connect(this, SIGNAL(applicationOutputAvailable(QString,QString)), - q, SLOT(showApplicationOutput(QString,QString)), + connect(this, SIGNAL(applicationOutputAvailable(QString)), + q, SLOT(showApplicationOutput(QString)), Qt::QueuedConnection); } @@ -306,7 +290,7 @@ void GdbEngine::gdbProcError(QProcess::ProcessError error) case QProcess::FailedToStart: msg = QString(tr("The Gdb process failed to start. Either the " "invoked program '%1' is missing, or you may have insufficient " - "permissions to invoke the program.")).arg(theGdbSettings().m_gdbCmd); + "permissions to invoke the program.")).arg(q->settings()->m_gdbCmd); break; case QProcess::Crashed: msg = tr("The Gdb process crashed some time after starting " @@ -374,6 +358,12 @@ static void skipTerminator(const char *&from, const char *to) skipSpaces(from, to); } +void GdbEngine::readDebugeeOutput(const QByteArray &data) +{ + emit applicationOutputAvailable(m_outputCodec->toUnicode( + data.constData(), data.length(), &m_outputCodecState)); +} + // called asyncronously as response to Gdb stdout output in // gdbResponseAvailable() void GdbEngine::handleResponse() @@ -426,22 +416,6 @@ void GdbEngine::handleResponse() break; } - if (token == -1 && *from != '&' && *from != '~' && *from != '*') { - // FIXME: On Linux the application's std::out is merged in here. - // High risk of falsely interpreting this as MI output. - // We assume that we _always_ use tokens, so not finding a token - // is a positive indication for the presence of application output. - QString s; - while (from != to && *from != '\n') - s += *from++; - //qDebug() << "UNREQUESTED DATA " << s << " TAKEN AS APPLICATION OUTPUT"; - //s += '\n'; - - m_inbuffer = QByteArray(from, to - from); - emit applicationOutputAvailable("app-stdout: ", s); - continue; - } - // next char decides kind of record const char c = *from++; //qDebug() << "CODE:" << c; @@ -609,8 +583,7 @@ static void fixMac(QByteArray &out) void GdbEngine::readGdbStandardError() { - QByteArray err = m_gdbProc.readAllStandardError(); - emit applicationOutputAvailable("app-stderr:", err); + qWarning() << "Unexpected gdb stderr:" << m_gdbProc.readAllStandardError(); } void GdbEngine::readGdbStandardOutput() @@ -723,7 +696,7 @@ void GdbEngine::sendCommand(const QString &command, int type, //qDebug() << ""; if (!command.isEmpty()) { - //qDebug() << qPrintable(currentTime()) << "RUNNING << cmd.command; + //qDebug() << qPrintable(currentTime()) << "RUNNING" << cmd.command; m_gdbProc.write(cmd.command.toLatin1() + "\r\n"); //emit gdbInputAvailable(QString(), " " + currentTime()); emit gdbInputAvailable(QString(), "[" + currentTime() + "] " + cmd.command); @@ -1097,7 +1070,7 @@ void GdbEngine::handleStreamOutput(const QString &data, char code) // On Windows, the contents seem to depend on the debugger // version and/or OS version used. if (data.startsWith("warning:")) - qq->showApplicationOutput(QString(), data); + qq->showApplicationOutput(data); break; } @@ -1503,7 +1476,8 @@ void GdbEngine::exitDebugger() m_varToType.clear(); m_dataDumperState = DataDumperUninitialized; m_shared = 0; - qq->debugDumpersAction()->setChecked(false); + m_outputCollector.shutdown(); + //q->settings()->m_debugDumpers = false; } @@ -1525,6 +1499,15 @@ bool GdbEngine::startDebugger() return false; } + if (!m_outputCollector.listen()) { + QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"), + tr("Cannot set up communication with child process: %1") + .arg(m_outputCollector.errorString())); + return false; + } + + gdbArgs.prepend(QLatin1String("--tty=") + m_outputCollector.serverName()); + //gdbArgs.prepend(QLatin1String("--quiet")); gdbArgs.prepend(QLatin1String("mi")); gdbArgs.prepend(QLatin1String("-i")); @@ -1535,8 +1518,9 @@ bool GdbEngine::startDebugger() m_gdbProc.setEnvironment(q->m_environment); #if 0 - qDebug() << "Command: " << theGdbSettings().m_gdbCmd; + qDebug() << "Command: " << q->settings()->m_gdbCmd; qDebug() << "WorkingDirectory: " << m_gdbProc.workingDirectory(); + qDebug() << "ScriptFile: " << q->settings()->m_scriptFile; qDebug() << "Environment: " << m_gdbProc.environment(); qDebug() << "Arguments: " << gdbArgs; qDebug() << "BuildDir: " << q->m_buildDir; @@ -1544,13 +1528,17 @@ bool GdbEngine::startDebugger() #endif q->showStatusMessage(tr("Starting Debugger")); - emit gdbInputAvailable(QString(), theGdbSettings().m_gdbCmd + ' ' + gdbArgs.join(" ")); + emit gdbInputAvailable(QString(), q->settings()->m_gdbCmd + ' ' + gdbArgs.join(" ")); - m_gdbProc.start(theGdbSettings().m_gdbCmd, gdbArgs); + m_gdbProc.start(q->settings()->m_gdbCmd, gdbArgs); m_gdbProc.waitForStarted(); - if (m_gdbProc.state() != QProcess::Running) + if (m_gdbProc.state() != QProcess::Running) { + QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"), + tr("Cannot start debugger: %1").arg(m_gdbProc.errorString())); + m_outputCollector.shutdown(); return false; + } q->showStatusMessage(tr("Gdb Running")); @@ -1612,6 +1600,22 @@ bool GdbEngine::startDebugger() "dyld \".*libobjc.*\" all " "dyld \".*CarbonDataFormatters.*\" all"); #endif + + QString scriptFileName = q->settings()->m_scriptFile; + if (!scriptFileName.isEmpty()) { + QFile scriptFile(scriptFileName); + if (scriptFile.open(QIODevice::ReadOnly)) { + sendCommand("source " + scriptFileName); + } else { + QMessageBox::warning(q->mainWindow(), + tr("Cannot find debugger initialization script"), + tr("The debugger settings point to a script file at '%1' " + "which is not accessible. If a script file is not needed, " + "consider clearing that entry to avoid this warning. " + ).arg(scriptFileName)); + } + } + if (q->startMode() == q->attachExternal) { sendCommand("attach " + QString::number(q->m_attachedPID)); } @@ -2589,7 +2593,7 @@ void GdbEngine::setToolTipExpression(const QPoint &pos, const QString &exp0) return; } - if (qq->debugDumpersAction()->isChecked()) { + if (q->settings()->m_debugDumpers) { // minimize interference return; } @@ -2909,10 +2913,10 @@ void GdbEngine::setCustomDumpersWanted(bool on) bool GdbEngine::isCustomValueDumperAvailable(const QString &type) const { - if (!qq->useCustomDumpers()) + DebuggerSettings *s = q->settings(); + if (!s->m_useCustomDumpers) return false; - if (qq->debugDumpersAction()->isChecked() - && qq->stackHandler()->isDebuggingDumpers()) + if (s->m_debugDumpers && qq->stackHandler()->isDebuggingDumpers()) return false; if (m_dataDumperState != DataDumperAvailable) return false; @@ -3001,6 +3005,12 @@ void GdbEngine::runCustomDumper(const WatchData & data0, bool dumpChildren) //extraArgs[extraArgCount++] = sizeofTypeExpression(data.type); //extraArgs[extraArgCount++] = "(size_t)&(('" + data.type + "'*)0)->value"; } + } else if (outertype == "std::deque") { + // remove 'std::allocator<...>': + extraArgs[1] = "0"; + } else if (outertype == "std::stack") { + // remove 'std::allocator<...>': + extraArgs[1] = "0"; } else if (outertype == "std::map") { // We don't want the comparator and the allocator confuse gdb. // But we need the offset of the second item in the value pair. @@ -3470,7 +3480,7 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record, //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg; #ifdef QT_DEBUG // Make debugging of dumers easier - if (qq->debugDumpersAction()->isChecked() + if (q->settings()->m_debugDumpers && msg.startsWith("The program being debugged stopped while") && msg.contains("qDumpObjectData440")) { // Fake full stop diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h index f5a7c658b76..60493a53e58 100644 --- a/src/plugins/debugger/gdbengine.h +++ b/src/plugins/debugger/gdbengine.h @@ -36,6 +36,7 @@ #include "idebuggerengine.h" #include "gdbmi.h" +#include "outputcollector.h" #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #include QT_BEGIN_NAMESPACE @@ -81,23 +83,6 @@ enum DataDumperState }; -class GdbSettings -{ -public: - GdbSettings() { m_autoRun = m_autoQuit = false; } - -public: - QString m_gdbCmd; - QString m_gdbEnv; - bool m_autoRun; - bool m_autoQuit; - - QString m_scriptFile; - QMap m_typeMacros; -}; - -GdbSettings &theGdbSettings(); - class GdbEngine : public IDebuggerEngine { Q_OBJECT @@ -110,7 +95,7 @@ signals: void gdbResponseAvailable(); void gdbInputAvailable(const QString &prefix, const QString &msg); void gdbOutputAvailable(const QString &prefix, const QString &msg); - void applicationOutputAvailable(const QString &prefix, const QString &msg); + void applicationOutputAvailable(const QString &output); private: // @@ -190,6 +175,7 @@ private slots: void gdbProcError(QProcess::ProcessError error); void readGdbStandardOutput(); void readGdbStandardError(); + void readDebugeeOutput(const QByteArray &data); private: int terminationIndex(const QByteArray &buffer, int &length); @@ -207,6 +193,10 @@ private: void handleQueryPwd(const GdbResultRecord &response); void handleQuerySources(const GdbResultRecord &response); + OutputCollector m_outputCollector; + QTextCodec *m_outputCodec; + QTextCodec::ConverterState m_outputCodecState; + QByteArray m_inbuffer; QProcess m_gdbProc; diff --git a/src/plugins/debugger/gdboptionpage.cpp b/src/plugins/debugger/gdboptionpage.cpp deleted file mode 100644 index 7c7a2700b6a..00000000000 --- a/src/plugins/debugger/gdboptionpage.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/*************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Qt Software Information (qt-info@nokia.com) -** -** -** Non-Open Source Usage -** -** Licensees may use this file in accordance with the Qt Beta Version -** License Agreement, Agreement version 2.2 provided with the Software or, -** alternatively, in accordance with the terms contained in a written -** agreement between you and Nokia. -** -** GNU General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging -** of this file. Please review the following information to ensure GNU -** General Public Licensing requirements will be met: -** -** http://www.fsf.org/licensing/licenses/info/GPLv2.html and -** http://www.gnu.org/copyleft/gpl.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt GPL Exception -** version 1.3, included in the file GPL_EXCEPTION.txt in this package. -** -***************************************************************************/ - -#include "gdboptionpage.h" - -#include "gdbengine.h" - -#include -#include - -#include -#include -#include - -using namespace Debugger::Internal; - -GdbOptionPage::GdbOptionPage(GdbSettings *settings) -{ - m_pm = ExtensionSystem::PluginManager::instance(); - m_settings = settings; - - Core::ICore *coreIFace = m_pm->getObject(); - if (!coreIFace || !coreIFace->settings()) - return; - QSettings *s = coreIFace->settings(); - s->beginGroup("GdbOptions"); - QString defaultCommand("gdb"); -#if defined(Q_OS_WIN32) - defaultCommand.append(".exe"); -#endif - QString defaultScript = coreIFace->resourcePath() + - QLatin1String("/gdb/qt4macros"); - - m_settings->m_gdbCmd = s->value("Location", defaultCommand).toString(); - m_settings->m_scriptFile= s->value("ScriptFile", defaultScript).toString(); - m_settings->m_gdbEnv = s->value("Environment", "").toString(); - m_settings->m_autoRun = s->value("AutoRun", true).toBool(); - m_settings->m_autoQuit = s->value("AutoQuit", true).toBool(); - s->endGroup(); -} - -QString GdbOptionPage::name() const -{ - return tr("Gdb"); -} - -QString GdbOptionPage::category() const -{ - return "Debugger"; -} - -QString GdbOptionPage::trCategory() const -{ - return tr("Debugger"); -} - -QWidget *GdbOptionPage::createPage(QWidget *parent) -{ - QWidget *w = new QWidget(parent); - m_ui.setupUi(w); - m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); - m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location")); - m_ui.gdbLocationChooser->setPath(m_settings->m_gdbCmd); - m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File); - m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); - m_ui.scriptFileChooser->setPath(m_settings->m_scriptFile); - m_ui.environmentEdit->setText(m_settings->m_gdbEnv); - m_ui.autoStartBox->setChecked(m_settings->m_autoRun); - m_ui.autoQuitBox->setChecked(m_settings->m_autoQuit); - - // FIXME - m_ui.autoStartBox->hide(); - m_ui.autoQuitBox->hide(); - m_ui.environmentEdit->hide(); - m_ui.labelEnvironment->hide(); - - connect(m_ui.gdbLocationChooser, SIGNAL(changed()), - this, SLOT(onGdbLocationChanged())); - connect(m_ui.scriptFileChooser, SIGNAL(changed()), - this, SLOT(onScriptFileChanged())); - - return w; -} - -void GdbOptionPage::onGdbLocationChanged() -{ - m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path(); -} - -void GdbOptionPage::onScriptFileChanged() -{ - m_settings->m_scriptFile = m_ui.scriptFileChooser->path(); -} - -void GdbOptionPage::apply() -{ - m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path(); - m_settings->m_gdbEnv = m_ui.environmentEdit->text(); - m_settings->m_autoRun = m_ui.autoStartBox->isChecked(); - m_settings->m_autoQuit = m_ui.autoQuitBox->isChecked(); - m_settings->m_scriptFile = m_ui.scriptFileChooser->path(); - - Core::ICore *coreIFace = m_pm->getObject(); - if (!coreIFace || !coreIFace->settings()) - return; - - QSettings *s = coreIFace->settings(); - - s->beginGroup("GdbOptions"); - s->setValue("Location", m_settings->m_gdbCmd); - s->setValue("Environment", m_settings->m_gdbEnv); - s->setValue("AutoRun", m_settings->m_autoRun); - s->setValue("AutoQuit", m_settings->m_autoQuit); - s->endGroup(); -} diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui index 580f13c0d66..dcd57443350 100644 --- a/src/plugins/debugger/gdboptionpage.ui +++ b/src/plugins/debugger/gdboptionpage.ui @@ -6,8 +6,8 @@ 0 0 - 433 - 233 + 465 + 372 @@ -36,7 +36,7 @@ - + This is either a full abolute path leading to the gdb binary you intend to use or the name of a gdb binary that wiull be searched in your PATH. @@ -74,6 +74,68 @@ + + + + Checking this will make the debugger try to use code to format certain data (QObject, QString, std::string etc.) nicely. + + + Use custom display for Qt and Standard Library objects + + + + + + + Start debugged process in a separte terminal. + + + Start in terminal + + + + + + + Checking this will make the debugger start fast by loading only very few debug symbols on start up. This might lead to situations where breakpoints can not be set properly. So uncheck this option if you experience breakpoint related problems. + + + Fast debugger start + + + + + + + fter checking this option 'Step Into' combines in certain situations several steps, leading to 'less noisy' debugging. So will, e.g., the atomic +reference counting code be skipped, and a single 'Step Into' for a signal emission will end up directly in the slot connected to it. + + + + Skip known frames when stepping + + + + + + + Checking this will make enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default. + + + Use tooltips while debugging + + + + + + + This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself. + + + Debug Custom Dumpers + + + diff --git a/src/plugins/debugger/gdbtypemacros.cpp b/src/plugins/debugger/gdbtypemacros.cpp index d392a836f0e..c586e6c3027 100644 --- a/src/plugins/debugger/gdbtypemacros.cpp +++ b/src/plugins/debugger/gdbtypemacros.cpp @@ -35,7 +35,6 @@ #include "gdbengine.h" #include "imports.h" -#include #include #include @@ -49,9 +48,7 @@ TypeMacroPage::TypeMacroPage(GdbSettings *settings) m_pm = ExtensionSystem::PluginManager::instance(); m_settings = settings; - Core::ICore *coreIFace = m_pm->getObject(); - if (!coreIFace || !coreIFace->settings()) - return; + Core::ICore *coreIFace = ICore::instance(); QSettings *s = coreIFace->settings(); s->beginGroup("GdbOptions"); @@ -164,14 +161,11 @@ void TypeMacroPage::finished(bool accepted) m_settings->m_typeMacros.insert(item->text(0), data); } - Core::ICore *coreIFace = m_pm->getObject(); - if (coreIFace && coreIFace->settings()) { - QSettings *s = coreIFace->settings(); - s->beginGroup("GdbOptions"); - s->setValue("ScriptFile", m_settings->m_scriptFile); - s->setValue("TypeMacros", m_settings->m_typeMacros); - s->endGroup(); - } + QSettings *s = ICore::instance()->settings(); + s->beginGroup("GdbOptions"); + s->setValue("ScriptFile", m_settings->m_scriptFile); + s->setValue("TypeMacros", m_settings->m_typeMacros); + s->endGroup(); } void TypeMacroPage::onAddButton() diff --git a/src/plugins/debugger/outputcollector.cpp b/src/plugins/debugger/outputcollector.cpp new file mode 100644 index 00000000000..f091ca92084 --- /dev/null +++ b/src/plugins/debugger/outputcollector.cpp @@ -0,0 +1,180 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "outputcollector.h" + +#ifdef Q_OS_WIN + +#include +#include +#include + +#else + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#endif + +namespace Debugger { +namespace Internal { + +OutputCollector::OutputCollector(QObject *parent) + : QObject(parent) +{ +#ifdef Q_OS_WIN + m_server = 0; + m_socket = 0; +#endif +} + +OutputCollector::~OutputCollector() +{ + shutdown(); +} + +bool OutputCollector::listen() +{ +#ifdef Q_OS_WIN + if (m_server) + return m_server->isListening(); + m_server = new QLocalServer(this); + connect(m_server, SIGNAL(newConnection()), SLOT(newConnectionAvailable())); + return m_server->listen(QLatin1String("creator-") + QCoreApplication::applicationPid()); // XXX how to make that secure? +#else + if (!m_serverPath.isEmpty()) + return true; + QByteArray codedServerPath; + forever { + { + QTemporaryFile tf; + if (!tf.open()) { + m_errorString = tr("Cannot create temporary file: %2").arg(tf.errorString()); + m_serverPath.clear(); + return false; + } + m_serverPath = tf.fileName(); + } + // By now the temp file was deleted again + codedServerPath = QFile::encodeName(m_serverPath); + if (!::mkfifo(codedServerPath.constData(), 0600)) + break; + if (errno != EEXIST) { + m_errorString = tr("Cannot create FiFo %1: %2").arg(m_serverPath, strerror(errno)); + m_serverPath.clear(); + return false; + } + } + if ((m_serverFd = ::open(codedServerPath.constData(), O_RDONLY|O_NONBLOCK)) < 0) { + m_errorString = tr("Cannot open FiFo %1: %2").arg(m_serverPath, strerror(errno)); + m_serverPath.clear(); + return false; + } + m_serverNotifier = new QSocketNotifier(m_serverFd, QSocketNotifier::Read, this); + connect(m_serverNotifier, SIGNAL(activated(int)), SLOT(bytesAvailable())); + return true; +#endif +} + +void OutputCollector::shutdown() +{ +#ifdef Q_OS_WIN + delete m_server; // Deletes socket as well (QObject parent) + m_server = 0; + m_socket = 0; +#else + if (!m_serverPath.isEmpty()) { + ::close(m_serverFd); + ::unlink(QFile::encodeName(m_serverPath).constData()); + delete m_serverNotifier; + m_serverPath.clear(); + } +#endif +} + +QString OutputCollector::errorString() const +{ +#ifdef Q_OS_WIN + return m_socket ? m_socket->errorString() : m_server->errorString(); +#else + return m_errorString; +#endif +} + +QString OutputCollector::serverName() const +{ +#ifdef Q_OS_WIN + return m_server->fullServerName(); +#else + return m_serverPath; +#endif +} + +#ifdef Q_OS_WIN +void OutputCollector::newConnectionAvailable() +{ + if (m_socket) + return; + m_socket = m_server->nextPendingConnection(); + connect(m_socket, SIGNAL(bytesAvailable()), SLOT(bytesAvailable())); +} +#endif + +void OutputCollector::bytesAvailable() +{ +#ifdef Q_OS_WIN + emit byteDelivery(m_socket->readAll()); +#else + size_t nbytes = 0; + if (::ioctl(m_serverFd, FIONREAD, (char *) &nbytes) < 0) + return; + QVarLengthArray buff(nbytes); + if (::read(m_serverFd, buff.data(), nbytes) != (int)nbytes) + return; + if (nbytes) // Skip EOF notifications + emit byteDelivery(QByteArray::fromRawData(buff.data(), nbytes)); +#endif +} + +} // namespace Internal +} // namespace Debugger diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/outputcollector.h similarity index 51% rename from src/plugins/debugger/gdboptionpage.h rename to src/plugins/debugger/outputcollector.h index c4c3ade9e31..b84a1b36100 100644 --- a/src/plugins/debugger/gdboptionpage.h +++ b/src/plugins/debugger/outputcollector.h @@ -2,7 +2,7 @@ ** ** This file is part of Qt Creator ** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** @@ -31,79 +31,61 @@ ** ***************************************************************************/ -#ifndef GDBOPTIONPAGE_H -#define GDBOPTIONPAGE_H +#ifndef OUTPUT_COLLECTOR_H +#define OUTPUT_COLLECTOR_H -#include "ui_gdboptionpage.h" +#include +#include -#include - -#include - -namespace ExtensionSystem { class PluginManager; } +QT_BEGIN_NAMESPACE +class QLocalServer; +class QLocalSocket; +class QSocketNotifier; +QT_END_NAMESPACE namespace Debugger { namespace Internal { -class GdbSettings; +/////////////////////////////////////////////////////////////////////// +// +// OutputCollector +// +/////////////////////////////////////////////////////////////////////// -class GdbOptionPage : public Core::IOptionsPage +class OutputCollector : public QObject { Q_OBJECT public: - GdbOptionPage(GdbSettings *settings); + OutputCollector(QObject *parent = 0); + ~OutputCollector(); + bool listen(); + void shutdown(); + QString serverName() const; + QString errorString() const; - QString name() const; - QString category() const; - QString trCategory() const; - - QWidget *createPage(QWidget *parent); - void apply(); - void finish() { } - -public slots: - void onGdbLocationChanged(); - void onScriptFileChanged(); - -private: - ExtensionSystem::PluginManager *m_pm; - Ui::GdbOptionPage m_ui; - - GdbSettings *m_settings; -}; - -#if 0 -class TypeMacroPage : public Core::IOptionsPage -{ - Q_OBJECT - -public: - TypeMacroPage(GdbSettings *settings); - - QString name() const; - QString category() const; - QString trCategory() const; - - QWidget *createPage(QWidget *parent); - void finished(bool accepted); +signals: + void byteDelivery(const QByteArray &data); private slots: - void onAddButton(); - void onDelButton(); - void currentItemChanged(QTreeWidgetItem *item); - void updateButtonState(); + void bytesAvailable(); +#ifdef Q_OS_WIN + void newConnectionAvailable(); +#endif private: - ExtensionSystem::PluginManager *m_pm; - Ui::TypeMacroPage m_ui; - - GdbSettings *m_settings; - QWidget *m_widget; -}; +#ifdef Q_OS_WIN + QLocalServer *m_server; + QLocalSocket *m_socket; +#else + QString m_serverPath; + int m_serverFd; + QSocketNotifier *m_serverNotifier; + QString m_errorString; #endif +}; } // namespace Internal } // namespace Debugger -#endif // GDBOPTIONPAGE_H +#endif // OUTPUT_COLLECTOR_H diff --git a/src/plugins/designer/cpp/formclasswizard.cpp b/src/plugins/designer/cpp/formclasswizard.cpp index b4e618490d4..77d002f2d72 100644 --- a/src/plugins/designer/cpp/formclasswizard.cpp +++ b/src/plugins/designer/cpp/formclasswizard.cpp @@ -48,8 +48,8 @@ enum { debugFormClassWizard = 0 }; using namespace Designer; using namespace Designer::Internal; -FormClassWizard::FormClassWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent) : - Core::BaseFileWizard(parameters, core, parent) +FormClassWizard::FormClassWizard(const BaseFileWizardParameters ¶meters, QObject *parent) + : Core::BaseFileWizard(parameters, parent) { } diff --git a/src/plugins/designer/cpp/formclasswizard.h b/src/plugins/designer/cpp/formclasswizard.h index 39b99c92037..f7b693440f3 100644 --- a/src/plugins/designer/cpp/formclasswizard.h +++ b/src/plugins/designer/cpp/formclasswizard.h @@ -38,10 +38,6 @@ #include -QT_BEGIN_NAMESPACE -class QWizard; -QT_END_NAMESPACE - namespace Designer { namespace Internal { @@ -55,7 +51,7 @@ class FormClassWizard : public Core::BaseFileWizard public: typedef Core::BaseFileWizardParameters BaseFileWizardParameters; - FormClassWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent); + FormClassWizard(const BaseFileWizardParameters ¶meters, QObject *parent); QString headerSuffix() const; QString sourceSuffix() const; diff --git a/src/plugins/designer/cpp/formclasswizardpage.cpp b/src/plugins/designer/cpp/formclasswizardpage.cpp index 6cc0ced4215..38982075027 100644 --- a/src/plugins/designer/cpp/formclasswizardpage.cpp +++ b/src/plugins/designer/cpp/formclasswizardpage.cpp @@ -42,8 +42,8 @@ #include #include -#include #include +#include static const char *formClassWizardPageGroupC = "FormClassWizardPage"; static const char *translationKeyC = "RetranslationSupport"; @@ -175,7 +175,7 @@ bool FormClassWizardPage::validatePage() void FormClassWizardPage::saveSettings() { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (QSettings *settings = core->settings()) { settings->beginGroup(QLatin1String(formClassWizardPageGroupC)); settings->setValue(QLatin1String(translationKeyC), hasRetranslationSupport()); @@ -189,7 +189,7 @@ void FormClassWizardPage::restoreSettings() bool retranslationSupport = true; int embedding = PointerAggregatedUiClass; - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (QSettings *settings = core->settings()) { QString key = QLatin1String(formClassWizardPageGroupC); diff --git a/src/plugins/designer/formeditorfactory.h b/src/plugins/designer/formeditorfactory.h index 02ad78fdb2d..5d13e45080a 100644 --- a/src/plugins/designer/formeditorfactory.h +++ b/src/plugins/designer/formeditorfactory.h @@ -34,7 +34,6 @@ #ifndef FORMEDITORFACTORY_H #define FORMEDITORFACTORY_H -#include #include #include diff --git a/src/plugins/designer/formeditorplugin.cpp b/src/plugins/designer/formeditorplugin.cpp index bc9f6a23337..efd9a3b64ef 100644 --- a/src/plugins/designer/formeditorplugin.cpp +++ b/src/plugins/designer/formeditorplugin.cpp @@ -51,7 +51,7 @@ #include #include -#include +#include #include #ifdef CPP_ENABLED @@ -89,13 +89,16 @@ FormEditorPlugin::~FormEditorPlugin() // INHERITED FROM ExtensionSystem::Plugin // //////////////////////////////////////////////////// -bool FormEditorPlugin::initialize(const QStringList & /*arguments*/, QString *error_message/* = 0*/) // =0; +bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/formeditor/Designer.mimetypes.xml"), error_message)) + Q_UNUSED(arguments); + Q_UNUSED(error); + + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/formeditor/Designer.mimetypes.xml"), error)) return false; - if (!initializeTemplates(error_message)) + if (!initializeTemplates(error)) return false; const int uid = core->uniqueIDManager()->uniqueIdentifier(QLatin1String(C_FORMEDITOR)); @@ -107,7 +110,7 @@ bool FormEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er // Make sure settings pages and action shortcuts are registered FormEditorW::ensureInitStage(FormEditorW::RegisterPlugins); - error_message->clear(); + error->clear(); return true; } @@ -121,24 +124,23 @@ void FormEditorPlugin::extensionsInitialized() // //////////////////////////////////////////////////// -bool FormEditorPlugin::initializeTemplates(QString * /* error_message */) +bool FormEditorPlugin::initializeTemplates(QString *error) { - - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Q_UNUSED(error); FormWizard::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); wizardParameters.setCategory(QLatin1String("Qt")); wizardParameters.setTrCategory(tr("Qt")); const QString formFileType = QLatin1String(Constants::FORM_FILE_TYPE); wizardParameters.setName(tr("Qt Designer Form")); wizardParameters.setDescription(tr("This creates a new Qt Designer form file.")); - m_formWizard = new FormWizard(wizardParameters, core, this); + m_formWizard = new FormWizard(wizardParameters, this); addObject(m_formWizard); #ifdef CPP_ENABLED wizardParameters.setKind(Core::IWizard::ClassWizard); wizardParameters.setName(tr("Qt Designer Form Class")); wizardParameters.setDescription(tr("This creates a new Qt Designer form class.")); - m_formClassWizard = new FormClassWizard(wizardParameters, core, this); + m_formClassWizard = new FormClassWizard(wizardParameters, this); addObject(m_formClassWizard); #endif return true; diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp index e302eabb3c1..05a4001effb 100644 --- a/src/plugins/designer/formeditorw.cpp +++ b/src/plugins/designer/formeditorw.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -162,7 +163,7 @@ FormEditorW::FormEditorW() : m_formeditor(QDesignerComponents::createFormEditor(0)), m_integration(0), m_fwm(0), - m_core(ExtensionSystem::PluginManager::instance()->getObject()), + m_core(Core::ICore::instance()), m_initStage(RegisterPlugins), m_actionGroupEditMode(0), m_actionPrint(0), diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h index 6aaca2c5924..f41d3554e25 100644 --- a/src/plugins/designer/formeditorw.h +++ b/src/plugins/designer/formeditorw.h @@ -34,12 +34,12 @@ #ifndef FORMEDITORW_H #define FORMEDITORW_H -#include #include -#include #include +#include #include +#include #include "designerconstants.h" diff --git a/src/plugins/designer/formwizard.cpp b/src/plugins/designer/formwizard.cpp index 4bb492ce354..d69c2abbbbc 100644 --- a/src/plugins/designer/formwizard.cpp +++ b/src/plugins/designer/formwizard.cpp @@ -36,8 +36,6 @@ #include "formwindoweditor.h" #include "designerconstants.h" -#include - #include #include @@ -46,8 +44,8 @@ enum { debugFormWizard = 0 }; using namespace Designer; using namespace Designer::Internal; -FormWizard::FormWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent) : - Core::BaseFileWizard(parameters, core, parent) +FormWizard::FormWizard(const BaseFileWizardParameters ¶meters, QObject *parent) + : Core::BaseFileWizard(parameters, parent) { } @@ -55,7 +53,7 @@ QWizard *FormWizard::createWizardDialog(QWidget *parent, const QString &defaultPath, const WizardPageList &extensionPages) const { - FormFileWizardDialog *wizardDialog = new FormFileWizardDialog(core(), extensionPages, parent); + FormFileWizardDialog *wizardDialog = new FormFileWizardDialog(extensionPages, parent); wizardDialog->setPath(defaultPath); return wizardDialog; } diff --git a/src/plugins/designer/formwizard.h b/src/plugins/designer/formwizard.h index b49fea1eb7a..588189dbb64 100644 --- a/src/plugins/designer/formwizard.h +++ b/src/plugins/designer/formwizard.h @@ -36,15 +36,9 @@ #include -QT_BEGIN_NAMESPACE -class QWizard; -QT_END_NAMESPACE - namespace Designer { namespace Internal { -class FormFileWizardDialog; - class FormWizard : public Core::BaseFileWizard { Q_DISABLE_COPY(FormWizard) @@ -53,7 +47,7 @@ class FormWizard : public Core::BaseFileWizard public: typedef Core::BaseFileWizardParameters BaseFileWizardParameters; - explicit FormWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent); + FormWizard(const BaseFileWizardParameters ¶meters, QObject *parent); protected: virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/designer/formwizarddialog.cpp b/src/plugins/designer/formwizarddialog.cpp index 67ed8160198..d7905a56545 100644 --- a/src/plugins/designer/formwizarddialog.cpp +++ b/src/plugins/designer/formwizarddialog.cpp @@ -50,12 +50,10 @@ namespace Designer { namespace Internal { // ----------------- FormWizardDialog -FormWizardDialog::FormWizardDialog(Core::ICore *core, - const WizardPageList &extensionPages, - QWidget *parent) : - QWizard(parent), - m_formPage(new FormTemplateWizardPagePage), - m_core(core) +FormWizardDialog::FormWizardDialog(const WizardPageList &extensionPages, + QWidget *parent) + : QWizard(parent), + m_formPage(new FormTemplateWizardPagePage) { init(extensionPages); } @@ -82,10 +80,9 @@ QString FormWizardDialog::templateContents() const } // ----------------- FormFileWizardDialog -FormFileWizardDialog::FormFileWizardDialog(Core::ICore *core, - const WizardPageList &extensionPages, - QWidget *parent) : - FormWizardDialog(core, extensionPages, parent), +FormFileWizardDialog::FormFileWizardDialog(const WizardPageList &extensionPages, + QWidget *parent) + : FormWizardDialog(extensionPages, parent), m_filePage(new Core::Utils::FileWizardPage) { setPage(FilePageId, m_filePage); diff --git a/src/plugins/designer/formwizarddialog.h b/src/plugins/designer/formwizarddialog.h index 52aaed4cd02..0ecd7274b1d 100644 --- a/src/plugins/designer/formwizarddialog.h +++ b/src/plugins/designer/formwizarddialog.h @@ -37,10 +37,9 @@ #include namespace Core { - class ICore; - namespace Utils { - class FileWizardPage; - } +namespace Utils { + class FileWizardPage; +} } namespace Designer { @@ -58,8 +57,7 @@ class FormWizardDialog : public QWizard public: typedef QList WizardPageList; - explicit FormWizardDialog(Core::ICore *core, - const WizardPageList &extensionPages, + explicit FormWizardDialog(const WizardPageList &extensionPages, QWidget *parent = 0); QString templateContents() const; @@ -68,7 +66,6 @@ private: void init(const WizardPageList &extensionPages); FormTemplateWizardPagePage *m_formPage; - Core::ICore *m_core; mutable QString m_templateContents; }; @@ -82,8 +79,7 @@ class FormFileWizardDialog : public FormWizardDialog Q_OBJECT public: - explicit FormFileWizardDialog(Core::ICore *core, - const WizardPageList &extensionPages, + explicit FormFileWizardDialog(const WizardPageList &extensionPages, QWidget *parent = 0); QString path() const; diff --git a/src/plugins/designer/workbenchintegration.cpp b/src/plugins/designer/workbenchintegration.cpp index 42043c3cd20..9e25f80432a 100644 --- a/src/plugins/designer/workbenchintegration.cpp +++ b/src/plugins/designer/workbenchintegration.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -78,8 +79,8 @@ static QString msgClassNotFound(const QString &uiClassName, const QListgetObject(); - return core->pluginManager()->getObject(); + return ExtensionSystem::PluginManager::instance() + ->getObject(); } WorkbenchIntegration::WorkbenchIntegration(QDesignerFormEditorInterface *core, FormEditorW *parent) : diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 4a69ff97ea6..32663da298e 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -35,12 +35,20 @@ #include "fakevimconstants.h" +// Please do not add any direct dependencies to other Qt Creator code here. +// Instead emit signals and let the FakeVimPlugin channel the information to +// Qt Creator. The idea is to keep this file here in a "clean" state that +// allows easy reuse with any QTextEdit or QPlainTextEdit derived class. + +//#include + #include #include #include #include #include #include +#include #include #include @@ -53,11 +61,6 @@ #include #include -//#include -//#include -//#include - -//#include using namespace FakeVim::Internal; using namespace FakeVim::Constants; @@ -125,6 +128,13 @@ enum VisualMode VisualBlockMode, }; +enum MoveType +{ + MoveExclusive, + MoveInclusive, + MoveLineWise, +}; + struct EditOperation { EditOperation() : m_position(-1), m_itemCount(0) {} @@ -137,14 +147,20 @@ struct EditOperation QDebug &operator<<(QDebug &ts, const EditOperation &op) { if (op.m_itemCount > 0) { - ts << "EDIT BLOCK WITH" << op.m_itemCount << "ITEMS"; + ts << "\n EDIT BLOCK WITH " << op.m_itemCount << " ITEMS"; } else { - ts << "EDIT AT " << op.m_position - << " FROM " << op.m_from << " TO " << op.m_to; + ts << "\n EDIT AT " << op.m_position + << "\n FROM " << op.m_from << "\n TO " << op.m_to; } return ts; } +int lineCount(const QString &text) +{ + //return text.count(QChar(ParagraphSeparator)); + return text.count(QChar('\n')); +} + class FakeVimHandler::Private { public: @@ -159,11 +175,11 @@ private: static int control(int key) { return key + 256; } void init(); - bool handleKey(int key, const QString &text); - bool handleInsertMode(int key, const QString &text); - bool handleCommandMode(int key, const QString &text); - bool handleRegisterMode(int key, const QString &text); - bool handleMiniBufferModes(int key, const QString &text); + bool handleKey(int key, int unmodified, const QString &text); + bool handleInsertMode(int key, int unmodified, const QString &text); + bool handleCommandMode(int key, int unmodified, const QString &text); + bool handleRegisterMode(int key, int unmodified, const QString &text); + bool handleMiniBufferModes(int key, int unmodified, const QString &text); void finishMovement(const QString &text = QString()); void search(const QString &needle, bool forward); @@ -188,7 +204,8 @@ private: void scrollToLineInDocument(int line); // helper functions for indenting - bool isElectricCharacter(QChar c) const { return (c == '{' || c == '}' || c == '#'); } + bool isElectricCharacter(QChar c) const + { return (c == '{' || c == '}' || c == '#'); } int indentDist() const; void indentRegion(QTextBlock first, QTextBlock last, QChar typedChar=0); void indentCurrentLine(QChar typedChar); @@ -198,17 +215,33 @@ private: void moveToNextWord(bool simple); void moveToMatchingParanthesis(); void moveToWordBoundary(bool simple, bool forward); + + // to reduce line noise + typedef QTextCursor::MoveOperation MoveOperation; + typedef QTextCursor::MoveMode MoveMode; + void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); } + void moveToStartOfLine() { m_tc.movePosition(StartOfLine, MoveAnchor); } + void moveToEndOfLine() { m_tc.movePosition(EndOfLine, MoveAnchor); } + void moveUp(int n = 1) { m_tc.movePosition(Up, MoveAnchor, n); } + void moveDown(int n = 1) { m_tc.movePosition(Down, MoveAnchor, n); } + void moveRight(int n = 1) { m_tc.movePosition(Right, MoveAnchor, n); } + void moveLeft(int n = 1) { m_tc.movePosition(Left, MoveAnchor, n); } + void setAnchor() { m_anchor = m_tc.position(); } + + QString selectedText() const; + void handleFfTt(int key); // helper function for handleCommand. return 1 based line index. int readLineCode(QString &cmd); - QTextCursor selectRange(int beginLine, int endLine); + void selectRange(int beginLine, int endLine); void setWidget(QWidget *ob); void enterInsertMode(); void enterCommandMode(); void showRedMessage(const QString &msg); void showBlackMessage(const QString &msg); + void notImplementedYet(); void updateMiniBuffer(); void updateSelection(); void quit(); @@ -226,10 +259,12 @@ public: int m_subsubdata; QString m_input; QTextCursor m_tc; + int m_anchor; QHash m_registers; int m_register; QString m_mvcount; QString m_opcount; + MoveType m_moveType; bool m_fakeEnd; @@ -250,11 +285,20 @@ public: void recordRemove(int position, const QString &data); void recordRemove(int position, int length); void recordMove(int position, int nestedCount); - void removeSelectedText(QTextCursor &tc); + + void recordRemoveNextChar(); + void recordInsertText(const QString &data); + QString recordRemoveSelectedText(); + void recordBeginGroup(); + void recordEndGroup(); + int anchor() const { return m_anchor; } + int position() const { return m_tc.position(); } + void undo(); void redo(); QStack m_undoStack; QStack m_redoStack; + QStack m_undoGroupStack; // extra data for '.' QString m_dotCount; @@ -281,7 +325,7 @@ public: QHash m_config; // for restoring cursor position - int m_savedPosition; + int m_savedYankPosition; int m_desiredColumn; }; @@ -300,6 +344,9 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent) m_plaintextedit = 0; m_visualMode = NoVisualMode; m_desiredColumn = 0; + m_moveType = MoveInclusive; + m_anchor = 0; + m_savedYankPosition = 0; m_config[ConfigStartOfLine] = ConfigOn; m_config[ConfigTabStop] = "8"; @@ -312,6 +359,7 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent) bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev) { int key = ev->key(); + const int um = key; // keep unmodified key around // FIXME if (m_mode == PassingMode && key != Qt::Key_Control && key != Qt::Key_Shift) { @@ -331,7 +379,7 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev) m_tc.setVisualNavigation(true); if (m_fakeEnd) - m_tc.movePosition(Right, MoveAnchor, 1); + moveRight(); if ((ev->modifiers() & Qt::ControlModifier) != 0) { key += 256; @@ -340,40 +388,39 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev) && (ev->modifiers() & Qt::ShiftModifier) == 0) { key += 32; } - bool handled = handleKey(key, ev->text()); + bool handled = handleKey(key, um, ev->text()); // We fake vi-style end-of-line behaviour m_fakeEnd = (atEol() && m_mode == CommandMode); if (m_fakeEnd) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); EDITOR(setTextCursor(m_tc)); EDITOR(ensureCursorVisible()); return handled; } -bool FakeVimHandler::Private::handleKey(int key, const QString &text) +bool FakeVimHandler::Private::handleKey(int key, int unmodified, const QString &text) { //qDebug() << "KEY: " << key << text << "POS: " << m_tc.position(); //qDebug() << "\nUNDO: " << m_undoStack << "\nREDO: " << m_redoStack; - m_savedPosition = m_tc.position(); if (m_mode == InsertMode) - return handleInsertMode(key, text); + return handleInsertMode(key, unmodified, text); if (m_mode == CommandMode) - return handleCommandMode(key, text); + return handleCommandMode(key, unmodified, text); if (m_mode == ExMode || m_mode == SearchForwardMode || m_mode == SearchBackwardMode) - return handleMiniBufferModes(key, text); + return handleMiniBufferModes(key, unmodified, text); return false; } void FakeVimHandler::Private::finishMovement(const QString &dotCommand) { if (m_submode == FilterSubMode) { - int beginLine = lineForPosition(m_tc.anchor()); - int endLine = lineForPosition(m_tc.position()); - m_tc.setPosition(qMin(m_tc.anchor(), m_tc.position()), MoveAnchor); + int beginLine = lineForPosition(anchor()); + int endLine = lineForPosition(position()); + m_tc.setPosition(qMin(anchor(), position())); m_mode = ExMode; m_commandBuffer = QString(".,+%1!").arg(qAbs(endLine - beginLine)); m_commandHistory.append(QString()); @@ -382,25 +429,28 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) return; } + if (m_visualMode != NoVisualMode) + m_marks['>'] = m_tc.position(); + if (m_submode == ChangeSubMode) { if (!dotCommand.isEmpty()) m_dotCommand = "c" + dotCommand; - m_registers[m_register] = m_tc.selectedText(); - removeSelectedText(m_tc); + QString text = recordRemoveSelectedText(); + qDebug() << "CHANGING TO INSERT MODE" << text; + m_registers[m_register] = text; m_mode = InsertMode; m_submode = NoSubMode; } else if (m_submode == DeleteSubMode) { if (!dotCommand.isEmpty()) m_dotCommand = "d" + dotCommand; - recordRemove(qMin(m_tc.position(), m_tc.anchor()), m_tc.selectedText()); - m_registers[m_register] = m_tc.selectedText(); - removeSelectedText(m_tc); + m_registers[m_register] = recordRemoveSelectedText(); + recordEndGroup(); m_submode = NoSubMode; if (atEol()) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); } else if (m_submode == YankSubMode) { - m_registers[m_register] = m_tc.selectedText(); - m_tc.setPosition(m_savedPosition); + m_registers[m_register] = selectedText(); + m_tc.setPosition(m_savedYankPosition); m_submode = NoSubMode; } else if (m_submode == ReplaceSubMode) { m_submode = NoSubMode; @@ -409,12 +459,14 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) int start = m_tc.selectionStart(); int end = m_tc.selectionEnd(); if (start > end) - std::swap(start, end); + qSwap(start, end); QTextBlock startBlock = doc->findBlock(start); indentRegion(doc->findBlock(start), doc->findBlock(end).next()); m_tc.setPosition(startBlock.position()); moveToFirstNonBlankOnLine(); m_submode = NoSubMode; + } else if (m_moveType == MoveExclusive) { + moveLeft(); // correct } m_mvcount.clear(); m_opcount.clear(); @@ -544,7 +596,14 @@ void FakeVimHandler::Private::showBlackMessage(const QString &msg) updateMiniBuffer(); } -bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) +void FakeVimHandler::Private::notImplementedYet() +{ + showRedMessage("Not implemented in FakeVim"); + updateMiniBuffer(); +} + +bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, + const QString &text) { bool handled = true; @@ -552,26 +611,32 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) m_register = key; m_submode = NoSubMode; } else if (m_submode == ChangeSubMode && key == 'c') { - m_tc.movePosition(StartOfLine, MoveAnchor); - m_tc.movePosition(Down, KeepAnchor, count()); - m_registers[m_register] = m_tc.selectedText(); + moveToStartOfLine(); + setAnchor(); + moveDown(count()); + moveLeft(); + m_registers[m_register] = recordRemoveSelectedText(); + m_submode = NoSubMode; + m_mode = InsertMode; finishMovement("c"); } else if (m_submode == DeleteSubMode && key == 'd') { - m_tc.movePosition(StartOfLine, MoveAnchor); - m_tc.movePosition(Down, KeepAnchor, count()); - m_registers[m_register] = m_tc.selectedText(); + moveToStartOfLine(); + setAnchor(); + moveDown(count()); + m_registers[m_register] = recordRemoveSelectedText(); finishMovement("d"); } else if (m_submode == YankSubMode && key == 'y') { - m_tc.movePosition(StartOfLine, MoveAnchor); - m_tc.movePosition(Down, KeepAnchor, count()); - m_registers[m_register] = m_tc.selectedText(); - finishMovement(); + moveToStartOfLine(); + setAnchor(); + moveDown(count()); + m_moveType = MoveLineWise; + finishMovement("y"); } else if (m_submode == ReplaceSubMode) { if (atEol()) - m_tc.movePosition(Left, KeepAnchor, 1); + moveLeft(KeepAnchor); else m_tc.deleteChar(); - m_tc.insertText(text); + recordInsertText(text); } else if (m_submode == IndentSubMode && key == '=') { indentRegion(m_tc.block(), m_tc.block().next()); finishMovement(); @@ -582,7 +647,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) moveToFirstNonBlankOnLine(); finishMovement(); } else { - qDebug() << "Ignored z + " << key << text; + qDebug() << "IGNORED Z_MODE " << key << text; } m_submode = NoSubMode; } else if (m_subsubmode == FtSubSubMode) { @@ -595,7 +660,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } else if (m_subsubmode == BackTickSubSubMode || m_subsubmode == TickSubSubMode) { if (m_marks.contains(key)) { - m_tc.setPosition(m_marks[key], MoveAnchor); + m_tc.setPosition(m_marks[key]); if (m_subsubmode == TickSubSubMode) moveToFirstNonBlankOnLine(); finishMovement(); @@ -613,10 +678,8 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } else if (key == ':') { m_mode = ExMode; m_commandBuffer.clear(); - if (m_visualMode != NoVisualMode) { + if (m_visualMode != NoVisualMode) m_commandBuffer = "'<,'>"; - leaveVisualMode(); - } m_commandHistory.append(QString()); m_commandHistoryIndex = m_commandHistory.size() - 1; updateMiniBuffer(); @@ -628,33 +691,42 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) updateMiniBuffer(); } else if (key == '`') { m_subsubmode = BackTickSubSubMode; + } else if (key == '#' || key == '*') { + // FIXME: That's not proper vim behaviour + m_tc.select(QTextCursor::WordUnderCursor); + QString needle = "\\<" + m_tc.selection().toPlainText() + "\\>"; + m_searchHistory.append(needle); + m_lastSearchForward = (key == '*'); + updateMiniBuffer(); + search(needle, m_lastSearchForward); } else if (key == '\'') { m_subsubmode = TickSubSubMode; } else if (key == '|') { - m_tc.movePosition(StartOfLine, KeepAnchor); - m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()) - 1); + setAnchor(); + moveToStartOfLine(); + moveRight(qMin(count(), rightDist()) - 1); finishMovement(); } else if (key == '!' && m_visualMode == NoVisualMode) { m_submode = FilterSubMode; } else if (key == '!' && m_visualMode == VisualLineMode) { m_mode = ExMode; - m_marks['>'] = m_tc.position(); m_commandBuffer = "'<,'>!"; m_commandHistory.append(QString()); m_commandHistoryIndex = m_commandHistory.size() - 1; updateMiniBuffer(); } else if (key == '"') { m_submode = RegisterSubMode; - } else if (key == Key_Return) { - m_tc.movePosition(StartOfLine); - m_tc.movePosition(Down); + } else if (unmodified == Key_Return) { + moveToStartOfLine(); + moveDown(); + moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == Key_Home) { - m_tc.movePosition(StartOfLine, KeepAnchor); + moveToStartOfLine(); finishMovement(); } else if (key == '$' || key == Key_End) { int submode = m_submode; - m_tc.movePosition(EndOfLine, KeepAnchor); + moveToEndOfLine(); finishMovement(); if (submode == NoSubMode) m_desiredColumn = -1; @@ -666,7 +738,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) qDebug() << "REPEATING" << m_dotCommand; for (int i = count(); --i >= 0; ) foreach (QChar c, m_dotCommand) - handleKey(c.unicode(), QString(c)); + handleKey(c.unicode(), c.unicode(), QString(c)); } else if (key == '=') { m_submode = IndentSubMode; } else if (key == '%') { @@ -674,12 +746,14 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) finishMovement(); } else if (key == 'a') { m_mode = InsertMode; + recordBeginGroup(); m_lastInsertion.clear(); - m_tc.movePosition(Right, MoveAnchor, 1); + moveRight(); updateMiniBuffer(); } else if (key == 'A') { m_mode = InsertMode; - m_tc.movePosition(EndOfLine, MoveAnchor); + moveToEndOfLine(); + recordBeginGroup(); m_lastInsertion.clear(); } else if (key == 'b') { moveToWordBoundary(false, false); @@ -688,30 +762,41 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) moveToWordBoundary(true, false); finishMovement(); } else if (key == 'c') { + setAnchor(); + recordBeginGroup(); m_submode = ChangeSubMode; } else if (key == 'C') { - m_submode = ChangeSubMode; - m_tc.movePosition(EndOfLine, KeepAnchor); + setAnchor(); + recordBeginGroup(); + moveToEndOfLine(); + m_registers[m_register] = recordRemoveSelectedText(); + m_mode = InsertMode; finishMovement(); } else if (key == 'd' && m_visualMode == NoVisualMode) { if (atEol()) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); + setAnchor(); + recordBeginGroup(); m_opcount = m_mvcount; m_mvcount.clear(); m_submode = DeleteSubMode; } else if (key == 'd') { + setAnchor(); leaveVisualMode(); int beginLine = lineForPosition(m_marks['<']); int endLine = lineForPosition(m_marks['>']); - m_tc = selectRange(beginLine, endLine); - removeSelectedText(m_tc); + selectRange(beginLine, endLine); + recordRemoveSelectedText(); } else if (key == 'D') { + setAnchor(); + recordBeginGroup(); m_submode = DeleteSubMode; - m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0)); - m_tc.movePosition(Right, KeepAnchor, rightDist()); + moveDown(qMax(count() - 1, 0)); + moveRight(rightDist()); finishMovement(); } else if (key == 'e') { moveToWordBoundary(false, true); + m_moveType = MoveExclusive; finishMovement(); } else if (key == 'E') { moveToWordBoundary(true, true); @@ -724,72 +809,77 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } else if (key == 'G') { int n = m_mvcount.isEmpty() ? linesInDocument() : count(); m_tc.setPosition(positionForLine(n), KeepAnchor); - if (m_config.contains(ConfigStartOfLine)) + if (m_config[ConfigStartOfLine] == ConfigOn) moveToFirstNonBlankOnLine(); finishMovement(); - } else if (key == 'h' || key == Key_Left) { + } else if (key == 'h' || key == Key_Left + || key == Key_Backspace || key == control('h')) { int n = qMin(count(), leftDist()); if (m_fakeEnd && m_tc.block().length() > 1) ++n; - m_tc.movePosition(Left, KeepAnchor, n); + moveLeft(n); finishMovement(); } else if (key == 'H') { m_tc = EDITOR(cursorForPosition(QPoint(0, 0))); - m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0)); + moveDown(qMax(count() - 1, 0)); moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == 'i') { enterInsertMode(); updateMiniBuffer(); if (atEol()) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); } else if (key == 'I') { + setAnchor(); enterInsertMode(); if (m_gflag) - m_tc.movePosition(StartOfLine, KeepAnchor); + moveToStartOfLine(); else moveToFirstNonBlankOnLine(); } else if (key == 'j' || key == Key_Down) { int savedColumn = m_desiredColumn; - if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) { - m_tc.movePosition(Down, KeepAnchor, count()); + if (m_submode == NoSubMode || m_submode == ZSubMode + || m_submode == RegisterSubMode) { + moveDown(count()); moveToDesiredColumn(); } else { - m_tc.movePosition(StartOfLine, MoveAnchor); - m_tc.movePosition(Down, KeepAnchor, count()+1); + moveToStartOfLine(); + moveDown(count() + 1); } finishMovement(); m_desiredColumn = savedColumn; } else if (key == 'J') { - EditOperation op; + recordBeginGroup(); if (m_submode == NoSubMode) { for (int i = qMax(count(), 2) - 1; --i >= 0; ) { - m_tc.movePosition(EndOfLine); - m_tc.deleteChar(); + moveToEndOfLine(); + recordRemoveNextChar(); if (!m_gflag) - m_tc.insertText(" "); + recordInsertText(" "); } if (!m_gflag) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); } + recordEndGroup(); } else if (key == 'k' || key == Key_Up) { int savedColumn = m_desiredColumn; - if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) { - m_tc.movePosition(Up, KeepAnchor, count()); + if (m_submode == NoSubMode || m_submode == ZSubMode + || m_submode == RegisterSubMode) { + moveUp(count()); moveToDesiredColumn(); } else { - m_tc.movePosition(StartOfLine, MoveAnchor); - m_tc.movePosition(Down, MoveAnchor); - m_tc.movePosition(Up, KeepAnchor, count()+1); + moveToStartOfLine(); + moveDown(); + moveUp(count() + 1); } finishMovement(); m_desiredColumn = savedColumn; } else if (key == 'l' || key == Key_Right) { - m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist())); + moveRight(qMin(count(), rightDist())); finishMovement(); } else if (key == 'L') { m_tc = EDITOR(cursorForPosition(QPoint(0, EDITOR(height())))); - m_tc.movePosition(Up, KeepAnchor, qMax(count(), 1)); + moveUp(qMax(count(), 1)); moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == 'm') { @@ -805,45 +895,54 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } else if (key == 'o' || key == 'O') { enterInsertMode(); moveToFirstNonBlankOnLine(); + recordBeginGroup(); int numSpaces = leftDist(); - m_tc.movePosition(Up, MoveAnchor, 1); + moveUp(); if (key == 'o') - m_tc.movePosition(Down, MoveAnchor, 1); - m_tc.movePosition(EndOfLine, MoveAnchor); - m_tc.insertText("\n"); - m_tc.movePosition(StartOfLine, MoveAnchor); + moveDown(); + moveToEndOfLine(); + recordInsertText("\n"); + moveToStartOfLine(); if (m_config[ConfigAutoIndent] == ConfigOn) - m_tc.insertText(QString(indentDist(), ' ')); + recordInsertText(QString(indentDist(), ' ')); else - m_tc.insertText(QString(numSpaces, ' ')); + recordInsertText(QString(numSpaces, ' ')); + recordEndGroup(); } else if (key == 'p' || key == 'P') { + recordBeginGroup(); QString text = m_registers[m_register]; - int n = text.count(QChar(ParagraphSeparator)); + int n = lineCount(text); + //qDebug() << "REGISTERS: " << m_registers << "MOVE: " << m_moveType; + //qDebug() << "LINES: " << n << text << m_register; if (n > 0) { - m_tc.movePosition(StartOfLine); + moveToStartOfLine(); if (key == 'p') - m_tc.movePosition(Down); - m_tc.insertText(text); - m_tc.movePosition(Up, MoveAnchor, n); + moveDown(); + recordInsertText(text); + moveUp(n); } else { if (key == 'p') - m_tc.movePosition(Right); - m_tc.insertText(text); - m_tc.movePosition(Left); + moveRight(); + recordInsertText(text); + moveLeft(); } + recordEndGroup(); m_dotCommand = "p"; } else if (key == 'r') { + recordBeginGroup(); m_submode = ReplaceSubMode; m_dotCommand = "r"; } else if (key == 'R') { + recordBeginGroup(); m_mode = InsertMode; m_submode = ReplaceSubMode; m_dotCommand = "R"; } else if (key == control('r')) { redo(); } else if (key == 's') { + recordBeginGroup(); m_submode = ChangeSubMode; - m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist())); + moveRight(qMin(count(), rightDist())); } else if (key == 't' || key == 'T') { m_subsubmode = FtSubSubMode; m_subsubdata = key; @@ -860,53 +959,71 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } else if (key == control('v')) { enterVisualMode(VisualBlockMode); } else if (key == 'w') { - moveToNextWord(false); + // Special case: "cw" and "cW" work the same as "ce" and "cE" if the + // cursor is on a non-blank. + if (m_submode == ChangeSubMode) + moveToWordBoundary(false, true); + else + moveToNextWord(false); + m_moveType = MoveExclusive; finishMovement("w"); } else if (key == 'W') { moveToNextWord(true); finishMovement("W"); } else if (key == 'x') { // = "dl" if (atEol()) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); + recordBeginGroup(); m_submode = DeleteSubMode; - m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist())); + moveRight(qMin(count(), rightDist())); finishMovement("l"); } else if (key == 'X') { if (leftDist() > 0) { - m_tc.movePosition(Left, KeepAnchor, qMin(count(), leftDist())); - m_tc.deleteChar(); + setAnchor(); + moveLeft(qMin(count(), leftDist())); + recordRemoveSelectedText(); } finishMovement(); } else if (key == 'y') { + m_savedYankPosition = m_tc.position(); if (atEol()) - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(); + recordBeginGroup(); + setAnchor(); m_submode = YankSubMode; + } else if (key == 'Y') { + moveToStartOfLine(); + setAnchor(); + moveDown(count()); + m_moveType = MoveLineWise; + finishMovement(); } else if (key == 'z') { + recordBeginGroup(); m_submode = ZSubMode; } else if (key == '~' && !atEol()) { - m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist())); - QString str = m_tc.selectedText(); + recordBeginGroup(); + setAnchor(); + moveRight(qMin(count(), rightDist())); + QString str = recordRemoveSelectedText(); for (int i = str.size(); --i >= 0; ) { QChar c = str.at(i); str[i] = c.isUpper() ? c.toLower() : c.toUpper(); } - m_tc.deleteChar(); - m_tc.insertText(str); + recordInsertText(str); + recordEndGroup(); } else if (key == Key_PageDown || key == control('f')) { - m_tc.movePosition(Down, KeepAnchor, count() * (linesOnScreen() - 2)); + moveDown(count() * (linesOnScreen() - 2)); finishMovement(); } else if (key == Key_PageUp || key == control('b')) { - m_tc.movePosition(Up, KeepAnchor, count() * (linesOnScreen() - 2)); + moveUp(count() * (linesOnScreen() - 2)); finishMovement(); - } else if (key == Key_Backspace || key == control('h')) { - m_tc.deletePreviousChar(); } else if (key == Key_Delete) { m_tc.deleteChar(); } else if (key == Key_Escape) { if (m_visualMode != NoVisualMode) leaveVisualMode(); } else { - qDebug() << "Ignored in command mode: " << key << text; + qDebug() << "IGNORED IN COMMAND MODE: " << key << text; if (text.isEmpty()) handled = false; } @@ -914,7 +1031,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) return handled; } -bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text) +bool FakeVimHandler::Private::handleInsertMode(int key, int, const QString &text) { if (key == Key_Escape) { // start with '1', as one instance was already physically inserted @@ -925,21 +1042,23 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text) data += m_lastInsertion; } recordInsert(m_tc.position() - m_lastInsertion.size(), data); - m_tc.movePosition(Left, MoveAnchor, qMin(1, leftDist())); + recordEndGroup(); + //qDebug() << "UNDO: " << m_undoStack; + moveLeft(qMin(1, leftDist())); enterCommandMode(); } else if (key == Key_Left) { - m_tc.movePosition(Left, MoveAnchor, 1); + moveLeft(count()); m_lastInsertion.clear(); } else if (key == Key_Down) { m_submode = NoSubMode; - m_tc.movePosition(Down, MoveAnchor, 1); + moveDown(count()); m_lastInsertion.clear(); } else if (key == Key_Up) { m_submode = NoSubMode; - m_tc.movePosition(Up, MoveAnchor, 1); + moveUp(count()); m_lastInsertion.clear(); } else if (key == Key_Right) { - m_tc.movePosition(Right, MoveAnchor, 1); + moveRight(count()); m_lastInsertion.clear(); } else if (key == Key_Return) { m_submode = NoSubMode; @@ -953,10 +1072,10 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text) m_tc.deleteChar(); m_lastInsertion.clear(); } else if (key == Key_PageDown || key == control('f')) { - m_tc.movePosition(Down, KeepAnchor, count() * (linesOnScreen() - 2)); + moveDown(count() * (linesOnScreen() - 2)); m_lastInsertion.clear(); } else if (key == Key_PageUp || key == control('b')) { - m_tc.movePosition(Up, KeepAnchor, count() * (linesOnScreen() - 2)); + moveUp(count() * (linesOnScreen() - 2)); m_lastInsertion.clear(); } else if (key == Key_Tab && m_config[ConfigExpandTab] == ConfigOn) { QString str = QString(m_config[ConfigTabStop].toInt(), ' '); @@ -995,7 +1114,8 @@ bool FakeVimHandler::Private::handleInsertMode(int key, const QString &text) return true; } -bool FakeVimHandler::Private::handleMiniBufferModes(int key, const QString &text) +bool FakeVimHandler::Private::handleMiniBufferModes(int key, int unmodified, + const QString &text) { Q_UNUSED(text) @@ -1014,13 +1134,14 @@ bool FakeVimHandler::Private::handleMiniBufferModes(int key, const QString &text if (!m_commandBuffer.isEmpty()) m_commandBuffer.chop(1); updateMiniBuffer(); - } else if (key == Key_Return && m_mode == ExMode) { + } else if (unmodified == Key_Return && m_mode == ExMode) { if (!m_commandBuffer.isEmpty()) { m_commandHistory.takeLast(); m_commandHistory.append(m_commandBuffer); handleExCommand(m_commandBuffer); + leaveVisualMode(); } - } else if (key == Key_Return && isSearchMode()) { + } else if (unmodified == Key_Return && isSearchMode()) { if (!m_commandBuffer.isEmpty()) { m_searchHistory.takeLast(); m_searchHistory.append(m_commandBuffer); @@ -1077,6 +1198,7 @@ int FakeVimHandler::Private::readLineCode(QString &cmd) int mark = m_marks.value(cmd.at(0).unicode()); if (!mark) { showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0))); + cmd = cmd.mid(1); return -1; } cmd = cmd.mid(1); @@ -1096,8 +1218,9 @@ int FakeVimHandler::Private::readLineCode(QString &cmd) int pos = m_marks.value(cmd.at(0).unicode(), -1); //qDebug() << " MARK: " << cmd.at(0) << pos << lineForPosition(pos); if (pos == -1) { - showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0))); - return -1; + showRedMessage(tr("E20: Mark '%1' not set").arg(cmd.at(0))); + cmd = cmd.mid(1); + return -1; } cmd = cmd.mid(1); return lineForPosition(pos); @@ -1119,17 +1242,15 @@ int FakeVimHandler::Private::readLineCode(QString &cmd) return -1; } -QTextCursor FakeVimHandler::Private::selectRange(int beginLine, int endLine) +void FakeVimHandler::Private::selectRange(int beginLine, int endLine) { - QTextCursor tc = m_tc; - tc.setPosition(positionForLine(beginLine), MoveAnchor); + m_tc.setPosition(positionForLine(beginLine), MoveAnchor); if (endLine == linesInDocument()) { - tc.setPosition(positionForLine(endLine), KeepAnchor); - tc.movePosition(EndOfLine, KeepAnchor); + m_tc.setPosition(positionForLine(endLine), KeepAnchor); + m_tc.movePosition(EndOfLine, KeepAnchor); } else { - tc.setPosition(positionForLine(endLine + 1), KeepAnchor); + m_tc.setPosition(positionForLine(endLine + 1), KeepAnchor); } - return tc; } void FakeVimHandler::Private::handleExCommand(const QString &cmd0) @@ -1138,7 +1259,6 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) if (cmd.startsWith("%")) cmd = "1,$" + cmd.mid(1); - m_marks['>'] = m_tc.position(); int beginLine = -1; int endLine = -1; @@ -1153,11 +1273,12 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) endLine = line; } - //qDebug() << "RANGE: " << beginLine << endLine << cmd << cmd0; + //qDebug() << "RANGE: " << beginLine << endLine << cmd << cmd0 << m_marks; static QRegExp reWrite("^w!?( (.*))?$"); static QRegExp reDelete("^d( (.*))?$"); static QRegExp reSet("^set?( (.*))?$"); + static QRegExp reHistory("^his(tory)?( (.*))?$"); if (cmd.isEmpty()) { m_tc.setPosition(positionForLine(beginLine)); @@ -1169,11 +1290,11 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) beginLine = cursorLineInDocument(); if (endLine == -1) endLine = cursorLineInDocument(); - QTextCursor tc = selectRange(beginLine, endLine); + selectRange(beginLine, endLine); QString reg = reDelete.cap(2); + QString text = recordRemoveSelectedText(); if (!reg.isEmpty()) - m_registers[reg.at(0).unicode()] = tc.selection().toPlainText(); - tc.removeSelectedText(); + m_registers[reg.at(0).unicode()] = text; } else if (reWrite.indexIn(cmd) != -1) { // :w enterCommandMode(); bool noArgs = (beginLine == -1); @@ -1181,7 +1302,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) beginLine = 0; if (endLine == -1) endLine = linesInDocument(); - qDebug() << "LINES: " << beginLine << endLine; + //qDebug() << "LINES: " << beginLine << endLine; bool forced = cmd.startsWith("w!"); QString fileName = reWrite.cap(2); if (fileName.isEmpty()) @@ -1191,11 +1312,9 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) if (exists && !forced && !noArgs) { showRedMessage(tr("File '%1' exists (add ! to override)").arg(fileName)); } else if (file.open(QIODevice::ReadWrite)) { - QTextCursor tc = selectRange(beginLine, endLine); - qDebug() << "ANCHOR: " << tc.position() << tc.anchor() - << tc.selection().toPlainText(); - { QTextStream ts(&file); ts << tc.selection().toPlainText(); } - file.close(); + selectRange(beginLine, endLine); + emit q->writeFile(fileName, selectedText()); + // check by reading back file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); showBlackMessage(tr("\"%1\" %2 %3L, %4C written") @@ -1219,10 +1338,10 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) beginLine = cursorLineInDocument(); if (endLine == -1) endLine = cursorLineInDocument(); - QTextCursor tc = selectRange(beginLine, endLine); - QString text = tc.selection().toPlainText(); - tc.removeSelectedText(); + selectRange(beginLine, endLine); QString command = cmd.mid(1).trimmed(); + recordBeginGroup(); + QString text = recordRemoveSelectedText(); QProcess proc; proc.start(cmd.mid(1)); proc.waitForStarted(); @@ -1230,7 +1349,8 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) proc.closeWriteChannel(); proc.waitForFinished(); QString result = QString::fromUtf8(proc.readAllStandardOutput()); - m_tc.insertText(result); + recordInsertText(result); + recordEndGroup(); leaveVisualMode(); m_tc.setPosition(positionForLine(beginLine)); @@ -1242,6 +1362,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) recordOperation(op); enterCommandMode(); + //qDebug() << "FILTER: " << command; showBlackMessage(tr("%1 lines filtered").arg(text.count('\n'))); } else if (cmd == "red" || cmd == "redo") { // :redo redo(); @@ -1253,7 +1374,25 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) QString info; foreach (const QString &key, m_config.keys()) info += key + ": " + m_config.value(key) + "\n"; - emit q->extraInformationChanged(info); + emit q->extraInformationChanged(editor(), info); + } else { + notImplementedYet(); + } + enterCommandMode(); + updateMiniBuffer(); + } else if (reHistory.indexIn(cmd) != -1) { // :history + QString arg = reSet.cap(3); + if (arg.isEmpty()) { + QString info; + info += "# command history\n"; + int i = 0; + foreach (const QString &item, m_commandHistory) { + ++i; + info += QString("%1 %2\n").arg(i, -8).arg(item); + } + emit q->extraInformationChanged(editor(), info); + } else { + notImplementedYet(); } enterCommandMode(); updateMiniBuffer(); @@ -1262,13 +1401,22 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) } } -void FakeVimHandler::Private::search(const QString &needle, bool forward) +void FakeVimHandler::Private::search(const QString &needle0, bool forward) { - //qDebug() << "NEEDLE " << needle << "BACKWARDS" << backwards; + showBlackMessage((forward ? '/' : '?') + needle0); QTextCursor orig = m_tc; QTextDocument::FindFlags flags = QTextDocument::FindCaseSensitively; if (!forward) - flags = QTextDocument::FindBackward; + flags |= QTextDocument::FindBackward; + + // FIXME: Rough mapping of a common case + QString needle = needle0; + if (needle.startsWith("\\<") && needle.endsWith("\\>")) + flags |= QTextDocument::FindWholeWords; + needle.replace("\\<", ""); // start of word + needle.replace("\\>", ""); // end of word + + //qDebug() << "NEEDLE " << needle0 << needle << "FORWARD" << forward << flags; if (forward) m_tc.movePosition(Right, MoveAnchor, 1); @@ -1276,8 +1424,7 @@ void FakeVimHandler::Private::search(const QString &needle, bool forward) EDITOR(setTextCursor(m_tc)); if (EDITOR(find(needle, flags))) { m_tc = EDITOR(textCursor()); - // the qMax seems to be needed for QPlainTextEdit only - m_tc.movePosition(Left, MoveAnchor, qMax(1, needle.size() - 1)); + m_tc.setPosition(m_tc.anchor()); return; } @@ -1285,8 +1432,7 @@ void FakeVimHandler::Private::search(const QString &needle, bool forward) EDITOR(setTextCursor(m_tc)); if (EDITOR(find(needle, flags))) { m_tc = EDITOR(textCursor()); - // the qMax seems to be needed for QPlainTextEdit only - m_tc.movePosition(Left, MoveAnchor, qMax(1, needle.size() - 1)); + m_tc.setPosition(m_tc.anchor()); if (forward) showRedMessage("search hit BOTTOM, continuing at TOP"); else @@ -1391,17 +1537,15 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward) int repeat = count(); QTextDocument *doc = m_tc.document(); int n = forward ? lastPositionInDocument() - 1 : 0; - int lastClass = 0; + int lastClass = -1; while (true) { - m_tc.movePosition(forward ? Right : Left, KeepAnchor, 1); + forward ? moveRight() : moveLeft(); QChar c = doc->characterAt(m_tc.position()); int thisClass = charClass(c, simple); if (thisClass != lastClass && lastClass != 0) --repeat; - if (repeat == -1) { - m_tc.movePosition(forward ? Left : Right, KeepAnchor, 1); + if (repeat == -1) break; - } lastClass = thisClass; if (m_tc.position() == n) break; @@ -1464,7 +1608,7 @@ void FakeVimHandler::Private::moveToNextWord(bool simple) if (repeat == 0) break; lastClass = thisClass; - m_tc.movePosition(Right, KeepAnchor, 1); + moveRight(); if (m_tc.position() == n) break; } @@ -1560,6 +1704,13 @@ QString FakeVimHandler::Private::lastSearchString() const return m_searchHistory.empty() ? QString() : m_searchHistory.back(); } +QString FakeVimHandler::Private::selectedText() const +{ + QTextCursor tc = m_tc; + tc.setPosition(m_anchor, KeepAnchor); + return tc.selection().toPlainText(); +} + int FakeVimHandler::Private::positionForLine(int line) const { return m_tc.block().document()->findBlockByNumber(line - 1).position(); @@ -1576,6 +1727,7 @@ void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode) { m_visualMode = visualMode; m_marks['<'] = m_tc.position(); + m_marks['>'] = m_tc.position(); updateMiniBuffer(); updateSelection(); } @@ -1583,7 +1735,6 @@ void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode) void FakeVimHandler::Private::leaveVisualMode() { m_visualMode = NoVisualMode; - m_marks['>'] = m_tc.position(); updateMiniBuffer(); updateSelection(); } @@ -1653,17 +1804,55 @@ void FakeVimHandler::Private::redo() #endif } -void FakeVimHandler::Private::removeSelectedText(QTextCursor &tc) +void FakeVimHandler::Private::recordBeginGroup() +{ + //qDebug() << "PUSH"; + m_undoGroupStack.push(m_undoStack.size()); + EditOperation op; + op.m_position = m_tc.position(); + recordOperation(op); +} + +void FakeVimHandler::Private::recordEndGroup() { EditOperation op; - op.m_position = qMin(tc.position(), tc.anchor()); - op.m_from = tc.selection().toPlainText(); + op.m_itemCount = m_undoStack.size() - m_undoGroupStack.pop(); + //qDebug() << "POP " << op.m_itemCount; recordOperation(op); - tc.removeSelectedText(); +} + +QString FakeVimHandler::Private::recordRemoveSelectedText() +{ + EditOperation op; + //qDebug() << "1 POS: " << position() << " ANCHOR: " << anchor() << m_tc.anchor(); + m_tc.setPosition(anchor(), KeepAnchor); + op.m_position = qMin(position(), anchor()); + //qDebug() << "2 POS: " << position() << " ANCHOR: " << anchor() << m_tc.anchor(); + op.m_from = m_tc.selection().toPlainText(); + recordOperation(op); + m_tc.deleteChar(); + return op.m_from; +} + +void FakeVimHandler::Private::recordRemoveNextChar() +{ + m_anchor = position(); + moveRight(); + recordRemoveSelectedText(); +} + +void FakeVimHandler::Private::recordInsertText(const QString &data) +{ + EditOperation op; + op.m_position = m_tc.position(); + op.m_to = data; + recordOperation(op); + m_tc.insertText(data); } void FakeVimHandler::Private::recordOperation(const EditOperation &op) { + //qDebug() << "OP: " << op; m_undoStack.push(op); m_redoStack.clear(); } @@ -1813,3 +2002,8 @@ void FakeVimHandler::quit() { d->quit(); } + +void FakeVimHandler::setCurrentFileName(const QString &fileName) +{ + d->m_currentFileName = fileName; +} diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h index 08df6d21b12..bbd58781e7f 100644 --- a/src/plugins/fakevim/fakevimhandler.h +++ b/src/plugins/fakevim/fakevimhandler.h @@ -58,6 +58,7 @@ public slots: // FIXME: good idea? void addWidget(QWidget *widget); void removeWidget(QWidget *widget); + void setCurrentFileName(const QString &fileName); // This executes an "ex" style command taking context // information from \p widget; @@ -68,10 +69,11 @@ public slots: signals: void commandBufferChanged(const QString &msg); void statusDataChanged(const QString &msg); - void extraInformationChanged(const QString &msg); - void quitRequested(QWidget *); + void extraInformationChanged(QWidget *widget, const QString &msg); + void quitRequested(QWidget *widget); void selectionChanged(QWidget *widget, const QList &selection); + void writeFile(const QString &fileName, const QString &contents); private: bool eventFilter(QObject *ob, QEvent *ev); diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 0a06fe7c112..a00e3878e8e 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -39,7 +39,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -112,17 +114,19 @@ private slots: void installHandler(QWidget *widget); void removeHandler(QWidget *widget); void showCommandBuffer(const QString &contents); - void showExtraInformation(const QString &msg); + void showExtraInformation(QWidget *, const QString &msg); void editorOpened(Core::IEditor *); void editorAboutToClose(Core::IEditor *); void changeSelection(QWidget *widget, const QList &selections); + void writeFile(const QString &fileName, const QString &contents); private: FakeVimPlugin *q; FakeVimHandler *m_handler; QAction *m_installHandlerAction; Core::ICore *m_core; + Core::IFile *m_currentFile; }; } // namespace Internal @@ -134,6 +138,7 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin) m_handler = 0; m_installHandlerAction = 0; m_core = 0; + m_currentFile = 0; } FakeVimPluginPrivate::~FakeVimPluginPrivate() @@ -153,7 +158,7 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err m_handler = new FakeVimHandler; - m_core = ExtensionSystem::PluginManager::instance()->getObject(); + m_core = Core::ICore::instance(); QTC_ASSERT(m_core, return false); Core::ActionManager *actionManager = m_core->actionManager(); @@ -172,7 +177,7 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err ActionContainer *advancedMenu = actionManager->actionContainer(Core::Constants::M_EDIT_ADVANCED); - advancedMenu->addAction(cmd); + advancedMenu->addAction(cmd, Core::Constants::G_EDIT_EDITOR); connect(m_installHandlerAction, SIGNAL(triggered()), this, SLOT(installHandler())); @@ -195,8 +200,8 @@ void FakeVimPluginPrivate::installHandler() void FakeVimPluginPrivate::installHandler(QWidget *widget) { - connect(m_handler, SIGNAL(extraInformationChanged(QString)), - this, SLOT(showExtraInformation(QString))); + connect(m_handler, SIGNAL(extraInformationChanged(QWidget *, QString)), + this, SLOT(showExtraInformation(QWidget *, QString))); connect(m_handler, SIGNAL(commandBufferChanged(QString)), this, SLOT(showCommandBuffer(QString))); connect(m_handler, SIGNAL(quitRequested(QWidget *)), @@ -206,6 +211,12 @@ void FakeVimPluginPrivate::installHandler(QWidget *widget) this, SLOT(changeSelection(QWidget*,QList))); m_handler->addWidget(widget); + TextEditor::BaseTextEditor* editor = + qobject_cast(widget); + if (editor) { + m_currentFile = editor->file(); + m_handler->setCurrentFileName(editor->file()->fileName()); + } BaseTextEditor *bt = qobject_cast(widget); if (bt) { @@ -225,12 +236,29 @@ void FakeVimPluginPrivate::installHandler(QWidget *widget) } } +void FakeVimPluginPrivate::writeFile(const QString &fileName, + const QString &contents) +{ + if (m_currentFile && fileName == m_currentFile->fileName()) { + // Handle that as a special case for nicer interaction with core + m_core->fileManager()->blockFileChange(m_currentFile); + m_currentFile->save(fileName); + m_core->fileManager()->unblockFileChange(m_currentFile); + } else { + QFile file(fileName); + file.open(QIODevice::ReadWrite); + { QTextStream ts(&file); ts << contents; } + file.close(); + } +} + void FakeVimPluginPrivate::removeHandler(QWidget *widget) { Q_UNUSED(widget); m_handler->removeWidget(widget); Core::EditorManager::instance()->hideEditorInfoBar( QLatin1String(Constants::MINI_BUFFER)); + m_currentFile = 0; } void FakeVimPluginPrivate::editorOpened(Core::IEditor *editor) @@ -253,9 +281,9 @@ void FakeVimPluginPrivate::showCommandBuffer(const QString &contents) tr("Quit FakeVim"), m_handler, SLOT(quit())); } -void FakeVimPluginPrivate::showExtraInformation(const QString &text) +void FakeVimPluginPrivate::showExtraInformation(QWidget *widget, const QString &text) { - QMessageBox::information(0, tr("FakeVim Information"), text); + QMessageBox::information(widget, tr("FakeVim Information"), text); } void FakeVimPluginPrivate::changeSelection(QWidget *widget, diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp index b3c417debd3..fb6c9c53b71 100644 --- a/src/plugins/find/findplugin.cpp +++ b/src/plugins/find/findplugin.cpp @@ -43,9 +43,11 @@ #include #include +#include + #include -#include +#include #include Q_DECLARE_METATYPE(Find::IFindFilter*) @@ -58,8 +60,7 @@ using namespace Find; using namespace Find::Internal; FindPlugin::FindPlugin() - : m_core(0), - m_currentDocumentFind(0), + : m_currentDocumentFind(0), m_findToolBar(0), m_findDialog(0), m_findCompletionModel(new QStringListModel(this)), @@ -76,14 +77,14 @@ FindPlugin::~FindPlugin() bool FindPlugin::initialize(const QStringList &, QString *) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); setupMenu(); - m_currentDocumentFind = new CurrentDocumentFind(m_core); + m_currentDocumentFind = new CurrentDocumentFind(core); m_findToolBar = new FindToolBar(this, m_currentDocumentFind); m_findDialog = new FindToolWindow(this); - SearchResultWindow *searchResultWindow = new SearchResultWindow(m_core); + SearchResultWindow *searchResultWindow = new SearchResultWindow(core); addAutoReleasedObject(searchResultWindow); return true; } @@ -123,10 +124,10 @@ void FindPlugin::openFindFilter() m_findDialog->open(filter); } - void FindPlugin::setupMenu() { - Core::ActionManager *am = m_core->actionManager(); + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); Core::ActionContainer *medit = am->actionContainer(Core::Constants::M_EDIT); Core::ActionContainer *mfind = am->createMenu(Constants::M_FIND); medit->addMenu(mfind, Core::Constants::G_EDIT_FIND); @@ -149,7 +150,8 @@ void FindPlugin::setupMenu() void FindPlugin::setupFilterMenuItems() { - Core::ActionManager *am = m_core->actionManager(); + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); QList findInterfaces = ExtensionSystem::PluginManager::instance()->getObjects(); Core::Command *cmd; @@ -171,11 +173,6 @@ void FindPlugin::setupFilterMenuItems() m_findDialog->setFindFilters(findInterfaces); } -Core::ICore *FindPlugin::core() -{ - return m_core; -} - QTextDocument::FindFlags FindPlugin::findFlags() const { return m_findFlags; @@ -216,7 +213,7 @@ bool FindPlugin::hasFindFlag(QTextDocument::FindFlag flag) void FindPlugin::writeSettings() { - QSettings *settings = ExtensionSystem::PluginManager::instance()->getObject()->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("Find"); settings->setValue("Backward", QVariant((m_findFlags & QTextDocument::FindBackward) != 0)); settings->setValue("CaseSensitively", QVariant((m_findFlags & QTextDocument::FindCaseSensitively) != 0)); @@ -229,7 +226,7 @@ void FindPlugin::writeSettings() void FindPlugin::readSettings() { - QSettings *settings = ExtensionSystem::PluginManager::instance()->getObject()->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("Find"); bool block = blockSignals(true); setBackward(settings->value("Backward", false).toBool()); diff --git a/src/plugins/find/findplugin.h b/src/plugins/find/findplugin.h index caad6daa0cc..9b2ac1f4aa6 100644 --- a/src/plugins/find/findplugin.h +++ b/src/plugins/find/findplugin.h @@ -64,7 +64,6 @@ public: void extensionsInitialized(); void shutdown(); - Core::ICore *core(); QTextDocument::FindFlags findFlags() const; void updateFindCompletion(const QString &text); void updateReplaceCompletion(const QString &text); @@ -93,7 +92,6 @@ private: void readSettings(); //variables - Core::ICore *m_core; QHash m_filterActions; CurrentDocumentFind *m_currentDocumentFind; diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp index 323fdbac58c..5af25e496d4 100644 --- a/src/plugins/find/findtoolbar.cpp +++ b/src/plugins/find/findtoolbar.cpp @@ -41,16 +41,19 @@ #include #include +#include + +#include #include -#include -#include -#include -#include -#include + #include -#include #include -#include +#include +#include +#include +#include +#include +#include Q_DECLARE_METATYPE(QStringList) Q_DECLARE_METATYPE(Find::IFindFilter*) @@ -138,7 +141,7 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen QList globalcontext; globalcontext << Core::Constants::C_GLOBAL_ID; - Core::ActionManager *am = ExtensionSystem::PluginManager::instance()->getObject()->actionManager(); + Core::ActionManager *am = Core::ICore::instance()->actionManager(); Core::ActionContainer *mfind = am->actionContainer(Constants::M_FIND); Core::Command *cmd; diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp index f45c99b2aa3..f9f23d0668f 100644 --- a/src/plugins/find/findtoolwindow.cpp +++ b/src/plugins/find/findtoolwindow.cpp @@ -42,7 +42,7 @@ using namespace Find; using namespace Find::Internal; FindToolWindow::FindToolWindow(FindPlugin *plugin) - : QDialog(plugin->core()->mainWindow()), + : QDialog(Core::ICore::instance()->mainWindow()), m_plugin(plugin), m_findCompleter(new QCompleter(this)) { @@ -124,7 +124,7 @@ void FindToolWindow::search() void FindToolWindow::writeSettings() { - QSettings *settings = m_plugin->core()->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("Find"); foreach (IFindFilter *filter, m_filters) filter->writeSettings(settings); @@ -133,7 +133,7 @@ void FindToolWindow::writeSettings() void FindToolWindow::readSettings() { - QSettings *settings = m_plugin->core()->settings(); + QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("Find"); foreach (IFindFilter *filter, m_filters) filter->readSettings(settings); diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 44ee65bce0f..e20ee11f965 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -97,10 +97,10 @@ static QString formatCommand(const QString &binary, const QStringList &args) } // ---------------- GitClient -GitClient::GitClient(GitPlugin* plugin, Core::ICore *core) : - m_msgWait(tr("Waiting for data...")), +GitClient::GitClient(GitPlugin* plugin) + : m_msgWait(tr("Waiting for data...")), m_plugin(plugin), - m_core(core) + m_core(Core::ICore::instance()) { if (QSettings *s = m_core->settings()) m_settings.fromSettings(s); @@ -178,7 +178,7 @@ VCSBase::VCSBaseEditor QTC_ASSERT(rc, return 0); rc->setSource(source); if (setSourceCodec) - rc->setCodec(VCSBase::VCSBaseEditor::getCodec(m_core, source)); + rc->setCodec(VCSBase::VCSBaseEditor::getCodec(source)); } return rc; } diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index aa4ad97015a..c920ffc1b32 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -68,7 +68,7 @@ class GitClient : public QObject Q_OBJECT public: - explicit GitClient(GitPlugin *plugin, Core::ICore *core); + explicit GitClient(GitPlugin *plugin); ~GitClient(); bool managesDirectory(const QString &) const { return false; } diff --git a/src/plugins/git/gitcommand.cpp b/src/plugins/git/gitcommand.cpp index 703e42a8668..fa62401b011 100644 --- a/src/plugins/git/gitcommand.cpp +++ b/src/plugins/git/gitcommand.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -83,8 +84,7 @@ void GitCommand::execute() QFuture task = QtConcurrent::run(this, &GitCommand::run); const QString taskName = QLatin1String("Git ") + m_jobs.front().arguments.at(0); - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - core->progressManager()->addTask(task, taskName, + Core::ICore::instance()->progressManager()->addTask(task, taskName, QLatin1String("Git.action"), Core::ProgressManager::CloseOnSuccess); } diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index e71ccfea45e..f00f6d711ef 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include @@ -56,11 +57,11 @@ #include #include -#include #include #include #include #include +#include #include #include @@ -231,8 +232,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *error_message) Q_UNUSED(arguments); Q_UNUSED(error_message); - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - m_gitClient = new GitClient(this, m_core); + m_core = Core::ICore::instance(); + m_gitClient = new GitClient(this); // Create the globalcontext list to register actions accordingly QList globalcontext; globalcontext << m_core->uniqueIDManager()-> @@ -249,7 +250,7 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *error_message) static const char *describeSlot = SLOT(show(QString,QString)); const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters); for (int i = 0; i < editorCount; i++) { - m_editorFactories.push_back(new GitEditorFactory(editorParameters + i, m_core, m_gitClient, describeSlot)); + m_editorFactories.push_back(new GitEditorFactory(editorParameters + i, m_gitClient, describeSlot)); addObject(m_editorFactories.back()); } @@ -621,7 +622,7 @@ void GitPlugin::startCommit() Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const CommitData &cd) { - Core::IEditor *editor = m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_KIND)); + Core::IEditor *editor = m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_KIND)); if (Git::Constants::debug) qDebug() << Q_FUNC_INFO << fileName << editor; m_core->editorManager()->ensureEditorManagerVisible(); diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index 22fcea7c011..19c61db291a 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -39,8 +39,8 @@ #include #include -#include #include +#include #include #include @@ -53,20 +53,20 @@ class QTemporaryFile; QT_END_NAMESPACE namespace Core { - class IEditorFactory; - class ICore; - class IVersionControl; -} +class IEditorFactory; +class ICore; +class IVersionControl; +} // namespace Core namespace Git { namespace Internal { - class GitPlugin; - class GitClient; - class ChangeSelectionDialog; - class GitSubmitEditor; - struct CommitData; - struct GitSettings; +class GitPlugin; +class GitClient; +class ChangeSelectionDialog; +class GitSubmitEditor; +struct CommitData; +struct GitSettings; // Just a proxy for GitPlugin class CoreListener : public Core::ICoreListener @@ -85,83 +85,83 @@ class GitPlugin : public ExtensionSystem::IPlugin Q_OBJECT public: - GitPlugin(); - ~GitPlugin(); + GitPlugin(); + ~GitPlugin(); + static GitPlugin *instance(); - bool initialize(const QStringList &arguments - , QString *error_message); - void extensionsInitialized(); + bool initialize(const QStringList &arguments, QString *error_message); + void extensionsInitialized(); - QString getWorkingDirectory(); + QString getWorkingDirectory(); - GitOutputWindow *outputWindow() const; + GitOutputWindow *outputWindow() const; - GitSettings settings() const; + GitSettings settings() const; void setSettings(const GitSettings &s); public slots: - void updateActions(); - bool editorAboutToClose(Core::IEditor *editor); + void updateActions(); + bool editorAboutToClose(Core::IEditor *editor); private slots: - void diffCurrentFile(); - void diffCurrentProject(); - void submitEditorDiff(const QStringList &unstaged, const QStringList &staged); - void submitCurrentLog(); - void statusFile(); - void statusProject(); - void logFile(); - void blameFile(); - void logProject(); - void undoFileChanges(); - void undoProjectChanges(); - void stageFile(); - void unstageFile(); - void revertFile(); + void diffCurrentFile(); + void diffCurrentProject(); + void submitEditorDiff(const QStringList &unstaged, const QStringList &staged); + void submitCurrentLog(); + void statusFile(); + void statusProject(); + void logFile(); + void blameFile(); + void logProject(); + void undoFileChanges(); + void undoProjectChanges(); + void stageFile(); + void unstageFile(); + void revertFile(); - void showCommit(); - void startCommit(); - void stash(); - void stashPop(); - void branchList(); - void stashList(); - void pull(); - void push(); + void showCommit(); + void startCommit(); + void stash(); + void stashPop(); + void branchList(); + void stashList(); + void pull(); + void push(); private: - QFileInfo currentFile() const; - Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd); - void cleanChangeTmpFile(); + QFileInfo currentFile() const; + Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd); + void cleanChangeTmpFile(); - static GitPlugin *m_instance; - Core::ICore *m_core; - QAction *m_diffAction; - QAction *m_diffProjectAction; - QAction *m_statusAction; - QAction *m_statusProjectAction; - QAction *m_logAction; - QAction *m_blameAction; - QAction *m_logProjectAction; - QAction *m_undoFileAction; - QAction *m_undoProjectAction; - QAction *m_showAction; - QAction *m_stageAction; - QAction *m_unstageAction; - QAction *m_revertAction; - QAction *m_commitAction; - QAction *m_pullAction; - QAction *m_pushAction; + static GitPlugin *m_instance; + Core::ICore *m_core; + QAction *m_diffAction; + QAction *m_diffProjectAction; + QAction *m_statusAction; + QAction *m_statusProjectAction; + QAction *m_logAction; + QAction *m_blameAction; + QAction *m_logProjectAction; + QAction *m_undoFileAction; + QAction *m_undoProjectAction; + QAction *m_showAction; + QAction *m_stageAction; + QAction *m_unstageAction; + QAction *m_revertAction; + QAction *m_commitAction; + QAction *m_pullAction; + QAction *m_pushAction; - QAction *m_submitCurrentAction; - QAction *m_diffSelectedFilesAction; - QAction *m_undoAction; - QAction *m_redoAction; - QAction *m_stashAction; - QAction *m_stashPopAction; - QAction *m_stashListAction; - QAction *m_branchListAction; + QAction *m_submitCurrentAction; + QAction *m_diffSelectedFilesAction; + QAction *m_undoAction; + QAction *m_redoAction; + QAction *m_stashAction; + QAction *m_stashPopAction; + QAction *m_stashListAction; + QAction *m_branchListAction; ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer; GitClient *m_gitClient; diff --git a/src/plugins/helloworld/helloworldplugin.cpp b/src/plugins/helloworld/helloworldplugin.cpp index 6dd0bc9c63f..522984a9814 100644 --- a/src/plugins/helloworld/helloworldplugin.cpp +++ b/src/plugins/helloworld/helloworldplugin.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include @@ -78,7 +77,7 @@ bool HelloWorldPlugin::initialize(const QStringList &arguments, QString *error_m Q_UNUSED(error_message) // Get the primary access point to the workbench. - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); // Create a unique context id for our own view, that will be used for the // menu entry later. diff --git a/src/plugins/helloworld/helloworldplugin.h b/src/plugins/helloworld/helloworldplugin.h index 8aa2a9aa127..36c60165a32 100644 --- a/src/plugins/helloworld/helloworldplugin.h +++ b/src/plugins/helloworld/helloworldplugin.h @@ -36,8 +36,6 @@ #include -#include - namespace HelloWorld { namespace Internal { diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 74900b6acee..a22cc1f5105 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -123,9 +123,11 @@ HelpPlugin::~HelpPlugin() { } -bool HelpPlugin::initialize(const QStringList & /*arguments*/, QString *) +bool HelpPlugin::initialize(const QStringList &arguments, QString *error) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); + Q_UNUSED(arguments); + Q_UNUSED(error); + m_core = Core::ICore::instance(); QList globalcontext; globalcontext << Core::Constants::C_GLOBAL_ID; QList modecontext; diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index 3120f341ee8..547ea00f92b 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -144,7 +145,6 @@ bool CoreListener::editorAboutToClose(Core::IEditor *editor) // PerforcePlugin //// -Core::ICore *PerforcePlugin::m_coreInstance = NULL; PerforcePlugin *PerforcePlugin::m_perforcePluginInstance = NULL; PerforcePlugin::PerforcePlugin() : @@ -182,17 +182,20 @@ static const VCSBase::VCSBaseSubmitEditorParameters submitParameters = { Perforce::Constants::C_PERFORCESUBMITEDITOR }; -bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) +bool PerforcePlugin::initialize(const QStringList &arguments, QString *errorMessage) { + Q_UNUSED(arguments); + Q_UNUSED(errorMessage); + typedef VCSBase::VCSEditorFactory PerforceEditorFactory; typedef VCSBase::VCSSubmitEditorFactory PerforceSubmitEditorFactory; - m_coreInstance = ExtensionSystem::PluginManager::instance()->getObject(); - if (!m_coreInstance->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.perforce/Perforce.mimetypes.xml"), errorMessage)) + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.perforce/Perforce.mimetypes.xml"), errorMessage)) return false; m_perforcePluginInstance = this; - if (QSettings *settings = m_coreInstance->settings()) + if (QSettings *settings = core->settings()) m_settings.fromSettings(settings); m_perforceOutputWindow = new PerforceOutputWindow(this); @@ -208,24 +211,19 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro static const char *describeSlot = SLOT(describe(QString,QString)); const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters); for (int i = 0; i < editorCount; i++) { - m_editorFactories.push_back(new PerforceEditorFactory(editorParameters + i, m_coreInstance, this, describeSlot)); + m_editorFactories.push_back(new PerforceEditorFactory(editorParameters + i, this, describeSlot)); addObject(m_editorFactories.back()); } m_versionControl = new PerforceVersionControl(this); addObject(m_versionControl); -#ifdef USE_P4_API - m_workbenchClientUser = new WorkbenchClientUser(m_perforceOutputWindow, this); - m_enableP4APIActions = true; -#endif - m_coreListener = new CoreListener(this); addObject(m_coreListener); //register actions - Core::ActionManager *am = m_coreInstance->actionManager(); + Core::ActionManager *am = Core::ICore::instance()->actionManager(); Core::ActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS); @@ -244,7 +242,7 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro QList perforcesubmitcontext; perforcesubmitcontext << - m_coreInstance->uniqueIDManager()->uniqueIdentifier(Constants::C_PERFORCESUBMITEDITOR); + Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(Constants::C_PERFORCESUBMITEDITOR); Core::Command *command; QAction *tmpaction; @@ -382,10 +380,10 @@ bool PerforcePlugin::initialize(const QStringList & /*arguments*/, QString *erro m_redoAction = new QAction(tr("&Redo"), this); command = am->registerAction(m_redoAction, Core::Constants::REDO, perforcesubmitcontext); - connect(m_coreInstance, SIGNAL(contextChanged(Core::IContext *)), + connect(core, SIGNAL(contextChanged(Core::IContext *)), this, SLOT(updateActions())); - connect(m_coreInstance->fileManager(), SIGNAL(currentFileChanged(const QString &)), + connect(core->fileManager(), SIGNAL(currentFileChanged(const QString &)), this, SLOT(updateActions())); return true; @@ -419,10 +417,8 @@ void PerforcePlugin::deleteCurrentFile() void PerforcePlugin::revertCurrentFile() { - QTC_ASSERT(m_coreInstance, return); - const QString fileName = currentFileName(); - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName); QStringList args; args << QLatin1String("diff") << QLatin1String("-sa"); PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec); @@ -438,7 +434,7 @@ void PerforcePlugin::revertCurrentFile() return; } - Core::FileManager *fm = m_coreInstance->fileManager(); + Core::FileManager *fm = Core::ICore::instance()->fileManager(); QList files = fm->managedFiles(fileName); foreach (Core::IFile *file, files) { fm->blockFileChange(file); @@ -471,7 +467,7 @@ void PerforcePlugin::diffAllOpened() void PerforcePlugin::printOpenedFileList() { - Core::IEditor *e = m_coreInstance->editorManager()->currentEditor(); + Core::IEditor *e = Core::ICore::instance()->editorManager()->currentEditor(); if (e) e->widget()->setFocus(); PerforceResponse result = runP4Cmd(QStringList() << QLatin1String("opened"), QStringList(), CommandToWindow|StdOutToWindow|StdErrToWindow|ErrorToWindow); @@ -487,8 +483,6 @@ void PerforcePlugin::resolve() void PerforcePlugin::submit() { - QTC_ASSERT(m_coreInstance, return); - if (!checkP4Command()) { showOutput(tr("No p4 executable specified!"), true); return; @@ -549,8 +543,8 @@ void PerforcePlugin::submit() Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames) { Core::IEditor *editor = - m_coreInstance->editorManager()->openEditor(fileName, Constants::PERFORCESUBMITEDITOR_KIND); - m_coreInstance->editorManager()->ensureEditorManagerVisible(); + Core::ICore::instance()->editorManager()->openEditor(fileName, Constants::PERFORCESUBMITEDITOR_KIND); + Core::ICore::instance()->editorManager()->ensureEditorManagerVisible(); PerforceSubmitEditor *submitEditor = dynamic_cast(editor); QTC_ASSERT(submitEditor, return 0); submitEditor->restrictToProjectFiles(depotFileNames); @@ -562,7 +556,7 @@ Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, void PerforcePlugin::printPendingChanges() { qApp->setOverrideCursor(Qt::WaitCursor); - PendingChangesDialog dia(pendingChangesData(), m_coreInstance->mainWindow()); + PendingChangesDialog dia(pendingChangesData(), Core::ICore::instance()->mainWindow()); qApp->restoreOverrideCursor(); if (dia.exec() == QDialog::Accepted) { const int i = dia.changeNumber(); @@ -595,14 +589,15 @@ void PerforcePlugin::annotate() void PerforcePlugin::annotate(const QString &fileName) { - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName); QStringList args; args << QLatin1String("annotate") << QLatin1String("-cqi") << fileName; const PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec); if (!result.error) { const QFileInfo fi(fileName); - showOutputInEditor(tr("p4 annotate %1").arg(fi.fileName()), result.stdOut, VCSBase::AnnotateOutput, codec); + showOutputInEditor(tr("p4 annotate %1").arg(fi.fileName()), + result.stdOut, VCSBase::AnnotateOutput, codec); } } @@ -622,14 +617,15 @@ void PerforcePlugin::filelog() void PerforcePlugin::filelog(const QString &fileName) { - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, fileName); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(fileName); QStringList args; args << QLatin1String("filelog") << QLatin1String("-li") << fileName; const PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec); if (!result.error) { const QFileInfo fi(fileName); - showOutputInEditor(tr("p4 filelog %1").arg(fi.fileName()), result.stdOut, VCSBase::LogOutput, codec); + showOutputInEditor(tr("p4 filelog %1").arg(fi.fileName()), + result.stdOut, VCSBase::LogOutput, codec); } } @@ -751,7 +747,6 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QStringList &args, qDebug() << "PerforcePlugin::runP4Cmd" << args << extraArgs << debugCodec(outputCodec); PerforceResponse response; response.error = true; - QTC_ASSERT(m_coreInstance, return response); if (!checkP4Command()) { response.message = tr("No p4 executable specified!"); m_perforceOutputWindow->append(response.message, true); @@ -846,7 +841,7 @@ Core::IEditor * PerforcePlugin::showOutputInEditor(const QString& title, const Q if (Perforce::Constants::debug) qDebug() << "PerforcePlugin::showOutputInEditor" << title << kind << "Size= " << output.size() << " Type=" << editorType << debugCodec(codec); QString s = title; - Core::IEditor *ediface = m_coreInstance->editorManager()-> + Core::IEditor *ediface = Core::ICore::instance()->editorManager()-> newFile(kind, &s, output.toLocal8Bit()); PerforceEditor *e = qobject_cast(ediface->widget()); if (!e) @@ -881,7 +876,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname) Core::IEditor *editor = 0; bool displayInEditor = true; Core::IEditor *existingEditor = 0; - QTextCodec *codec = files.empty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, files.front()); + QTextCodec *codec = files.empty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(files.front()); if (Perforce::Constants::debug) qDebug() << Q_FUNC_INFO << files << debugCodec(codec); @@ -894,7 +889,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname) diffname = fi.fileName(); } - foreach (Core::IEditor *ed, m_coreInstance->editorManager()->openedEditors()) { + foreach (Core::IEditor *ed, Core::ICore::instance()->editorManager()->openedEditors()) { if (ed->file()->property("originalFileName").toString() == fileName) { existingEditor = ed; displayInEditor = false; @@ -917,7 +912,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname) } else if (!displayInEditor && existingEditor) { if (existingEditor) { existingEditor->createNew(result.stdOut); - m_coreInstance->editorManager()->setCurrentEditor(existingEditor); + Core::ICore::instance()->editorManager()->setCurrentEditor(existingEditor); } } } @@ -925,7 +920,7 @@ void PerforcePlugin::p4Diff(const QStringList &files, QString diffname) void PerforcePlugin::describe(const QString & source, const QString &n) { - QTextCodec *codec = source.isEmpty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source); + QTextCodec *codec = source.isEmpty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(source); QStringList args; args << QLatin1String("describe") << QLatin1String("-du") << n; const PerforceResponse result = runP4Cmd(args, QStringList(), CommandToWindow|StdErrToWindow|ErrorToWindow, codec); @@ -935,29 +930,32 @@ void PerforcePlugin::describe(const QString & source, const QString &n) void PerforcePlugin::submitCurrentLog() { - m_coreInstance->editorManager()->closeEditors(QList() - << m_coreInstance->editorManager()->currentEditor()); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + em->closeEditors(QList() << em->currentEditor()); } bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor) { if (!m_changeTmpFile || !editor) return true; + Core::ICore *core = Core::ICore::instance(); Core::IFile *fileIFace = editor->file(); if (!fileIFace) return true; QFileInfo editorFile(fileIFace->fileName()); QFileInfo changeFile(m_changeTmpFile->fileName()); if (editorFile.absoluteFilePath() == changeFile.absoluteFilePath()) { - const QMessageBox::StandardButton answer = QMessageBox::question(m_coreInstance->mainWindow(), tr("Closing p4 Editor"), tr("Do you want to submit this change list?"), - QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel, QMessageBox::Yes); - if (answer == QMessageBox::Cancel) { + const QMessageBox::StandardButton answer = + QMessageBox::question(core->mainWindow(), + tr("Closing p4 Editor"), + tr("Do you want to submit this change list?"), + QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel, QMessageBox::Yes); + if (answer == QMessageBox::Cancel) return false; - } - m_coreInstance->fileManager()->blockFileChange(fileIFace); + core->fileManager()->blockFileChange(fileIFace); fileIFace->save(); - m_coreInstance->fileManager()->unblockFileChange(fileIFace); + core->fileManager()->unblockFileChange(fileIFace); if (answer == QMessageBox::Yes) { QByteArray change = m_changeTmpFile->readAll(); m_changeTmpFile->close(); @@ -1006,15 +1004,14 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor) void PerforcePlugin::openFiles(const QStringList &files) { - foreach (QString s, files) { - m_coreInstance->editorManager()->openEditor(clientFilePath(s)); - } - m_coreInstance->editorManager()->ensureEditorManagerVisible(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + foreach (QString s, files) + em->openEditor(clientFilePath(s)); + em->ensureEditorManagerVisible(); } QString PerforcePlugin::clientFilePath(const QString &serverFilePath) { - QTC_ASSERT(m_coreInstance, return QString()); if (!checkP4Command()) return QString(); @@ -1040,7 +1037,7 @@ QString PerforcePlugin::clientFilePath(const QString &serverFilePath) QString PerforcePlugin::currentFileName() { - QString fileName = m_coreInstance->fileManager()->currentFile(); + QString fileName = Core::ICore::instance()->fileManager()->currentFile(); // TODO: Use FileManager::fixPath const QFileInfo fileInfo(fileName); @@ -1068,67 +1065,9 @@ bool PerforcePlugin::checkP4Command() const return true; } -#ifdef USE_P4_API -void PerforcePlugin::runP4APICmd(const QString &cmd, const QStringList &args) -{ - m_enableP4APIActions = false; - updateActions(); - - ClientApi client; - if (!m_settings.defaultEnv) { - client.SetClient(m_settings.p4Client.toLatin1().constData()); - client.SetPort(m_settings.p4Port.toLatin1().constData()); - client.SetUser(m_settings.p4User.toLatin1().constData()); - } - - Error err; - m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connecting to p4 server...")); - client.SetProtocol("api", "56"); - client.Init(&err); - if (err.Test()) { - StrBuf msg; - err.Fmt(&msg); - QMessageBox::critical(m_coreInstance->mainWindow(), tr("Perforce Plugin"), tr("Failed to connect to p4 server %1!").arg(msg.Text())); - client.Final(&err); - m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connection to p4 server failed!"), 3000); - return; - } - m_coreInstance->messageManager()->displayStatusBarMessage(tr("Connection to p4 server established."), 3000); - - // ???? - //client.SetCwd("c:\\depot\\research\\qworkbench\\src"); - - int argc = args.count(); - char **argv = (char**)malloc(argc*sizeof(char*)); - int i = 0; - foreach (QString s, args) - argv[i++] = qstrdup(s.toLatin1().constData()); - - client.SetArgv( argc, argv ); - try { - client.Run(cmd.toLatin1().constData(), m_workbenchClientUser); - } catch (...) { - QMessageBox::critical(m_coreInstance->mainWindow(), tr("Perforce Plugin"), tr("Failed to run command %1!").arg(cmd)); - } - client.Final(&err); - i = 0; - while (ieditorManager()->currentEditor(); - if (edt && edt->widget()) - edt->widget()->setFocus(); -} -#endif - QString PerforcePlugin::pendingChangesData() { QString data; - Q_ASSERT(m_coreInstance); if (!checkP4Command()) return data; @@ -1168,22 +1107,18 @@ PerforcePlugin::~PerforcePlugin() m_settingsPage = 0; } -#ifdef USE_P4_API - if (m_workbenchClientUser) { - delete m_workbenchClientUser; - m_workbenchClientUser = 0; - } -#endif if (m_perforceOutputWindow) { removeObject(m_perforceOutputWindow); delete m_perforceOutputWindow; m_perforceOutputWindow = 0; } + if (m_submitEditorFactory) { removeObject(m_submitEditorFactory); delete m_submitEditorFactory; m_submitEditorFactory = 0; } + if (m_versionControl) { removeObject(m_versionControl); delete m_versionControl; @@ -1213,7 +1148,7 @@ void PerforcePlugin::setSettings(const PerforceSettings &s) { if (s != m_settings) { m_settings = s; - if (QSettings *settings = m_coreInstance->settings()) + if (QSettings *settings = Core::ICore::instance()->settings()) m_settings.toSettings(settings); } } @@ -1251,12 +1186,6 @@ QString PerforcePlugin::fileNameFromPerforceName(const QString& perforceName, return rc; } -Core::ICore *PerforcePlugin::coreInstance() -{ - QTC_ASSERT(m_coreInstance, return 0); - return m_coreInstance; -} - PerforcePlugin *PerforcePlugin::perforcePluginInstance() { QTC_ASSERT(m_perforcePluginInstance, return 0); diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h index a5e52ba6b03..e5985a28ab5 100644 --- a/src/plugins/perforce/perforceplugin.h +++ b/src/plugins/perforce/perforceplugin.h @@ -39,14 +39,8 @@ #include #include #include -#include #include - -#ifdef USE_P4_API -#include "workbenchclientuser.h" -#else - -#endif +#include #include #include @@ -117,7 +111,6 @@ public: Core::IEditor *openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames); - static Core::ICore *coreInstance(); static PerforcePlugin *perforcePluginInstance(); PerforceSettings settings() const; @@ -230,7 +223,6 @@ private: static const char * const SEPARATOR2; static const char * const SEPARATOR3; - static Core::ICore *m_coreInstance; static PerforcePlugin *m_perforcePluginInstance; QString pendingChangesData(); diff --git a/src/plugins/projectexplorer/ProjectExplorerInterfaces b/src/plugins/projectexplorer/ProjectExplorerInterfaces deleted file mode 100644 index b6eb45c7ac5..00000000000 --- a/src/plugins/projectexplorer/ProjectExplorerInterfaces +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Qt Software Information (qt-info@nokia.com) -** -** -** Non-Open Source Usage -** -** Licensees may use this file in accordance with the Qt Beta Version -** License Agreement, Agreement version 2.2 provided with the Software or, -** alternatively, in accordance with the terms contained in a written -** agreement between you and Nokia. -** -** GNU General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging -** of this file. Please review the following information to ensure GNU -** General Public Licensing requirements will be met: -** -** http://www.fsf.org/licensing/licenses/info/GPLv2.html and -** http://www.gnu.org/copyleft/gpl.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt GPL Exception -** version 1.3, included in the file GPL_EXCEPTION.txt in this package. -** -***************************************************************************/ - -#include "projectexplorer/buildparserinterface.h" -#include "projectexplorer/projectexplorerconstants.h" -#include "projectexplorer/project.h" -#include "projectexplorer/buildstep.h" -#include "projectexplorer/buildconfiguration.h" -#include "projectexplorer/buildmanager.h" -#include "projectexplorer/projectexplorer.h" -#include "projectexplorer/persistentsettings.h" -#include "projectexplorer/environment.h" -#include "projectexplorer/environmenteditmodel.h" -#include "projectexplorer/abstractprocessstep.h" diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp index 07e34399b0b..cb1457f8366 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.cpp +++ b/src/plugins/projectexplorer/allprojectsfilter.cpp @@ -43,8 +43,7 @@ using namespace QuickOpen; using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe, ICore *core) - : BaseFileFilter(core) +AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe) { m_projectExplorer = pe; connect(m_projectExplorer, SIGNAL(fileListChanged()), diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h index 8de2de425e6..f94d51ea1bb 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.h +++ b/src/plugins/projectexplorer/allprojectsfilter.h @@ -36,13 +36,10 @@ #include -#include -#include -#include #include +#include #include - namespace ProjectExplorer { class ProjectExplorerPlugin; @@ -54,7 +51,7 @@ class AllProjectsFilter : public QuickOpen::BaseFileFilter Q_OBJECT public: - AllProjectsFilter(ProjectExplorerPlugin *pe, Core::ICore *core); + explicit AllProjectsFilter(ProjectExplorerPlugin *pe); QString trName() const { return tr("Files in any project"); } QString name() const { return "Files in any project"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; } diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp index 26998982614..84af045f050 100644 --- a/src/plugins/projectexplorer/allprojectsfind.cpp +++ b/src/plugins/projectexplorer/allprojectsfind.cpp @@ -47,8 +47,8 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; using namespace TextEditor; -AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, Core::ICore *core, SearchResultWindow *resultWindow) - : BaseFileFind(core, resultWindow), +AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, SearchResultWindow *resultWindow) + : BaseFileFind(resultWindow), m_plugin(plugin), m_configWidget(0) { diff --git a/src/plugins/projectexplorer/allprojectsfind.h b/src/plugins/projectexplorer/allprojectsfind.h index 48d1457b546..1b93842c691 100644 --- a/src/plugins/projectexplorer/allprojectsfind.h +++ b/src/plugins/projectexplorer/allprojectsfind.h @@ -34,15 +34,11 @@ #ifndef ALLPROJECTSFIND_H #define ALLPROJECTSFIND_H -#include #include #include #include #include -#include -#include -#include namespace ProjectExplorer { @@ -56,7 +52,7 @@ class AllProjectsFind : public TextEditor::BaseFileFind Q_OBJECT public: - AllProjectsFind(ProjectExplorerPlugin *plugin, Core::ICore *core, Find::SearchResultWindow *resultWindow); + AllProjectsFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow); QString name() const; diff --git a/src/plugins/projectexplorer/applicationlauncher.h b/src/plugins/projectexplorer/applicationlauncher.h index ead2799453e..82876e61f76 100644 --- a/src/plugins/projectexplorer/applicationlauncher.h +++ b/src/plugins/projectexplorer/applicationlauncher.h @@ -37,6 +37,9 @@ #include #include #include +#ifndef Q_OS_WIN +#include +#endif namespace ProjectExplorer { namespace Internal { @@ -88,7 +91,12 @@ private: ConsoleProcess *m_consoleProcess; Mode m_currentMode; +#ifdef Q_OS_WIN WinGuiProcess *m_winGuiProcess; +#else + QTextCodec *m_outputCodec; + QTextCodec::ConverterState m_outputCodecState; +#endif }; } // namespace Internal diff --git a/src/plugins/projectexplorer/applicationlauncher_win.cpp b/src/plugins/projectexplorer/applicationlauncher_win.cpp index 09e0ee73c6c..374d26c97b1 100644 --- a/src/plugins/projectexplorer/applicationlauncher_win.cpp +++ b/src/plugins/projectexplorer/applicationlauncher_win.cpp @@ -34,7 +34,6 @@ #include "applicationlauncher.h" #include "consoleprocess.h" #include "winguiprocess.h" -#include #include @@ -117,10 +116,7 @@ qint64 ApplicationLauncher::applicationPID() const void ApplicationLauncher::readWinDebugOutput(const QString &output) { - QString s = output; - if (s.endsWith(QLatin1Char('\n'))) - s.chop(1); - emit appendOutput(s); + emit appendOutput(output); } void ApplicationLauncher::processStopped() diff --git a/src/plugins/projectexplorer/applicationlauncher_x11.cpp b/src/plugins/projectexplorer/applicationlauncher_x11.cpp index 9a1c4c3d737..78214746a2e 100644 --- a/src/plugins/projectexplorer/applicationlauncher_x11.cpp +++ b/src/plugins/projectexplorer/applicationlauncher_x11.cpp @@ -34,16 +34,14 @@ #include "applicationlauncher.h" #include "consoleprocess.h" -#include - #include -#include using namespace ProjectExplorer::Internal; ApplicationLauncher::ApplicationLauncher(QObject *parent) : QObject(parent) { + m_outputCodec = QTextCodec::codecForLocale(); m_currentMode = Gui; m_guiProcess = new QProcess(this); m_guiProcess->setReadChannelMode(QProcess::MergedChannels); @@ -135,13 +133,9 @@ void ApplicationLauncher::guiProcessError() void ApplicationLauncher::readStandardOutput() { - m_guiProcess->setReadChannel(QProcess::StandardOutput); - while (m_guiProcess->canReadLine()) { - QString line = QString::fromLocal8Bit(m_guiProcess->readLine()); - if (line.endsWith(QLatin1Char('\n'))) - line.chop(1); - emit appendOutput(line); - } + QByteArray data = m_guiProcess->readAllStandardOutput(); + emit appendOutput(m_outputCodec->toUnicode( + data.constData(), data.length(), &m_outputCodecState)); } void ApplicationLauncher::processStopped() diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.cpp b/src/plugins/projectexplorer/applicationrunconfiguration.cpp index fc936d2c431..0eeae6e8eef 100644 --- a/src/plugins/projectexplorer/applicationrunconfiguration.cpp +++ b/src/plugins/projectexplorer/applicationrunconfiguration.cpp @@ -141,7 +141,7 @@ void ApplicationRunControl::start() m_executable, rc->commandLineArguments()); emit started(); - emit addToOutputWindow(this, tr("Starting %1").arg(m_executable)); + emit addToOutputWindow(this, tr("Starting %1...").arg(m_executable)); } void ApplicationRunControl::stop() @@ -162,7 +162,7 @@ void ApplicationRunControl::slotError(const QString & err) void ApplicationRunControl::slotAddToOutputWindow(const QString &line) { - emit addToOutputWindow(this, Qt::escape(line)); + emit addToOutputWindowInline(this, line); } void ApplicationRunControl::processExited(int exitCode) diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index ff426805c2e..a7e7286a30f 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -178,8 +178,7 @@ void BuildManager::startBuildQueue() { if (!m_running) { // Progress Reporting - Core::ProgressManager *progressManager = - ExtensionSystem::PluginManager::instance()->getObject()->progressManager(); + Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); m_progressFutureInterface = new QFutureInterface; m_progressWatcher.setFuture(m_progressFutureInterface->future()); Core::FutureProgress *progress = progressManager->addTask(m_progressFutureInterface->future(), diff --git a/src/plugins/projectexplorer/buildparserinterface.h b/src/plugins/projectexplorer/buildparserinterface.h index 6dba4dfec00..2857926e18d 100644 --- a/src/plugins/projectexplorer/buildparserinterface.h +++ b/src/plugins/projectexplorer/buildparserinterface.h @@ -66,7 +66,7 @@ class PROJECTEXPLORER_EXPORT IBuildParserFactory Q_OBJECT public: - IBuildParserFactory() {}; + IBuildParserFactory() {} virtual ~IBuildParserFactory(); virtual bool canCreate(const QString & name) const = 0; virtual BuildParserInterface * create(const QString & name) const = 0; diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp index 4b9e585cc13..496aeb326c0 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.cpp +++ b/src/plugins/projectexplorer/currentprojectfilter.cpp @@ -36,20 +36,18 @@ #include "project.h" #include "session.h" -#include -#include +#include #include -#include +#include +#include using namespace Core; using namespace QuickOpen; using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe, - ICore *core) - : BaseFileFilter(core), - m_project(0) +CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe) + : BaseFileFilter(), m_project(0) { m_projectExplorer = pe; @@ -73,12 +71,12 @@ void CurrentProjectFilter::currentProjectChanged(ProjectExplorer::Project *proje { if (project == m_project) return; - if (m_project) { + if (m_project) disconnect(m_project, SIGNAL(fileListChanged()), this, SLOT(refreshInternally())); - } - if (project) { + + if (project) connect(project, SIGNAL(fileListChanged()), this, SLOT(refreshInternally())); - } + m_project = project; refreshInternally(); } diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h index 92ae4b68635..25b2a12f576 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.h +++ b/src/plugins/projectexplorer/currentprojectfilter.h @@ -54,7 +54,7 @@ class CurrentProjectFilter : public QuickOpen::BaseFileFilter Q_OBJECT public: - CurrentProjectFilter(ProjectExplorerPlugin *pe, Core::ICore *core); + CurrentProjectFilter(ProjectExplorerPlugin *pe); QString trName() const { return tr("Files in current project"); } QString name() const { return "Files in current project"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; } diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp index cf1d81c3bc7..e453d0c6a49 100644 --- a/src/plugins/projectexplorer/currentprojectfind.cpp +++ b/src/plugins/projectexplorer/currentprojectfind.cpp @@ -47,8 +47,8 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; using namespace TextEditor; -CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, Core::ICore *core, SearchResultWindow *resultWindow) - : BaseFileFind(core, resultWindow), +CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, SearchResultWindow *resultWindow) + : BaseFileFind(resultWindow), m_plugin(plugin), m_configWidget(0) { diff --git a/src/plugins/projectexplorer/currentprojectfind.h b/src/plugins/projectexplorer/currentprojectfind.h index 5c08be0f2fc..8690911277a 100644 --- a/src/plugins/projectexplorer/currentprojectfind.h +++ b/src/plugins/projectexplorer/currentprojectfind.h @@ -34,7 +34,6 @@ #ifndef CURRENTPROJECTFIND_H #define CURRENTPROJECTFIND_H -#include #include #include #include @@ -51,7 +50,7 @@ namespace Internal { class CurrentProjectFind : public TextEditor::BaseFileFind { public: - CurrentProjectFind(ProjectExplorerPlugin *plugin, Core::ICore *core, Find::SearchResultWindow *resultWindow); + CurrentProjectFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow); QString name() const; diff --git a/src/plugins/projectexplorer/dependenciesdialog.cpp b/src/plugins/projectexplorer/dependenciesdialog.cpp deleted file mode 100644 index 9c78de543ad..00000000000 --- a/src/plugins/projectexplorer/dependenciesdialog.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/*************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Qt Software Information (qt-info@nokia.com) -** -** -** Non-Open Source Usage -** -** Licensees may use this file in accordance with the Qt Beta Version -** License Agreement, Agreement version 2.2 provided with the Software or, -** alternatively, in accordance with the terms contained in a written -** agreement between you and Nokia. -** -** GNU General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging -** of this file. Please review the following information to ensure GNU -** General Public Licensing requirements will be met: -** -** http://www.fsf.org/licensing/licenses/info/GPLv2.html and -** http://www.gnu.org/copyleft/gpl.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt GPL Exception -** version 1.3, included in the file GPL_EXCEPTION.txt in this package. -** -***************************************************************************/ - -#include "dependenciesdialog.h" -#include "project.h" -#include "session.h" - -#include -#include -#include -#include -#include - -namespace ProjectExplorer { -namespace Internal { - -// ------ DependencyModel - -class DependencyModel : public QAbstractTableModel { -public: - typedef ProjectExplorer::Project Project; - typedef DependenciesDialog::ProjectList ProjectList; - - DependencyModel(SessionManager *sln, const ProjectList &projectList, QObject * parent = 0); - - virtual int rowCount(const QModelIndex&) const { return m_projects.size(); } - virtual int columnCount(const QModelIndex&) const { return m_projects.size(); } - - virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; - bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); - - virtual Qt::ItemFlags flags ( const QModelIndex & index ) const; - - QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; - - // Apply changed items - unsigned apply(SessionManager *sln) const; - - void resetDependencies(); - -private: - - struct Entry { - Entry(SessionManager *sln, Project *rootProject, Project *dependentProject); - Entry() : m_dependentProject(0), m_dependent(false), m_defaultValue(false), m_canAddDependency(false) {} - Project* m_dependentProject; - bool m_dependent; - bool m_defaultValue; - bool m_canAddDependency; - }; - - // column - typedef QVector ProjectDependencies; - typedef QList Projects; - Projects m_projects; - ProjectList m_projectList; -}; - -DependencyModel::Entry::Entry(SessionManager *sln, - Project *rootProject, - Project *dependentProject) : - m_dependentProject(dependentProject), - m_dependent(sln->hasDependency(rootProject, dependentProject)), - m_defaultValue(m_dependent), - m_canAddDependency(sln->canAddDependency(rootProject, dependentProject)) -{ -} - -DependencyModel::DependencyModel(SessionManager *sln, - const ProjectList &projectList, - QObject * parent) : - QAbstractTableModel(parent), - m_projectList(projectList) -{ - const int count = projectList.size(); - for (int p = 0; p < count; p++) { - Project *rootProject = projectList.at(p); - ProjectDependencies dependencies; - dependencies.reserve(count); - for (int d = 0; d < count ; d++) - dependencies.push_back(p == d ? Entry() : Entry(sln, rootProject, projectList.at(d))); - - m_projects += dependencies; - } -} - -QVariant DependencyModel::data ( const QModelIndex & index, int role ) const -{ - static const QVariant empty = QVariant(QString()); - // TO DO: find a checked icon - static const QVariant checked = QVariant(QString(QLatin1Char('x'))); - - const int p = index.column(); - const int d = index.row(); - switch (role) { - case Qt::EditRole: - return QVariant(m_projects[p][d].m_dependent); - case Qt::DisplayRole: - return m_projects[p][d].m_dependent ? checked : empty; - default: - break; - } - return QVariant(); -} - -bool DependencyModel::setData ( const QModelIndex & index, const QVariant & value, int role) -{ - switch (role) { - case Qt::EditRole: { - const int p = index.column(); - const int d = index.row(); - if (d == p) - return false; - Entry &e(m_projects[p][d]); - e.m_dependent = value.toBool(); - emit dataChanged(index, index); - } - return true; - default: - break; - } - return false; -} - -Qt::ItemFlags DependencyModel::flags ( const QModelIndex & index ) const -{ - const int p = index.column(); - const int d = index.row(); - - if (d == p) - return 0; - - const Entry &e(m_projects[p][d]); - Qt::ItemFlags rc = Qt::ItemIsEnabled|Qt::ItemIsUserCheckable | Qt::ItemIsSelectable; - if (e.m_canAddDependency) - rc |= Qt::ItemIsEditable; - return rc; -} - -QVariant DependencyModel::headerData ( int section, Qt::Orientation , int role ) const -{ - switch (role) { - case Qt::DisplayRole: - return QVariant(m_projectList.at(section)->name()); - default: - break; - } - return QVariant(); -} - -void DependencyModel::resetDependencies() -{ - if (const int count = m_projectList.size()) { - for (int p = 0; p < count; p++) - for (int d = 0; d < count; d++) - m_projects[p][d].m_dependent = false; - reset(); - } -} - -unsigned DependencyModel::apply(SessionManager *sln) const -{ - unsigned rc = 0; - const int count = m_projectList.size(); - for (int p = 0; p < count; p++) { - Project *rootProject = m_projectList.at(p); - for (int d = 0; d < count; d++) { - if (d != p) { - const Entry &e(m_projects[p][d]); - if (e.m_dependent != e. m_defaultValue) { - rc++; - if (e.m_dependent) { - sln->addDependency(rootProject, e.m_dependentProject); - } else { - sln->removeDependency(rootProject, e.m_dependentProject); - } - } - } - } - } - return rc; -} - -// ------ DependenciesDialog -DependenciesDialog::DependenciesDialog(QWidget *parent, SessionManager *sln) : - QDialog(parent), - m_sln(sln), - m_projectList(m_sln->projects()), - m_model(new DependencyModel(sln, m_projectList)) -{ - m_ui.setupUi(this); - m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); - QPushButton *resetButton = m_ui.buttonBox->addButton (QDialogButtonBox::Reset); - connect(resetButton, SIGNAL(clicked()), this, SLOT(reset())); - - m_ui.dependencyTable->setModel(m_model); -} - -void DependenciesDialog::accept() -{ - m_model->apply(m_sln); - QDialog::accept(); -} - -void DependenciesDialog::reset() -{ - m_model->resetDependencies(); -} - -DependenciesDialog::~DependenciesDialog() -{ -} - -} -} diff --git a/src/plugins/projectexplorer/dependenciesdialog.ui b/src/plugins/projectexplorer/dependenciesdialog.ui deleted file mode 100644 index 31a70dae983..00000000000 --- a/src/plugins/projectexplorer/dependenciesdialog.ui +++ /dev/null @@ -1,84 +0,0 @@ - - - ProjectExplorer::Internal::DependenciesDialog - - - - 0 - 0 - 492 - 435 - - - - Project Dependencies - - - - 6 - - - 9 - - - - - QAbstractItemView::SingleSelection - - - - - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - ProjectExplorer::Internal::DependenciesDialog - accept() - - - 142 - 285 - - - 142 - 155 - - - - - buttonBox - rejected() - ProjectExplorer::Internal::DependenciesDialog - reject() - - - 142 - 285 - - - 142 - 155 - - - - - diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp new file mode 100644 index 00000000000..bc83f7408a4 --- /dev/null +++ b/src/plugins/projectexplorer/dependenciespanel.cpp @@ -0,0 +1,217 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "dependenciespanel.h" +#include "project.h" +#include "session.h" + +#include + +#include +#include +#include +#include +#include +#include + +namespace ProjectExplorer { +namespace Internal { + +/// +/// DependenciesModel +/// + +class DependenciesModel : public QAbstractListModel +{ +public: + DependenciesModel(SessionManager *session, Project *project, QObject *parent = 0); + + int rowCount(const QModelIndex &index) const; + int columnCount(const QModelIndex &index) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + Qt::ItemFlags flags(const QModelIndex &index) const; + +private: + SessionManager *m_session; + Project *m_project; + QList m_projects; +}; + +DependenciesModel::DependenciesModel(SessionManager *session, + Project *project, + QObject *parent) + : QAbstractListModel(parent) + , m_session(session) + , m_project(project) + , m_projects(session->projects()) +{ + // We can't select ourselves as a dependency + m_projects.removeAll(m_project); +} + +int DependenciesModel::rowCount(const QModelIndex &index) const +{ + return index.isValid() ? 0 : m_projects.size(); +} + +int DependenciesModel::columnCount(const QModelIndex &index) const +{ + return index.isValid() ? 0 : 1; +} + +QVariant DependenciesModel::data(const QModelIndex &index, int role) const +{ + const Project *p = m_projects.at(index.row()); + + switch (role) { + case Qt::DisplayRole: + return p->name(); + case Qt::CheckStateRole: + return m_session->hasDependency(m_project, p) ? Qt::Checked : Qt::Unchecked; + case Qt::DecorationRole: + return Core::FileIconProvider::instance()->icon(QFileInfo(p->file()->fileName())); + default: + return QVariant(); + } +} + +bool DependenciesModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + qDebug() << index << value << role << value.toBool(); + + if (role == Qt::CheckStateRole) { + const Project *p = m_projects.at(index.row()); + const Qt::CheckState c = static_cast(value.toInt()); + + if (c == Qt::Checked) { + if (m_session->addDependency(m_project, p)) { + emit dataChanged(index, index); + return true; + } else { + QMessageBox::warning(0, tr("Unable to add dependency"), + tr("This would create a circular dependency.")); + } + } else if (c == Qt::Unchecked) { + if (m_session->hasDependency(m_project, p)) { + m_session->removeDependency(m_project, p); + emit dataChanged(index, index); + return true; + } + } + } + return false; +} + +Qt::ItemFlags DependenciesModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags rc = QAbstractListModel::flags(index); + if (index.column() == 0) + rc |= Qt::ItemIsUserCheckable | Qt::ItemIsEditable; + return rc; +} + +/// +/// DependenciesWidget +/// + +class DependenciesWidget : public QWidget +{ +public: + DependenciesWidget(SessionManager *session, Project *project, + QWidget *parent = 0); + +private: + Ui::DependenciesWidget m_ui; + SessionManager *m_session; + DependenciesModel *m_model; +}; + +DependenciesWidget::DependenciesWidget(SessionManager *session, + Project *project, + QWidget *parent) + : QWidget(parent) + , m_session(session) + , m_model(new DependenciesModel(session, project, this)) +{ + m_ui.setupUi(this); + m_ui.dependenciesView->setModel(m_model); + m_ui.dependenciesView->setHeaderHidden(true); +} + +/// +/// DependenciesPanel +/// + +DependenciesPanel::DependenciesPanel(SessionManager *session, Project *project) + : PropertiesPanel() + , m_widget(new DependenciesWidget(session, project)) +{ +} + +DependenciesPanel::~DependenciesPanel() +{ + delete m_widget; +} + +QString DependenciesPanel::name() const +{ + return tr("Dependencies"); +} + +QWidget *DependenciesPanel::widget() +{ + return m_widget; +} + +/// +/// DependenciesPanelFactory +/// + +DependenciesPanelFactory::DependenciesPanelFactory(SessionManager *session) + : m_session(session) +{ +} + +bool DependenciesPanelFactory::supports(Project * /* project */) +{ + return true; +} + +PropertiesPanel *DependenciesPanelFactory::createPanel(Project *project) +{ + return new DependenciesPanel(m_session, project); +} + +} // namespace Internal +} // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/dependenciesdialog.h b/src/plugins/projectexplorer/dependenciespanel.h similarity index 73% rename from src/plugins/projectexplorer/dependenciesdialog.h rename to src/plugins/projectexplorer/dependenciespanel.h index 1dd8621a1ed..73c7755620c 100644 --- a/src/plugins/projectexplorer/dependenciesdialog.h +++ b/src/plugins/projectexplorer/dependenciespanel.h @@ -34,9 +34,10 @@ #ifndef DEPENDENCIESDIALOG_H #define DEPENDENCIESDIALOG_H -#include "ui_dependenciesdialog.h" +#include "iprojectproperties.h" +#include "ui_dependenciespanel.h" -#include +#include namespace ProjectExplorer { @@ -45,27 +46,32 @@ class SessionManager; namespace Internal { -class DependencyModel; +class DependenciesWidget; -// NBS kill DependenciesDialog? -class DependenciesDialog : public QDialog +class DependenciesPanelFactory : public IPanelFactory +{ +public: + DependenciesPanelFactory(SessionManager *session); + + bool supports(Project *project); + PropertiesPanel *createPanel(Project *project); + +private: + SessionManager *m_session; +}; + + +class DependenciesPanel : public PropertiesPanel { Q_OBJECT public: - typedef QList ProjectList; - - DependenciesDialog(QWidget *parent, SessionManager *sln); - virtual ~DependenciesDialog(); - -public slots: - virtual void accept(); - void reset(); + DependenciesPanel(SessionManager *session, Project *project); + ~DependenciesPanel(); + QString name() const; + QWidget *widget(); private: - Ui::DependenciesDialog m_ui; - SessionManager *m_sln; - ProjectList m_projectList; - DependencyModel *m_model; + DependenciesWidget *m_widget; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/dependenciespanel.ui b/src/plugins/projectexplorer/dependenciespanel.ui new file mode 100644 index 00000000000..83fc95b1a3b --- /dev/null +++ b/src/plugins/projectexplorer/dependenciespanel.ui @@ -0,0 +1,44 @@ + + + ProjectExplorer::Internal::DependenciesWidget + + + + 0 + 0 + 502 + 375 + + + + Project Dependencies + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Project Dependencies: + + + + + + + + diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h index 3be9f229c4f..45da4817675 100644 --- a/src/plugins/projectexplorer/editorsettingspropertiespage.h +++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h @@ -73,7 +73,6 @@ private slots: void currentEncodingChanged(int index); private: - Ui::EditorSettingsPropertiesPage m_ui; Project *m_project; QList m_codecs; diff --git a/src/plugins/projectexplorer/images/filtericon.png b/src/plugins/projectexplorer/images/filtericon.png index 7e46d226758..0915b5e5f61 100644 Binary files a/src/plugins/projectexplorer/images/filtericon.png and b/src/plugins/projectexplorer/images/filtericon.png differ diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h index aab3b504331..aa823f49010 100644 --- a/src/plugins/projectexplorer/iprojectproperties.h +++ b/src/plugins/projectexplorer/iprojectproperties.h @@ -39,8 +39,6 @@ #include -#include - namespace ProjectExplorer { class PropertiesPanel; @@ -57,7 +55,7 @@ class PROJECTEXPLORER_EXPORT PropertiesPanel : public Core::IContext { Q_OBJECT public: - virtual void finish() {}; + virtual void finish() {} virtual QString name() const = 0; // IContext diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp index c02f21ff34b..d34c3f2bb0e 100644 --- a/src/plugins/projectexplorer/outputwindow.cpp +++ b/src/plugins/projectexplorer/outputwindow.cpp @@ -215,6 +215,12 @@ void OutputPane::appendOutput(RunControl *rc, const QString &out) ow->appendOutput(out); } +void OutputPane::appendOutputInline(RunControl *rc, const QString &out) +{ + OutputWindow *ow = m_outputWindows.value(rc); + ow->appendOutputInline(out); +} + void OutputPane::showTabFor(RunControl *rc) { OutputWindow *ow = m_outputWindows.value(rc); @@ -318,7 +324,16 @@ OutputWindow::~OutputWindow() void OutputWindow::appendOutput(const QString &out) { - appendPlainText(out); + if (out.endsWith('\n')) + appendPlainText(out); + else + appendPlainText(out + '\n'); +} + +void OutputWindow::appendOutputInline(const QString &out) +{ + moveCursor(QTextCursor::End); + insertPlainText(out); } void OutputWindow::insertLine() diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h index 6bda6121af6..674f25cd51d 100644 --- a/src/plugins/projectexplorer/outputwindow.h +++ b/src/plugins/projectexplorer/outputwindow.h @@ -83,6 +83,7 @@ public: // ApplicationOutputspecifics void createNewOutputWindow(RunControl *rc); void appendOutput(RunControl *rc, const QString &out); + void appendOutputInline(RunControl *rc, const QString &out); void showTabFor(RunControl *rc); public slots: @@ -119,6 +120,7 @@ public: ~OutputWindow(); void appendOutput(const QString &out); + void appendOutputInline(const QString &out); void insertLine(); }; diff --git a/src/plugins/projectexplorer/pluginfilefactory.cpp b/src/plugins/projectexplorer/pluginfilefactory.cpp index de7153c4015..55b38f681bf 100644 --- a/src/plugins/projectexplorer/pluginfilefactory.cpp +++ b/src/plugins/projectexplorer/pluginfilefactory.cpp @@ -46,10 +46,9 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -ProjectFileFactory::ProjectFileFactory(const Core::ICore* core, IProjectManager *manager) : - m_mimeTypes(manager->mimeType()), +ProjectFileFactory::ProjectFileFactory(IProjectManager *manager) + : m_mimeTypes(manager->mimeType()), m_kind(Constants::FILE_FACTORY_KIND), - m_core(core), m_manager(manager) { } @@ -70,7 +69,7 @@ Core::IFile *ProjectFileFactory::open(const QString &fileName) ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); if (!pe->openProject(fileName)) { - m_core->messageManager()->printToOutputPane(tr("Could not open the following project: '%1'").arg(fileName)); + Core::ICore::instance()->messageManager()->printToOutputPane(tr("Could not open the following project: '%1'").arg(fileName)); } else if (pe->session()) { SessionManager *session = pe->session(); if (session->projects().count() == 1) @@ -81,21 +80,21 @@ Core::IFile *ProjectFileFactory::open(const QString &fileName) return fIFace; } -QList ProjectFileFactory::createFactories(const Core::ICore* core, - QString *filterString) +QList ProjectFileFactory::createFactories(QString *filterString) { // Register factories for all project managers QList rc; - QList projectManagers = core->pluginManager()->getObjects(); + QList projectManagers = + ExtensionSystem::PluginManager::instance()->getObjects(); const QString filterSeparator = QLatin1String(";;"); filterString->clear(); foreach (IProjectManager *manager, projectManagers) { - rc.push_back(new ProjectFileFactory(core, manager)); + rc.push_back(new ProjectFileFactory(manager)); if (!filterString->isEmpty()) *filterString += filterSeparator; const QString mimeType = manager->mimeType(); - const QString pFilterString = core->mimeDatabase()->findByType(mimeType).filterString(); + const QString pFilterString = Core::ICore::instance()->mimeDatabase()->findByType(mimeType).filterString(); *filterString += pFilterString; } return rc; diff --git a/src/plugins/projectexplorer/pluginfilefactory.h b/src/plugins/projectexplorer/pluginfilefactory.h index 035eb50e665..e23be0e9f9f 100644 --- a/src/plugins/projectexplorer/pluginfilefactory.h +++ b/src/plugins/projectexplorer/pluginfilefactory.h @@ -35,16 +35,14 @@ #define PLUGINFILEFACTORY_H #include + #include #include -namespace Core { - class ICore; -} - namespace ProjectExplorer { - class IProjectManager; - class ProjectExplorerPlugin; + +class IProjectManager; +class ProjectExplorerPlugin; namespace Internal { @@ -53,20 +51,20 @@ namespace Internal { class ProjectFileFactory : public Core::IFileFactory { Q_OBJECT - explicit ProjectFileFactory(const Core::ICore* core, ProjectExplorer::IProjectManager *manager); -public: + explicit ProjectFileFactory(ProjectExplorer::IProjectManager *manager); + +public: virtual QStringList mimeTypes() const; bool canOpen(const QString &fileName); QString kind() const; Core::IFile *open(const QString &fileName); - static QList createFactories(const Core::ICore* core, QString *filterString); + static QList createFactories(QString *filterString); private: const QStringList m_mimeTypes; const QString m_kind; - const Core::ICore* m_core; ProjectExplorer::IProjectManager *m_manager; }; diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 3f377b52a11..961ad1a7708 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -46,7 +46,6 @@ #include using namespace ProjectExplorer; -using ExtensionSystem::PluginManager; Project::Project() : m_activeRunConfiguration(0), @@ -54,6 +53,14 @@ Project::Project() { } +Project::~Project() +{ + qDeleteAll(m_buildSteps); + qDeleteAll(m_cleanSteps); + qDeleteAll(m_buildConfigurationValues); + delete m_editorConfiguration; +} + void Project::insertBuildStep(int position, BuildStep *step) { m_buildSteps.insert(position, step); @@ -508,14 +515,3 @@ void Project::setDisplayNameFor(const QString &buildConfiguration, const QString } emit buildConfigurationDisplayNameChanged(buildConfiguration); } - - -Project::~Project() -{ - qDeleteAll(m_buildSteps); - qDeleteAll(m_cleanSteps); - qDeleteAll(m_buildConfigurationValues); - delete m_editorConfiguration; -} - - diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 2a30a0e20f3..9a8c7bf0cbe 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -31,7 +31,6 @@ ** ***************************************************************************/ - #ifndef PROJECT_H #define PROJECT_H @@ -50,7 +49,7 @@ #include namespace Core { - class IFile; +class IFile; } namespace ProjectExplorer { @@ -68,8 +67,7 @@ class PROJECTEXPLORER_EXPORT Project Q_OBJECT public: - // Roles to be implemented by all models that are exported - // via model() + // Roles to be implemented by all models that are exported via model() enum ModelRoles { // Absolute file path FilePathRole = QFileSystemModel::FilePathRole @@ -82,12 +80,11 @@ public: virtual Core::IFile *file() const = 0; virtual IProjectManager *projectManager() const = 0; - virtual QList dependencies() = 0; //NBS TODO remove virtual QList dependsOn() = 0; //NBS TODO implement dependsOn virtual bool isApplication() const = 0; - //Build/Clean Step functions + // Build/Clean Step functions QList buildSteps() const; void insertBuildStep(int position, BuildStep *step); void removeBuildStep(int position); @@ -97,7 +94,7 @@ public: void insertCleanStep(int position, BuildStep *step); void removeCleanStep(int position); - //Build configuration + // Build configuration void addBuildConfiguration(const QString &name); void removeBuildConfiguration(const QString &name); void copyBuildConfiguration(const QString &source, const QString &dest); @@ -133,8 +130,9 @@ public: virtual BuildStepConfigWidget *createConfigWidget() = 0; virtual QList subConfigWidgets(); - // This method is called for new build configurations - // You should probably set some default values in this method + /* This method is called for new build configurations. You should probably + * set some default values in this method. + */ virtual void newBuildConfiguration(const QString &buildConfiguration) = 0; virtual ProjectNode *rootProjectNode() const = 0; @@ -150,19 +148,22 @@ signals: void buildConfigurationDisplayNameChanged(const QString &buildConfiguraiton); protected: - // This method is called when the project .user file is saved. - // Simply call writer.saveValue() for each value you want to save - // Make sure to always call your base class implementation - // Note: All the values from the project/buildsteps and buildconfigurations - // are automatically stored. + /* This method is called when the project .user file is saved. Simply call + * writer.saveValue() for each value you want to save. Make sure to always + * call your base class implementation. + * + * Note: All the values from the project/buildsteps and buildconfigurations + * are automatically stored. + */ virtual void saveSettingsImpl(PersistentSettingsWriter &writer); - // This method is called when the project is opened - // You can retrieve all the values you saved in saveSettingsImpl() - // in this method. - // Note: This function is also called if there is no .user file - // You should probably add some default build and run settings to the project - // so that it can be build and run + /* This method is called when the project is opened. You can retrieve all + * the values you saved in saveSettingsImpl() in this method. + * + * Note: This function is also called if there is no .user file. You should + * probably add some default build and run settings to the project so that + * it can be build and run. + */ virtual void restoreSettingsImpl(PersistentSettingsReader &reader); private: @@ -181,4 +182,4 @@ private: } // namespace ProjectExplorer -#endif // PROJECTINTERFACE_H +#endif // PROJECT_H diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index dad5c4b7dba..82dc4a249d9 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -34,12 +34,13 @@ #include "applicationrunconfiguration.h" #include "allprojectsfilter.h" #include "allprojectsfind.h" -#include "currentprojectfind.h" #include "buildmanager.h" #include "buildsettingspropertiespage.h" -#include "editorsettingspropertiespage.h" +#include "currentprojectfind.h" #include "currentprojectfilter.h" #include "customexecutablerunconfiguration.h" +#include "editorsettingspropertiespage.h" +#include "dependenciespanel.h" #include "foldernavigationwidget.h" #include "iprojectmanager.h" #include "metatypedeclarations.h" @@ -77,25 +78,20 @@ #include #include #include +#include #include #include -#include +#include #include #include #include #include #include -#include #include -#include -#include -#include -#include #include #include -#include Q_DECLARE_METATYPE(QSharedPointer); Q_DECLARE_METATYPE(Core::IEditorFactory *); @@ -151,18 +147,20 @@ ProjectExplorerPlugin *ProjectExplorerPlugin::instance() return m_instance; } -bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QString *) +bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *error) { - ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - m_core = pm->getObject(); - Core::ActionManager *am = m_core->actionManager(); + Q_UNUSED(arguments); + Q_UNUSED(error); + + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); addObject(this); - connect(m_core->fileManager(), SIGNAL(currentFileChanged(const QString&)), + connect(core->fileManager(), SIGNAL(currentFileChanged(const QString&)), this, SLOT(setCurrentFile(const QString&))); - m_session = new SessionManager(m_core, this); + m_session = new SessionManager(core, this); connect(m_session, SIGNAL(projectAdded(ProjectExplorer::Project *)), this, SIGNAL(fileListChanged())); @@ -173,13 +171,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin connect(m_session, SIGNAL(startupProjectChanged(ProjectExplorer::Project *)), this, SLOT(startupProjectChanged())); - m_proWindow = new ProjectWindow(m_core); + m_proWindow = new ProjectWindow; QList globalcontext; globalcontext.append(Core::Constants::C_GLOBAL_ID); QList pecontext; - pecontext << m_core->uniqueIDManager()->uniqueIdentifier(Constants::C_PROJECTEXPLORER); + pecontext << core->uniqueIDManager()->uniqueIdentifier(Constants::C_PROJECTEXPLORER); Core::BaseMode *mode = new Core::BaseMode; mode->setName(tr("Projects")); @@ -201,36 +199,38 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin addAutoReleasedObject(new CoreListenerCheckingForRunningBuild(m_buildManager)); - m_outputPane = new OutputPane(m_core); + m_outputPane = new OutputPane(core); addAutoReleasedObject(m_outputPane); connect(m_session, SIGNAL(projectRemoved(ProjectExplorer::Project *)), m_outputPane, SLOT(projectRemoved())); - AllProjectsFilter *allProjectsFilter = new AllProjectsFilter(this, m_core); + AllProjectsFilter *allProjectsFilter = new AllProjectsFilter(this); addAutoReleasedObject(allProjectsFilter); - CurrentProjectFilter *currentProjectFilter = new CurrentProjectFilter(this, m_core); + CurrentProjectFilter *currentProjectFilter = new CurrentProjectFilter(this); addAutoReleasedObject(currentProjectFilter); addAutoReleasedObject(new BuildSettingsPanelFactory); addAutoReleasedObject(new RunSettingsPanelFactory); addAutoReleasedObject(new EditorSettingsPanelFactory); + addAutoReleasedObject(new DependenciesPanelFactory(m_session)); ProcessStepFactory *processStepFactory = new ProcessStepFactory; addAutoReleasedObject(processStepFactory); - AllProjectsFind *allProjectsFind = new AllProjectsFind(this, m_core, - m_core->pluginManager()->getObject()); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + AllProjectsFind *allProjectsFind = new AllProjectsFind(this, + pm->getObject()); addAutoReleasedObject(allProjectsFind); - CurrentProjectFind *currentProjectFind = new CurrentProjectFind(this, m_core, - m_core->pluginManager()->getObject()); + CurrentProjectFind *currentProjectFind = new CurrentProjectFind(this, + pm->getObject()); addAutoReleasedObject(currentProjectFind); addAutoReleasedObject(new ApplicationRunConfigurationRunner); addAutoReleasedObject(new CustomExecutableRunConfigurationFactory); - addAutoReleasedObject(new ProjectFileWizardExtension(m_core)); + addAutoReleasedObject(new ProjectFileWizardExtension); // context menus Core::ActionContainer *msessionContextMenu = @@ -256,7 +256,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin am->actionContainer(Core::Constants::MENU_BAR); // mode manager (for fancy actions) - Core::ModeManager *modeManager = m_core->modeManager(); + Core::ModeManager *modeManager = core->modeManager(); // build menu Core::ActionContainer *mbuild = @@ -485,11 +485,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin mbuild->addAction(cmd, Constants::G_BUILD_SESSION); msessionContextMenu->addAction(cmd, Constants::G_SESSION_BUILD); - // dependencies action - m_dependenciesAction = new QAction(tr("Edit Dependencies..."), this); - cmd = am->registerAction(m_dependenciesAction, Constants::DEPENDENCIES, globalcontext); - mbuild->addAction(cmd, Constants::G_BUILD_SESSION); - // build action m_buildAction = new QAction(tr("Build Project"), this); cmd = am->registerAction(m_buildAction, Constants::BUILD, globalcontext); @@ -522,6 +517,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin cmd = am->registerAction(m_runAction, Constants::RUN, globalcontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+R"))); mbuild->addAction(cmd, Constants::G_BUILD_RUN); + + m_runActionContextMenu = new QAction(runIcon, tr("Run"), this); + cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext); mproject->addAction(cmd, Constants::G_PROJECT_RUN); Core::ActionContainer *mrc = am->createMenu(Constants::RUNCONFIGURATIONMENU); @@ -589,13 +587,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin m_renameFileAction->setEnabled(false); m_renameFileAction->setVisible(false); - connect(m_core, SIGNAL(saveSettingsRequested()), + connect(core, SIGNAL(saveSettingsRequested()), this, SLOT(savePersistentSettings())); - addAutoReleasedObject(new ProjectTreeWidgetFactory(m_core)); - addAutoReleasedObject(new FolderNavigationWidgetFactory(m_core)); + addAutoReleasedObject(new ProjectTreeWidgetFactory(core)); + addAutoReleasedObject(new FolderNavigationWidgetFactory(core)); - if (QSettings *s = m_core->settings()) + if (QSettings *s = core->settings()) m_recentProjects = s->value("ProjectExplorer/RecentProjects/Files", QStringList()).toStringList(); for (QStringList::iterator it = m_recentProjects.begin(); it != m_recentProjects.end(); ) { if (QFileInfo(*it).isFile()) { @@ -617,9 +615,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin connect(m_cleanAction, SIGNAL(triggered()), this, SLOT(cleanProject())); connect(m_cleanSessionAction, SIGNAL(triggered()), this, SLOT(cleanSession())); connect(m_runAction, SIGNAL(triggered()), this, SLOT(runProject())); + connect(m_runActionContextMenu, SIGNAL(triggered()), this, SLOT(runProjectContextMenu())); connect(m_cancelBuildAction, SIGNAL(triggered()), this, SLOT(cancelBuild())); connect(m_debugAction, SIGNAL(triggered()), this, SLOT(debugProject())); - connect(m_dependenciesAction, SIGNAL(triggered()), this, SLOT(editDependencies())); connect(m_unloadAction, SIGNAL(triggered()), this, SLOT(unloadProject())); connect(m_clearSession, SIGNAL(triggered()), this, SLOT(clearSession())); connect(m_taskAction, SIGNAL(triggered()), this, SLOT(goToTaskWindow())); @@ -631,7 +629,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin updateActions(); - connect(m_core, SIGNAL(coreOpened()), this, SLOT(restoreSession())); + connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); return true; } @@ -651,7 +649,7 @@ template ProjectFileFactory * ProjectExplorerPlugin::findProjectFileFactory(const QString &filename) const { // Find factory - if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(filename))) + if (const Core::MimeType mt = Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(filename))) if (ProjectFileFactory *pf = findFactory(mt.type(), m_fileFactories.constBegin(), m_fileFactories.constEnd())) return pf; qWarning("Unable to find project file factory for '%s'", filename.toUtf8().constData()); @@ -698,7 +696,7 @@ void ProjectExplorerPlugin::unloadProject() QList filesToSave; filesToSave << fi; - filesToSave << m_currentProject->dependencies(); + // FIXME: What we want here is to check whether we need to safe any of the pro/pri files in this project // check the number of modified files int readonlycount = 0; @@ -709,9 +707,9 @@ void ProjectExplorerPlugin::unloadProject() bool success = false; if (readonlycount > 0) - success = m_core->fileManager()->saveModifiedFiles(filesToSave).isEmpty(); + success = Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave).isEmpty(); else - success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty(); + success = Core::ICore::instance()->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty(); if (!success) return; @@ -733,7 +731,7 @@ void ProjectExplorerPlugin::clearSession() void ProjectExplorerPlugin::extensionsInitialized() { - m_fileFactories = ProjectFileFactory::createFactories(m_core, &m_projectFilterString); + m_fileFactories = ProjectFileFactory::createFactories(&m_projectFilterString); foreach (ProjectFileFactory *pf, m_fileFactories) { m_profileMimeTypes += pf->mimeTypes(); addAutoReleasedObject(pf); @@ -759,7 +757,7 @@ void ProjectExplorerPlugin::newProject() defaultLocation = dir.absolutePath(); } - m_core->showNewItemDialog(tr("New Project", "Title of dialog"), + Core::ICore::instance()->showNewItemDialog(tr("New Project", "Title of dialog"), Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::ProjectWizard), defaultLocation); updateActions(); @@ -809,7 +807,7 @@ void ProjectExplorerPlugin::savePersistentSettings() m_session->save(); } - QSettings *s = m_core->settings(); + QSettings *s = Core::ICore::instance()->settings(); if (s) { s->setValue("ProjectExplorer/StartupSession", m_session->file()->fileName()); s->setValue("ProjectExplorer/RecentProjects/Files", m_recentProjects); @@ -833,14 +831,14 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames) if (debug) qDebug() << "ProjectExplorerPlugin - opening projects " << fileNames; - QList projectManagers = - m_core->pluginManager()->getObjects(); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + QList projectManagers = pm->getObjects(); //QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); // bool blocked = blockSignals(true); QList openedPro; - foreach (QString fileName, fileNames) - if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(fileName))) { + foreach (const QString &fileName, fileNames) { + if (const Core::MimeType mt = Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(fileName))) { foreach (IProjectManager *manager, projectManagers) if (manager->mimeType() == mt.type()) { if (Project *pro = manager->openProject(fileName)) @@ -849,6 +847,7 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames) break; } } + } //blockSignals(blocked); if (openedPro.isEmpty()) { @@ -872,7 +871,7 @@ bool ProjectExplorerPlugin::openProjects(const QStringList &fileNames) updateActions(); - m_core->modeManager()->activateMode(Core::Constants::MODE_EDIT); + Core::ICore::instance()->modeManager()->activateMode(Core::Constants::MODE_EDIT); QApplication::restoreOverrideCursor(); return true; @@ -988,7 +987,7 @@ void ProjectExplorerPlugin::restoreSession() } // update welcome page - Core::ModeManager *modeManager = m_core->modeManager(); + Core::ModeManager *modeManager = Core::ICore::instance()->modeManager(); connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); if (Core::Internal::WelcomeMode *welcomeMode = qobject_cast(modeManager->mode(Core::Constants::MODE_WELCOME))) { updateWelcomePage(welcomeMode); @@ -996,7 +995,7 @@ void ProjectExplorerPlugin::restoreSession() connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); } - m_core->openFiles(arguments); + Core::ICore::instance()->openFiles(arguments); updateActions(); } @@ -1085,6 +1084,8 @@ void ProjectExplorerPlugin::buildQueueFinished(bool success) connect(control, SIGNAL(addToOutputWindow(RunControl *, const QString &)), this, SLOT(addToApplicationOutputWindow(RunControl *, const QString &))); + connect(control, SIGNAL(addToOutputWindowInline(RunControl *, const QString &)), + this, SLOT(addToApplicationOutputWindowInline(RunControl *, const QString &))); connect(control, SIGNAL(error(RunControl *, const QString &)), this, SLOT(addErrorToApplicationOutputWindow(RunControl *, const QString &))); connect(control, SIGNAL(finished()), @@ -1121,6 +1122,8 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node else node = m_session->nodeForFile(filePath); + Core::ICore *core = Core::ICore::instance(); + bool projectChanged = false; if (m_currentProject != project) { int oldContext = -1; @@ -1135,11 +1138,11 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node newContext = project->projectManager()->projectContext(); newLanguageID = project->projectManager()->projectLanguage(); } - m_core->removeAdditionalContext(oldContext); - m_core->removeAdditionalContext(oldLanguageID); - m_core->addAdditionalContext(newContext); - m_core->addAdditionalContext(newLanguageID); - m_core->updateContext(); + core->removeAdditionalContext(oldContext); + core->removeAdditionalContext(oldLanguageID); + core->addAdditionalContext(newContext); + core->addAdditionalContext(newLanguageID); + core->updateContext(); m_currentProject = project; @@ -1157,16 +1160,16 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node qDebug() << "ProjectExplorer - currentProjectChanged(" << (project ? project->name() : "0") << ")"; // Enable the right VCS if (const Core::IFile *projectFile = project ? project->file() : static_cast(0)) { - m_core->vcsManager()->setVCSEnabled(QFileInfo(projectFile->fileName()).absolutePath()); + core->vcsManager()->setVCSEnabled(QFileInfo(projectFile->fileName()).absolutePath()); } else { - m_core->vcsManager()->setAllVCSEnabled(); + core->vcsManager()->setAllVCSEnabled(); } emit currentProjectChanged(project); updateActions(); } - m_core->fileManager()->setCurrentFile(filePath); + core->fileManager()->setCurrentFile(filePath); } void ProjectExplorerPlugin::updateActions() @@ -1198,13 +1201,13 @@ void ProjectExplorerPlugin::updateActions() m_rebuildSessionAction->setEnabled(hasProjects && !building); m_cleanSessionAction->setEnabled(hasProjects && !building); m_cancelBuildAction->setEnabled(building); - m_dependenciesAction->setEnabled(hasProjects && !building); updateRunAction(); updateTaskActions(); } + // NBS TODO check projectOrder() // what we want here is all the projects pro depends on QStringList ProjectExplorerPlugin::allFilesWithDependencies(Project *pro) @@ -1227,7 +1230,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList & projects) if (debug) qDebug() << "ProjectExplorerPlugin::saveModifiedFiles"; - QList modifiedFi = m_core->fileManager()->modifiedFiles(); + QList modifiedFi = Core::ICore::instance()->fileManager()->modifiedFiles(); QMap modified; QStringList allFiles; @@ -1258,7 +1261,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles(const QList & projects) if (!filesToSave.isEmpty()) { bool cancelled; - m_core->fileManager()->saveModifiedFiles(filesToSave, &cancelled, + Core::ICore::instance()->fileManager()->saveModifiedFiles(filesToSave, &cancelled, tr("The following dependencies are modified, do you want to save them?")); if (cancelled) { return false; @@ -1347,7 +1350,16 @@ void ProjectExplorerPlugin::cleanSession() void ProjectExplorerPlugin::runProject() { - Project *pro = startupProject(); + runProjectImpl(startupProject()); +} + +void ProjectExplorerPlugin::runProjectContextMenu() +{ + runProjectImpl(m_currentProject); +} + +void ProjectExplorerPlugin::runProjectImpl(Project *pro) +{ if (!pro) return; @@ -1380,6 +1392,11 @@ void ProjectExplorerPlugin::addToApplicationOutputWindow(RunControl *rc, const Q m_outputPane->appendOutput(rc, line); } +void ProjectExplorerPlugin::addToApplicationOutputWindowInline(RunControl *rc, const QString &line) +{ + m_outputPane->appendOutputInline(rc, line); +} + void ProjectExplorerPlugin::addErrorToApplicationOutputWindow(RunControl *rc, const QString &error) { m_outputPane->appendOutput(rc, error); @@ -1418,7 +1435,8 @@ void ProjectExplorerPlugin::startupProjectChanged() // NBS TODO implement more than one runner IRunConfigurationRunner *ProjectExplorerPlugin::findRunner(QSharedPointer config, const QString &mode) { - const QList runners = m_core->pluginManager()->getObjects(); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + const QList runners = pm->getObjects(); foreach (IRunConfigurationRunner *runner, runners) if (runner->canRun(config, mode)) return runner; @@ -1428,10 +1446,14 @@ IRunConfigurationRunner *ProjectExplorerPlugin::findRunner(QSharedPointeractiveRunConfiguration(), ProjectExplorer::Constants::RUNMODE); + bool canRun = project && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE); const bool canDebug = project && !m_debuggingRunControl && findRunner(project->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE); const bool building = m_buildManager->isBuilding(); m_runAction->setEnabled(canRun && !building); + + canRun = m_currentProject && findRunner(m_currentProject->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE); + m_runActionContextMenu->setEnabled(canRun && !building); + m_debugAction->setEnabled(canDebug && !building); } @@ -1444,14 +1466,6 @@ void ProjectExplorerPlugin::cancelBuild() m_buildManager->cancel(); } -void ProjectExplorerPlugin::editDependencies() -{ - if (debug) - qDebug() << "ProjectExplorerPlugin::editDependencies"; - - m_session->editDependencies(); -} - void ProjectExplorerPlugin::addToRecentProjects(const QString &fileName) { if (debug) @@ -1474,7 +1488,7 @@ void ProjectExplorerPlugin::updateRecentProjectMenu() qDebug() << "ProjectExplorerPlugin::updateRecentProjectMenu"; Core::ActionContainer *aci = - m_core->actionManager()->actionContainer(Constants::M_RECENTPROJECTS); + Core::ICore::instance()->actionManager()->actionContainer(Constants::M_RECENTPROJECTS); QMenu *menu = aci->menu(); menu->clear(); m_recentProjectsActions.clear(); @@ -1541,7 +1555,7 @@ void ProjectExplorerPlugin::addNewFile() if (!m_currentNode && m_currentNode->nodeType() == ProjectNodeType) return; const QString location = QFileInfo(m_currentNode->path()).dir().absolutePath(); - m_core->showNewItemDialog(tr("New File", "Title of dialog"), + Core::ICore::instance()->showNewItemDialog(tr("New File", "Title of dialog"), Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::FileWizard) + Core::BaseFileWizard::findWizardsOfKind(Core::IWizard::ClassWizard), location); @@ -1552,14 +1566,15 @@ void ProjectExplorerPlugin::addExistingFiles() if (!m_currentNode && m_currentNode->nodeType() == ProjectNodeType) return; ProjectNode *projectNode = qobject_cast(m_currentNode); + Core::ICore *core = Core::ICore::instance(); const QString dir = QFileInfo(m_currentNode->path()).dir().absolutePath(); - QStringList fileNames = QFileDialog::getOpenFileNames(m_core->mainWindow(), tr("Add Existing Files"), dir); + QStringList fileNames = QFileDialog::getOpenFileNames(core->mainWindow(), tr("Add Existing Files"), dir); if (fileNames.isEmpty()) return; QHash fileTypeToFiles; foreach (const QString &fileName, fileNames) { - FileType fileType = typeForFileName(m_core->mimeDatabase(), QFileInfo(fileName)); + FileType fileType = typeForFileName(core->mimeDatabase(), QFileInfo(fileName)); fileTypeToFiles.insertMulti(fileType, fileName); } @@ -1570,17 +1585,17 @@ void ProjectExplorerPlugin::addExistingFiles() if (!notAdded.isEmpty()) { QString message = tr("Could not add following files to project %1:\n").arg(projectNode->name()); QString files = notAdded.join("\n"); - QMessageBox::warning(m_core->mainWindow(), tr("Add files to project failed"), + QMessageBox::warning(core->mainWindow(), tr("Add files to project failed"), message + files); foreach (const QString &file, notAdded) fileNames.removeOne(file); } - if (Core::IVersionControl *vcManager = m_core->vcsManager()->findVersionControlForDirectory(dir)) + if (Core::IVersionControl *vcManager = core->vcsManager()->findVersionControlForDirectory(dir)) if (vcManager->supportsOperation(Core::IVersionControl::AddOperation)) { const QString files = fileNames.join(QString(QLatin1Char('\n'))); QMessageBox::StandardButton button = - QMessageBox::question(m_core->mainWindow(), tr("Add to Version Control"), + QMessageBox::question(core->mainWindow(), tr("Add to Version Control"), tr("Add files\n%1\nto version control (%2)?").arg(files, vcManager->name()), QMessageBox::Yes | QMessageBox::No); if (button == QMessageBox::Yes) { @@ -1593,7 +1608,7 @@ void ProjectExplorerPlugin::addExistingFiles() if (!notAddedToVc.isEmpty()) { const QString message = tr("Could not add following files to version control (%1)\n").arg(vcManager->name()); const QString filesNotAdded = notAddedToVc.join(QString(QLatin1Char('\n'))); - QMessageBox::warning(m_core->mainWindow(), tr("Add files to version control failed"), + QMessageBox::warning(core->mainWindow(), tr("Add files to version control failed"), message + filesNotAdded); } } @@ -1604,19 +1619,22 @@ void ProjectExplorerPlugin::openFile() { if (m_currentNode) return; - m_core->editorManager()->openEditor(m_currentNode->path()); - m_core->editorManager()->ensureEditorManagerVisible(); + Core::ICore *core = Core::ICore::instance(); + core->editorManager()->openEditor(m_currentNode->path()); + core->editorManager()->ensureEditorManagerVisible(); } void ProjectExplorerPlugin::removeFile() { if (!m_currentNode && m_currentNode->nodeType() == FileNodeType) return; + FileNode *fileNode = qobject_cast(m_currentNode); + Core::ICore *core = Core::ICore::instance(); const QString filePath = m_currentNode->path(); const QString fileDir = QFileInfo(filePath).dir().absolutePath(); - RemoveFileDialog removeFileDialog(filePath, m_core->mainWindow()); + RemoveFileDialog removeFileDialog(filePath, core->mainWindow()); if (removeFileDialog.exec() == QDialog::Accepted) { const bool deleteFile = removeFileDialog.isDeleteFileChecked(); @@ -1626,13 +1644,13 @@ void ProjectExplorerPlugin::removeFile() Q_ASSERT(projectNode); if (!projectNode->removeFiles(fileNode->fileType(), QStringList(filePath))) { - QMessageBox::warning(m_core->mainWindow(), tr("Remove file failed"), + QMessageBox::warning(core->mainWindow(), tr("Remove file failed"), tr("Could not remove file %1 from project %2.").arg(filePath).arg(projectNode->name())); return; } // remove from version control - m_core->vcsManager()->showDeleteDialog(filePath); + core->vcsManager()->showDeleteDialog(filePath); // remove from file system if (deleteFile) { @@ -1641,7 +1659,7 @@ void ProjectExplorerPlugin::removeFile() if (file.exists()) { // could have been deleted by vc if (!file.remove()) - QMessageBox::warning(m_core->mainWindow(), tr("Delete file failed"), + QMessageBox::warning(core->mainWindow(), tr("Delete file failed"), tr("Could not delete file %1.").arg(filePath)); } } @@ -1745,11 +1763,12 @@ void ProjectExplorerPlugin::populateOpenWithMenu() bool anyMatches = false; const QString fileName = currentNode()->path(); - if (const Core::MimeType mt = m_core->mimeDatabase()->findByFile(QFileInfo(fileName))) { - const EditorFactoryList factories = m_core->editorManager()->editorFactories(mt, false); + Core::ICore *core = Core::ICore::instance(); + if (const Core::MimeType mt = core->mimeDatabase()->findByFile(QFileInfo(fileName))) { + const EditorFactoryList factories = core->editorManager()->editorFactories(mt, false); anyMatches = !factories.empty(); if (anyMatches) { - const QList editorsOpenForFile = m_core->editorManager()->editorsForFileName(fileName); + const QList editorsOpenForFile = core->editorManager()->editorsForFileName(fileName); // Add all suitable editors foreach (Core::IEditorFactory *editorFactory, factories) { // Add action to open with this very editor factory @@ -1784,8 +1803,9 @@ void ProjectExplorerPlugin::openWithMenuTriggered(QAction *action) qWarning() << "Editor Factory not attached to action, can't happen"<editorManager()->openEditor(currentNode()->path(), editorFactory->kind()); - m_core->editorManager()->ensureEditorManagerVisible(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + em->openEditor(currentNode()->path(), editorFactory->kind()); + em->ensureEditorManagerVisible(); } void ProjectExplorerPlugin::updateSessionMenu() diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 2c1127ff5c6..d21adb8abda 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -54,7 +54,6 @@ namespace Core { class IContext; -class ICore; class IMode; class IFileFactory; namespace Internal { @@ -138,7 +137,6 @@ private slots: void cleanSession(); void cancelBuild(); void debugProject(); - void editDependencies(); void loadAction(); void unloadProject(); void clearSession(); @@ -156,6 +154,7 @@ private slots: void restoreSession(); void loadSession(const QString &session); void runProject(); + void runProjectContextMenu(); void savePersistentSettings(); void goToTaskWindow(); @@ -180,6 +179,7 @@ private slots: void updateRunAction(); void addToApplicationOutputWindow(RunControl *, const QString &line); + void addToApplicationOutputWindowInline(RunControl *, const QString &line); void addErrorToApplicationOutputWindow(RunControl *, const QString &error); void updateTaskActions(); @@ -187,6 +187,7 @@ private slots: void currentModeChanged(Core::IMode *mode); private: + void runProjectImpl(Project *pro); void setCurrent(Project *project, QString filePath, Node *node); QStringList allFilesWithDependencies(Project *pro); @@ -222,9 +223,9 @@ private: QAction *m_cleanAction; QAction *m_cleanSessionAction; QAction *m_runAction; + QAction *m_runActionContextMenu; QAction *m_cancelBuildAction; QAction *m_debugAction; - QAction *m_dependenciesAction; QAction *m_taskAction; QAction *m_addNewFileAction; QAction *m_addExistingFilesAction; @@ -237,7 +238,6 @@ private: QMenu *m_runConfigurationMenu; QActionGroup *m_runConfigurationActionGroup; - Core::ICore *m_core; Internal::ProjectWindow *m_proWindow; SessionManager *m_session; @@ -262,6 +262,7 @@ private: }; namespace Internal { + class CoreListenerCheckingForRunningBuild : public Core::ICoreListener { Q_OBJECT @@ -273,7 +274,8 @@ public: private: BuildManager *m_manager; }; -} + +} // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index bbb8a4c74d9..e345ff1c1ce 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -15,7 +15,7 @@ HEADERS += projectexplorer.h \ persistentsettings.h \ projectfilewizardextension.h \ session.h \ - dependenciesdialog.h \ + dependenciespanel.h \ allprojectsfilter.h \ buildparserinterface.h \ projectexplorerconstants.h \ @@ -62,7 +62,7 @@ SOURCES += projectexplorer.cpp \ persistentsettings.cpp \ projectfilewizardextension.cpp \ session.cpp \ - dependenciesdialog.cpp \ + dependenciespanel.cpp \ allprojectsfilter.cpp \ currentprojectfilter.cpp \ scriptwrappers.cpp \ @@ -94,7 +94,7 @@ SOURCES += projectexplorer.cpp \ nodesvisitor.cpp \ projectmodels.cpp \ currentprojectfind.cpp -FORMS += dependenciesdialog.ui \ +FORMS += dependenciespanel.ui \ buildsettingspropertiespage.ui \ processstep.ui \ editorsettingspropertiespage.ui \ diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index ef745e69c90..e65ca54d099 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -57,6 +57,7 @@ const char * const BUILDCONFIGURATIONMENU = "ProjectExplorer.BuildConfigurationM const char * const CANCELBUILD = "ProjectExplorer.CancelBuild"; const char * const RUNCONFIGURATIONMENU = "ProjectExplorer.RunConfigurationMenu"; const char * const RUN = "ProjectExplorer.Run"; +const char * const RUNCONTEXTMENU = "ProjectExplorer.RunContextMenu"; const char * const STOP = "ProjectExplorer.Stop"; const char * const DEBUG = "ProjectExplorer.Debug"; const char * const DEPENDENCIES = "ProjectExplorer.Dependencies"; diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 6b928db16b5..b897dd44ff9 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -87,16 +87,16 @@ void AllProjectNodesVisitor::visitProjectNode(ProjectNode *node) } // --------- ProjectWizardContext -struct ProjectWizardContext { +struct ProjectWizardContext +{ Core::IVersionControl *versionControl; ProjectNodeList projects; ProjectWizardPage *page; }; // ---- ProjectFileWizardExtension -ProjectFileWizardExtension::ProjectFileWizardExtension(Core::ICore *core) : - m_core(core), - m_context(0) +ProjectFileWizardExtension::ProjectFileWizardExtension() + : m_context(0) { } @@ -115,7 +115,7 @@ void ProjectFileWizardExtension::firstExtensionPageShown(const QListversionControl = m_core->vcsManager()->findVersionControlForDirectory(directory); + m_context->versionControl = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(directory); m_context->page->setFilesDisplay(fileNames); @@ -175,7 +175,7 @@ bool ProjectFileWizardExtension::process(const QList &files TypeFileMap typeFileMap; foreach (const Core::GeneratedFile &generatedFile, files) { const QString path = generatedFile.path(); - typeFileMap.insert(typeForFileName(m_core->mimeDatabase(), path), path); + typeFileMap.insert(typeForFileName(Core::ICore::instance()->mimeDatabase(), path), path); } foreach (FileType type, typeFileMap.uniqueKeys()) { const QStringList files = typeFileMap.values(type); diff --git a/src/plugins/projectexplorer/projectfilewizardextension.h b/src/plugins/projectexplorer/projectfilewizardextension.h index 3008b0772e6..e4930e9ff09 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.h +++ b/src/plugins/projectexplorer/projectfilewizardextension.h @@ -36,10 +36,6 @@ #include -namespace Core { - class ICore; -} - namespace ProjectExplorer { namespace Internal { @@ -54,7 +50,7 @@ class ProjectFileWizardExtension : public Core::IFileWizardExtension { Q_OBJECT public: - explicit ProjectFileWizardExtension(Core::ICore *core); + explicit ProjectFileWizardExtension(); virtual ~ProjectFileWizardExtension(); virtual QList extensionPages(const Core::IWizard *wizard); @@ -64,7 +60,6 @@ public slots: virtual void firstExtensionPageShown(const QList &); private: - Core::ICore *m_core; ProjectWizardContext *m_context; }; diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index afeb3c3469a..594b57c2c1e 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -60,15 +61,12 @@ namespace { bool debug = false; } -ProjectWindow::ProjectWindow(Core::ICore *core, - QWidget *parent) : - QWidget(parent), - m_core(core) +ProjectWindow::ProjectWindow(QWidget *parent) : QWidget(parent) { setWindowTitle(tr("Project Explorer")); setWindowIcon(QIcon(":/projectexplorer/images/projectexplorer.png")); - ExtensionSystem::PluginManager *pm = m_core->pluginManager(); + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ProjectExplorerPlugin *projectExplorer = m_projectExplorer = pm->getObject(); m_session = projectExplorer->session(); diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index c9b387ceaa2..b7ea0b6005f 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -43,10 +43,6 @@ class QTreeWidget; class QTreeWidgetItem; QT_END_NAMESPACE -namespace Core { -class ICore; -} - namespace ProjectExplorer { class Project; @@ -56,13 +52,12 @@ class SessionManager; namespace Internal { - class ProjectWindow : public QWidget { Q_OBJECT public: - ProjectWindow(Core::ICore *core, QWidget *parent = 0); + explicit ProjectWindow(QWidget *parent = 0); ~ProjectWindow(); private slots: @@ -75,7 +70,6 @@ private slots: void handleCurrentItemChanged(QTreeWidgetItem *); private: - Core::ICore *m_core; SessionManager *m_session; ProjectExplorerPlugin *m_projectExplorer; diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index acc11cd932a..0bd593c20e2 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -143,6 +143,7 @@ public: QSharedPointer runConfiguration(); signals: void addToOutputWindow(RunControl *, const QString &line); + void addToOutputWindowInline(RunControl *, const QString &line); void error(RunControl *, const QString &error); void started(); void finished(); diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index ef848ff178b..f5b83d162cd 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -33,7 +33,6 @@ #include "session.h" -#include "dependenciesdialog.h" #include "project.h" #include "projectexplorer.h" #include "projectexplorerconstants.h" @@ -59,6 +58,7 @@ #include #include +#include #include #include @@ -118,7 +118,6 @@ private: using namespace ProjectExplorer; using Internal::SessionFile; -using Internal::DependenciesDialog; void SessionFile::sessionLoadingProgress() @@ -452,7 +451,28 @@ bool SessionManager::recursiveDependencyCheck(const QString &newDep, const QStri return true; } -bool SessionManager::hasDependency(Project *project, Project *depProject) const +/* + * TODO: The dependency management exposes an interface based on projects, but + * is internally purely string based. This is suboptimal. Probably it would be + * nicer to map the filenames to projects on load and only map it back to + * filenames when saving. + */ + +QList SessionManager::dependencies(const Project *project) const +{ + const QString &proName = project->file()->fileName(); + const QStringList &proDeps = m_file->m_depMap.value(proName); + + QList projects; + foreach (const QString &dep, proDeps) { + if (Project *pro = projectForFile(dep)) + projects += pro; + } + + return projects; +} + +bool SessionManager::hasDependency(const Project *project, const Project *depProject) const { const QString &proName = project->file()->fileName(); const QString &depName = depProject->file()->fileName(); @@ -461,7 +481,7 @@ bool SessionManager::hasDependency(Project *project, Project *depProject) const return proDeps.contains(depName); } -bool SessionManager::canAddDependency(Project *project, Project *depProject) const +bool SessionManager::canAddDependency(const Project *project, const Project *depProject) const { const QString &newDep = project->file()->fileName(); const QString &checkDep = depProject->file()->fileName(); @@ -469,7 +489,7 @@ bool SessionManager::canAddDependency(Project *project, Project *depProject) con return recursiveDependencyCheck(newDep, checkDep); } -bool SessionManager::addDependency(Project *project, Project *depProject) +bool SessionManager::addDependency(const Project *project, const Project *depProject) { const QString &proName = project->file()->fileName(); const QString &depName = depProject->file()->fileName(); @@ -487,6 +507,20 @@ bool SessionManager::addDependency(Project *project, Project *depProject) return true; } +void SessionManager::removeDependency(const Project *project, const Project *depProject) +{ + const QString &proName = project->file()->fileName(); + const QString &depName = depProject->file()->fileName(); + + QStringList proDeps = m_file->m_depMap.value(proName); + proDeps.removeAll(depName); + if (proDeps.isEmpty()) { + m_file->m_depMap.remove(proName); + } else { + m_file->m_depMap[proName] = proDeps; + } +} + void SessionManager::setStartupProject(Project *startupProject) { if (debug) @@ -505,21 +539,6 @@ Project *SessionManager::startupProject() const return m_file->m_startupProject; } -void SessionManager::removeDependency(Project *project, - Project *depProject) -{ - const QString &proName = project->file()->fileName(); - const QString &depName = depProject->file()->fileName(); - - QStringList proDeps = m_file->m_depMap.value(proName); - proDeps.removeAll(depName); - if (proDeps.isEmpty()) { - m_file->m_depMap.remove(proName); - } else { - m_file->m_depMap[proName] = proDeps; - } -} - void SessionManager::addProject(Project *project) { addProjects(QList() << project); @@ -702,12 +721,6 @@ bool SessionManager::clear() return success; } -void SessionManager::editDependencies() -{ - DependenciesDialog dlg(0, this); - dlg.exec(); -} - const QList &SessionManager::projects() const { return m_file->m_projects; diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h index 49d15b7e8df..f8768ab468b 100644 --- a/src/plugins/projectexplorer/session.h +++ b/src/plugins/projectexplorer/session.h @@ -123,16 +123,13 @@ public: void removeProject(Project *project); void removeProjects(QList remove); - void editDependencies(); void setStartupProject(Project *startupProject); - // NBS think about dependency management again. - // Probably kill these here - bool canAddDependency(Project *project, Project *depProject) const; - bool hasDependency(Project *project, Project *depProject) const; - // adds the 'requiredProject' as a dependency to 'project' - bool addDependency(Project *project, Project *depProject); - void removeDependency(Project *project, Project *depProject); + QList dependencies(const Project *project) const; + bool hasDependency(const Project *project, const Project *depProject) const; + bool canAddDependency(const Project *project, const Project *depProject) const; + bool addDependency(const Project *project, const Project *depProject); + void removeDependency(const Project *project, const Project *depProject); Core::IFile *file() const; Project *startupProject() const; diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 5421b9bbe63..03243abb5ca 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -250,7 +251,7 @@ void TaskModel::setFileNotFound(const QModelIndex &idx, bool b) TaskWindow::TaskWindow() { - m_coreIFace = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); m_model = new TaskModel; m_listview = new TaskView; @@ -265,10 +266,10 @@ TaskWindow::TaskWindow() m_listview->setContextMenuPolicy(Qt::ActionsContextMenu); m_taskWindowContext = new TaskWindowContext(m_listview); - m_coreIFace->addContextObject(m_taskWindowContext); + core->addContextObject(m_taskWindowContext); m_copyAction = new QAction(QIcon(Core::Constants::ICON_COPY), tr("&Copy"), this); - m_coreIFace->actionManager()-> + core->actionManager()-> registerAction(m_copyAction, Core::Constants::COPY, m_taskWindowContext->context()); m_listview->addAction(m_copyAction); @@ -288,7 +289,7 @@ TaskWindow::TaskWindow() TaskWindow::~TaskWindow() { - m_coreIFace->removeContextObject(m_taskWindowContext); + Core::ICore::instance()->removeContextObject(m_taskWindowContext); delete m_listview; delete m_model; } @@ -314,7 +315,6 @@ void TaskWindow::clearContents() void TaskWindow::visibilityChanged(bool /* b */) { - } void TaskWindow::addItem(ProjectExplorer::BuildParserInterface::PatternType type, @@ -578,7 +578,7 @@ void TaskDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, TaskWindowContext::TaskWindowContext(QWidget *widget) : m_taskList(widget) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); m_context << core->uniqueIDManager()->uniqueIdentifier(Core::Constants::C_PROBLEM_PANE); } diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h index 71875f9e84f..269f6e3ce62 100644 --- a/src/plugins/projectexplorer/taskwindow.h +++ b/src/plugins/projectexplorer/taskwindow.h @@ -89,7 +89,6 @@ private slots: private: int sizeHintForColumn(int column) const; - Core::ICore *m_coreIFace; int m_errorCount; int m_currentTask; diff --git a/src/plugins/qt4projectmanager/buildparserfactory.h b/src/plugins/qt4projectmanager/buildparserfactory.h index 0e8495d5fb0..a52c33f7193 100644 --- a/src/plugins/qt4projectmanager/buildparserfactory.h +++ b/src/plugins/qt4projectmanager/buildparserfactory.h @@ -34,12 +34,8 @@ #ifndef BUILDPARSERFACTORY_H #define BUILDPARSERFACTORY_H -#include +#include - -namespace ProjectExplorer { -class BuildParserInterface; -} namespace Qt4ProjectManager { namespace Internal { @@ -66,5 +62,4 @@ public: } // namespace Internal } // namespace Qt4ProjectManager - #endif // BUILDPARSERFACTORY_H diff --git a/src/plugins/qt4projectmanager/cesdkhandler.h b/src/plugins/qt4projectmanager/cesdkhandler.h index dd9c1d9b5e0..d46a65c2ab9 100644 --- a/src/plugins/qt4projectmanager/cesdkhandler.h +++ b/src/plugins/qt4projectmanager/cesdkhandler.h @@ -31,13 +31,13 @@ ** ***************************************************************************/ -#ifndef CE_SDK_HANDLER_INCL -#define CE_SDK_HANDLER_INCL +#ifndef CE_SDK_HANDLER_H +#define CE_SDK_HANDLER_H -#include +#include -#include -#include +#include +#include #define VCINSTALL_MACRO "$(VCInstallDir)" #define VSINSTALL_MACRO "$(VSInstallDir)" @@ -105,4 +105,4 @@ inline QString CeSdkHandler::fixPaths(QString path) const } // namespace Internal } // namespace Qt4ProjectManager -#endif // CE_SDK_HANDLER_INCL +#endif // CE_SDK_HANDLER_H diff --git a/src/plugins/qt4projectmanager/deployhelper.h b/src/plugins/qt4projectmanager/deployhelper.h index 8462f05b05c..b633ae34392 100644 --- a/src/plugins/qt4projectmanager/deployhelper.h +++ b/src/plugins/qt4projectmanager/deployhelper.h @@ -34,7 +34,7 @@ #ifndef DEPLOYHELPER_H #define DEPLOYHELPER_H -#include +#include #include #include diff --git a/src/plugins/qt4projectmanager/directorywatcher.cpp b/src/plugins/qt4projectmanager/directorywatcher.cpp index d20444098e0..b054f1ff291 100644 --- a/src/plugins/qt4projectmanager/directorywatcher.cpp +++ b/src/plugins/qt4projectmanager/directorywatcher.cpp @@ -44,165 +44,6 @@ enum { debugWatcher = 0 }; namespace Qt4ProjectManager { namespace Internal { -int DirectoryWatcher::m_objectCount = 0; -QHash DirectoryWatcher::m_directoryCount; -QFileSystemWatcher *DirectoryWatcher::m_watcher = 0; - -/* - \class DirectoryWatcher - - A wrapper for QFileSystemWatcher that collects - consecutive changes to a registered directory and emits directoryChanged() and fileChanged(). - - Note that files added are only monitored if the parent directory is added, too. - - All instances of DirectoryWatcher share one QFileSystemWatcher object. - That's because every QFileSystemWatcher object consumes a file descriptor, - even if no files are watched. -*/ -DirectoryWatcher::DirectoryWatcher(QObject *parent) : - QObject(parent), - m_timer(0) -{ - if (!m_watcher) - m_watcher = new QFileSystemWatcher(); - ++m_objectCount; - connect(m_watcher, SIGNAL(directoryChanged(QString)), - this, SLOT(slotDirectoryChanged(QString))); -} - -DirectoryWatcher::~DirectoryWatcher() -{ - foreach (const QString &dir, m_directories) - removeDirectory(dir); - if (--m_objectCount == 0) { - delete m_watcher; - m_watcher = 0; - } -} - -QStringList DirectoryWatcher::directories() const -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << m_directories; - return m_directories; -} - -void DirectoryWatcher::addDirectory(const QString &dir) -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << dir; - if (m_directories.contains(dir)) - return; - m_directories += dir; - if (m_directoryCount[dir] == 0) - m_watcher->addPath(dir); - m_directoryCount[dir] += 1; -} - -void DirectoryWatcher::removeDirectory(const QString &dir) -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << dir; - m_directories.removeOne(dir); - m_directoryCount[dir] -= 1; - if (m_directoryCount[dir] == 0) - m_watcher->removePath(dir); -} - -QStringList DirectoryWatcher::files() const -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << m_files.keys(); - return m_files.keys(); -} - -void DirectoryWatcher::addFile(const QString &filePath) -{ - addFiles(QStringList() << filePath); -} - -void DirectoryWatcher::addFiles(const QStringList &filePaths) -{ - foreach (const QString filePath, filePaths) { - QFileInfo file(filePath); - m_files.insert(file.absoluteFilePath(),file.lastModified()); - } -} - -void DirectoryWatcher::removeFile(const QString &filePath) -{ - m_files.remove(filePath); -} - -void DirectoryWatcher::slotDirectoryChanged(const QString &path) -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << path; - if (!m_directories.contains(path) - || m_pendingDirectories.contains(path)) - return; - - if (!m_timer) { - m_timer = new QTimer(this); - m_timer->setSingleShot(true); - m_timer->setInterval(500); // delay for 0.5 sec - connect(m_timer, SIGNAL(timeout()), this, SLOT(slotDelayedDirectoriesChanged())); - } - if (!m_timer->isActive()) - m_timer->start(); - m_pendingDirectories.push_back(path); -} - -void DirectoryWatcher::slotDelayedDirectoriesChanged() -{ - if (debugWatcher) - qDebug() << Q_FUNC_INFO << " emitting " << m_pendingDirectories; - const QStringList::const_iterator cend = m_pendingDirectories.constEnd(); - for (QStringList::const_iterator it = m_pendingDirectories.constBegin(); it != cend; ++it) { - const QString dir = *it; - if (!QFileInfo(dir).exists()) - removeDirectory(*it); - emit directoryChanged(*it); - updateFileList(*it); - } - m_pendingDirectories.clear(); -} - -void DirectoryWatcher::updateFileList(const QString &dir) -{ - const QStringList monitoredFiles = m_files.keys(); - QStringList removedFiles = monitoredFiles; - if (QFileInfo(dir).exists()) { - // Compare directory contents and emit signals - QFileInfoList entryInfoList - = QDir(dir).entryInfoList(QDir::Files|QDir::CaseSensitive); - // Loop over directory creating the new map of file->time, removing - // the existing entries from the old map - const QFileInfoList::const_iterator cend = entryInfoList.constEnd(); - for (QFileInfoList::const_iterator filIt = entryInfoList.constBegin(); - filIt != cend; ++filIt) { - const QString path = filIt->absoluteFilePath(); - FileModificationTimeMap::iterator mapIt = m_files.find(path); - if (mapIt != m_files.end()) { - const QDateTime lastModified = filIt->lastModified(); - if (lastModified > mapIt.value()) { - if (debugWatcher) - qDebug() << Q_FUNC_INFO << "emitting file changed" << path; - emit fileChanged(path); - m_files[path] = lastModified; - } - removedFiles.removeOne(path); - } - } - } - - if (!removedFiles.isEmpty()) { - foreach (const QString &file, removedFiles) - removeFile(file); - } -} - int FileWatcher::m_objectCount = 0; QHash FileWatcher::m_fileCount; QFileSystemWatcher *FileWatcher::m_watcher = 0; @@ -256,7 +97,5 @@ void FileWatcher::removeFile(const QString &file) m_watcher->removePath(file); } - - } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/directorywatcher.h b/src/plugins/qt4projectmanager/directorywatcher.h index 57f015330a1..35ceaed91e1 100644 --- a/src/plugins/qt4projectmanager/directorywatcher.h +++ b/src/plugins/qt4projectmanager/directorywatcher.h @@ -47,46 +47,6 @@ QT_END_NAMESPACE namespace Qt4ProjectManager { namespace Internal { -class DirectoryWatcher : public QObject -{ - Q_DISABLE_COPY(DirectoryWatcher) - Q_OBJECT -public: - explicit DirectoryWatcher(QObject *parent = 0); - virtual ~DirectoryWatcher(); - - QStringList directories() const; - void addDirectory(const QString &dir); - void removeDirectory(const QString &dir); - - QStringList files() const; - void addFile(const QString &filePath); - void addFiles(const QStringList &filePaths); - void removeFile(const QString &filePath); - -signals: - void directoryChanged(const QString &path); - void fileChanged(const QString &path); - -private slots: - void slotDirectoryChanged(const QString &); - void slotDelayedDirectoriesChanged(); - -private: - void updateFileList(const QString &dir); - - static int m_objectCount; - static QHash m_directoryCount; - static QFileSystemWatcher *m_watcher; - - QTimer *m_timer; - QStringList m_directories; - QStringList m_pendingDirectories; - - typedef QHash FileModificationTimeMap; - FileModificationTimeMap m_files; -}; - class FileWatcher : public QObject { Q_DISABLE_COPY(FileWatcher) diff --git a/src/plugins/qt4projectmanager/gccparser.h b/src/plugins/qt4projectmanager/gccparser.h index 1b556dd6755..24b21cde6f3 100644 --- a/src/plugins/qt4projectmanager/gccparser.h +++ b/src/plugins/qt4projectmanager/gccparser.h @@ -34,7 +34,7 @@ #ifndef GCCPARSER_H #define GCCPARSER_H -#include +#include #include diff --git a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp index 49d8ccd8a30..ea622415a20 100644 --- a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp +++ b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp @@ -38,6 +38,7 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" +#include #include using namespace Qt4ProjectManager; @@ -62,72 +63,104 @@ bool GdbMacrosBuildStep::init(const QString &buildConfiguration) void GdbMacrosBuildStep::run(QFutureInterface & fi) { - // TODO CONFIG handling - - QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject() - ->resourcePath() + "/gdbmacros/"; - QStringList files; - files << "gdbmacros.cpp" - << "gdbmacros.pro"; + QVariant v = value("clean"); + if (v.isNull() || v.toBool() == false) { + // Normal run + QString dumperPath = Core::ICore::instance()->resourcePath() + "/gdbmacros/"; + QStringList files; + files << "gdbmacros.cpp" + << "gdbmacros.pro"; - QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; - QDir dir; - dir.mkpath(destDir); - foreach (const QString &file, files) { - QFile destination(destDir + file); - if (destination.exists()) - destination.remove(); - QFile::copy(dumperPath + file, destDir + file); - } - - Qt4Project *qt4Project = static_cast(project()); - - QProcess qmake; - qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); - qmake.setWorkingDirectory(destDir); - QStringList configarguments; - QStringList makeArguments; - - // Find qmake step... - QMakeStep *qmakeStep = qt4Project->qmakeStep(); - // Find out which configuration is used in this build configuration - // and what kind of CONFIG we need to pass to qmake for that - if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) { - QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig(); - QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt()); - if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) - configarguments << "CONFIG-=debug_and_release"; - if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll)) - configarguments << "CONFIG+=debug_and_release"; - if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild)) - configarguments << "CONFIG+=release"; - if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild)) - configarguments << "CONFIG+=debug"; - if (projectBuildConfiguration & QtVersion::BuildAll) - makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release"); - - } else { - // Old style with CONFIG+=debug_and_release - configarguments << "CONFIG+=debug_and_release"; - const MakeStep *ms = qt4Project->makeStep(); - QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList(); - if (makeargs.contains("debug")) { - makeArguments << "debug"; - } else if (makeargs.contains("release")) { - makeArguments << "release"; + QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; + QDir dir; + dir.mkpath(destDir); + foreach (const QString &file, files) { + QFile destination(destDir + file); + if (destination.exists()) + destination.remove(); + QFile::copy(dumperPath + file, destDir + file); } + + Qt4Project *qt4Project = static_cast(project()); + + QProcess qmake; + qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); + qmake.setWorkingDirectory(destDir); + QStringList configarguments; + QStringList makeArguments; + + // Find qmake step... + QMakeStep *qmakeStep = qt4Project->qmakeStep(); + // Find out which configuration is used in this build configuration + // and what kind of CONFIG we need to pass to qmake for that + if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) { + QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig(); + QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt()); + if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) + configarguments << "CONFIG-=debug_and_release"; + if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll)) + configarguments << "CONFIG+=debug_and_release"; + if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild)) + configarguments << "CONFIG+=release"; + if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild)) + configarguments << "CONFIG+=debug"; + if (projectBuildConfiguration & QtVersion::BuildAll) + makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release"); + + } else { + // Old style with CONFIG+=debug_and_release + configarguments << "CONFIG+=debug_and_release"; + const MakeStep *ms = qt4Project->makeStep(); + QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList(); + if (makeargs.contains("debug")) { + makeArguments << "debug"; + } else if (makeargs.contains("release")) { + makeArguments << "release"; + } + } + + QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec(); + qmake.start(m_qmake, QStringList()<<"-spec"<qtVersion(m_buildConfiguration)->makeCommand(), makeArguments); + qmake.waitForFinished(); + + fi.reportResult(true); + } else { + // Clean step, we want to remove the directory + QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; + Qt4Project *qt4Project = static_cast(project()); + + QProcess make; + make.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); + make.setWorkingDirectory(destDir); + make.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), QStringList()<<"distclean"); + make.waitForFinished(); + + QStringList files; + files << "gdbmacros.cpp" + << "gdbmacros.pro"; + + QStringList directories; + directories << "debug" + << "release"; + + foreach(const QString &file, files) { + QFile destination(destDir + file); + destination.remove(); + } + + foreach(const QString &dir, directories) { + QDir destination(destDir + dir); + destination.rmdir(destDir + dir); + } + + QDir(destDir).rmdir(destDir); + fi.reportResult(true); } - - QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec(); - qmake.start(m_qmake, QStringList()<<"-spec"<qtVersion(m_buildConfiguration)->makeCommand(), makeArguments); - qmake.waitForFinished(); - - fi.reportResult(true); } QString GdbMacrosBuildStep::name() diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 2a032e63fd7..34d4a7e881f 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -36,7 +36,7 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" -#include +#include #include #include diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 6312f08a1e1..0f0f189bfda 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -37,14 +37,13 @@ #include "qtversionmanager.h" #include "ui_makestep.h" -#include -#include +#include +#include namespace Qt4ProjectManager { class Qt4Project; - // NBS move this class to an own plugin? So that there can be a make project at a future time class MakeStep : public ProjectExplorer::AbstractProcessStep { diff --git a/src/plugins/qt4projectmanager/msvcenvironment.cpp b/src/plugins/qt4projectmanager/msvcenvironment.cpp index 2ae9bbebdf7..ebe54104f8d 100644 --- a/src/plugins/qt4projectmanager/msvcenvironment.cpp +++ b/src/plugins/qt4projectmanager/msvcenvironment.cpp @@ -33,12 +33,13 @@ #include "msvcenvironment.h" -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include using namespace Qt4ProjectManager::Internal; using ProjectExplorer::Environment; diff --git a/src/plugins/qt4projectmanager/msvcenvironment.h b/src/plugins/qt4projectmanager/msvcenvironment.h index b3b50718256..c7d7729a99c 100644 --- a/src/plugins/qt4projectmanager/msvcenvironment.h +++ b/src/plugins/qt4projectmanager/msvcenvironment.h @@ -34,10 +34,10 @@ #ifndef MSVCENVIRONMENT_H #define MSVCENVIRONMENT_H -#include -#include +#include +#include -#include +#include namespace Qt4ProjectManager { namespace Internal { diff --git a/src/plugins/qt4projectmanager/msvcparser.h b/src/plugins/qt4projectmanager/msvcparser.h index 6eaee5c97e9..06e0c3e6d61 100644 --- a/src/plugins/qt4projectmanager/msvcparser.h +++ b/src/plugins/qt4projectmanager/msvcparser.h @@ -34,7 +34,7 @@ #ifndef MSVCPARSER_H #define MSVCPARSER_H -#include +#include #include @@ -58,4 +58,4 @@ private: } // namespace ProjectExplorer -#endif // MsvcParser +#endif // MSVCPARSER_H diff --git a/src/plugins/qt4projectmanager/profileeditor.cpp b/src/plugins/qt4projectmanager/profileeditor.cpp index e173bff2316..12750868c4b 100644 --- a/src/plugins/qt4projectmanager/profileeditor.cpp +++ b/src/plugins/qt4projectmanager/profileeditor.cpp @@ -47,10 +47,10 @@ #include #include -#include -#include -#include #include +#include +#include +#include using namespace ExtensionSystem; using namespace Core; @@ -59,9 +59,10 @@ using namespace Qt4ProjectManager::Internal; using namespace ProjectExplorer; -ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor, Core::ICore *core) - :BaseTextEditorEditable(editor) +ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor) + : BaseTextEditorEditable(editor) { + Core::ICore *core = Core::ICore::instance(); m_context << core->uniqueIDManager()-> uniqueIdentifier(Qt4ProjectManager::Constants::C_PROFILEEDITOR); m_context << core->uniqueIDManager()-> @@ -72,15 +73,13 @@ ProFileEditorEditable::ProFileEditorEditable(ProFileEditor *editor, Core::ICore TextEditor::BaseTextEditorEditable *ProFileEditor::createEditableInterface() { - return new ProFileEditorEditable(this, m_core); + return new ProFileEditorEditable(this); } ProFileEditor::ProFileEditor(QWidget *parent, ProFileEditorFactory *factory, TextEditor::TextEditorActionHandler *ah) : BaseTextEditor(parent), m_factory(factory), m_ah(ah) { Qt4Manager *manager = factory->qt4ProjectManager(); - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - ProFileDocument *doc = new ProFileDocument(manager); doc->setMimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)); setBaseTextDocument(doc); diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h index e2c6c3be5c8..256e9a95008 100644 --- a/src/plugins/qt4projectmanager/profileeditor.h +++ b/src/plugins/qt4projectmanager/profileeditor.h @@ -41,12 +41,6 @@ namespace TextEditor { class FontSettings; -class BaseEditorActionHandler; -} - -namespace Core { -class ICore; -class IFile; } namespace Qt4ProjectManager { @@ -66,7 +60,7 @@ class ProFileEditor; class ProFileEditorEditable : public TextEditor::BaseTextEditorEditable { public: - ProFileEditorEditable(ProFileEditor *, Core::ICore *core); + ProFileEditorEditable(ProFileEditor *); QList context() const; bool duplicateSupported() const { return true; } @@ -98,7 +92,6 @@ public slots: virtual void setFontSettings(const TextEditor::FontSettings &); private: - Core::ICore *m_core; ProFileEditorFactory *m_factory; TextEditor::TextEditorActionHandler *m_ah; }; diff --git a/src/plugins/qt4projectmanager/profileeditorfactory.cpp b/src/plugins/qt4projectmanager/profileeditorfactory.cpp index dfe8c33232f..b3d32a025e4 100644 --- a/src/plugins/qt4projectmanager/profileeditorfactory.cpp +++ b/src/plugins/qt4projectmanager/profileeditorfactory.cpp @@ -74,7 +74,7 @@ QString ProFileEditorFactory::kind() const Core::IFile *ProFileEditorFactory::open(const QString &fileName) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind()); return iface ? iface->file() : 0; } diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 228aca7c2a3..d2d7980df04 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -34,10 +34,12 @@ #ifndef QMAKESTEP_H #define QMAKESTEP_H -#include +#include "ui_qmakestep.h" + +#include + #include -#include "ui_qmakestep.h" namespace Qt4ProjectManager { @@ -46,10 +48,11 @@ class Qt4Project; class QMakeStep : public ProjectExplorer::AbstractProcessStep { Q_OBJECT + public: QMakeStep(Qt4Project * project); ~QMakeStep(); - virtual bool init(const QString & name); + virtual bool init(const QString &name); virtual void run(QFutureInterface &); virtual QString name(); virtual QString displayName(); @@ -58,6 +61,7 @@ public: QStringList arguments(const QString &buildConfiguration); void setForced(bool b); bool forced(); + protected: virtual void processStartupFailed(); virtual bool processFinished(int exitCode, QProcess::ExitStatus status); diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp index de7141b0794..46d5b106f5c 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp @@ -36,9 +36,12 @@ #include "makestep.h" #include "qmakestep.h" #include "qt4project.h" +#include "qt4projectmanagerconstants.h" #include "qt4projectmanager.h" #include "ui_qt4buildconfigwidget.h" +#include + #include namespace { @@ -76,9 +79,11 @@ Qt4BuildConfigWidget::Qt4BuildConfigWidget(Qt4Project *project) connect(m_ui->importLabel, SIGNAL(linkActivated(QString)), this, SLOT(importLabelClicked())); + connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()), + this, SLOT(manageQtVersions())); + connect(m_pro->qt4ProjectManager()->versionManager(), SIGNAL(qtVersionsChanged()), this, SLOT(setupQtVersionsComboBox())); - } Qt4BuildConfigWidget::~Qt4BuildConfigWidget() @@ -86,6 +91,13 @@ Qt4BuildConfigWidget::~Qt4BuildConfigWidget() delete m_ui; } +void Qt4BuildConfigWidget::manageQtVersions() +{ + Core::ICore *core = Core::ICore::instance(); + core->showOptionsDialog(Constants::QT_CATEGORY, Constants::QTVERSION_PAGE); +} + + QString Qt4BuildConfigWidget::displayName() const { return tr("General"); diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h index 5e584fa149f..47f19be95e4 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.h @@ -64,6 +64,7 @@ private slots: void shadowBuildLineEditTextChanged(); void importLabelClicked(); void qtVersionComboBoxCurrentIndexChanged(const QString &); + void manageQtVersions(); private: Ui::Qt4BuildConfigWidget *m_ui; diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui index ab5e8858611..7ce0d1950d1 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui +++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.ui @@ -61,6 +61,13 @@ + + + + Manage Qt Versions + + + diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 8f836f64982..d7a1783feb5 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -49,6 +49,8 @@ #include #include +#include +#include #include @@ -260,7 +262,7 @@ bool Qt4PriFileNode::changeIncludes(ProFile *includeFile, const QStringList &pro bool Qt4PriFileNode::priFileWritable(const QString &path) { const QString dir = QFileInfo(path).dir().path(); - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); Core::IVersionControl *versionControl = core->vcsManager()->findVersionControlForDirectory(dir); switch (Core::EditorManager::promptReadOnlyFile(path, versionControl, core->mainWindow(), false)) { case Core::EditorManager::RO_OpenVCS: @@ -289,7 +291,7 @@ bool Qt4PriFileNode::saveModifiedEditors(const QString &path) QList allFileHandles; QList modifiedFileHandles; - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); foreach (Core::IFile *file, core->fileManager()->managedFiles(path)) { allFileHandles << file; @@ -426,7 +428,7 @@ void Qt4PriFileNode::changeFiles(const FileType fileType, void Qt4PriFileNode::save(ProFile *includeFile) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); Core::FileManager *fileManager = core->fileManager(); QList allFileHandles = fileManager->managedFiles(includeFile->fileName()); Core::IFile *modifiedFileHandle = 0; @@ -488,6 +490,9 @@ QStringList Qt4PriFileNode::varNames(FileType type) return vars; } +#include +#include + /*! \class Qt4ProFileNode Implements abstract ProjectNode class @@ -498,8 +503,7 @@ Qt4ProFileNode::Qt4ProFileNode(Qt4Project *project, : Qt4PriFileNode(project, this, filePath), // own stuff m_projectType(InvalidProject), - m_isQBuildProject(false), - m_dirWatcher(new DirectoryWatcher(this)) + m_isQBuildProject(false) { if (parent) setParent(parent); @@ -507,14 +511,13 @@ Qt4ProFileNode::Qt4ProFileNode(Qt4Project *project, m_updateTimer.setInterval(100); m_updateTimer.setSingleShot(true); - connect(m_dirWatcher, SIGNAL(directoryChanged(const QString&)), - this, SLOT(updateGeneratedFiles())); - connect(m_dirWatcher, SIGNAL(fileChanged(const QString&)), - this, SLOT(fileChanged(const QString&))); connect(m_project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(update())); connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(update())); + + connect(ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager(), SIGNAL(buildStateChanged(ProjectExplorer::Project*)), + this, SLOT(buildStateChanged(ProjectExplorer::Project*))); } Qt4ProFileNode::~Qt4ProFileNode() @@ -522,6 +525,12 @@ Qt4ProFileNode::~Qt4ProFileNode() } +void Qt4ProFileNode::buildStateChanged(ProjectExplorer::Project *project) +{ + if (project == m_project && !ProjectExplorer::ProjectExplorerPlugin::instance()->buildManager()->isBuilding(m_project)) + updateUiFiles(); +} + bool Qt4ProFileNode::hasTargets() const { return (projectType() == ApplicationTemplate) || (projectType() == LibraryTemplate); @@ -689,7 +698,7 @@ void Qt4ProFileNode::update() emit qt4Watcher->variablesChanged(this, m_varValues, newVarValues); } - updateGeneratedFiles(); + updateUiFiles(); foreach (NodesWatcher *watcher, watchers()) if (Qt4NodesWatcher *qt4Watcher = qobject_cast(watcher)) @@ -698,15 +707,6 @@ void Qt4ProFileNode::update() delete reader; } -void Qt4ProFileNode::fileChanged(const QString &filePath) -{ - CppTools::CppModelManagerInterface *modelManager = - ExtensionSystem::PluginManager::instance()->getObject(); - - // TODO compress - modelManager->updateSourceFiles(QStringList() << filePath); -} - namespace { // find all ui files in project class FindUiFileNodesVisitor : public ProjectExplorer::NodesVisitor { @@ -726,53 +726,52 @@ namespace { }; } -/* - Adds ui_xxx.h files to tree and monitors them / the UI_DIR directory for changes - */ -void Qt4ProFileNode::updateGeneratedFiles() +// This function is triggered after a build, and updates the state ui files +// That is it adds files that didn't exist yet to the project tree, and calls +// updateSourceFiles() for files that changed +// It does so by storing a modification time for each ui file we know about. + +// TODO this function should also be called if the build directory is changed +void Qt4ProFileNode::updateUiFiles() { + // Only those two project types can have ui files for us if (m_projectType != ApplicationTemplate && m_projectType != LibraryTemplate) return; + // Find all ui files FindUiFileNodesVisitor uiFilesVisitor; this->accept(&uiFilesVisitor); const QList uiFiles = uiFilesVisitor.uiFileNodes; - // monitor uic dir (only if there are .ui files) + // Find the UiDir, there can only ever be one + QString uiDir; // We should default to the build directory + QStringList tmp = m_varValues[UiDirVar]; + if (tmp.size() != 0) + uiDir = tmp.first(); - QSet oldUiDirs = m_dirWatcher->directories().toSet(); - QSet newUiDirs = - (!uiFiles.isEmpty()) ? m_varValues[UiDirVar].toSet() : QSet(); - foreach (const QString &uiDir, oldUiDirs - newUiDirs) - m_dirWatcher->removeDirectory(uiDir); - foreach (const QString &uiDir, newUiDirs - oldUiDirs) - m_dirWatcher->addDirectory(uiDir); - - // update generated files - - // Already existing FileNodes + // Collect all existing generated files QList existingFileNodes; foreach (FileNode *file, fileNodes()) { if (file->isGenerated()) existingFileNodes << file; } - // Convert uiFile to uiHeaderFilePath, find all headers that correspond - // and try to find them in uicDirs + // and try to find them in uiDir QStringList newFilePaths; - foreach (const QString &uicDir, m_varValues[UiDirVar]) { - foreach (FileNode *uiFile, uiFiles) { - const QString uiHeaderFilePath - = QString("%1/ui_%2.h").arg(uicDir, QFileInfo(uiFile->path()).baseName()); - if (QFileInfo(uiHeaderFilePath).exists()) - newFilePaths << uiHeaderFilePath; - } + foreach (FileNode *uiFile, uiFiles) { + const QString uiHeaderFilePath + = QString("%1/ui_%2.h").arg(uiDir, QFileInfo(uiFile->path()).baseName()); + if (QFileInfo(uiHeaderFilePath).exists()) + newFilePaths << uiHeaderFilePath; } + // Create a diff between those lists QList toRemove; QList toAdd; + // The list of files for which we call updateSourceFile + QStringList toUpdate; qSort(newFilePaths); qSort(existingFileNodes.begin(), existingFileNodes.end(), ProjectNode::sortNodesByPath); @@ -788,6 +787,13 @@ void Qt4ProFileNode::updateGeneratedFiles() toAdd << new FileNode(*newPathIter, ProjectExplorer::HeaderType, true); ++newPathIter; } else { // *existingNodeIter->path() == *newPathIter + QString fileName = (*existingNodeIter)->path(); + QMap::const_iterator it = m_uitimestamps.find(fileName); + QDateTime lastModified = QFileInfo(fileName).lastModified(); + if (it == m_uitimestamps.constEnd() || it.value() < lastModified) { + toUpdate << fileName; + m_uitimestamps[fileName] = lastModified; + } ++existingNodeIter; ++newPathIter; } @@ -801,32 +807,46 @@ void Qt4ProFileNode::updateGeneratedFiles() ++newPathIter; } + // Update project tree if (!toRemove.isEmpty()) { foreach (FileNode *file, toRemove) - m_dirWatcher->removeFile(file->path()); + m_uitimestamps.remove(file->path()); removeFileNodes(toRemove, this); } + + CppTools::CppModelManagerInterface *modelManager = + ExtensionSystem::PluginManager::instance()->getObject(); + if (!toAdd.isEmpty()) { - foreach (FileNode *file, toAdd) - m_dirWatcher->addFile(file->path()); + foreach (FileNode *file, toAdd) { + m_uitimestamps.insert(file->path(), QFileInfo(file->path()).lastModified()); + toUpdate << file->path(); + + // Also adding files depending on that. + QString fileName = QFileInfo(file->path()).fileName(); + foreach (CPlusPlus::Document::Ptr doc, modelManager->snapshot()) { + if (doc->includedFiles().contains(fileName)) { + if (!toUpdate.contains(doc->fileName())) + toUpdate << doc->fileName(); + } + } + } addFileNodes(toAdd, this); } + modelManager->updateSourceFiles(toUpdate); } ProFileReader *Qt4PriFileNode::createProFileReader() const { ProFileReader *reader = new ProFileReader(); - connect(reader, SIGNAL(errorFound(const QString &)), - m_project, SLOT(proFileParseError(const QString &))); + connect(reader, SIGNAL(errorFound(QString)), + m_project, SLOT(proFileParseError(QString))); QtVersion *version = m_project->qtVersion(m_project->activeBuildConfiguration()); - if (version->isValid()) { + if (version->isValid()) reader->setQtVersion(version); - } - QHash variables; - variables.insert(QLatin1String("OUT_PWD"), QStringList(m_qt4ProFileNode->buildDir())); - reader->addVariables(variables); + reader->setOutputDir(m_qt4ProFileNode->buildDir()); return reader; } @@ -957,13 +977,6 @@ void Qt4ProFileNode::invalidate() clear(); - // remove monitored files/directories - foreach (const QString &file, m_dirWatcher->files()) - m_dirWatcher->removeFile(file); - foreach (const QString &dir, m_dirWatcher->directories()) - m_dirWatcher->removeDirectory(dir); - - // change project type Qt4ProjectType oldType = m_projectType; m_projectType = InvalidProject; diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index 9ea6b07c71c..5d428cc6720 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -35,10 +35,13 @@ #define QT4NODES_H #include +#include #include #include #include +#include +#include // defined in proitems.h QT_BEGIN_NAMESPACE @@ -184,8 +187,8 @@ public slots: void scheduleUpdate(); void update(); private slots: - void fileChanged(const QString &filePath); - void updateGeneratedFiles(); + void updateUiFiles(); + void buildStateChanged(ProjectExplorer::Project*); private: Qt4ProFileNode *createSubProFileNode(const QString &path); @@ -205,7 +208,7 @@ private: bool m_isQBuildProject; QTimer m_updateTimer; - DirectoryWatcher *m_dirWatcher; + QMap m_uitimestamps; friend class Qt4NodeHierarchy; }; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 7af448e2331..a8fdc907cd0 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -48,21 +48,22 @@ #include "projectloadwizard.h" #include "gdbmacrosbuildstep.h" +#include #include #include #include +#include #include #include #include -#include -#include #include +#include +#include using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using namespace ProjectExplorer; -using Core::VariableManager; enum { debug = 0 }; @@ -380,9 +381,10 @@ void Qt4Project::updateCodeModel() qDebug()<<"Qt4Project::updateCodeModel()"; CppTools::CppModelManagerInterface *modelmanager = - m_manager->pluginManager()->getObject(); + ExtensionSystem::PluginManager::instance() + ->getObject(); - if (! modelmanager) + if (!modelmanager) return; QStringList allIncludePaths; @@ -569,17 +571,6 @@ QStringList Qt4Project::files(FilesMode fileMode) const return files; } -QList Qt4Project::dependencies() -{ - QList result; - // TODO profile cache is no longer -// ProFileCache *cache = m_manager->proFileCache(); -// foreach (const QString &file, cache->dependencies(m_rootProjectNode)) { -// result << cache->fileInterface(file); -// } - return result; -} - QList Qt4Project::dependsOn() { // NBS implement dependsOn @@ -610,9 +601,13 @@ void Qt4Project::addDefaultBuild() makeStep = new MakeStep(this); insertBuildStep(2, makeStep); + GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this); + gdbmacrosCleanStep->setValue("clean", true); + insertCleanStep(0, gdbmacrosCleanStep); + MakeStep* cleanStep = new MakeStep(this); cleanStep->setValue("clean", true); - insertCleanStep(0, cleanStep); + insertCleanStep(1, cleanStep); ProjectLoadWizard wizard(this); wizard.execDialog(); @@ -629,6 +624,10 @@ void Qt4Project::addDefaultBuild() if (v.isValid() && v.toBool()) { GdbMacrosBuildStep *gdbmacrostep = new GdbMacrosBuildStep(this); insertBuildStep(0, gdbmacrostep); + + GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this); + gdbmacrosCleanStep ->setValue("clean", true); + insertCleanStep(0, gdbmacrosCleanStep ); break; } } @@ -646,7 +645,7 @@ void Qt4Project::newBuildConfiguration(const QString &buildConfiguration) void Qt4Project::proFileParseError(const QString &errorMessage) { - m_manager->core()->messageManager()->printToOutputPane(errorMessage); + Core::ICore::instance()->messageManager()->printToOutputPane(errorMessage); } Qt4ProFileNode *Qt4Project::rootProjectNode() const diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index dd8413aec14..8d44d81df20 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -42,22 +42,25 @@ #include "qmakestep.h" #include +#include #include #include #include #include #include #include +#include #include +#include #include -#include -#include -#include #include +#include +#include #include -#include +#include #include +#include #include using namespace Qt4ProjectManager; @@ -72,17 +75,21 @@ using ProjectExplorer::ResourceType; using ProjectExplorer::UnknownFileType; // Known file types of a Qt 4 project -static const char* qt4FileTypes[] = {"CppHeaderFiles", "CppSourceFiles", "Qt4FormFiles", "Qt4ResourceFiles" }; +static const char* qt4FileTypes[] = { + "CppHeaderFiles", + "CppSourceFiles", + "Qt4FormFiles", + "Qt4ResourceFiles" +}; -Qt4Manager::Qt4Manager(Qt4ProjectManagerPlugin *plugin, Core::ICore *core) : - m_mimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)), +Qt4Manager::Qt4Manager(Qt4ProjectManagerPlugin *plugin) + : m_mimeType(QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE)), m_plugin(plugin), - m_core(core), m_projectExplorer(0), m_contextProject(0), m_languageID(0) { - m_languageID = m_core->uniqueIDManager()-> + m_languageID = Core::ICore::instance()->uniqueIDManager()-> uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX); } @@ -108,7 +115,8 @@ void Qt4Manager::notifyChanged(const QString &name) void Qt4Manager::init() { - m_projectExplorer = m_core->pluginManager()->getObject(); + m_projectExplorer = ExtensionSystem::PluginManager::instance() + ->getObject(); } int Qt4Manager::projectContext() const @@ -135,7 +143,8 @@ ProjectExplorer::Project* Qt4Manager::openProject(const QString &fileName) QString errorMessage; - m_core->messageManager()->displayStatusBarMessage(tr("Loading project %1 ...").arg(fileName), 50000); + Core::MessageManager *messageManager = Core::ICore::instance()->messageManager(); + messageManager->displayStatusBarMessage(tr("Loading project %1 ...").arg(fileName), 50000); // TODO Make all file paths relative & remove this hack // We convert the path to an absolute one here because qt4project.cpp @@ -144,25 +153,25 @@ ProjectExplorer::Project* Qt4Manager::openProject(const QString &fileName) QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath(); if (canonicalFilePath.isEmpty()) { - m_core->messageManager()->printToOutputPane(tr("Failed opening project '%1': Project file does not exist").arg(canonicalFilePath)); - m_core->messageManager()->displayStatusBarMessage(tr("Failed opening project"), 5000); + messageManager->printToOutputPane(tr("Failed opening project '%1': Project file does not exist").arg(canonicalFilePath)); + messageManager->displayStatusBarMessage(tr("Failed opening project"), 5000); return 0; } foreach (ProjectExplorer::Project *pi, projectExplorer()->session()->projects()) { if (canonicalFilePath == pi->file()->fileName()) { - m_core->messageManager()->printToOutputPane(tr("Failed opening project '%1': Project already open").arg(canonicalFilePath)); - m_core->messageManager()->displayStatusBarMessage(tr("Failed opening project"), 5000); + messageManager->printToOutputPane(tr("Failed opening project '%1': Project already open").arg(canonicalFilePath)); + messageManager->displayStatusBarMessage(tr("Failed opening project"), 5000); return 0; } } - m_core->messageManager()->displayStatusBarMessage(tr("Opening %1 ...").arg(fileName)); + messageManager->displayStatusBarMessage(tr("Opening %1 ...").arg(fileName)); QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); Qt4Project *pro = new Qt4Project(this, canonicalFilePath); - m_core->messageManager()->displayStatusBarMessage(tr("Done opening project"), 5000); + messageManager->displayStatusBarMessage(tr("Done opening project"), 5000); return pro; } @@ -171,16 +180,6 @@ ProjectExplorer::ProjectExplorerPlugin *Qt4Manager::projectExplorer() const return m_projectExplorer; } -Core::ICore *Qt4Manager::core() const -{ - return m_core; -} - -ExtensionSystem::PluginManager *Qt4Manager::pluginManager() const -{ - return m_core->pluginManager(); -} - ProjectExplorer::Node *Qt4Manager::contextNode() const { return m_contextNode; diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h index 4bb4d6eaf18..b6fc317362e 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.h +++ b/src/plugins/qt4projectmanager/qt4projectmanager.h @@ -44,10 +44,6 @@ namespace ExtensionSystem { class PluginManager; } -namespace Core { -class ICore; -} - namespace ProjectExplorer { class Project; class ProjectExplorerPlugin; @@ -64,13 +60,12 @@ class QtVersionManager; class Qt4Project; -class Qt4Manager - : public ProjectExplorer::IProjectManager +class Qt4Manager : public ProjectExplorer::IProjectManager { Q_OBJECT public: - Qt4Manager(Internal::Qt4ProjectManagerPlugin *plugin, Core::ICore *core); + Qt4Manager(Internal::Qt4ProjectManagerPlugin *plugin); ~Qt4Manager(); void init(); @@ -80,10 +75,8 @@ public: void notifyChanged(const QString &name); ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const; - ExtensionSystem::PluginManager *pluginManager() const; - Core::ICore *core() const; - //ProjectExplorer::IProjectManager + // ProjectExplorer::IProjectManager int projectContext() const; int projectLanguage() const; @@ -111,7 +104,6 @@ private: const QString m_mimeType; Internal::Qt4ProjectManagerPlugin *m_plugin; - Core::ICore *m_core; ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer; ProjectExplorer::Node *m_contextNode; diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 01a0b91aae6..0d90983aa88 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -48,20 +48,24 @@ #include "profilereader.h" #include "gdbmacrosbuildstep.h" +#include +#include +#include #include +#include +#include #include #include #include #include #include -#include +#include +#include #include -#include #ifdef WITH_TESTS #include -#include #endif using namespace Qt4ProjectManager::Internal; @@ -92,33 +96,37 @@ static Core::Command *createSeparator(Core::ActionManager *am, return am->registerAction(tmpaction, name, context); } */ -bool Qt4ProjectManagerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) + +bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":qt4projectmanager/Qt4ProjectManager.mimetypes.xml"), errorMessage)) + Q_UNUSED(arguments); + + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":qt4projectmanager/Qt4ProjectManager.mimetypes.xml"), errorMessage)) return false; - m_projectExplorer = m_core->pluginManager()->getObject(); + m_projectExplorer = ExtensionSystem::PluginManager::instance() + ->getObject(); - Core::ActionManager *am = m_core->actionManager(); + Core::ActionManager *am = core->actionManager(); //create and register objects - m_qt4ProjectManager = new Qt4Manager(this, m_core); + m_qt4ProjectManager = new Qt4Manager(this); addObject(m_qt4ProjectManager); TextEditor::TextEditorActionHandler *editorHandler - = new TextEditor::TextEditorActionHandler(m_core, Constants::C_PROFILEEDITOR); + = new TextEditor::TextEditorActionHandler(Constants::C_PROFILEEDITOR); m_proFileEditorFactory = new ProFileEditorFactory(m_qt4ProjectManager, editorHandler); addObject(m_proFileEditorFactory); - GuiAppWizard *guiWizard = new GuiAppWizard(m_core); + GuiAppWizard *guiWizard = new GuiAppWizard; addAutoReleasedObject(guiWizard); - ConsoleAppWizard *consoleWizard = new ConsoleAppWizard(m_core); + ConsoleAppWizard *consoleWizard = new ConsoleAppWizard; addAutoReleasedObject(consoleWizard); - LibraryWizard *libWizard = new LibraryWizard(m_core); + LibraryWizard *libWizard = new LibraryWizard; addAutoReleasedObject(libWizard); addAutoReleasedObject(new QMakeBuildStepFactory); @@ -145,7 +153,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList & /*arguments*/, QStr am->actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT); //register actions - m_projectContext = m_core->uniqueIDManager()-> + m_projectContext = core->uniqueIDManager()-> uniqueIdentifier(Qt4ProjectManager::Constants::PROJECT_KIND); QList context = QList() << m_projectContext; Core::Command *command; diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h index 584a9bfca47..374e8918345 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h @@ -36,7 +36,6 @@ #include #include -#include namespace Qt4ProjectManager { @@ -79,7 +78,6 @@ private slots: #endif private: - Core::ICore *m_core; ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer; ProFileEditorFactory *m_proFileEditorFactory; Qt4Manager *m_qt4ProjectManager; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 99c19e3a7e9..3ff03bcc28a 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -181,8 +181,7 @@ void Qt4RunConfiguration::updateCachedValues() ProFileReader *reader = static_cast(project())->createProFileReader(); if (!reader->readProFile(m_proFilePath)) { delete reader; - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - core->messageManager()->printToOutputPane(QString("Could not parse %1. The Qt4 run configuration %2 can not be started.").arg(m_proFilePath).arg(name())); + Core::ICore::instance()->messageManager()->printToOutputPane(QString("Could not parse %1. The Qt4 run configuration %2 can not be started.").arg(m_proFilePath).arg(name())); return; } @@ -232,7 +231,7 @@ QString Qt4RunConfiguration::resolveVariables(const QString &buildConfiguration, QString relSubDir = QFileInfo(project()->file()->fileName()).absoluteDir().relativeFilePath(m_srcDir); QString baseDir = QDir(project()->buildDirectory(buildConfiguration)).absoluteFilePath(relSubDir); - Core::VariableManager *vm = ExtensionSystem::PluginManager::instance()->getObject()->variableManager(); + Core::VariableManager *vm = Core::ICore::instance()->variableManager(); if (!vm) return QString(); QString dest; @@ -306,14 +305,10 @@ QString Qt4RunConfiguration::qmakeBuildConfigFromBuildConfiguration(const QStrin QVariant qmakeBuildConfiguration = qs->value(buildConfigurationName, "buildConfiguration"); if (qmakeBuildConfiguration.isValid()) { QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeBuildConfiguration.toInt()); - if (projectBuildConfiguration & QtVersion::BuildAll) { - if (projectBuildConfiguration & QtVersion::DebugBuild) - return "debug"; - else - return "release"; - } else { - return ""; - } + if (projectBuildConfiguration & QtVersion::DebugBuild) + return "debug"; + else + return "release"; } else { // Old sytle always CONFIG+=debug_and_release if (qobject_cast(project())->qtVersion(buildConfigurationName)->defaultBuildConfig() & QtVersion::DebugBuild) diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index 2becf546550..6e67989158b 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -37,7 +37,9 @@ #include "msvcenvironment.h" #include "cesdkhandler.h" +#include #include +#include #include #include @@ -62,8 +64,7 @@ static const char *newQtVersionsKey = "NewQtVersions"; QtVersionManager::QtVersionManager() : m_emptyVersion(new QtVersion) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - QSettings *s = m_core->settings(); + QSettings *s = Core::ICore::instance()->settings(); m_defaultVersion = s->value(defaultQtVersionKey, 0).toInt(); m_idcount = 1; @@ -115,7 +116,8 @@ void QtVersionManager::addVersion(QtVersion *version) void QtVersionManager::updateDocumentation() { - Help::HelpManager *helpManager = m_core->pluginManager()->getObject(); + Help::HelpManager *helpManager + = ExtensionSystem::PluginManager::instance()->getObject(); Q_ASSERT(helpManager); QStringList fileEndings = QStringList() << "/qch/qt.qch" << "/qch/qmake.qch" << "/qch/designer.qch"; QStringList files; @@ -195,7 +197,7 @@ void QtVersionManager::apply() void QtVersionManager::writeVersionsIntoSettings() { - QSettings *s = m_core->settings(); + QSettings *s = Core::ICore::instance()->settings(); s->setValue(defaultQtVersionKey, m_defaultVersion); s->beginWriteArray("QtVersions"); for (int i = 0; i < m_versions.size(); ++i) { @@ -234,7 +236,7 @@ void QtVersionManager::addNewVersionsFromInstaller() // NewQtVersions="qt 4.3.2=c:\\qt\\qt432;qt embedded=c:\\qtembedded;" // or NewQtVersions="qt 4.3.2=c:\\qt\\qt432=c:\\qtcreator\\mingw\\=prependToPath; // Duplicate entries are not added, the first new version is set as default. - QSettings *settings = m_core->settings(); + QSettings *settings = Core::ICore::instance()->settings(); if (!settings->contains(newQtVersionsKey)) return; diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index a9a76066a33..f6ccd017b67 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -37,8 +37,7 @@ #include "ui_qtversionmanager.h" #include -#include -#include +#include #include #include @@ -208,7 +207,6 @@ private: static int indexOfVersionInList(const QtVersion * const version, const QList &list); void updateUniqueIdToIndexMap(); - Core::ICore *m_core; QPointer m_widget; QtVersion *m_emptyVersion; diff --git a/src/plugins/qt4projectmanager/speinfo.cpp b/src/plugins/qt4projectmanager/speinfo.cpp index 04df918bb51..16fa5874127 100644 --- a/src/plugins/qt4projectmanager/speinfo.cpp +++ b/src/plugins/qt4projectmanager/speinfo.cpp @@ -491,7 +491,7 @@ public: class InfoItemModulesTest : public SPEInfoItem { public: - InfoItemModulesTest(): SPEInfoItem("qtestlib", QtModule) + InfoItemModulesTest(): SPEInfoItem("testlib", QtModule) { m_data.insert(keyIncludedByDefault, false); } diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp index 73884791fe8..402ba7a2ffa 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp @@ -58,8 +58,8 @@ static const char *mainSourceFileC = "main"; namespace Qt4ProjectManager { namespace Internal { -ConsoleAppWizard::ConsoleAppWizard(Core::ICore *core) : - QtWizard(core, tr("Qt4 Console Application"), +ConsoleAppWizard::ConsoleAppWizard() + : QtWizard(tr("Qt4 Console Application"), tr("Creates a Qt4 console application."), QIcon(":/wizards/images/console.png")) { diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h index 36fff218dde..be080c08507 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.h +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.h @@ -46,7 +46,7 @@ class ConsoleAppWizard : public QtWizard Q_OBJECT public: - explicit ConsoleAppWizard(Core::ICore *core); + ConsoleAppWizard(); protected: virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp index 14df3821ccd..d0a626aecce 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp @@ -70,12 +70,10 @@ static inline QStringList baseClasses() } namespace Qt4ProjectManager { - namespace Internal { -GuiAppWizard::GuiAppWizard(Core::ICore *core) : - QtWizard(core, - tr("Qt4 Gui Application"), +GuiAppWizard::GuiAppWizard() + : QtWizard(tr("Qt4 Gui Application"), tr("Creates a Qt4 Gui Application with one form."), QIcon(":/wizards/images/gui.png")) { diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.h b/src/plugins/qt4projectmanager/wizards/guiappwizard.h index dd7d7e7d02d..d3ce961b2f2 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizard.h +++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.h @@ -47,7 +47,7 @@ class GuiAppWizard : public QtWizard Q_OBJECT public: - explicit GuiAppWizard(Core::ICore *core); + GuiAppWizard(); protected: virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp index 0bc379ecbea..0c3c6513eb3 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp @@ -91,7 +91,7 @@ void GuiAppWizardDialog::setBaseClasses(const QStringList &baseClasses) m_filesPage->setBaseClassName(baseClasses.front()); } -void GuiAppWizardDialog::setSuffixes(const QString &header, const QString &source, const QString &form) +void GuiAppWizardDialog::setSuffixes(const QString &header, const QString &source, const QString &form) { m_filesPage->setSuffixes(header, source, form); } diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h index 080cf802c26..dbd2b69a421 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h +++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.h @@ -37,10 +37,12 @@ #include namespace Core { - namespace Utils { - class ProjectIntroPage; - } -} +namespace Utils { + +class ProjectIntroPage; + +} // namespace Utils +} // namespace Core namespace Qt4ProjectManager { namespace Internal { @@ -50,7 +52,8 @@ class ModulesPage; class FilesPage; // Additional parameters required besides QtProjectParameters -struct GuiAppParameters { +struct GuiAppParameters +{ GuiAppParameters(); QString className; QString baseClassName; diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp index e79cd1b6588..788563f5cc3 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp @@ -50,8 +50,8 @@ namespace Qt4ProjectManager { namespace Internal { -LibraryWizard::LibraryWizard(Core::ICore *core) : - QtWizard(core, tr("C++ Library"), +LibraryWizard::LibraryWizard() + : QtWizard(tr("C++ Library"), tr("Creates a C++ Library."), QIcon(":/wizards/images/lib.png")) { @@ -69,8 +69,9 @@ QWizard *LibraryWizard::createWizardDialog(QWidget *parent, Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, - QString * /*errorMessage*/) const + QString *errorMessage) const { + Q_UNUSED(errorMessage); const LibraryWizardDialog *dialog = qobject_cast(w); const QtProjectParameters projectParams = dialog->parameters(); const QString projectPath = projectParams.projectPath(); diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.h b/src/plugins/qt4projectmanager/wizards/librarywizard.h index 203179d4c91..f5e6b2af845 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizard.h +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.h @@ -48,7 +48,7 @@ class LibraryWizard : public QtWizard Q_OBJECT public: - explicit LibraryWizard(Core::ICore *core); + LibraryWizard(); protected: virtual QWizard *createWizardDialog(QWidget *parent, diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp index 15f334cf202..a8fd467f80e 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp @@ -35,6 +35,8 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" +#include +#include #include #include @@ -61,9 +63,8 @@ static inline Core::BaseFileWizardParameters } // -------------------- QtWizard -QtWizard::QtWizard(Core::ICore *core, const QString &name, - const QString &description, const QIcon &icon) : - Core::BaseFileWizard(wizardParameters(name, description, icon), core), +QtWizard::QtWizard(const QString &name, const QString &description, const QIcon &icon) : + Core::BaseFileWizard(wizardParameters(name, description, icon)), m_projectExplorer(ExtensionSystem::PluginManager::instance()->getObject()) { } @@ -101,7 +102,7 @@ bool QtWizard::postGenerateFiles(const Core::GeneratedFiles &l, QString *errorMe QString QtWizard::templateDir() const { - QString rc = core()->resourcePath(); + QString rc = Core::ICore::instance()->resourcePath(); rc += QLatin1String("/templates/qt4project"); return rc; } diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h index 9858251a9df..dd031ef7e01 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.h +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h @@ -38,13 +38,8 @@ #include -QT_BEGIN_NAMESPACE -class QTextStream; -class QDir; -QT_END_NAMESPACE - namespace ProjectExplorer { - class ProjectExplorerPlugin; +class ProjectExplorerPlugin; } namespace Qt4ProjectManager { @@ -60,14 +55,11 @@ namespace Internal { class QtWizard : public Core::BaseFileWizard { - Q_DISABLE_COPY(QtWizard) Q_OBJECT - -public: + Q_DISABLE_COPY(QtWizard) protected: - explicit QtWizard(Core::ICore *core, const QString &name, - const QString &description, const QIcon &icon); + QtWizard(const QString &name, const QString &description, const QIcon &icon); QString templateDir() const; diff --git a/src/plugins/qtestlib/qtestlibplugin.cpp b/src/plugins/qtestlib/qtestlibplugin.cpp index 5b38e05b33a..7d0cada5323 100644 --- a/src/plugins/qtestlib/qtestlibplugin.cpp +++ b/src/plugins/qtestlib/qtestlibplugin.cpp @@ -33,25 +33,26 @@ #include "qtestlibplugin.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include using namespace QTestLib::Internal; diff --git a/src/plugins/qtscripteditor/qtscripteditor.cpp b/src/plugins/qtscripteditor/qtscripteditor.cpp index 4062b69e507..a7efcc0192c 100644 --- a/src/plugins/qtscripteditor/qtscripteditor.cpp +++ b/src/plugins/qtscripteditor/qtscripteditor.cpp @@ -57,12 +57,10 @@ ScriptEditorEditable::ScriptEditorEditable(ScriptEditor *editor, const QListduplicateFrom(this); QtScriptEditorPlugin::initializeEditor(editor); return editor; @@ -157,7 +155,7 @@ void ScriptEditor::contextMenuEvent(QContextMenuEvent *e) { QMenu *menu = createStandardContextMenu(); - if (Core::ActionContainer *mcontext = m_core->actionManager()->actionContainer(QtScriptEditor::Constants::M_CONTEXT)) { + if (Core::ActionContainer *mcontext = Core::ICore::instance()->actionManager()->actionContainer(QtScriptEditor::Constants::M_CONTEXT)) { QMenu *contextMenu = mcontext->menu(); foreach (QAction *action, contextMenu->actions()) menu->addAction(action); diff --git a/src/plugins/qtscripteditor/qtscripteditor.h b/src/plugins/qtscripteditor/qtscripteditor.h index 1dda5a95e92..d4f0ca94bb6 100644 --- a/src/plugins/qtscripteditor/qtscripteditor.h +++ b/src/plugins/qtscripteditor/qtscripteditor.h @@ -50,7 +50,7 @@ class ScriptEditor; class ScriptEditorEditable : public TextEditor::BaseTextEditorEditable { public: - ScriptEditorEditable(ScriptEditor *, const QList&); + ScriptEditorEditable(ScriptEditor *, const QList &); QList context() const; bool duplicateSupported() const { return true; } @@ -71,9 +71,8 @@ public: typedef QList Context; ScriptEditor(const Context &context, - Core::ICore *core, - TextEditor::TextEditorActionHandler *ah, - QWidget *parent = 0); + TextEditor::TextEditorActionHandler *ah, + QWidget *parent = 0); ~ScriptEditor(); ScriptEditor *duplicate(QWidget *parent); @@ -90,7 +89,6 @@ private: virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar); const Context m_context; - Core::ICore *m_core; TextEditor::TextEditorActionHandler *m_ah; }; diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp index bb306f1a3f2..18d57a6a7b2 100644 --- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp +++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.cpp @@ -35,17 +35,18 @@ #include "qtscripteditorconstants.h" #include "qtscripteditor.h" +#include #include #include -#include -#include -#include #include +#include +#include +#include -static QAction *actionFromId(Core::ICore *core, const QString &id) +static QAction *actionFromId(const QString &id) { - Core::Command *cmd = core->actionManager()->command(id); + Core::Command *cmd = Core::ICore::instance()->actionManager()->command(id); if (!cmd) return 0; return cmd->action(); @@ -54,9 +55,8 @@ static QAction *actionFromId(Core::ICore *core, const QString &id) namespace QtScriptEditor { namespace Internal { -QtScriptEditorActionHandler::QtScriptEditorActionHandler(Core::ICore *core) : - TextEditor::TextEditorActionHandler(core, - QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR), +QtScriptEditorActionHandler::QtScriptEditorActionHandler() + : TextEditor::TextEditorActionHandler(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR), Format), m_runAction(0) { @@ -65,7 +65,7 @@ QtScriptEditorActionHandler::QtScriptEditorActionHandler(Core::ICore *core) : void QtScriptEditorActionHandler::createActions() { TextEditor::TextEditorActionHandler::createActions(); - m_runAction = actionFromId(core(), QLatin1String(QtScriptEditor::Constants::RUN)); + m_runAction = actionFromId(QLatin1String(QtScriptEditor::Constants::RUN)); connect(m_runAction, SIGNAL(triggered()), this, SLOT(run())); } @@ -88,7 +88,7 @@ void QtScriptEditorActionHandler::run() // run Stack errorStack; QString errorMessage; - if (core()->scriptManager()->runScript(script, &errorMessage, &errorStack)) + if (Core::ICore::instance()->scriptManager()->runScript(script, &errorMessage, &errorStack)) return; // try to find a suitable error line in the stack @@ -104,7 +104,7 @@ void QtScriptEditorActionHandler::run() } if (errorLineNumber) currentEditor()->gotoLine(errorLineNumber); - QMessageBox::critical(core()->mainWindow(), tr("Qt Script Error"), errorMessage); + QMessageBox::critical(Core::ICore::instance()->mainWindow(), tr("Qt Script Error"), errorMessage); } } // namespace Internal diff --git a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h index d18ee2d25ff..c4940cfa160 100644 --- a/src/plugins/qtscripteditor/qtscripteditoractionhandler.h +++ b/src/plugins/qtscripteditor/qtscripteditoractionhandler.h @@ -44,7 +44,7 @@ class QtScriptEditorActionHandler : public TextEditor::TextEditorActionHandler Q_OBJECT public: - QtScriptEditorActionHandler(Core::ICore *core); + QtScriptEditorActionHandler(); private: virtual void createActions(); diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp index 392b627363a..9e169648f12 100644 --- a/src/plugins/qtscripteditor/qtscripteditorfactory.cpp +++ b/src/plugins/qtscripteditor/qtscripteditorfactory.cpp @@ -37,23 +37,21 @@ #include "qtscripteditorconstants.h" #include "qtscripteditorplugin.h" +#include #include #include -#include +#include using namespace QtScriptEditor::Internal; using namespace QtScriptEditor::Constants; -QtScriptEditorFactory::QtScriptEditorFactory(Core::ICore *core, - const Context &context, - QObject *parent) : - Core::IEditorFactory(parent), +QtScriptEditorFactory::QtScriptEditorFactory(const Context &context, QObject *parent) + : Core::IEditorFactory(parent), m_kind(QLatin1String(C_QTSCRIPTEDITOR)), m_mimeTypes(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR_MIMETYPE)), m_context(context), - m_core(core), - m_actionHandler(new QtScriptEditorActionHandler(core)) + m_actionHandler(new QtScriptEditorActionHandler) { } @@ -69,7 +67,7 @@ QString QtScriptEditorFactory::kind() const Core::IFile *QtScriptEditorFactory::open(const QString &fileName) { - Core::IEditor *iface = m_core->editorManager()->openEditor(fileName, kind()); + Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind()); if (!iface) { qWarning() << "QtScriptEditorFactory::open: openEditor failed for " << fileName; return 0; @@ -79,7 +77,7 @@ Core::IFile *QtScriptEditorFactory::open(const QString &fileName) Core::IEditor *QtScriptEditorFactory::createEditor(QWidget *parent) { - ScriptEditor *rc = new ScriptEditor(m_context, m_core, m_actionHandler, parent); + ScriptEditor *rc = new ScriptEditor(m_context, m_actionHandler, parent); QtScriptEditorPlugin::initializeEditor(rc); return rc->editableInterface(); } diff --git a/src/plugins/qtscripteditor/qtscripteditorfactory.h b/src/plugins/qtscripteditor/qtscripteditorfactory.h index f97cdab1eed..8048f30053d 100644 --- a/src/plugins/qtscripteditor/qtscripteditorfactory.h +++ b/src/plugins/qtscripteditor/qtscripteditorfactory.h @@ -34,15 +34,10 @@ #ifndef RQTSCRIPTEDITORFACTORY_H #define RQTSCRIPTEDITORFACTORY_H -#include #include #include -namespace Core { -class ICore; -} - namespace TextEditor { class TextEditorActionHandler; } @@ -59,13 +54,11 @@ class QtScriptEditorFactory : public Core::IEditorFactory public: typedef QList Context; - QtScriptEditorFactory(Core::ICore *core, - const Context &context, - QObject *parent); + QtScriptEditorFactory(const Context &context, QObject *parent); ~QtScriptEditorFactory(); virtual QStringList mimeTypes() const; - //EditorFactory + // IEditorFactory QString kind() const; Core::IFile *open(const QString &fileName); Core::IEditor *createEditor(QWidget *parent); @@ -75,7 +68,6 @@ private: const QStringList m_mimeTypes; const Context m_context; - Core::ICore *m_core; TextEditor::TextEditorActionHandler *m_actionHandler; }; diff --git a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp index 1bf230155b6..41a11d5a7af 100644 --- a/src/plugins/qtscripteditor/qtscripteditorplugin.cpp +++ b/src/plugins/qtscripteditor/qtscripteditorplugin.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -50,7 +51,7 @@ #include #include -#include +#include #include #include @@ -77,7 +78,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString { typedef SharedTools::QScriptHighlighter QScriptHighlighter; - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/qtscripteditor/QtScriptEditor.mimetypes.xml"), error_message)) return false; m_scriptcontext << core->uniqueIDManager()->uniqueIdentifier(QtScriptEditor::Constants::C_QTSCRIPTEDITOR); @@ -86,7 +87,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString registerActions(core); - m_editor = new QtScriptEditorFactory(core, m_context, this); + m_editor = new QtScriptEditorFactory(m_context, this); addObject(m_editor); Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); @@ -97,7 +98,7 @@ bool QtScriptEditorPlugin::initialize(const QStringList & /*arguments*/, QString m_wizard = new TextEditor::TextFileWizard(QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR_MIMETYPE), QLatin1String(QtScriptEditor::Constants::C_QTSCRIPTEDITOR), QLatin1String("qtscript$"), - wizardParameters, core, this); + wizardParameters, this); addObject(m_wizard); error_message->clear(); diff --git a/src/plugins/quickopen/basefilefilter.cpp b/src/plugins/quickopen/basefilefilter.cpp index 65aea6d2552..147cd5b07d1 100644 --- a/src/plugins/quickopen/basefilefilter.cpp +++ b/src/plugins/quickopen/basefilefilter.cpp @@ -33,6 +33,7 @@ #include "basefilefilter.h" +#include #include #include @@ -40,11 +41,8 @@ using namespace Core; using namespace QuickOpen; -BaseFileFilter::BaseFileFilter(ICore *core) - : m_core(core), - m_files(QStringList()), - m_fileNames(QStringList()), - m_forceNewSearchList(false) +BaseFileFilter::BaseFileFilter() + : m_forceNewSearchList(false) { } @@ -91,8 +89,9 @@ QList BaseFileFilter::matchesFor(const QString &origEntry) void BaseFileFilter::accept(QuickOpen::FilterEntry selection) const { - m_core->editorManager()->openEditor(selection.internalData.toString()); - m_core->editorManager()->ensureEditorManagerVisible(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + em->openEditor(selection.internalData.toString()); + em->ensureEditorManagerVisible(); } void BaseFileFilter::generateFileNames() diff --git a/src/plugins/quickopen/basefilefilter.h b/src/plugins/quickopen/basefilefilter.h index ee9d302be5c..711b84c0bae 100644 --- a/src/plugins/quickopen/basefilefilter.h +++ b/src/plugins/quickopen/basefilefilter.h @@ -37,12 +37,8 @@ #include "quickopen_global.h" #include "iquickopenfilter.h" -#include - #include #include -#include -#include namespace QuickOpen { @@ -51,14 +47,13 @@ class QUICKOPEN_EXPORT BaseFileFilter : public QuickOpen::IQuickOpenFilter Q_OBJECT public: - BaseFileFilter(Core::ICore *core); + BaseFileFilter(); QList matchesFor(const QString &entry); void accept(QuickOpen::FilterEntry selection) const; protected: void generateFileNames(); - Core::ICore *m_core; QStringList m_files; QStringList m_fileNames; QStringList m_previousResultPaths; diff --git a/src/plugins/quickopen/directoryfilter.cpp b/src/plugins/quickopen/directoryfilter.cpp index 84c60dfa8c7..8b70cbd51e9 100644 --- a/src/plugins/quickopen/directoryfilter.cpp +++ b/src/plugins/quickopen/directoryfilter.cpp @@ -35,20 +35,18 @@ #include #include -#include #include #include #include -using namespace Core; +#include + using namespace QuickOpen; using namespace QuickOpen::Internal; -DirectoryFilter::DirectoryFilter(ICore *core) - : BaseFileFilter(core), - m_name(tr("Generic Directory Filter")), - m_directories(QStringList()), - m_filters(QStringList() << "*.h" << "*.cpp" << "*.ui" << "*.qrc") +DirectoryFilter::DirectoryFilter() + : m_name(tr("Generic Directory Filter")), + m_filters(QStringList() << "*.h" << "*.cpp" << "*.ui" << "*.qrc") { setIncludedByDefault(true); } diff --git a/src/plugins/quickopen/directoryfilter.h b/src/plugins/quickopen/directoryfilter.h index abe167d61d3..f156e01b45f 100644 --- a/src/plugins/quickopen/directoryfilter.h +++ b/src/plugins/quickopen/directoryfilter.h @@ -45,9 +45,6 @@ #include #include -#include -#include - namespace QuickOpen { namespace Internal { @@ -56,7 +53,7 @@ class DirectoryFilter : public BaseFileFilter Q_OBJECT public: - DirectoryFilter(Core::ICore *core); + DirectoryFilter(); QString trName() const { return m_name; } QString name() const { return m_name; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; } diff --git a/src/plugins/quickopen/quickopenplugin.cpp b/src/plugins/quickopen/quickopenplugin.cpp index fe599b215a0..3c080cd8384 100644 --- a/src/plugins/quickopen/quickopenplugin.cpp +++ b/src/plugins/quickopen/quickopenplugin.cpp @@ -40,7 +40,7 @@ #include "directoryfilter.h" #include "settingspage.h" -#include +#include #include #include #include @@ -50,6 +50,7 @@ #include #include #include +#include #include using namespace QuickOpen; @@ -81,8 +82,7 @@ QuickOpenPlugin::~QuickOpenPlugin() bool QuickOpenPlugin::initialize(const QStringList &, QString *) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); - + Core::ICore *core = Core::ICore::instance(); m_settingsPage = new SettingsPage(core, this); addObject(m_settingsPage); @@ -136,7 +136,6 @@ void QuickOpenPlugin::startSettingsLoad() void QuickOpenPlugin::loadSettings() { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); QSettings settings; settings.beginGroup("QuickOpen"); m_refreshTimer.setInterval(settings.value("RefreshInterval", 60).toInt()*60000); @@ -150,7 +149,7 @@ void QuickOpenPlugin::loadSettings() settings.beginGroup("CustomFilters"); QList customFilters; foreach (const QString &key, settings.childKeys()) { - IQuickOpenFilter *filter = new DirectoryFilter(core); + IQuickOpenFilter *filter = new DirectoryFilter; filter->restoreState(settings.value(key).toByteArray()); m_filters.append(filter); customFilters.append(filter); @@ -169,16 +168,15 @@ void QuickOpenPlugin::settingsLoaded() void QuickOpenPlugin::saveSettings() { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (core && core->settings()) { QSettings *s = core->settings(); s->beginGroup("QuickOpen"); - s->setValue("Interval", m_refreshTimer.interval()/60000); + s->setValue("Interval", m_refreshTimer.interval() / 60000); s->remove(""); foreach (IQuickOpenFilter *filter, m_filters) { - if (!m_customFilters.contains(filter)) { + if (!m_customFilters.contains(filter)) s->setValue(filter->name(), filter->saveState()); - } } s->beginGroup("CustomFilters"); int i = 0; @@ -244,7 +242,7 @@ void QuickOpenPlugin::refresh(QList filters) if (filters.isEmpty()) filters = m_filters; QFuture task = QtConcurrent::run(&IQuickOpenFilter::refresh, filters); - Core::FutureProgress *progress = ExtensionSystem::PluginManager::instance()->getObject() + Core::FutureProgress *progress = Core::ICore::instance() ->progressManager()->addTask(task, tr("Indexing"), Constants::TASK_INDEX, Core::ProgressManager::CloseOnSuccess); connect(progress, SIGNAL(finished()), this, SLOT(saveSettings())); } diff --git a/src/plugins/quickopen/quickopentoolwindow.cpp b/src/plugins/quickopen/quickopentoolwindow.cpp index 40cbeb7edcf..d769313b58a 100644 --- a/src/plugins/quickopen/quickopentoolwindow.cpp +++ b/src/plugins/quickopen/quickopentoolwindow.cpp @@ -490,7 +490,6 @@ void QuickOpenToolWindow::showEvent(QShowEvent *event) void QuickOpenToolWindow::showConfigureDialog() { - ExtensionSystem::PluginManager::instance() - ->getObject()->showOptionsDialog(Constants::QUICKOPEN_CATEGORY, + Core::ICore::instance()->showOptionsDialog(Constants::QUICKOPEN_CATEGORY, Constants::FILTER_OPTIONS_PAGE); } diff --git a/src/plugins/quickopen/settingspage.cpp b/src/plugins/quickopen/settingspage.cpp index 17415916342..5d1b3a24b59 100644 --- a/src/plugins/quickopen/settingspage.cpp +++ b/src/plugins/quickopen/settingspage.cpp @@ -173,7 +173,7 @@ void SettingsPage::configureFilter(QListWidgetItem *item) void SettingsPage::addCustomFilter() { - IQuickOpenFilter *filter = new DirectoryFilter(m_core); + IQuickOpenFilter *filter = new DirectoryFilter; bool needsRefresh = false; if (filter->openConfigDialog(m_page, needsRefresh)) { m_filters.append(filter); diff --git a/src/plugins/regexp/regexpplugin.cpp b/src/plugins/regexp/regexpplugin.cpp index 86a4ca0a7ca..af1bc8f242f 100644 --- a/src/plugins/regexp/regexpplugin.cpp +++ b/src/plugins/regexp/regexpplugin.cpp @@ -32,14 +32,15 @@ ***************************************************************************/ #include "regexpplugin.h" -#include "settings.h" + #include "regexpwindow.h" +#include "settings.h" #include #include #include -#include +#include using namespace RegExp::Internal; @@ -49,25 +50,24 @@ RegExpPlugin::RegExpPlugin() RegExpPlugin::~RegExpPlugin() { - if (m_regexpWindow) { - m_regexpWindow->settings().toQSettings(m_core->settings()); - } + if (m_regexpWindow) + m_regexpWindow->settings().toQSettings(Core::ICore::instance()->settings()); } void RegExpPlugin::extensionsInitialized() { } - -bool RegExpPlugin::initialize(const QStringList & /*arguments*/, QString *error_message) +bool RegExpPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - Q_UNUSED(error_message) - m_core = ExtensionSystem::PluginManager::instance()->getObject(); + Q_UNUSED(arguments); + Q_UNUSED(errorMessage) + Core::ICore *core = Core::ICore::instance(); m_regexpWindow = new RegExpWindow; Settings settings; - settings.fromQSettings(m_core->settings()); + settings.fromQSettings(core->settings()); m_regexpWindow->setSettings(settings); - const int plugId = m_core->uniqueIDManager()->uniqueIdentifier(QLatin1String("RegExpPlugin")); + const int plugId = core->uniqueIDManager()->uniqueIdentifier(QLatin1String("RegExpPlugin")); addAutoReleasedObject(new Core::BaseView("TextEditor.RegExpWindow", m_regexpWindow, QList() << plugId, diff --git a/src/plugins/regexp/regexpplugin.h b/src/plugins/regexp/regexpplugin.h index c944d37bc17..aa102953704 100644 --- a/src/plugins/regexp/regexpplugin.h +++ b/src/plugins/regexp/regexpplugin.h @@ -39,10 +39,6 @@ #include #include -namespace Core { -class ICore; -} - namespace RegExp { namespace Internal { @@ -56,11 +52,10 @@ public: RegExpPlugin(); virtual ~RegExpPlugin(); - bool initialize(const QStringList &arguments, QString *error_message); + bool initialize(const QStringList &arguments, QString *errorMessage); void extensionsInitialized(); private: - Core::ICore *m_core; QPointer m_regexpWindow; }; diff --git a/src/plugins/resourceeditor/resourceeditorfactory.cpp b/src/plugins/resourceeditor/resourceeditorfactory.cpp index 4a623c77f4a..658a572c394 100644 --- a/src/plugins/resourceeditor/resourceeditorfactory.cpp +++ b/src/plugins/resourceeditor/resourceeditorfactory.cpp @@ -47,14 +47,13 @@ using namespace ResourceEditor::Internal; using namespace ResourceEditor::Constants; -ResourceEditorFactory::ResourceEditorFactory(Core::ICore *core, ResourceEditorPlugin *plugin) : +ResourceEditorFactory::ResourceEditorFactory(ResourceEditorPlugin *plugin) : Core::IEditorFactory(plugin), m_mimeTypes(QStringList(QLatin1String("application/vnd.nokia.xml.qt.resource"))), m_kind(QLatin1String(C_RESOURCEEDITOR)), - m_core(core), m_plugin(plugin) { - m_context += m_core->uniqueIDManager() + m_context += Core::ICore::instance()->uniqueIDManager() ->uniqueIdentifier(QLatin1String(ResourceEditor::Constants::C_RESOURCEEDITOR)); Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); iconProvider->registerIconForSuffix(QIcon(":/resourceeditor/images/qt_qrc.png"), @@ -68,7 +67,7 @@ QString ResourceEditorFactory::kind() const Core::IFile *ResourceEditorFactory::open(const QString &fileName) { - Core::IEditor *iface = m_core->editorManager()->openEditor(fileName, kind()); + Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind()); if (!iface) { qWarning() << "ResourceEditorFactory::open: openEditor failed for " << fileName; return 0; @@ -78,7 +77,7 @@ Core::IFile *ResourceEditorFactory::open(const QString &fileName) Core::IEditor *ResourceEditorFactory::createEditor(QWidget *parent) { - return new ResourceEditorW(m_context, m_core, m_plugin, parent); + return new ResourceEditorW(m_context, m_plugin, parent); } QStringList ResourceEditorFactory::mimeTypes() const diff --git a/src/plugins/resourceeditor/resourceeditorfactory.h b/src/plugins/resourceeditor/resourceeditorfactory.h index 0bcafd3ca56..0c4ab63c909 100644 --- a/src/plugins/resourceeditor/resourceeditorfactory.h +++ b/src/plugins/resourceeditor/resourceeditorfactory.h @@ -34,17 +34,10 @@ #ifndef RRESOURCEEDITORFACTORY_H #define RRESOURCEEDITORFACTORY_H -#include #include #include -namespace Core { -class ICore; -class IEditor; -class IFile; -} - namespace ResourceEditor { namespace Internal { @@ -57,11 +50,11 @@ class ResourceEditorFactory : public Core::IEditorFactory public: typedef QList Context; - ResourceEditorFactory(Core::ICore *core, ResourceEditorPlugin *plugin); + explicit ResourceEditorFactory(ResourceEditorPlugin *plugin); virtual QStringList mimeTypes() const; - //EditorFactory + // IEditorFactory QString kind() const; Core::IFile *open(const QString &fileName); Core::IEditor *createEditor(QWidget *parent); @@ -71,7 +64,6 @@ private: const QString m_kind; Context m_context; - Core::ICore *m_core; ResourceEditorPlugin *m_plugin; }; diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp index 851cf8634c1..7e5a7dcd1f8 100644 --- a/src/plugins/resourceeditor/resourceeditorplugin.cpp +++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp @@ -44,10 +44,11 @@ #include #include #include +#include #include -#include +#include #include using namespace ResourceEditor::Internal; @@ -55,9 +56,8 @@ using namespace ResourceEditor::Internal; ResourceEditorPlugin::ResourceEditorPlugin() : m_wizard(0), m_editor(0), - m_core(NULL), - m_redoAction(NULL), - m_undoAction(NULL) + m_redoAction(0), + m_undoAction(0) { } @@ -67,13 +67,14 @@ ResourceEditorPlugin::~ResourceEditorPlugin() removeObject(m_wizard); } -bool ResourceEditorPlugin::initialize(const QStringList & /*arguments*/, QString *error_message) +bool ResourceEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/resourceeditor/ResourceEditor.mimetypes.xml"), error_message)) + Q_UNUSED(arguments); + Core::ICore *core = Core::ICore::instance(); + if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/resourceeditor/ResourceEditor.mimetypes.xml"), errorMessage)) return false; - m_editor = new ResourceEditorFactory(m_core, this); + m_editor = new ResourceEditorFactory(this); addObject(m_editor); Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); @@ -82,16 +83,16 @@ bool ResourceEditorPlugin::initialize(const QStringList & /*arguments*/, QString wizardParameters.setCategory(QLatin1String("Qt")); wizardParameters.setTrCategory(tr("Qt")); - m_wizard = new ResourceWizard(wizardParameters, m_core, this); + m_wizard = new ResourceWizard(wizardParameters, this); addObject(m_wizard); - error_message->clear(); + errorMessage->clear(); // Register undo and redo - Core::ActionManager * const actionManager = m_core->actionManager(); - int const pluginId = m_core->uniqueIDManager()->uniqueIdentifier( + Core::ActionManager * const actionManager = core->actionManager(); + int const pluginId = core->uniqueIDManager()->uniqueIdentifier( Constants::C_RESOURCEEDITOR); - QList const idList = QList() << pluginId; + const QList idList = QList() << pluginId; m_undoAction = new QAction(tr("&Undo"), this); m_redoAction = new QAction(tr("&Redo"), this); actionManager->registerAction(m_undoAction, Core::Constants::UNDO, idList); @@ -128,7 +129,7 @@ void ResourceEditorPlugin::onUndoStackChanged(ResourceEditorW const *editor, ResourceEditorW * ResourceEditorPlugin::currentEditor() const { ResourceEditorW * const focusEditor = qobject_cast( - m_core->editorManager()->currentEditor()); + Core::ICore::instance()->editorManager()->currentEditor()); QTC_ASSERT(focusEditor, return 0); return focusEditor; } diff --git a/src/plugins/resourceeditor/resourceeditorplugin.h b/src/plugins/resourceeditor/resourceeditorplugin.h index fd9576ea00d..d8c4c3daf1a 100644 --- a/src/plugins/resourceeditor/resourceeditorplugin.h +++ b/src/plugins/resourceeditor/resourceeditorplugin.h @@ -36,11 +36,9 @@ #include -QT_FORWARD_DECLARE_CLASS(QAction); - -namespace Core { - class ICore; -} +QT_BEGIN_NAMESPACE +class QAction; +QT_END_NAMESPACE namespace ResourceEditor { namespace Internal { @@ -57,8 +55,8 @@ public: ResourceEditorPlugin(); virtual ~ResourceEditorPlugin(); - //Plugin - bool initialize(const QStringList &arguments, QString *error_message = 0); + // IPlugin + bool initialize(const QStringList &arguments, QString *errorMessage = 0); void extensionsInitialized(); private slots: @@ -74,7 +72,6 @@ private: private: ResourceWizard *m_wizard; ResourceEditorFactory *m_editor; - Core::ICore *m_core; QAction *m_redoAction; QAction *m_undoAction; }; diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp index db4ed089805..c8e0bbf5107 100644 --- a/src/plugins/resourceeditor/resourceeditorw.cpp +++ b/src/plugins/resourceeditor/resourceeditorw.cpp @@ -70,11 +70,9 @@ QString ResourceEditorFile::mimeType() const ResourceEditorW::ResourceEditorW(const QList &context, - Core::ICore *core, ResourceEditorPlugin *plugin, QWidget *parent) : m_context(context), - m_core(core), m_resourceEditor(new SharedTools::QrcEditor(parent)), m_resourceFile(new ResourceEditorFile(this)), m_plugin(plugin) @@ -207,7 +205,7 @@ void ResourceEditorFile::modified(Core::IFile::ReloadBehavior *behavior) break; } - switch (Core::Utils::reloadPrompt(fileName, m_parent->m_core->mainWindow())) { + switch (Core::Utils::reloadPrompt(fileName, Core::ICore::instance()->mainWindow())) { case Core::Utils::ReloadCurrent: m_parent->open(fileName); break; diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h index 4070e155cd6..cc26250458a 100644 --- a/src/plugins/resourceeditor/resourceeditorw.h +++ b/src/plugins/resourceeditor/resourceeditorw.h @@ -40,11 +40,6 @@ #include #include - -namespace Core { - class ICore; -} - namespace SharedTools { class QrcEditor; } @@ -92,7 +87,6 @@ public: typedef QList Context; ResourceEditorW(const Context &context, - Core::ICore *core, ResourceEditorPlugin *plugin, QWidget *parent = 0); ~ResourceEditorW(); @@ -126,7 +120,6 @@ private: QString m_displayName; QString m_suggestedName; const Context m_context; - Core::ICore *m_core; QPointer m_resourceEditor; ResourceEditorFile *m_resourceFile; ResourceEditorPlugin *m_plugin; diff --git a/src/plugins/resourceeditor/resourcewizard.cpp b/src/plugins/resourceeditor/resourcewizard.cpp index b2e76ed154a..e4657fb0a95 100644 --- a/src/plugins/resourceeditor/resourcewizard.cpp +++ b/src/plugins/resourceeditor/resourcewizard.cpp @@ -38,16 +38,17 @@ using namespace ResourceEditor; using namespace ResourceEditor::Internal; -ResourceWizard::ResourceWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent) : - Core::StandardFileWizard(parameters, core, parent) +ResourceWizard::ResourceWizard(const BaseFileWizardParameters ¶meters, QObject *parent) + : Core::StandardFileWizard(parameters, parent) { } Core::GeneratedFiles ResourceWizard::generateFilesFromPath(const QString &path, const QString &name, - QString * /*errorMessage*/) const + QString *errorMessage) const { + Q_UNUSED(errorMessage); const QString suffix = preferredSuffix(QLatin1String(Constants::C_RESOURCE_MIMETYPE)); const QString fileName = Core::BaseFileWizard::buildFileName(path, name, suffix); Core::GeneratedFile file(fileName); diff --git a/src/plugins/resourceeditor/resourcewizard.h b/src/plugins/resourceeditor/resourcewizard.h index e435755b2fc..829c6eae9a9 100644 --- a/src/plugins/resourceeditor/resourcewizard.h +++ b/src/plugins/resourceeditor/resourcewizard.h @@ -45,7 +45,7 @@ class ResourceWizard : public Core::StandardFileWizard public: typedef Core::BaseFileWizardParameters BaseFileWizardParameters; - explicit ResourceWizard(const BaseFileWizardParameters ¶meters, Core::ICore *core, QObject *parent); + explicit ResourceWizard(const BaseFileWizardParameters ¶meters, QObject *parent); protected: virtual Core::GeneratedFiles diff --git a/src/plugins/snippets/snippetsplugin.cpp b/src/plugins/snippets/snippetsplugin.cpp index c014a6432a1..32dd4bc04e2 100644 --- a/src/plugins/snippets/snippetsplugin.cpp +++ b/src/plugins/snippets/snippetsplugin.cpp @@ -36,13 +36,12 @@ #include "snippetsplugin.h" #include "snippetspec.h" -#include +#include #include #include #include #include -#include #include #include #include @@ -69,19 +68,20 @@ void SnippetsPlugin::extensionsInitialized() { } -bool SnippetsPlugin::initialize(const QStringList & /*arguments*/, QString *) +bool SnippetsPlugin::initialize(const QStringList &arguments, QString *) { - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - Core::ActionManager *am = m_core->actionManager(); + Q_UNUSED(arguments); + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); QList context; - context << m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); + context << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); m_snippetWnd = new SnippetsWindow(); addAutoReleasedObject(new Core::BaseView("Snippets.SnippetsTree", m_snippetWnd, - QList() << m_core->uniqueIDManager()->uniqueIdentifier(QLatin1String("Snippets Window")) - << m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR), + QList() << core->uniqueIDManager()->uniqueIdentifier(QLatin1String("Snippets Window")) + << core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR), Qt::RightDockWidgetArea)); m_snippetsCompletion = new SnippetsCompletion(this); addObject(m_snippetsCompletion); @@ -107,11 +107,12 @@ QString SnippetsPlugin::simplifySnippetName(SnippetSpec *snippet) const void SnippetsPlugin::snippetActivated() { + Core::ICore *core = Core::ICore::instance(); SnippetSpec *snippet = m_shortcuts.value(sender()); - if (snippet && m_core->editorManager()->currentEditor()) { + if (snippet && core->editorManager()->currentEditor()) { TextEditor::ITextEditable *te = qobject_cast( - m_core->editorManager()->currentEditor()); + core->editorManager()->currentEditor()); m_snippetWnd->insertSnippet(te, snippet); } } diff --git a/src/plugins/snippets/snippetsplugin.h b/src/plugins/snippets/snippetsplugin.h index 3647244d659..dba0804a632 100644 --- a/src/plugins/snippets/snippetsplugin.h +++ b/src/plugins/snippets/snippetsplugin.h @@ -40,11 +40,6 @@ #include -namespace Core { -class ICore; -struct Application; -} - namespace Snippets { namespace Internal { @@ -62,9 +57,8 @@ public: static SnippetsPlugin *instance() { return m_instance; } static SnippetsWindow *snippetsWindow() { return m_instance->m_snippetWnd; } - static Core::ICore *core() { return m_instance->m_core; } - bool initialize(const QStringList &arguments, QString *error_message); + bool initialize(const QStringList &arguments, QString *errorMessage); void extensionsInitialized(); private slots: @@ -74,7 +68,6 @@ private: static SnippetsPlugin *m_instance; QString simplifySnippetName(SnippetSpec *snippet) const; - Core::ICore *m_core; SnippetsCompletion *m_snippetsCompletion; SnippetsWindow *m_snippetWnd; diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index a98848a8b37..5a3d567f1ec 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -55,20 +55,21 @@ #include #include #include -#include +#include +#include #include -#include #include -#include +#include #include #include -#include +#include +#include #include +#include +#include #include #include -#include -#include using namespace Subversion::Internal; @@ -248,8 +249,10 @@ static const VCSBase::VCSBaseSubmitEditorParameters submitParameters = { Subversion::Constants::SUBVERSIONCOMMITEDITOR }; -bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) +bool SubversionPlugin::initialize(const QStringList &arguments, QString *errorMessage) { + Q_UNUSED(arguments); + typedef VCSBase::VCSSubmitEditorFactory SubversionSubmitEditorFactory; typedef VCSBase::VCSEditorFactory SubversionEditorFactory; using namespace Constants; @@ -258,7 +261,7 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *er using namespace ExtensionSystem; m_subversionPluginInstance = this; - m_coreInstance = PluginManager::instance()->getObject(); + m_coreInstance = Core::ICore::instance(); if (!m_coreInstance->mimeDatabase()->addMimeTypes(QLatin1String(":/trolltech.subversion/Subversion.mimetypes.xml"), errorMessage)) return false; @@ -281,7 +284,8 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments*/, QString *er static const char *describeSlot = SLOT(describe(QString,QString)); const int editorCount = sizeof(editorParameters)/sizeof(VCSBase::VCSBaseEditorParameters); for (int i = 0; i < editorCount; i++) { - m_editorFactories.push_back(new SubversionEditorFactory(editorParameters + i, m_coreInstance, this, describeSlot)); + m_editorFactories.push_back( + new SubversionEditorFactory(editorParameters + i, this, describeSlot)); addObject(m_editorFactories.back()); } @@ -492,7 +496,7 @@ void SubversionPlugin::svnDiff(const QStringList &files, QString diffname) if (Subversion::Constants::debug) qDebug() << Q_FUNC_INFO << files << diffname; const QString source = files.empty() ? QString() : files.front(); - QTextCodec *codec = source.isEmpty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source); + QTextCodec *codec = source.isEmpty() ? static_cast(0) : VCSBase::VCSBaseEditor::getCodec(source); if (files.count() == 1 && diffname.isEmpty()) diffname = QFileInfo(files.front()).fileName(); @@ -759,7 +763,7 @@ void SubversionPlugin::filelogCurrentFile() void SubversionPlugin::filelog(const QString &file) { - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, file); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file); // no need for temp file QStringList args(QLatin1String("log")); args.append(QDir::toNativeSeparators(file)); @@ -801,7 +805,7 @@ void SubversionPlugin::annotateCurrentFile() void SubversionPlugin::annotate(const QString &file) { - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, file); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(file); QStringList args(QLatin1String("annotate")); args.push_back(QLatin1String("-v")); @@ -860,7 +864,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr) args.push_back(diffArg); args.push_back(topLevel); - QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(m_coreInstance, source); + QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(source); const SubversionResponse response = runSvn(args, subversionShortTimeOut, false, codec); if (response.error) return; @@ -1014,12 +1018,6 @@ void SubversionPlugin::setSettings(const SubversionSettings &s) } } -Core::ICore *SubversionPlugin::coreInstance() -{ - QTC_ASSERT(m_coreInstance, return 0); - return m_coreInstance; -} - SubversionPlugin *SubversionPlugin::subversionPluginInstance() { QTC_ASSERT(m_subversionPluginInstance, return m_subversionPluginInstance); diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index fb6bd17b7a9..17285e73351 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -39,8 +39,8 @@ #include #include #include -#include #include +#include #include #include @@ -105,7 +105,6 @@ public: bool managesDirectory(const QString &directory) const; QString findTopLevelForDirectory(const QString &directory) const; - static Core::ICore *coreInstance(); static SubversionPlugin *subversionPluginInstance(); private slots: diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 61fc6eadc17..e574140d3d8 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -49,9 +49,8 @@ using namespace Core::Utils; using namespace Find; using namespace TextEditor; -BaseFileFind::BaseFileFind(Core::ICore *core, SearchResultWindow *resultWindow) - : m_core(core), - m_resultWindow(resultWindow), +BaseFileFind::BaseFileFind(SearchResultWindow *resultWindow) + : m_resultWindow(resultWindow), m_isSearching(false), m_resultLabel(0), m_filterCombo(0), @@ -95,7 +94,8 @@ void BaseFileFind::findAll(const QString &txt, QTextDocument::FindFlags findFlag m_watcher.setFuture(Core::Utils::findInFilesRegExp(txt, files(), findFlags)); else m_watcher.setFuture(Core::Utils::findInFiles(txt, files(), findFlags)); - Core::FutureProgress *progress = m_core->progressManager()->addTask(m_watcher.future(), + Core::FutureProgress *progress = + Core::ICore::instance()->progressManager()->addTask(m_watcher.future(), "Search", Constants::TASK_SEARCH); progress->setWidget(createProgressWidget()); diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h index 2aacf2d9650..706964cf50a 100644 --- a/src/plugins/texteditor/basefilefind.h +++ b/src/plugins/texteditor/basefilefind.h @@ -36,7 +36,6 @@ #include "texteditor_global.h" -#include #include #include #include @@ -55,7 +54,7 @@ class TEXTEDITOR_EXPORT BaseFileFind : public Find::IFindFilter Q_OBJECT public: - BaseFileFind(Core::ICore *core, Find::SearchResultWindow *resultWindow); + explicit BaseFileFind(Find::SearchResultWindow *resultWindow); bool isEnabled() const; void findAll(const QString &txt, QTextDocument::FindFlags findFlags); @@ -79,7 +78,6 @@ private slots: private: QWidget *createProgressWidget(); - Core::ICore *m_core; Find::SearchResultWindow *m_resultWindow; QFutureWatcher m_watcher; bool m_isSearching; diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 9f145bc0801..cae7df6bd7d 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -87,7 +88,7 @@ using namespace TextEditor::Internal; namespace TextEditor { - namespace Internal { +namespace Internal { class TextEditExtraArea : public QWidget { BaseTextEditor *textEdit; @@ -123,16 +124,15 @@ protected: } }; - } -} +} // namespace Internal +} // namespace TextEditor ITextEditor *BaseTextEditor::openEditorAt(const QString &fileName, int line, int column, const QString &editorKind) { - Core::EditorManager *editorManager = - ExtensionSystem::PluginManager::instance()->getObject()->editorManager(); + Core::EditorManager *editorManager = Core::ICore::instance()->editorManager(); editorManager->addCurrentPositionToNavigationHistory(true); Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, true); TextEditor::ITextEditor *texteditor = qobject_cast(editor); @@ -562,7 +562,7 @@ bool BaseTextEditor::open(const QString &fileName) return false; } -Core::IFile * BaseTextEditor::file() +Core::IFile *BaseTextEditor::file() { return d->m_document; } @@ -3370,9 +3370,9 @@ void BaseTextEditor::setIfdefedOutBlocks(const QList const BlockRange &range = blocks.at(rangeNumber); if (block.position() >= range.first && (block.position() <= range.last || !range.last)) { - needUpdate += TextEditDocumentLayout::setIfdefedOut(block); + needUpdate |= TextEditDocumentLayout::setIfdefedOut(block); } else { - needUpdate += TextEditDocumentLayout::clearIfdefedOut(block); + needUpdate |= TextEditDocumentLayout::clearIfdefedOut(block); } if (block.contains(range.last)) ++rangeNumber; diff --git a/src/plugins/texteditor/basetextmark.cpp b/src/plugins/texteditor/basetextmark.cpp index 4e4adf28bdc..c5db6932565 100644 --- a/src/plugins/texteditor/basetextmark.cpp +++ b/src/plugins/texteditor/basetextmark.cpp @@ -57,7 +57,7 @@ BaseTextMark::BaseTextMark(const QString &filename, int line) void BaseTextMark::init() { m_init = true; - Core::EditorManager *em = ExtensionSystem::PluginManager::instance()->getObject()->editorManager(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); connect(em, SIGNAL(editorOpened(Core::IEditor *)), this, SLOT(editorOpened(Core::IEditor *))); foreach (Core::IEditor *editor, em->openedEditors()) @@ -117,7 +117,7 @@ void BaseTextMark::updateMarker() void BaseTextMark::moveMark(const QString & /* filename */, int /* line */) { - Core::EditorManager *em = ExtensionSystem::PluginManager::instance()->getObject()->editorManager(); + Core::EditorManager *em = Core::ICore::instance()->editorManager(); if (!m_init) { connect(em, SIGNAL(editorOpened(Core::IEditor *)), this, SLOT(editorOpened(Core::IEditor *))); m_init = true; diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp index 5c863e3afe2..ddac8de09d1 100644 --- a/src/plugins/texteditor/completionsupport.cpp +++ b/src/plugins/texteditor/completionsupport.cpp @@ -36,11 +36,12 @@ #include "icompletioncollector.h" #include +#include #include #include -#include -#include +#include +#include #include @@ -48,23 +49,23 @@ using namespace TextEditor; using namespace TextEditor::Internal; -CompletionSupport *CompletionSupport::instance(Core::ICore *core) +CompletionSupport *CompletionSupport::instance() { static CompletionSupport *m_instance = 0; - if (!m_instance) { - m_instance = new CompletionSupport(core); - } + if (!m_instance) + m_instance = new CompletionSupport; return m_instance; } -CompletionSupport::CompletionSupport(Core::ICore *core) - : QObject(core), +CompletionSupport::CompletionSupport() + : QObject(Core::ICore::instance()), m_completionList(0), m_startPosition(0), m_checkCompletionTrigger(false), m_editor(0) { - m_completionCollector = core->pluginManager()->getObject(); + m_completionCollector = ExtensionSystem::PluginManager::instance() + ->getObject(); } void CompletionSupport::performCompletion(const CompletionItem &item) diff --git a/src/plugins/texteditor/completionsupport.h b/src/plugins/texteditor/completionsupport.h index 9704f80f2a2..a2300010200 100644 --- a/src/plugins/texteditor/completionsupport.h +++ b/src/plugins/texteditor/completionsupport.h @@ -38,8 +38,6 @@ #include -namespace Core { class ICore; } - namespace TextEditor { struct CompletionItem; @@ -58,9 +56,9 @@ class TEXTEDITOR_EXPORT CompletionSupport : public QObject Q_OBJECT public: - CompletionSupport(Core::ICore *core); + CompletionSupport(); - static CompletionSupport *instance(Core::ICore *core); + static CompletionSupport *instance(); public slots: void autoComplete(ITextEditable *editor, bool forced); diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp index c8c1020563e..b474fdd5eac 100644 --- a/src/plugins/texteditor/findinfiles.cpp +++ b/src/plugins/texteditor/findinfiles.cpp @@ -42,8 +42,8 @@ using namespace Find; using namespace TextEditor::Internal; -FindInFiles::FindInFiles(Core::ICore *core, SearchResultWindow *resultWindow) - : BaseFileFind(core, resultWindow), +FindInFiles::FindInFiles(SearchResultWindow *resultWindow) + : BaseFileFind(resultWindow), m_configWidget(0), m_directory(0) { diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h index e38c838f87d..e894f7eece7 100644 --- a/src/plugins/texteditor/findinfiles.h +++ b/src/plugins/texteditor/findinfiles.h @@ -36,7 +36,6 @@ #include "basefilefind.h" -#include #include #include @@ -54,12 +53,10 @@ class FindInFiles : public BaseFileFind Q_OBJECT public: - FindInFiles(Core::ICore *core, Find::SearchResultWindow *resultWindow); + explicit FindInFiles(Find::SearchResultWindow *resultWindow); QString name() const; - QKeySequence defaultShortcut() const; - void findAll(const QString &txt, QTextDocument::FindFlags findFlags); QWidget *createConfigWidget(); void writeSettings(QSettings *settings); diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index 1eaccaba6e2..5d493cef404 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -36,20 +36,21 @@ #include "texteditorconstants.h" #include "ui_fontsettingspage.h" +#include #include #include #include -#include -#include -#include #include #include -#include -#include #include #include +#include #include +#include +#include +#include +#include static inline QString colorButtonStyleSheet(const QColor &bgColor) { @@ -70,10 +71,9 @@ public: FontSettingsPagePrivate(const TextEditor::FormatDescriptions &fd, const QString &name, const QString &category, - const QString &trCategory, - Core::ICore *core); + const QString &trCategory); - Core::ICore *m_core; +public: const QString m_name; const QString m_settingsGroup; const QString m_category; @@ -89,9 +89,7 @@ public: FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescriptions &fd, const QString &name, const QString &category, - const QString &trCategory, - Core::ICore *core) : - m_core(core), + const QString &trCategory) : m_name(name), m_settingsGroup(Core::Utils::settingsKey(category)), m_category(category), @@ -102,9 +100,8 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip m_curItem(-1) { bool settingsFound = false; - if (m_core) - if (const QSettings *settings = m_core->settings()) - settingsFound = m_value.fromSettings(m_settingsGroup, m_descriptions, settings); + if (const QSettings *settings = Core::ICore::instance()->settings()) + settingsFound = m_value.fromSettings(m_settingsGroup, m_descriptions, settings); if (!settingsFound) { // Apply defaults foreach (const FormatDescription &f, m_descriptions) { const QString name = f.name(); @@ -200,10 +197,9 @@ QColor FormatDescription::background() const FontSettingsPage::FontSettingsPage(const FormatDescriptions &fd, const QString &category, const QString &trCategory, - Core::ICore *core, QObject *parent) : Core::IOptionsPage(parent), - d_ptr(new FontSettingsPagePrivate(fd, tr("Font & Colors"), category, trCategory, core)) + d_ptr(new FontSettingsPagePrivate(fd, tr("Font & Colors"), category, trCategory)) { } @@ -232,7 +228,6 @@ QWidget *FontSettingsPage::createPage(QWidget *parent) QWidget *w = new QWidget(parent); d_ptr->ui.setupUi(w); - d_ptr->ui.itemListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); foreach (const FormatDescription &d, d_ptr->m_descriptions) @@ -447,9 +442,8 @@ void FontSettingsPage::apply() if (d_ptr->m_value != d_ptr->m_lastValue) { d_ptr->m_lastValue = d_ptr->m_value; - if (d_ptr->m_core) - if (QSettings *settings = d_ptr->m_core->settings()) - d_ptr->m_value.toSettings(d_ptr->m_settingsGroup, d_ptr->m_descriptions, settings); + if (QSettings *settings = Core::ICore::instance()->settings()) + d_ptr->m_value.toSettings(d_ptr->m_settingsGroup, d_ptr->m_descriptions, settings); QTimer::singleShot(0, this, SLOT(delayedChange())); } diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h index 6a518f518d3..bc674de3c20 100644 --- a/src/plugins/texteditor/fontsettingspage.h +++ b/src/plugins/texteditor/fontsettingspage.h @@ -38,7 +38,6 @@ #include "fontsettings.h" -#include #include #include @@ -89,7 +88,6 @@ public: FontSettingsPage(const FormatDescriptions &fd, const QString &category, const QString &trCategory, - Core::ICore *core, QObject *parent = 0); ~FontSettingsPage(); diff --git a/src/plugins/texteditor/generalsettingspage.cpp b/src/plugins/texteditor/generalsettingspage.cpp index d20763b0cab..7be7bca1f4b 100644 --- a/src/plugins/texteditor/generalsettingspage.cpp +++ b/src/plugins/texteditor/generalsettingspage.cpp @@ -37,16 +37,17 @@ #include "tabsettings.h" #include "ui_generalsettingspage.h" +#include + #include #include using namespace TextEditor; -struct GeneralSettingsPage::GeneralSettingsPagePrivate { - GeneralSettingsPagePrivate(Core::ICore *core, - const GeneralSettingsPageParameters &p); +struct GeneralSettingsPage::GeneralSettingsPagePrivate +{ + explicit GeneralSettingsPagePrivate(const GeneralSettingsPageParameters &p); - Core::ICore *m_core; const GeneralSettingsPageParameters m_parameters; Ui::generalSettingsPage m_page; TabSettings m_tabSettings; @@ -54,24 +55,21 @@ struct GeneralSettingsPage::GeneralSettingsPagePrivate { DisplaySettings m_displaySettings; }; -GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate(Core::ICore *core, - const GeneralSettingsPageParameters &p) : - m_core(core), - m_parameters(p) +GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate + (const GeneralSettingsPageParameters &p) + : m_parameters(p) { - if (m_core) - if (const QSettings *s = m_core->settings()) { - m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); - m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); - m_displaySettings.fromSettings(m_parameters.settingsPrefix, s); - } + if (const QSettings *s = Core::ICore::instance()->settings()) { + m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); + m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); + m_displaySettings.fromSettings(m_parameters.settingsPrefix, s); + } } -GeneralSettingsPage::GeneralSettingsPage(Core::ICore *core, - const GeneralSettingsPageParameters &p, - QObject *parent) : - Core::IOptionsPage(parent), - m_d(new GeneralSettingsPagePrivate(core, p)) +GeneralSettingsPage::GeneralSettingsPage(const GeneralSettingsPageParameters &p, + QObject *parent) + : Core::IOptionsPage(parent), + m_d(new GeneralSettingsPagePrivate(p)) { } @@ -99,9 +97,7 @@ QWidget *GeneralSettingsPage::createPage(QWidget *parent) { QWidget *w = new QWidget(parent); m_d->m_page.setupUi(w); - settingsToUI(); - return w; } @@ -112,30 +108,28 @@ void GeneralSettingsPage::apply() DisplaySettings newDisplaySettings; settingsFromUI(newTabSettings, newStorageSettings, newDisplaySettings); + Core::ICore *core = Core::ICore::instance(); if (newTabSettings != m_d->m_tabSettings) { m_d->m_tabSettings = newTabSettings; - if (m_d->m_core) - if (QSettings *s = m_d->m_core->settings()) - m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + if (QSettings *s = core->settings()) + m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s); emit tabSettingsChanged(newTabSettings); } if (newStorageSettings != m_d->m_storageSettings) { m_d->m_storageSettings = newStorageSettings; - if (m_d->m_core) - if (QSettings *s = m_d->m_core->settings()) - m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + if (QSettings *s = core->settings()) + m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s); emit storageSettingsChanged(newStorageSettings); } if (newDisplaySettings != m_d->m_displaySettings) { m_d->m_displaySettings = newDisplaySettings; - if (m_d->m_core) - if (QSettings *s = m_d->m_core->settings()) - m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); + if (QSettings *s = core->settings()) + m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); emit displaySettingsChanged(newDisplaySettings); } @@ -207,9 +201,9 @@ void GeneralSettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySe { if (newDisplaySettings != m_d->m_displaySettings) { m_d->m_displaySettings = newDisplaySettings; - if (m_d->m_core) - if (QSettings *s = m_d->m_core->settings()) - m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); + Core::ICore *core = Core::ICore::instance(); + if (QSettings *s = core->settings()) + m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); emit displaySettingsChanged(newDisplaySettings); } diff --git a/src/plugins/texteditor/generalsettingspage.h b/src/plugins/texteditor/generalsettingspage.h index eea75e2ccc8..5eb9c0811c2 100644 --- a/src/plugins/texteditor/generalsettingspage.h +++ b/src/plugins/texteditor/generalsettingspage.h @@ -36,7 +36,6 @@ #include "texteditor_global.h" -#include #include #include @@ -47,26 +46,23 @@ struct TabSettings; struct StorageSettings; struct DisplaySettings; -struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters { +struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters +{ QString name; QString category; QString trCategory; QString settingsPrefix; }; -class Ui_generalSettingsPage; - class TEXTEDITOR_EXPORT GeneralSettingsPage : public Core::IOptionsPage { Q_OBJECT public: - GeneralSettingsPage(Core::ICore *core, - const GeneralSettingsPageParameters &p, - QObject *parent); + GeneralSettingsPage(const GeneralSettingsPageParameters &p, QObject *parent); virtual ~GeneralSettingsPage(); - //IOptionsPage + // IOptionsPage QString name() const; QString category() const; QString trCategory() const; diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp index b9370bca9cf..4a76df10766 100644 --- a/src/plugins/texteditor/plaintexteditor.cpp +++ b/src/plugins/texteditor/plaintexteditor.cpp @@ -45,7 +45,7 @@ using namespace TextEditor::Internal; PlainTextEditorEditable::PlainTextEditorEditable(PlainTextEditor *editor) :BaseTextEditorEditable(editor) { - Core::ICore *core = TextEditorPlugin::core(); + Core::ICore *core = Core::ICore::instance(); m_context << core->uniqueIDManager()-> uniqueIdentifier(Core::Constants::K_DEFAULT_TEXT_EDITOR); m_context << core->uniqueIDManager()-> @@ -55,7 +55,6 @@ PlainTextEditorEditable::PlainTextEditorEditable(PlainTextEditor *editor) PlainTextEditor::PlainTextEditor(QWidget *parent) : BaseTextEditor(parent) { - setRevisionsVisible(true); setMarksVisible(true); setRequestMarkEnabled(false); @@ -69,7 +68,6 @@ QList PlainTextEditorEditable::context() const return m_context; } - Core::IEditor *PlainTextEditorEditable::duplicate(QWidget *parent) { PlainTextEditor *newEditor = new PlainTextEditor(parent); @@ -103,8 +101,10 @@ const char *PlainTextEditorEditable::kind() const // to do in 2 steps (indenting/wrapping)} // -void PlainTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar /* typedChar */) +void PlainTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar) { + Q_UNUSED(typedChar); + // At beginning: Leave as is. if (block == doc->begin()) return; diff --git a/src/plugins/texteditor/plaintexteditorfactory.cpp b/src/plugins/texteditor/plaintexteditorfactory.cpp index 92a3a79ea4f..7c63855ec7a 100644 --- a/src/plugins/texteditor/plaintexteditorfactory.cpp +++ b/src/plugins/texteditor/plaintexteditorfactory.cpp @@ -37,19 +37,20 @@ #include "texteditorplugin.h" #include "texteditoractionhandler.h" +#include #include #include using namespace TextEditor; using namespace TextEditor::Internal; -PlainTextEditorFactory::PlainTextEditorFactory(QObject *parent) : - Core::IEditorFactory(parent), +PlainTextEditorFactory::PlainTextEditorFactory(QObject *parent) + : Core::IEditorFactory(parent), m_kind(Core::Constants::K_DEFAULT_TEXT_EDITOR) { - m_actionHandler = new TextEditorActionHandler(TextEditorPlugin::core(), - QLatin1String(TextEditor::Constants::C_TEXTEDITOR), - TextEditorActionHandler::Format); + m_actionHandler = new TextEditorActionHandler( + QLatin1String(TextEditor::Constants::C_TEXTEDITOR), + TextEditorActionHandler::Format); m_mimeTypes << QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT) << QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_XML); } @@ -66,14 +67,14 @@ QString PlainTextEditorFactory::kind() const Core::IFile *PlainTextEditorFactory::open(const QString &fileName) { - Core::ICore *core = TextEditorPlugin::core(); + Core::ICore *core = Core::ICore::instance(); Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind()); return iface ? iface->file() : 0; } Core::IEditor *PlainTextEditorFactory::createEditor(QWidget *parent) { - PlainTextEditor *rc = new PlainTextEditor(parent); + PlainTextEditor *rc = new PlainTextEditor(parent); TextEditorPlugin::instance()->initializeEditor(rc); return rc->editableInterface(); } diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 44b6f33b17d..511e1d919e7 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -38,6 +38,7 @@ #include "linenumberfilter.h" #include +#include #include #include #include @@ -52,31 +53,45 @@ using namespace TextEditor; using namespace TextEditor::Internal; -TextEditorActionHandler::TextEditorActionHandler(Core::ICore *core, - const QString &context, - uint optionalActions) : - QObject(core), +TextEditorActionHandler::TextEditorActionHandler(const QString &context, + uint optionalActions) + : QObject(Core::ICore::instance()), m_optionalActions(optionalActions), m_currentEditor(0), - m_core(core), m_initialized(false) { - m_undoAction = m_redoAction = m_copyAction = m_cutAction = m_pasteAction - = m_selectAllAction = m_gotoAction = m_printAction = m_formatAction - = m_visualizeWhitespaceAction = m_cleanWhitespaceAction = m_textWrappingAction - = m_unCommentSelectionAction = m_unCollapseAllAction - = m_collapseAction = m_expandAction - = m_deleteLineAction = m_selectEncodingAction - = m_increaseFontSizeAction = m_decreaseFontSizeAction - = m_gotoBlockStartAction = m_gotoBlockStartWithSelectionAction - = m_gotoBlockEndAction = m_gotoBlockEndWithSelectionAction - = m_selectBlockUpAction = m_selectBlockDownAction - = m_moveLineUpAction = m_moveLineDownAction - = 0; + m_undoAction = 0; + m_redoAction = 0; + m_copyAction = 0; + m_cutAction = 0; + m_pasteAction = 0; + m_selectAllAction = 0; + m_gotoAction = 0; + m_printAction = 0; + m_formatAction = 0; + m_visualizeWhitespaceAction = 0; + m_cleanWhitespaceAction = 0; + m_textWrappingAction = 0; + m_unCommentSelectionAction = 0; + m_unCollapseAllAction = 0; + m_collapseAction = 0; + m_expandAction = 0; + m_deleteLineAction = 0; + m_selectEncodingAction = 0; + m_increaseFontSizeAction = 0; + m_decreaseFontSizeAction = 0; + m_gotoBlockStartAction = 0; + m_gotoBlockStartWithSelectionAction = 0; + m_gotoBlockEndAction = 0; + m_gotoBlockEndWithSelectionAction = 0; + m_selectBlockUpAction = 0; + m_selectBlockDownAction = 0; + m_moveLineUpAction = 0; + m_moveLineDownAction = 0; - m_contextId << m_core->uniqueIDManager()->uniqueIdentifier(context); + m_contextId << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(context); - connect(m_core, SIGNAL(contextAboutToChange(Core::IContext *)), + connect(Core::ICore::instance(), SIGNAL(contextAboutToChange(Core::IContext *)), this, SLOT(updateCurrentEditor(Core::IContext *))); } @@ -111,7 +126,7 @@ void TextEditorActionHandler::createActions() m_gotoAction = registerNewAction(QLatin1String(Core::Constants::GOTO), this, SLOT(gotoAction())); m_printAction = registerNewAction(QLatin1String(Core::Constants::PRINT), this, SLOT(printAction())); - Core::ActionManager *am = m_core->actionManager(); + Core::ActionManager *am = Core::ICore::instance()->actionManager(); Core::ActionContainer *medit = am->actionContainer(Core::Constants::M_EDIT); Core::ActionContainer *advancedMenu = am->actionContainer(Core::Constants::M_EDIT_ADVANCED); @@ -125,35 +140,34 @@ void TextEditorActionHandler::createActions() m_formatAction = new QAction(tr("Auto-&indent Selection"), this); command = am->registerAction(m_formatAction, TextEditor::Constants::AUTO_INDENT_SELECTION, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+I"))); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT); connect(m_formatAction, SIGNAL(triggered(bool)), this, SLOT(formatAction())); m_visualizeWhitespaceAction = new QAction(tr("&Visualize Whitespace"), this); m_visualizeWhitespaceAction->setCheckable(true); command = am->registerAction(m_visualizeWhitespaceAction, - TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId); + TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId); #ifndef Q_OS_MAC command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+V"))); #endif - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT); connect(m_visualizeWhitespaceAction, SIGNAL(triggered(bool)), this, SLOT(setVisualizeWhitespace(bool))); m_cleanWhitespaceAction = new QAction(tr("Clean Whitespace"), this); command = am->registerAction(m_cleanWhitespaceAction, TextEditor::Constants::CLEAN_WHITESPACE, m_contextId); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT); connect(m_cleanWhitespaceAction, SIGNAL(triggered()), this, SLOT(cleanWhitespace())); m_textWrappingAction = new QAction(tr("Enable Text &Wrapping"), this); m_textWrappingAction->setCheckable(true); - command = am->registerAction(m_textWrappingAction, - TextEditor::Constants::TEXT_WRAPPING, m_contextId); + command = am->registerAction(m_textWrappingAction, TextEditor::Constants::TEXT_WRAPPING, m_contextId); #ifndef Q_OS_MAC command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+W"))); #endif - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT); connect(m_textWrappingAction, SIGNAL(triggered(bool)), this, SLOT(setTextWrapping(bool))); @@ -161,7 +175,7 @@ void TextEditorActionHandler::createActions() command = am->registerAction(m_unCommentSelectionAction, Constants::UN_COMMENT_SELECTION, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+/"))); connect(m_unCommentSelectionAction, SIGNAL(triggered()), this, SLOT(unCommentSelection())); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT); m_deleteLineAction = new QAction(tr("Delete &Line"), this); command = am->registerAction(m_deleteLineAction, Constants::DELETE_LINE, m_contextId); @@ -172,28 +186,30 @@ void TextEditorActionHandler::createActions() command = am->registerAction(m_collapseAction, Constants::COLLAPSE, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+<"))); connect(m_collapseAction, SIGNAL(triggered()), this, SLOT(collapse())); + advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING); m_expandAction = new QAction(tr("Expand"), this); command = am->registerAction(m_expandAction, Constants::EXPAND, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+>"))); connect(m_expandAction, SIGNAL(triggered()), this, SLOT(expand())); + advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING); m_unCollapseAllAction = new QAction(tr("(Un)&Collapse All"), this); command = am->registerAction(m_unCollapseAllAction, Constants::UN_COLLAPSE_ALL, m_contextId); connect(m_unCollapseAllAction, SIGNAL(triggered()), this, SLOT(unCollapseAll())); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING); m_increaseFontSizeAction = new QAction(tr("Increase Font Size"), this); command = am->registerAction(m_increaseFontSizeAction, Constants::INCREASE_FONT_SIZE, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl++"))); connect(m_increaseFontSizeAction, SIGNAL(triggered()), this, SLOT(increaseFontSize())); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT); m_decreaseFontSizeAction = new QAction(tr("Decrease Font Size"), this); command = am->registerAction(m_decreaseFontSizeAction, Constants::DECREASE_FONT_SIZE, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+-"))); connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize())); - advancedMenu->addAction(command); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT); m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this); command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId); @@ -247,7 +263,7 @@ QAction *TextEditorActionHandler::registerNewAction(const QString &id, const QSt return 0; QAction *result = new QAction(title, this); - m_core->actionManager()->registerAction(result, id, m_contextId); + Core::ICore::instance()->actionManager()->registerAction(result, id, m_contextId); return result; } @@ -348,7 +364,7 @@ void TextEditorActionHandler::gotoAction() void TextEditorActionHandler::printAction() { if (m_currentEditor) - m_currentEditor->print(m_core->printer()); + m_currentEditor->print(Core::ICore::instance()->printer()); } void TextEditorActionHandler::setVisualizeWhitespace(bool checked) @@ -444,9 +460,3 @@ const QPointer &TextEditorActionHandler::currentEditor() const { return m_currentEditor; } - -Core::ICore *TextEditorActionHandler::core() const -{ - return m_core; -} - diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index ea30cad7413..172617e9a27 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -38,11 +38,10 @@ #include "basetexteditor.h" #include "coreplugin/icontext.h" -#include "coreplugin/icore.h" +#include #include #include -#include namespace TextEditor { @@ -62,9 +61,7 @@ public: UnCollapseAll = 4 }; - TextEditorActionHandler(Core::ICore *core, - const QString &context, - uint optionalActions = None); + TextEditorActionHandler(const QString &context, uint optionalActions = None); void setupActions(BaseTextEditor *editor); void initializeActions(); @@ -80,7 +77,6 @@ protected: QAction *registerNewAction(const QString &id, const QString &title = QString()); QAction *registerNewAction(const QString &id, QObject *receiver, const char *slot, const QString &title = QString()); - Core::ICore *core() const; enum UpdateMode { NoEditor , ReadOnlyMode, WriteMode }; UpdateMode updateMode() const; @@ -152,7 +148,6 @@ private: uint m_optionalActions; QPointer m_currentEditor; - Core::ICore *m_core; QList m_contextId; bool m_initialized; }; diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index d76bd716708..23b96a53217 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -49,21 +49,21 @@ #include #include #include +#include #include #include -#include -#include +#include #include +#include using namespace TextEditor; using namespace TextEditor::Internal; TextEditorPlugin *TextEditorPlugin::m_instance = 0; -TextEditorPlugin::TextEditorPlugin() : - m_core(0), - m_settings(0), +TextEditorPlugin::TextEditorPlugin() + : m_settings(0), m_wizard(0), m_editorFactory(0), m_lineNumberFilter(0) @@ -82,17 +82,12 @@ TextEditorPlugin *TextEditorPlugin::instance() return m_instance; } -Core::ICore *TextEditorPlugin::core() +// ExtensionSystem::PluginInterface +bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - return m_instance->m_core; -} + Q_UNUSED(arguments); -//ExtensionSystem::PluginInterface -bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) -{ - m_core = ExtensionSystem::PluginManager::instance()->getObject(); - - if (!m_core->mimeDatabase()->addMimeTypes(QLatin1String(":/texteditor/TextEditor.mimetypes.xml"), errorMessage)) + if (!Core::ICore::instance()->mimeDatabase()->addMimeTypes(QLatin1String(":/texteditor/TextEditor.mimetypes.xml"), errorMessage)) return false; Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); @@ -103,7 +98,7 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er m_wizard = new TextFileWizard(QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT), QLatin1String(Core::Constants::K_DEFAULT_TEXT_EDITOR), QLatin1String("text$"), - wizardParameters, m_core); + wizardParameters); // Add text file wizard addAutoReleasedObject(m_wizard); @@ -115,15 +110,16 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er addAutoReleasedObject(m_editorFactory); // Goto line functionality for quick open - m_lineNumberFilter = new LineNumberFilter(m_core->editorManager()); + Core::ICore *core = Core::ICore::instance(); + m_lineNumberFilter = new LineNumberFilter(core->editorManager()); addAutoReleasedObject(m_lineNumberFilter); - int contextId = m_core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); + int contextId = core->uniqueIDManager()->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR); QList context = QList() << contextId; - Core::ActionManager *am = m_core->actionManager(); + Core::ActionManager *am = core->actionManager(); // Add shortcut for invoking automatic completion - QShortcut *completionShortcut = new QShortcut(m_core->mainWindow()); + QShortcut *completionShortcut = new QShortcut(core->mainWindow()); completionShortcut->setWhatsThis(tr("Triggers a completion in this scope")); // Make sure the shortcut still works when the completion widget is active completionShortcut->setContext(Qt::ApplicationShortcut); @@ -135,7 +131,8 @@ bool TextEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er #endif connect(completionShortcut, SIGNAL(activated()), this, SLOT(invokeCompletion())); - addAutoReleasedObject(new FindInFiles(m_core, m_core->pluginManager()->getObject())); + addAutoReleasedObject(new FindInFiles( + ExtensionSystem::PluginManager::instance()->getObject())); return true; } @@ -169,10 +166,7 @@ void TextEditorPlugin::initializeEditor(TextEditor::PlainTextEditor *editor) void TextEditorPlugin::invokeCompletion() { - if (!m_core) - return; - - Core::IEditor *iface = m_core->editorManager()->currentEditor(); + Core::IEditor *iface = Core::ICore::instance()->editorManager()->currentEditor(); ITextEditor *editor = qobject_cast(iface); if (editor) editor->triggerCompletions(); diff --git a/src/plugins/texteditor/texteditorplugin.h b/src/plugins/texteditor/texteditorplugin.h index 65c7c3e48e8..1f0029a71aa 100644 --- a/src/plugins/texteditor/texteditorplugin.h +++ b/src/plugins/texteditor/texteditorplugin.h @@ -36,22 +36,13 @@ #include -QT_BEGIN_NAMESPACE -class QAction; -QT_END_NAMESPACE - -namespace Core { -class ICore; -class IEditor; -} - namespace TextEditor { class FontSettings; class FontSettingsPage; +class PlainTextEditor; class TextEditorSettings; class TextFileWizard; -class PlainTextEditor; namespace Internal { @@ -67,10 +58,9 @@ public: virtual ~TextEditorPlugin(); static TextEditorPlugin *instance(); - static Core::ICore *core(); // ExtensionSystem::PluginInterface - bool initialize(const QStringList &arguments, QString *); + bool initialize(const QStringList &arguments, QString *errorMessage); void extensionsInitialized(); void initializeEditor(PlainTextEditor *editor); @@ -82,7 +72,6 @@ private slots: private: static TextEditorPlugin *m_instance; - Core::ICore *m_core; TextEditorSettings *m_settings; TextFileWizard *m_wizard; PlainTextEditorFactory *m_editorFactory; diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index 2637b5da545..ea61d571725 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -41,9 +41,10 @@ #include "texteditorconstants.h" #include "texteditorplugin.h" +#include #include -#include +#include using namespace TextEditor; using namespace TextEditor::Constants; @@ -93,8 +94,7 @@ TextEditorSettings::TextEditorSettings(Internal::TextEditorPlugin *plugin, m_fontSettingsPage = new FontSettingsPage(formatDescriptions, QLatin1String("TextEditor"), - tr("Text Editor"), - plugin->core()); + tr("Text Editor")); pm->addObject(m_fontSettingsPage); // Add the GUI used to configure the tab, storage and display settings @@ -103,7 +103,7 @@ TextEditorSettings::TextEditorSettings(Internal::TextEditorPlugin *plugin, generalSettingsPageParameters.category = QLatin1String("TextEditor"); generalSettingsPageParameters.trCategory = tr("Text Editor"); generalSettingsPageParameters.settingsPrefix = QLatin1String("text"); - m_generalSettingsPage = new GeneralSettingsPage(plugin->core(), generalSettingsPageParameters, this); + m_generalSettingsPage = new GeneralSettingsPage(generalSettingsPageParameters, this); pm->addObject(m_generalSettingsPage); connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)), diff --git a/src/plugins/texteditor/textfilewizard.cpp b/src/plugins/texteditor/textfilewizard.cpp index e755233735d..05a3b843a4d 100644 --- a/src/plugins/texteditor/textfilewizard.cpp +++ b/src/plugins/texteditor/textfilewizard.cpp @@ -41,9 +41,8 @@ TextFileWizard::TextFileWizard(const QString &mimeType, const QString &editorKind, const QString &suggestedFileName, const BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent) : - Core::StandardFileWizard(parameters, core, parent), + Core::StandardFileWizard(parameters, parent), m_mimeType(mimeType), m_editorKind(editorKind), m_suggestedFileName(suggestedFileName) diff --git a/src/plugins/texteditor/textfilewizard.h b/src/plugins/texteditor/textfilewizard.h index 2cf2a01b395..1ccc50166f5 100644 --- a/src/plugins/texteditor/textfilewizard.h +++ b/src/plugins/texteditor/textfilewizard.h @@ -50,7 +50,6 @@ public: const QString &editorKind, const QString &suggestedFileName, const BaseFileWizardParameters ¶meters, - Core::ICore *core, QObject *parent = 0); protected: diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp index 392b9c26964..edfadc7032a 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.cpp +++ b/src/plugins/vcsbase/basevcseditorfactory.cpp @@ -43,28 +43,26 @@ namespace VCSBase { -struct BaseVCSEditorFactoryPrivate { - BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t, Core::ICore *core); +struct BaseVCSEditorFactoryPrivate +{ + BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t); const VCSBaseEditorParameters *m_type; const QString m_kind; const QStringList m_mimeTypes; - Core::ICore *m_core; TextEditor::TextEditorActionHandler *m_editorHandler; }; -BaseVCSEditorFactoryPrivate::BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t, Core::ICore *core) : +BaseVCSEditorFactoryPrivate::BaseVCSEditorFactoryPrivate(const VCSBaseEditorParameters *t) : m_type(t), m_kind(QLatin1String(t->kind)), m_mimeTypes(QStringList(QLatin1String(t->mimeType))), - m_core(core), - m_editorHandler(new TextEditor::TextEditorActionHandler(core, t->kind)) + m_editorHandler(new TextEditor::TextEditorActionHandler(t->kind)) { } -BaseVCSEditorFactory::BaseVCSEditorFactory(const VCSBaseEditorParameters *t, - Core::ICore *core) : - m_d(new BaseVCSEditorFactoryPrivate(t, core)) +BaseVCSEditorFactory::BaseVCSEditorFactory(const VCSBaseEditorParameters *t) + : m_d(new BaseVCSEditorFactoryPrivate(t)) { } @@ -85,7 +83,7 @@ QString BaseVCSEditorFactory::kind() const Core::IFile *BaseVCSEditorFactory::open(const QString &fileName) { - Core::IEditor *iface = m_d->m_core->editorManager()->openEditor(fileName, kind()); + Core::IEditor *iface = Core::ICore::instance()->editorManager()->openEditor(fileName, kind()); return iface ? iface->file() : 0; } diff --git a/src/plugins/vcsbase/basevcseditorfactory.h b/src/plugins/vcsbase/basevcseditorfactory.h index bc10a21180d..ca6e926937a 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.h +++ b/src/plugins/vcsbase/basevcseditorfactory.h @@ -41,14 +41,6 @@ #include -namespace TextEditor { - class TextEditorActionHandler; -} - -namespace Core { - class ICore; -} - namespace VCSBase { struct BaseVCSEditorFactoryPrivate; @@ -59,8 +51,7 @@ class VCSBASE_EXPORT BaseVCSEditorFactory : public Core::IEditorFactory { Q_OBJECT public: - explicit BaseVCSEditorFactory(const VCSBaseEditorParameters *type, - Core::ICore *core); + explicit BaseVCSEditorFactory(const VCSBaseEditorParameters *type); virtual ~BaseVCSEditorFactory(); virtual QStringList mimeTypes() const; @@ -85,7 +76,6 @@ class VCSEditorFactory : public BaseVCSEditorFactory { public: explicit VCSEditorFactory(const VCSBaseEditorParameters *type, - Core::ICore *core, QObject *describeReceiver = 0, const char *describeSlot = 0); @@ -98,10 +88,9 @@ private: template VCSEditorFactory::VCSEditorFactory(const VCSBaseEditorParameters *type, - Core::ICore *core, QObject *describeReceiver, const char *describeSlot) : - BaseVCSEditorFactory(type, core), + BaseVCSEditorFactory(type), m_describeReceiver(describeReceiver), m_describeSlot(describeSlot) { diff --git a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp index b662abbf409..f4610ed6685 100644 --- a/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp +++ b/src/plugins/vcsbase/basevcssubmiteditorfactory.cpp @@ -82,7 +82,7 @@ QStringList BaseVCSSubmitEditorFactory::mimeTypes() const Core::IFile *BaseVCSSubmitEditorFactory::open(const QString &fileName) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Core::ICore *core = Core::ICore::instance(); if (Core::IEditor *iface = core->editorManager()->openEditor(fileName, kind())) return iface->file(); return 0; diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 6951d39eea5..7cf2f2a9a4e 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -37,29 +37,29 @@ #include "vcsbasetextdocument.h" #include "vcsbaseconstants.h" +#include #include #include -#include +#include +#include +#include +#include #include #include -#include -#include -#include - -#include -#include -#include -#include #include +#include +#include +#include +#include #include +#include +#include #include #include -#include #include -#include #include -#include +#include namespace VCSBase { @@ -68,8 +68,7 @@ class VCSBaseEditorEditable : public TextEditor::BaseTextEditorEditable { public: VCSBaseEditorEditable(VCSBaseEditor *, - const VCSBaseEditorParameters *type, - Core::ICore *); + const VCSBaseEditorParameters *type); QList context() const; bool duplicateSupported() const { return false; } @@ -83,11 +82,10 @@ private: }; VCSBaseEditorEditable::VCSBaseEditorEditable(VCSBaseEditor *editor, - const VCSBaseEditorParameters *type, - Core::ICore *core) : - BaseTextEditorEditable(editor), - m_kind(type->kind) + const VCSBaseEditorParameters *type) + : BaseTextEditorEditable(editor), m_kind(type->kind) { + Core::ICore *core = Core::ICore::instance(); m_context << core->uniqueIDManager()->uniqueIdentifier(QLatin1String(type->context)) << core->uniqueIDManager()->uniqueIdentifier(QLatin1String(TextEditor::Constants::C_TEXTEDITOR)); @@ -100,46 +98,39 @@ QList VCSBaseEditorEditable::context() const // ----------- VCSBaseEditorPrivate -struct VCSBaseEditorPrivate { +struct VCSBaseEditorPrivate +{ VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent); const VCSBaseEditorParameters *m_parameters; QAction *m_describeAction; QString m_currentChange; - Core::ICore *m_core; QString m_source; }; -VCSBaseEditorPrivate::VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent) : - m_parameters(type), - m_describeAction(new QAction(parent)), - m_core(ExtensionSystem::PluginManager::instance()->getObject()) +VCSBaseEditorPrivate::VCSBaseEditorPrivate(const VCSBaseEditorParameters *type, QObject *parent) + : m_parameters(type), m_describeAction(new QAction(parent)) { } // ------------ VCSBaseEditor -VCSBaseEditor::VCSBaseEditor(const VCSBaseEditorParameters *type, - QWidget *parent) : - BaseTextEditor(parent), - m_d(new VCSBaseEditorPrivate(type, this)) +VCSBaseEditor::VCSBaseEditor(const VCSBaseEditorParameters *type, QWidget *parent) + : BaseTextEditor(parent), + d(new VCSBaseEditorPrivate(type, this)) { if (VCSBase::Constants::Internal::debug) qDebug() << "VCSBaseEditor::VCSBaseEditor" << type->type << type->kind; setReadOnly(true); - - connect(m_d->m_describeAction, SIGNAL(triggered()), this, SLOT(describe())); - + connect(d->m_describeAction, SIGNAL(triggered()), this, SLOT(describe())); viewport()->setMouseTracking(true); - setBaseTextDocument(new Internal::VCSBaseTextDocument); - - setMimeType(QLatin1String(m_d->m_parameters->mimeType)); + setMimeType(QLatin1String(d->m_parameters->mimeType)); } void VCSBaseEditor::init() { - switch (m_d->m_parameters->type) { + switch (d->m_parameters->type) { case RegularCommandOutput: case LogOutput: case AnnotateOutput: @@ -154,17 +145,17 @@ void VCSBaseEditor::init() VCSBaseEditor::~VCSBaseEditor() { - delete m_d; + delete d; } QString VCSBaseEditor::source() const { - return m_d->m_source; + return d->m_source; } void VCSBaseEditor::setSource(const QString &source) { - m_d->m_source = source; + d->m_source = source; } QTextCodec *VCSBaseEditor::codec() const @@ -183,7 +174,7 @@ void VCSBaseEditor::setCodec(QTextCodec *c) EditorContentType VCSBaseEditor::contentType() const { - return m_d->m_parameters->type; + return d->m_parameters->type; } bool VCSBaseEditor::isModified() const @@ -193,19 +184,19 @@ bool VCSBaseEditor::isModified() const TextEditor::BaseTextEditorEditable *VCSBaseEditor::createEditableInterface() { - return new VCSBaseEditorEditable(this, m_d->m_parameters, m_d->m_core); + return new VCSBaseEditorEditable(this, d->m_parameters); } void VCSBaseEditor::contextMenuEvent(QContextMenuEvent *e) { QMenu *menu = createStandardContextMenu(); // 'click on change-interaction' - if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) { - m_d->m_currentChange = changeUnderCursor(cursorForPosition(e->pos())); - if (!m_d->m_currentChange.isEmpty()) { - m_d->m_describeAction->setText(tr("Describe change %1").arg(m_d->m_currentChange)); + if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) { + d->m_currentChange = changeUnderCursor(cursorForPosition(e->pos())); + if (!d->m_currentChange.isEmpty()) { + d->m_describeAction->setText(tr("Describe change %1").arg(d->m_currentChange)); menu->addSeparator(); - menu->addAction(m_d->m_describeAction); + menu->addAction(d->m_describeAction); } } menu->exec(e->globalPos()); @@ -217,7 +208,7 @@ void VCSBaseEditor::mouseMoveEvent(QMouseEvent *e) bool overrideCursor = false; Qt::CursorShape cursorShape; - if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) { + if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) { // Link emulation behaviour for 'click on change-interaction' QTextCursor cursor = cursorForPosition(e->pos()); QString change = changeUnderCursor(cursor); @@ -245,11 +236,11 @@ void VCSBaseEditor::mouseMoveEvent(QMouseEvent *e) void VCSBaseEditor::mouseReleaseEvent(QMouseEvent *e) { - if (m_d->m_parameters->type == LogOutput || m_d->m_parameters->type == AnnotateOutput) { + if (d->m_parameters->type == LogOutput || d->m_parameters->type == AnnotateOutput) { if (e->button() == Qt::LeftButton &&!(e->modifiers() & Qt::ShiftModifier)) { QTextCursor cursor = cursorForPosition(e->pos()); - m_d->m_currentChange = changeUnderCursor(cursor); - if (!m_d->m_currentChange.isEmpty()) { + d->m_currentChange = changeUnderCursor(cursor); + if (!d->m_currentChange.isEmpty()) { describe(); e->accept(); return; @@ -261,7 +252,7 @@ void VCSBaseEditor::mouseReleaseEvent(QMouseEvent *e) void VCSBaseEditor::mouseDoubleClickEvent(QMouseEvent *e) { - if (m_d->m_parameters->type == DiffOutput) { + if (d->m_parameters->type == DiffOutput) { if (e->button() == Qt::LeftButton &&!(e->modifiers() & Qt::ShiftModifier)) { QTextCursor cursor = cursorForPosition(e->pos()); jumpToChangeFromDiff(cursor); @@ -282,16 +273,16 @@ void VCSBaseEditor::keyPressEvent(QKeyEvent *e) void VCSBaseEditor::describe() { if (VCSBase::Constants::Internal::debug) - qDebug() << "VCSBaseEditor::describe" << m_d->m_currentChange; - if (!m_d->m_currentChange.isEmpty()) - emit describeRequested(m_d->m_source, m_d->m_currentChange); + qDebug() << "VCSBaseEditor::describe" << d->m_currentChange; + if (!d->m_currentChange.isEmpty()) + emit describeRequested(d->m_source, d->m_currentChange); } void VCSBaseEditor::slotActivateAnnotation() { // The annotation highlighting depends on contents (change number // set with assigned colors) - if (m_d->m_parameters->type != AnnotateOutput) + if (d->m_parameters->type != AnnotateOutput) return; const QSet changes = annotationChanges(); @@ -372,9 +363,10 @@ void VCSBaseEditor::jumpToChangeFromDiff(QTextCursor cursor) if (!exists) return; - Core::IEditor *ediface = m_d->m_core->editorManager()->openEditor(fileName); - m_d->m_core->editorManager()->ensureEditorManagerVisible(); - if (TextEditor::ITextEditor *editor = qobject_cast(ediface)) + Core::EditorManager *em = Core::ICore::instance()->editorManager(); + Core::IEditor *ed = em->openEditor(fileName); + em->ensureEditorManagerVisible(); + if (TextEditor::ITextEditor *editor = qobject_cast(ed)) editor->gotoLine(chunkStart + lineCount); } @@ -386,7 +378,7 @@ void VCSBaseEditor::setPlainTextData(const QByteArray &data) void VCSBaseEditor::setFontSettings(const TextEditor::FontSettings &fs) { TextEditor::BaseTextEditor::setFontSettings(fs); - if (m_d->m_parameters->type == DiffOutput) { + if (d->m_parameters->type == DiffOutput) { if (DiffHighlighter *highlighter = qobject_cast(baseTextDocument()->syntaxHighlighter())) { static QVector categories; if (categories.isEmpty()) { @@ -413,11 +405,12 @@ const VCSBaseEditorParameters *VCSBaseEditor::findType(const VCSBaseEditorParame } // Find the codec used for a file querying the editor. -static QTextCodec *findFileCodec(const Core::ICore *core, const QString &source) +static QTextCodec *findFileCodec(const QString &source) { typedef QList EditorList; - const EditorList editors = core->editorManager()->editorsForFileName(source); + const EditorList editors = + Core::ICore::instance()->editorManager()->editorsForFileName(source); if (!editors.empty()) { const EditorList::const_iterator ecend = editors.constEnd(); for (EditorList::const_iterator it = editors.constBegin(); it != ecend; ++it) @@ -456,13 +449,13 @@ static QTextCodec *findProjectCodec(const QString &dir) return 0; } -QTextCodec *VCSBaseEditor::getCodec(const Core::ICore *core, const QString &source) +QTextCodec *VCSBaseEditor::getCodec(const QString &source) { if (!source.isEmpty()) { // Check file const QFileInfo sourceFi(source); if (sourceFi.isFile()) - if (QTextCodec *fc = findFileCodec(core, source)) + if (QTextCodec *fc = findFileCodec(source)) return fc; // Find by project via directory if (QTextCodec *pc = findProjectCodec(sourceFi.isFile() ? sourceFi.absolutePath() : source)) diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index 42c31c6c37d..5c516f00ffb 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -46,10 +46,6 @@ class QTextCodec; class QTextCursor; QT_END_NAMESPACE -namespace Core { -class ICore; -} - namespace VCSBase { struct VCSBaseEditorPrivate; @@ -121,7 +117,7 @@ public: // the editor manager and the project managers (defaults to system codec). // The codec should be set on editors displaying diff or annotation // output. - static QTextCodec *getCodec(const Core::ICore *core, const QString &source); + static QTextCodec *getCodec(const QString &source); // Utility to return the editor from the IEditor returned by the editor // manager which is a BaseTextEditable. @@ -166,7 +162,7 @@ private: void jumpToChangeFromDiff(QTextCursor cursor); - VCSBaseEditorPrivate *m_d; + VCSBaseEditorPrivate *d; }; } // namespace VCSBase diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 7cbd8a9233e..06cefbb71dd 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -34,13 +34,12 @@ #include "vcsbaseplugin.h" #include "diffhighlighter.h" -#include #include #include #include #include -#include +#include namespace VCSBase { namespace Internal { @@ -57,10 +56,12 @@ VCSBasePlugin::~VCSBasePlugin() m_instance = 0; } -bool VCSBasePlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage) +bool VCSBasePlugin::initialize(const QStringList &arguments, QString *errorMessage) { - Core::ICore *core = ExtensionSystem::PluginManager::instance()->getObject(); + Q_UNUSED(arguments); + Q_UNUSED(errorMessage); + Core::ICore *core = Core::ICore::instance(); if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/vcsbase/VCSBase.mimetypes.xml"), errorMessage)) return false; diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index a47a66ab064..64192d1b6b4 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -38,33 +38,33 @@ #include #include #include - +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include enum { debug = 0 }; enum { wantToolBar = 0 }; namespace VCSBase { -struct VCSBaseSubmitEditorPrivate { +struct VCSBaseSubmitEditorPrivate +{ VCSBaseSubmitEditorPrivate(const VCSBaseSubmitEditorParameters *parameters, Core::Utils::SubmitEditorWidget *editorWidget, QObject *q); - Core::ICore *m_core; Core::Utils::SubmitEditorWidget *m_widget; QToolBar *m_toolWidget; const VCSBaseSubmitEditorParameters *m_parameters; @@ -79,13 +79,12 @@ struct VCSBaseSubmitEditorPrivate { VCSBaseSubmitEditorPrivate::VCSBaseSubmitEditorPrivate(const VCSBaseSubmitEditorParameters *parameters, Core::Utils::SubmitEditorWidget *editorWidget, QObject *q) : - m_core(ExtensionSystem::PluginManager::instance()->getObject()), m_widget(editorWidget), m_toolWidget(0), m_parameters(parameters), m_file(new VCSBase::Internal::SubmitEditorFile(QLatin1String(m_parameters->mimeType), q)) { - m_contexts << m_core->uniqueIDManager()->uniqueIdentifier(m_parameters->context); + m_contexts << Core::ICore::instance()->uniqueIDManager()->uniqueIdentifier(m_parameters->context); } VCSBaseSubmitEditor::VCSBaseSubmitEditor(const VCSBaseSubmitEditorParameters *parameters, diff --git a/tests/auto/cplusplus/ast/ast.pro b/tests/auto/cplusplus/ast/ast.pro index 6974c6bbb4c..39fd14105de 100644 --- a/tests/auto/cplusplus/ast/ast.pro +++ b/tests/auto/cplusplus/ast/ast.pro @@ -1,5 +1,4 @@ load(qttest_p4) include(../shared/shared.pri) QT = core - SOURCES += tst_ast.cpp diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index 5756d2dd224..689da076ea1 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -36,6 +36,9 @@ public: { return parse(source, TranslationUnit::ParseStatement); } private slots: + // declarations + void gcc_attributes_1(); + // expressions void simple_name(); void template_id(); @@ -54,6 +57,13 @@ private slots: void objc_protocol_definition_1(); }; +void tst_AST::gcc_attributes_1() +{ + QSharedPointer unit(parseDeclaration("\n" +"static inline void *__attribute__((__always_inline__)) _mm_malloc(size_t size, size_t align);" + )); +} + void tst_AST::simple_name() { QSharedPointer unit(parseExpression("a")); diff --git a/tests/manual/cplusplus/conf.c++ b/tests/manual/cplusplus/conf.c++ index fbfad57a4bc..c179f979272 100644 --- a/tests/manual/cplusplus/conf.c++ +++ b/tests/manual/cplusplus/conf.c++ @@ -5,3 +5,4 @@ #define __asm__(a...) #define restrict #define __restrict +#define __weak diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp index c668601e78d..dfa1350e559 100644 --- a/tests/manual/fakevim/main.cpp +++ b/tests/manual/fakevim/main.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -16,7 +17,7 @@ class Proxy : public QObject Q_OBJECT public: - Proxy(QWidget *widget) : QObject(0), m_widget(widget) {} + Proxy() : QObject(0) {} public slots: void changeSelection(QWidget *w, const QList &s) @@ -26,8 +27,11 @@ public slots: else if (QTextEdit *ed = qobject_cast(w)) ed->setExtraSelections(s); } -private: - QWidget *m_widget; + + void changeExtraInformation(QWidget *w, const QString &info) + { + QMessageBox::information(w, "Information", info); + } }; int main(int argc, char *argv[]) @@ -50,7 +54,7 @@ int main(int argc, char *argv[]) widget->resize(450, 350); widget->setFocus(); - Proxy proxy(widget); + Proxy proxy; FakeVimHandler handler; @@ -78,6 +82,9 @@ int main(int argc, char *argv[]) QObject::connect(&handler, SIGNAL(selectionChanged(QWidget*,QList)), &proxy, SLOT(changeSelection(QWidget*,QList))); + QObject::connect(&handler, + SIGNAL(extraInformationChanged(QWidget*,QString)), + &proxy, SLOT(changeExtraInformation(QWidget*,QString))); handler.addWidget(widget); if (args.size() >= 1) diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index a20311822f8..b719915c479 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -54,6 +54,7 @@ #include +#include #include #include #include @@ -444,6 +445,29 @@ void stringRefTest(const QString &refstring) Q_UNUSED(refstring); } +void testStdDeque() +{ + std::deque plist1; + plist1.push_back(new int(1)); + plist1.push_back(0); + plist1.push_back(new int(2)); + plist1.pop_back(); + plist1.pop_front(); + plist1.pop_front(); + + std::deque flist2; + flist2.push_back(1); + flist2.push_back(2); + + std::deque plist; + plist.push_back(new Foo(1)); + plist.push_back(new Foo(2)); + + std::deque flist; + flist.push_back(1); + flist.push_front(2); +} + void testStdList() { std::list plist1; @@ -911,6 +935,7 @@ int main(int argc, char *argv[]) testHidden(); testArray(); + testStdDeque(); testStdList(); testStdMap(); testStdStack(); diff --git a/tests/manual/gdbdebugger/simple/plugin.cpp b/tests/manual/gdbdebugger/simple/plugin.cpp index 4e02c7f9f7e..5e140d5811e 100644 --- a/tests/manual/gdbdebugger/simple/plugin.cpp +++ b/tests/manual/gdbdebugger/simple/plugin.cpp @@ -39,6 +39,6 @@ extern "C" Q_DECL_EXPORT int pluginTest() int s = 0; for (int i = 1; i != 2000; ++i) s += i; - fprintf(stderr, "in plugin test"); + fprintf(stderr, "in plugin test\n"); return s; }