diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp index 7a7279cfe49edc6b6a26caaf966775d64e9c02b2..e98fd2ce8c9fb9bab8174f760d5f9b87d43e328a 100644 --- a/src/plugins/coreplugin/basefilewizard.cpp +++ b/src/plugins/coreplugin/basefilewizard.cpp @@ -32,12 +32,13 @@ ***************************************************************************/ #include "basefilewizard.h" + +#include "coreconstants.h" +#include "icore.h" +#include "ifilewizardextension.h" #include "mimedatabase.h" +#include "editormanager/editormanager.h" -#include <coreplugin/editormanager/editormanager.h> -#include <coreplugin/icore.h> -#include <coreplugin/coreconstants.h> -#include <coreplugin/ifilewizardextension.h> #include <extensionsystem/pluginmanager.h> #include <utils/filewizarddialog.h> diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 7ba648c1619f37d0c81c0bbfa6d03f123941dec6..36f170fcf977a4814b675c5e03d66af11f7e5f98 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -167,3 +167,10 @@ RESOURCES += core.qrc \ contains(QT_CONFIG, webkit) { QT += webkit } + +linux-* { + images.files = images/qtcreator_logo_*.png + images.path = /share/pixmaps + + INSTALLS += images +} diff --git a/src/plugins/coreplugin/editormanager/editorsplitter.cpp b/src/plugins/coreplugin/editormanager/editorsplitter.cpp index 7e4f53f4e40390f6e01ca669c13326de2f3d5ff3..5ff9832ec02fe80203821de4e974008a4bb82434 100644 --- a/src/plugins/coreplugin/editormanager/editorsplitter.cpp +++ b/src/plugins/coreplugin/editormanager/editorsplitter.cpp @@ -33,15 +33,14 @@ #include "editorsplitter.h" +#include "coreconstants.h" #include "editormanager.h" +#include "icore.h" #include "minisplitter.h" #include "openeditorswindow.h" #include "stackededitorgroup.h" - -#include <coreplugin/icore.h> -#include <coreplugin/coreconstants.h> -#include <coreplugin/uniqueidmanager.h> -#include <coreplugin/actionmanager/actionmanager.h> +#include "uniqueidmanager.h" +#include "actionmanager/actionmanager.h" #include <utils/qtcassert.h> diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp index c503dbd7dd827d7a7b102bb1d3a6f70d673a5f37..afafa92d75744ad6ba8094459410ef83ac5174c5 100644 --- a/src/plugins/coreplugin/filemanager.cpp +++ b/src/plugins/coreplugin/filemanager.cpp @@ -33,13 +33,14 @@ #include "filemanager.h" +#include "editormanager.h" +#include "icore.h" #include "ifile.h" +#include "iversioncontrol.h" #include "mainwindow.h" +#include "mimedatabase.h" #include "saveitemsdialog.h" #include "vcsmanager.h" -#include "editormanager.h" -#include "mimedatabase.h" -#include "iversioncontrol.h" #include <utils/qtcassert.h> diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index bf36602e342eb4419858e9172c20cddba5b18f05..68cea956947291da76e32452967f7a0e05553b5d 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -380,7 +380,7 @@ void MainWindow::registerDefaultContainers() menubar->appendGroup(Constants::G_WINDOW); menubar->appendGroup(Constants::G_HELP); - //File Menu + // File Menu ActionContainer *filemenu = am->createMenu(Constants::M_FILE); menubar->addMenu(filemenu, Constants::G_FILE); filemenu->menu()->setTitle(tr("&File")); @@ -394,7 +394,7 @@ void MainWindow::registerDefaultContainers() connect(filemenu->menu(), SIGNAL(aboutToShow()), this, SLOT(aboutToShowRecentFiles())); - //Edit Menu + // Edit Menu ActionContainer *medit = am->createMenu(Constants::M_EDIT); menubar->addMenu(medit, Constants::G_EDIT); medit->menu()->setTitle(tr("&Edit")); @@ -405,12 +405,12 @@ void MainWindow::registerDefaultContainers() medit->appendGroup(Constants::G_EDIT_FIND); medit->appendGroup(Constants::G_EDIT_OTHER); - //Tools Menu + // Tools Menu ActionContainer *ac = am->createMenu(Constants::M_TOOLS); menubar->addMenu(ac, Constants::G_TOOLS); ac->menu()->setTitle(tr("&Tools")); - //Window Menu + // Window Menu ActionContainer *mwindow = am->createMenu(Constants::M_WINDOW); menubar->addMenu(mwindow, Constants::G_WINDOW); mwindow->menu()->setTitle(tr("&Window")); @@ -423,7 +423,7 @@ void MainWindow::registerDefaultContainers() mwindow->appendGroup(Constants::G_WINDOW_OTHER); mwindow->appendGroup(Constants::G_WINDOW_LIST); - //Help Menu + // Help Menu ac = am->createMenu(Constants::M_HELP); menubar->addMenu(ac, Constants::G_HELP); ac->menu()->setTitle(tr("&Help")); diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h index e1fb1d9c6626aeb7466c66ce919881fe4c10965e..4fa8f7472c16e529836fa96a0bf5b092dfd593e3 100644 --- a/src/plugins/coreplugin/mainwindow.h +++ b/src/plugins/coreplugin/mainwindow.h @@ -34,7 +34,7 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include "icore.h" +#include "core_global.h" #include <QtGui/QMainWindow> #include <QtCore/QMap> @@ -61,6 +61,7 @@ class BaseView; class EditorManager; class FileManager; class IContext; +class IWizard; class MessageManager; class MimeDatabase; class ModeManager; @@ -103,7 +104,6 @@ public: void openFiles(const QStringList &fileNames); - //ICore inline ExtensionSystem::PluginManager *pluginManager() { return m_pluginManager; } Core::ActionManager *actionManager() const; Core::FileManager *fileManager() const; diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index 64006ff723609143d507643a2c9a7ba01c965ac4..05c47261f3ab4c1b81a93844d808e3b636e44857 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -35,6 +35,7 @@ #include "fancytabwidget.h" #include "fancyactionbar.h" +#include "icore.h" #include "mainwindow.h" #include <aggregation/aggregate.h> diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp index 1141909aa0cf611cd26a3c32fb16f3874955d7e0..6329f70ed94cb14045fc243367e5544d6eb86d4e 100644 --- a/src/plugins/coreplugin/navigationwidget.cpp +++ b/src/plugins/coreplugin/navigationwidget.cpp @@ -33,12 +33,13 @@ #include "navigationwidget.h" -#include <coreplugin/icore.h> -#include <coreplugin/coreconstants.h> -#include <coreplugin/inavigationwidgetfactory.h> -#include <coreplugin/modemanager.h> -#include <coreplugin/uniqueidmanager.h> -#include <coreplugin/actionmanager/actionmanager.h> +#include "icore.h" +#include "coreconstants.h" +#include "inavigationwidgetfactory.h" +#include "modemanager.h" +#include "uniqueidmanager.h" +#include "actionmanager/actionmanager.h" + #include <extensionsystem/pluginmanager.h> #include <QtCore/QDebug> diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index d85ecd2579db29046ca7fb32472491527f7e280a..52dec2a22ff4947d95bb68ea82890a6cc4e594e8 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -33,6 +33,7 @@ #include "outputpane.h" #include "coreconstants.h" +#include "icore.h" #include "ioutputpane.h" #include "mainwindow.h" #include "modemanager.h" @@ -55,7 +56,6 @@ #include <QtGui/QToolBar> #include <QtGui/QToolButton> #include <QtGui/QStackedWidget> -#include <QDebug> using namespace Core; using namespace Core::Internal; diff --git a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h index 40768f0fa9bcc808e199a4291a1695d4da592865..e05778a832d84b68332b8491b4c2321ec808712c 100644 --- a/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h +++ b/src/plugins/coreplugin/scriptmanager/scriptmanager_p.h @@ -35,13 +35,15 @@ #define SCRIPTMANAGER_P_H #include <coreplugin/scriptmanager/scriptmanager.h> -#include <coreplugin/icore.h> #include <QtCore/QObject> #include <QtCore/QList> #include <QtScript/QScriptEngine> namespace Core { + +class ICore; + namespace Internal { class ScriptManagerPrivate : public Core::ScriptManager diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 87d229d6f4e57f58a6c350bef2b4240c1cd629a2..b370faea1bb626a110c666102dbe4e4b7db9eda8 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -440,9 +440,9 @@ void CPPEditor::switchDeclarationDefinition() return; Function *f = lastSymbol->asFunction(); - if (! f) { + if (!f) { Scope *fs = lastSymbol->scope(); - if (! fs->isFunctionScope()) + if (!fs->isFunctionScope()) fs = fs->enclosingFunctionScope(); if (fs) f = fs->owner()->asFunction(); diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp index da8374091d5f17e6506570b6a7f122e725524287..58de33f2753e997c9f159ec4d0cf5c13e2170a4c 100644 --- a/src/plugins/designer/formeditorw.cpp +++ b/src/plugins/designer/formeditorw.cpp @@ -40,6 +40,7 @@ #include "workbenchintegration.h" #include <coreplugin/coreconstants.h> +#include <coreplugin/icore.h> #include <coreplugin/uniqueidmanager.h> #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/editormanager/editormanager.h> diff --git a/src/plugins/designer/settingspage.h b/src/plugins/designer/settingspage.h index 8ad707dd76937a6acd5d37cc7b429f9bfb59e26b..bba91cd5de6b11fd21149973a3163d572f69e4e8 100644 --- a/src/plugins/designer/settingspage.h +++ b/src/plugins/designer/settingspage.h @@ -34,7 +34,6 @@ #ifndef DESIGNER_SETTINGSPAGE_H #define DESIGNER_SETTINGSPAGE_H -#include <coreplugin/icore.h> #include <coreplugin/dialogs/ioptionspage.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 9236b8930bbfe8a5f9e4f9f581ccaac50f3168a2..b8ae84ba4e6ef44ff1896788cba83e2abb656568 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -45,6 +45,7 @@ #include <QtCore/QDebug> #include <QtCore/QFile> #include <QtCore/QObject> +#include <QtCore/QPointer> #include <QtCore/QProcess> #include <QtCore/QRegExp> #include <QtCore/QTextStream> @@ -157,6 +158,13 @@ QDebug &operator<<(QDebug &ts, const EditOperation &op) return ts; } +QDebug &operator<<(QDebug &ts, const QList<QTextEdit::ExtraSelection> &sels) +{ + foreach (QTextEdit::ExtraSelection sel, sels) + ts << "SEL: " << sel.cursor.anchor() << sel.cursor.position(); + return ts; +} + int lineCount(const QString &text) { //return text.count(QChar(ParagraphSeparator)); @@ -166,11 +174,14 @@ int lineCount(const QString &text) class FakeVimHandler::Private { public: - Private(FakeVimHandler *parent); + Private(FakeVimHandler *parent, QWidget *widget); bool handleEvent(QKeyEvent *ev); void handleExCommand(const QString &cmd); + void setupWidget(); + void restoreWidget(); + private: friend class FakeVimHandler; static int shift(int key) { return key + 32; } @@ -238,7 +249,6 @@ private: int readLineCode(QString &cmd); void selectRange(int beginLine, int endLine); - void setWidget(QWidget *ob); void enterInsertMode(); void enterCommandMode(); void showRedMessage(const QString &msg); @@ -328,12 +338,17 @@ public: // for restoring cursor position int m_savedYankPosition; int m_desiredColumn; + + QPointer<QObject> m_extraData; }; -FakeVimHandler::Private::Private(FakeVimHandler *parent) +FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget) { q = parent; + m_textedit = qobject_cast<QTextEdit *>(widget); + m_plaintextedit = qobject_cast<QPlainTextEdit *>(widget); + m_mode = CommandMode; m_submode = NoSubMode; m_subsubmode = NoSubSubMode; @@ -341,8 +356,6 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent) m_lastSearchForward = true; m_register = '"'; m_gflag = false; - m_textedit = 0; - m_plaintextedit = 0; m_visualMode = NoVisualMode; m_desiredColumn = 0; m_moveType = MoveInclusive; @@ -403,6 +416,37 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev) return handled; } +void FakeVimHandler::Private::setupWidget() +{ + enterCommandMode(); + if (m_textedit) { + m_textedit->installEventFilter(q); + //m_textedit->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x'))); + m_textedit->setLineWrapMode(QTextEdit::NoWrap); + m_wasReadOnly = m_textedit->isReadOnly(); + } else if (m_plaintextedit) { + m_plaintextedit->installEventFilter(q); + //plaintextedit->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x'))); + m_plaintextedit->setLineWrapMode(QPlainTextEdit::NoWrap); + m_wasReadOnly = m_plaintextedit->isReadOnly(); + } + showBlackMessage("vi emulation mode."); + updateMiniBuffer(); +} + +void FakeVimHandler::Private::restoreWidget() +{ + //showBlackMessage(QString()); + //updateMiniBuffer(); + if (m_textedit) { + m_textedit->removeEventFilter(q); + m_textedit->setReadOnly(m_wasReadOnly); + } else if (m_plaintextedit) { + m_plaintextedit->removeEventFilter(q); + m_plaintextedit->setReadOnly(m_wasReadOnly); + } +} + bool FakeVimHandler::Private::handleKey(int key, int unmodified, const QString &text) { //qDebug() << "KEY: " << key << text << "POS: " << m_tc.position(); @@ -419,6 +463,7 @@ bool FakeVimHandler::Private::handleKey(int key, int unmodified, const QString & void FakeVimHandler::Private::finishMovement(const QString &dotCommand) { + //qDebug() << "ANCHOR: " << m_anchor; if (m_submode == FilterSubMode) { int beginLine = lineForPosition(anchor()); int endLine = lineForPosition(position()); @@ -443,6 +488,8 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) m_mode = InsertMode; m_submode = NoSubMode; } else if (m_submode == DeleteSubMode) { + if (m_moveType == MoveInclusive) + moveRight(); // correct if (!dotCommand.isEmpty()) m_dotCommand = "d" + dotCommand; m_registers[m_register] = recordRemoveSelectedText(); @@ -467,10 +514,8 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) m_tc.setPosition(startBlock.position()); moveToFirstNonBlankOnLine(); m_submode = NoSubMode; - } else if (m_moveType == MoveExclusive) { - moveLeft(); // correct - m_moveType = MoveInclusive; } + m_moveType = MoveInclusive; m_mvcount.clear(); m_opcount.clear(); m_gflag = false; @@ -489,10 +534,13 @@ void FakeVimHandler::Private::updateSelection() QTextEdit::ExtraSelection sel; sel.cursor = m_tc; sel.format = m_tc.blockCharFormat(); - //sel.format.setFontWeight(QFont::Bold); - //sel.format.setFontUnderline(true); +#if 0 + sel.format.setFontWeight(QFont::Bold); + sel.format.setFontUnderline(true); +#else sel.format.setForeground(Qt::white); sel.format.setBackground(Qt::black); +#endif int cursorPos = m_tc.position(); int anchorPos = m_marks['<']; //qDebug() << "POS: " << cursorPos << " ANCHOR: " << anchorPos; @@ -529,7 +577,8 @@ void FakeVimHandler::Private::updateSelection() } } } - emit q->selectionChanged(editor(), selections); + //qDebug() << "SELECTION: " << selections; + emit q->selectionChanged(selections); } void FakeVimHandler::Private::updateMiniBuffer() @@ -770,9 +819,11 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordBeginGroup(); m_lastInsertion.clear(); } else if (key == 'b') { + m_moveType = MoveExclusive; moveToWordBoundary(false, false); finishMovement(); } else if (key == 'B') { + m_moveType = MoveExclusive; moveToWordBoundary(true, false); finishMovement(); } else if (key == 'c') { @@ -795,7 +846,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_mvcount.clear(); m_submode = DeleteSubMode; } else if (key == 'd') { - setAnchor(); + //setAnchor(); leaveVisualMode(); int beginLine = lineForPosition(m_marks['<']); int endLine = lineForPosition(m_marks['>']); @@ -809,10 +860,11 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveRight(rightDist()); finishMovement(); } else if (key == 'e') { + m_moveType = MoveInclusive; moveToWordBoundary(false, true); - m_moveType = MoveExclusive; finishMovement(); } else if (key == 'E') { + m_moveType = MoveInclusive; moveToWordBoundary(true, true); finishMovement(); } else if (key == 'f' || key == 'F') { @@ -1036,6 +1088,20 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } recordInsertText(str); recordEndGroup(); + } else if (key == control('d')) { + int sline = cursorLineOnScreen(); + // FIXME: this should use the "scroll" option, and "count" + moveDown(linesOnScreen() / 2); + moveToFirstNonBlankOnLine(); + scrollToLineInDocument(cursorLineInDocument() - sline); + finishMovement(); + } else if (key == control('u')) { + int sline = cursorLineOnScreen(); + // FIXME: this should use the "scroll" option, and "count" + moveUp(linesOnScreen() / 2); + moveToFirstNonBlankOnLine(); + scrollToLineInDocument(cursorLineInDocument() - sline); + finishMovement(); } else if (key == Key_PageDown || key == control('f')) { moveDown(count() * (linesOnScreen() - 2)); finishMovement(); @@ -1271,12 +1337,12 @@ int FakeVimHandler::Private::readLineCode(QString &cmd) void FakeVimHandler::Private::selectRange(int beginLine, int endLine) { - m_tc.setPosition(positionForLine(beginLine), MoveAnchor); + m_anchor = positionForLine(beginLine); if (endLine == linesInDocument()) { - m_tc.setPosition(positionForLine(endLine), KeepAnchor); - m_tc.movePosition(EndOfLine, KeepAnchor); + m_tc.setPosition(positionForLine(endLine), MoveAnchor); + m_tc.movePosition(EndOfLine, MoveAnchor); } else { - m_tc.setPosition(positionForLine(endLine + 1), KeepAnchor); + m_tc.setPosition(positionForLine(endLine + 1), MoveAnchor); } } @@ -1329,21 +1395,38 @@ 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()) fileName = m_currentFileName; - QFile file(fileName); - bool exists = file.exists(); + QFile file1(fileName); + bool exists = file1.exists(); if (exists && !forced && !noArgs) { showRedMessage(tr("File '%1' exists (add ! to override)").arg(fileName)); - } else if (file.open(QIODevice::ReadWrite)) { + } else if (file1.open(QIODevice::ReadWrite)) { + file1.close(); selectRange(beginLine, endLine); - emit q->writeFile(fileName, selectedText()); - // check by reading back - file.open(QIODevice::ReadOnly); - QByteArray ba = file.readAll(); + QString contents = selectedText(); + qDebug() << "LINES: " << beginLine << endLine; + bool handled = false; + emit q->writeFileRequested(&handled, fileName, contents); + // nobody cared, so act ourselves + if (!handled) { + //qDebug() << "HANDLING MANUAL SAVE TO " << fileName; + QFile::remove(fileName); + QFile file2(fileName); + if (file2.open(QIODevice::ReadWrite)) { + QTextStream ts(&file2); + ts << contents; + } else { + showRedMessage(tr("Cannot open file '%1' for writing").arg(fileName)); + } + } + // check result by reading back + QFile file3(fileName); + file3.open(QIODevice::ReadOnly); + QByteArray ba = file3.readAll(); showBlackMessage(tr("\"%1\" %2 %3L, %4C written") .arg(fileName).arg(exists ? " " : " [New] ") .arg(ba.count('\n')).arg(ba.size())); @@ -1401,7 +1484,7 @@ 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(editor(), info); + emit q->extraInformationChanged(info); } else { notImplementedYet(); } @@ -1417,7 +1500,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) ++i; info += QString("%1 %2\n").arg(i, -8).arg(item); } - emit q->extraInformationChanged(editor(), info); + emit q->extraInformationChanged(info); } else { notImplementedYet(); } @@ -1566,8 +1649,7 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward) int n = forward ? lastPositionInDocument() - 1 : 0; int lastClass = -1; while (true) { - forward ? moveRight() : moveLeft(); - QChar c = doc->characterAt(m_tc.position()); + QChar c = doc->characterAt(m_tc.position() + (forward ? 1 : -1)); int thisClass = charClass(c, simple); if (thisClass != lastClass && lastClass != 0) --repeat; @@ -1576,6 +1658,7 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward) lastClass = thisClass; if (m_tc.position() == n) break; + forward ? moveRight() : moveLeft(); } } @@ -1752,6 +1835,7 @@ int FakeVimHandler::Private::lineForPosition(int pos) const void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode) { + setAnchor(); m_visualMode = visualMode; m_marks['<'] = m_tc.position(); m_marks['>'] = m_tc.position(); @@ -1942,16 +2026,10 @@ void FakeVimHandler::Private::enterCommandMode() void FakeVimHandler::Private::quit() { - showBlackMessage(QString()); EDITOR(setOverwriteMode(false)); - q->quitRequested(editor()); + q->quitRequested(); } -void FakeVimHandler::Private::setWidget(QWidget *ob) -{ - m_textedit = qobject_cast<QTextEdit *>(ob); - m_plaintextedit = qobject_cast<QPlainTextEdit *>(ob); -} /////////////////////////////////////////////////////////////////////// // @@ -1959,12 +2037,13 @@ void FakeVimHandler::Private::setWidget(QWidget *ob) // /////////////////////////////////////////////////////////////////////// -FakeVimHandler::FakeVimHandler(QObject *parent) - : QObject(parent), d(new Private(this)) +FakeVimHandler::FakeVimHandler(QWidget *widget, QObject *parent) + : QObject(parent), d(new Private(this, widget)) {} FakeVimHandler::~FakeVimHandler() { + qDebug() << "DELETING HANDLER" << this; delete d; } @@ -1993,40 +2072,18 @@ bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev) return QObject::eventFilter(ob, ev); } -void FakeVimHandler::addWidget(QWidget *widget) +void FakeVimHandler::setupWidget() { - widget->installEventFilter(this); - d->setWidget(widget); - d->enterCommandMode(); - if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) { - //ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x'))); - ed->setLineWrapMode(QTextEdit::NoWrap); - d->m_wasReadOnly = ed->isReadOnly(); - } else if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(widget)) { - //ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x'))); - ed->setLineWrapMode(QPlainTextEdit::NoWrap); - d->m_wasReadOnly = ed->isReadOnly(); - } - d->showBlackMessage("vi emulation mode."); - d->updateMiniBuffer(); + d->setupWidget(); } -void FakeVimHandler::removeWidget(QWidget *widget) +void FakeVimHandler::restoreWidget() { - d->setWidget(widget); - d->showBlackMessage(QString()); - d->updateMiniBuffer(); - widget->removeEventFilter(this); - if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) { - ed->setReadOnly(d->m_wasReadOnly); - } else if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(widget)) { - ed->setReadOnly(d->m_wasReadOnly); - } + d->restoreWidget(); } -void FakeVimHandler::handleCommand(QWidget *widget, const QString &cmd) +void FakeVimHandler::handleCommand(const QString &cmd) { - d->setWidget(widget); d->handleExCommand(cmd); } @@ -2044,3 +2101,19 @@ void FakeVimHandler::setCurrentFileName(const QString &fileName) { d->m_currentFileName = fileName; } + +QWidget *FakeVimHandler::widget() +{ + return d->editor(); +} + +void FakeVimHandler::setExtraData(QObject *data) +{ + d->m_extraData = data; +} + +QObject *FakeVimHandler::extraData() const +{ + return d->m_extraData; +} + diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h index bbd58781e7f88344649b7fec1b9a5445fbb117b9..a083f346dd4d25ddd629c5c26b01b7aeab8287fe 100644 --- a/src/plugins/fakevim/fakevimhandler.h +++ b/src/plugins/fakevim/fakevimhandler.h @@ -50,30 +50,35 @@ class FakeVimHandler : public QObject Q_OBJECT public: - FakeVimHandler(QObject *parent = 0); + FakeVimHandler(QWidget *widget, QObject *parent = 0); ~FakeVimHandler(); + QWidget *widget(); + + void setExtraData(QObject *data); + QObject *extraData() const; + public slots: - // The same handler can be installed on several widgets - // 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; - void handleCommand(QWidget *widget, const QString &cmd); - void quit(); + // information from widget; + void handleCommand(const QString &cmd); void setConfigValue(const QString &key, const QString &value); + void quit(); + + // Convenience + void setupWidget(); + void restoreWidget(); signals: void commandBufferChanged(const QString &msg); void statusDataChanged(const QString &msg); - void extraInformationChanged(QWidget *widget, const QString &msg); - void quitRequested(QWidget *widget); - void selectionChanged(QWidget *widget, - const QList<QTextEdit::ExtraSelection> &selection); - void writeFile(const QString &fileName, const QString &contents); + void extraInformationChanged(const QString &msg); + void quitRequested(); + void selectionChanged(const QList<QTextEdit::ExtraSelection> &selection); + void writeFileRequested(bool *handled, + 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 a00e3878e8e795b825649b3c7e95ac03b14a4037..0b35c4fb8151ef5ff842072fc58bf93bf77c7cef 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -106,27 +106,26 @@ public: ~FakeVimPluginPrivate(); friend class FakeVimPlugin; - bool initialize(const QStringList &arguments, QString *error_message); + bool initialize(); void shutdown(); private slots: - void installHandler(); - void installHandler(QWidget *widget); - void removeHandler(QWidget *widget); - void showCommandBuffer(const QString &contents); - void showExtraInformation(QWidget *, const QString &msg); void editorOpened(Core::IEditor *); void editorAboutToClose(Core::IEditor *); - void changeSelection(QWidget *widget, - const QList<QTextEdit::ExtraSelection> &selections); - void writeFile(const QString &fileName, const QString &contents); + + void installHandler(); + void installHandler(Core::IEditor *editor); + void removeHandler(); + + void showCommandBuffer(const QString &contents); + void showExtraInformation(const QString &msg); + void changeSelection(const QList<QTextEdit::ExtraSelection> &selections); + void writeFile(bool *handled, 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 @@ -135,10 +134,8 @@ private: FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin) { q = plugin; - m_handler = 0; m_installHandlerAction = 0; m_core = 0; - m_currentFile = 0; } FakeVimPluginPrivate::~FakeVimPluginPrivate() @@ -147,17 +144,10 @@ FakeVimPluginPrivate::~FakeVimPluginPrivate() void FakeVimPluginPrivate::shutdown() { - delete m_handler; - m_handler = 0; } -bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *error_message) +bool FakeVimPluginPrivate::initialize() { - Q_UNUSED(arguments); - Q_UNUSED(error_message); - - m_handler = new FakeVimHandler; - m_core = Core::ICore::instance(); QTC_ASSERT(m_core, return false); @@ -195,102 +185,114 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err void FakeVimPluginPrivate::installHandler() { if (Core::IEditor *editor = m_core->editorManager()->currentEditor()) - installHandler(editor->widget()); + installHandler(editor); } -void FakeVimPluginPrivate::installHandler(QWidget *widget) +void FakeVimPluginPrivate::installHandler(Core::IEditor *editor) { - connect(m_handler, SIGNAL(extraInformationChanged(QWidget *, QString)), - this, SLOT(showExtraInformation(QWidget *, QString))); - connect(m_handler, SIGNAL(commandBufferChanged(QString)), + QWidget *widget = editor->widget(); + + FakeVimHandler *handler = new FakeVimHandler(widget, this); + + connect(handler, SIGNAL(extraInformationChanged(QString)), + this, SLOT(showExtraInformation(QString))); + connect(handler, SIGNAL(commandBufferChanged(QString)), this, SLOT(showCommandBuffer(QString))); - connect(m_handler, SIGNAL(quitRequested(QWidget *)), - this, SLOT(removeHandler(QWidget *))); - connect(m_handler, - SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)), - this, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>))); - - m_handler->addWidget(widget); - TextEditor::BaseTextEditor* editor = - qobject_cast<TextEditor::BaseTextEditor*>(widget); - if (editor) { - m_currentFile = editor->file(); - m_handler->setCurrentFileName(editor->file()->fileName()); - } + connect(handler, SIGNAL(quitRequested()), + this, SLOT(removeHandler()), Qt::QueuedConnection); + connect(handler, SIGNAL(writeFileRequested(bool*,QString,QString)), + this, SLOT(writeFile(bool*,QString,QString))); + connect(handler, SIGNAL(selectionChanged(QList<QTextEdit::ExtraSelection>)), + this, SLOT(changeSelection(QList<QTextEdit::ExtraSelection>))); - BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget); - if (bt) { + handler->setupWidget(); + handler->setExtraData(editor); + + if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget)) { using namespace TextEditor; using namespace FakeVim::Constants; + handler->setCurrentFileName(editor->file()->fileName()); TabSettings settings = bt->tabSettings(); - m_handler->setConfigValue(ConfigTabStop, + handler->setConfigValue(ConfigTabStop, QString::number(settings.m_tabSize)); - m_handler->setConfigValue(ConfigShiftWidth, + handler->setConfigValue(ConfigShiftWidth, QString::number(settings.m_indentSize)); - m_handler->setConfigValue(ConfigExpandTab, + handler->setConfigValue(ConfigExpandTab, settings.m_spacesForTabs ? ConfigOn : ConfigOff); - m_handler->setConfigValue(ConfigSmartTab, + handler->setConfigValue(ConfigSmartTab, settings.m_smartBackspace ? ConfigOn : ConfigOff); - m_handler->setConfigValue(ConfigAutoIndent, + handler->setConfigValue(ConfigAutoIndent, settings.m_autoIndent ? ConfigOn : ConfigOff); } } -void FakeVimPluginPrivate::writeFile(const QString &fileName, - const QString &contents) +void FakeVimPluginPrivate::writeFile(bool *handled, + const QString &fileName, const QString &contents) { - if (m_currentFile && fileName == m_currentFile->fileName()) { + //qDebug() << "HANDLING WRITE FILE" << fileName << sender(); + FakeVimHandler *handler = qobject_cast<FakeVimHandler *>(sender()); + if (!handler) + return; + + Core::IEditor *editor = qobject_cast<Core::IEditor *>(handler->extraData()); + if (editor && editor->file()->fileName() == fileName) { + //qDebug() << "HANDLING CORE SAVE"; // 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(); - } + Core::IFile *file = editor->file(); + m_core->fileManager()->blockFileChange(file); + file->save(fileName); + m_core->fileManager()->unblockFileChange(file); + *handled = true; + } } -void FakeVimPluginPrivate::removeHandler(QWidget *widget) +void FakeVimPluginPrivate::removeHandler() { - Q_UNUSED(widget); - m_handler->removeWidget(widget); + if (FakeVimHandler *handler = qobject_cast<FakeVimHandler *>(sender())) { + handler->restoreWidget(); + handler->deleteLater(); + } Core::EditorManager::instance()->hideEditorInfoBar( QLatin1String(Constants::MINI_BUFFER)); - m_currentFile = 0; } void FakeVimPluginPrivate::editorOpened(Core::IEditor *editor) { Q_UNUSED(editor); //qDebug() << "OPENING: " << editor << editor->widget(); - //installHandler(editor->widget()); + //installHandler(editor); } void FakeVimPluginPrivate::editorAboutToClose(Core::IEditor *editor) { - //qDebug() << "CLOSING: " << editor << editor->widget(); - removeHandler(editor->widget()); + Q_UNUSED(editor); + //qDebug() << "CLOSING: " << editor; } void FakeVimPluginPrivate::showCommandBuffer(const QString &contents) { - Core::EditorManager::instance()->showEditorInfoBar( - QLatin1String(Constants::MINI_BUFFER), contents, - tr("Quit FakeVim"), m_handler, SLOT(quit())); + //qDebug() << "SHOW COMMAND BUFFER" << contents; + FakeVimHandler *handler = qobject_cast<FakeVimHandler *>(sender()); + if (handler) { + Core::EditorManager::instance()->showEditorInfoBar( + QLatin1String(Constants::MINI_BUFFER), contents, + tr("Quit FakeVim"), handler, SLOT(quit())); + } } -void FakeVimPluginPrivate::showExtraInformation(QWidget *widget, const QString &text) +void FakeVimPluginPrivate::showExtraInformation(const QString &text) { - QMessageBox::information(widget, tr("FakeVim Information"), text); + FakeVimHandler *handler = qobject_cast<FakeVimHandler *>(sender()); + if (handler) + QMessageBox::information(handler->widget(), tr("FakeVim Information"), text); } -void FakeVimPluginPrivate::changeSelection(QWidget *widget, - const QList<QTextEdit::ExtraSelection> &selection) +void FakeVimPluginPrivate::changeSelection + (const QList<QTextEdit::ExtraSelection> &selection) { - if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget)) - bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection); + if (FakeVimHandler *handler = qobject_cast<FakeVimHandler *>(sender())) + if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(handler->widget())) + bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection); } @@ -309,9 +311,11 @@ FakeVimPlugin::~FakeVimPlugin() delete d; } -bool FakeVimPlugin::initialize(const QStringList &arguments, QString *error_message) +bool FakeVimPlugin::initialize(const QStringList &arguments, QString *errorMessage) { - return d->initialize(arguments, error_message); + Q_UNUSED(arguments); + Q_UNUSED(errorMessage); + return d->initialize(); } void FakeVimPlugin::shutdown() diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index a7e7286a30f6b18acfa823a3a9d98be333737107..d5a1911a3349840b57ff9ca3843cef746cb5879b 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -40,6 +40,7 @@ #include "projectexplorer.h" #include "taskwindow.h" +#include <coreplugin/icore.h> #include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/progressmanager/futureprogress.h> #include <extensionsystem/pluginmanager.h> diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 69b642bc4259f013b2408a54e9dc1d6df627b0bb..a9d4e2fc20819f5a271e0a7742ebb29d7c018c71 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -62,9 +62,10 @@ #include <coreplugin/basemode.h> #include <coreplugin/coreconstants.h> +#include <coreplugin/filemanager.h> +#include <coreplugin/icore.h> #include <coreplugin/mainwindow.h> #include <coreplugin/mimedatabase.h> -#include <coreplugin/filemanager.h> #include <coreplugin/modemanager.h> #include <coreplugin/uniqueidmanager.h> #include <coreplugin/actionmanager/actionmanager.h> diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 0091c82f2d490b57a335e04c625e759171abfba8..9bc28fda44c1447da8070caa843931646f91477c 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -37,6 +37,7 @@ #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/coreconstants.h> +#include <coreplugin/icore.h> #include <coreplugin/uniqueidmanager.h> #include <extensionsystem/pluginmanager.h> #include <texteditor/itexteditor.h> diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h index 269f6e3ce6201c8bed8c565631b957bde756a7d9..0f2db145e367a6be16642b772116e0d398a56e6e 100644 --- a/src/plugins/projectexplorer/taskwindow.h +++ b/src/plugins/projectexplorer/taskwindow.h @@ -38,7 +38,6 @@ #include <coreplugin/ioutputpane.h> #include <coreplugin/icontext.h> -#include <coreplugin/icore.h> #include <QtGui/QTreeWidget> #include <QtGui/QStyledItemDelegate> diff --git a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp index 46d5b106f5cf41bfad75b01cd39b06dc8b39e218..d473e1dc75cf320daa96ebb5a3295ce4349f436e 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfigwidget.cpp @@ -40,6 +40,7 @@ #include "qt4projectmanager.h" #include "ui_qt4buildconfigwidget.h" +#include <coreplugin/icore.h> #include <coreplugin/mainwindow.h> #include <QtGui/QFileDialog> diff --git a/src/plugins/quickopen/filesystemfilter.h b/src/plugins/quickopen/filesystemfilter.h index c935b9fb2c37b8db579df9197ba841258e01dccf..ef7aebd41f49e732c99e660286ff4d009910e5cc 100644 --- a/src/plugins/quickopen/filesystemfilter.h +++ b/src/plugins/quickopen/filesystemfilter.h @@ -37,7 +37,6 @@ #include "iquickopenfilter.h" #include "ui_filesystemfilter.h" -#include <coreplugin/icore.h> #include <coreplugin/editormanager/editormanager.h> #include <QtCore/QString> diff --git a/src/plugins/quickopen/quickopenplugin.cpp b/src/plugins/quickopen/quickopenplugin.cpp index 0abebe3a88f7528c7d763a9c2f2f879d9463a7cf..aab8bf739bec660f9ce33234601663ed074abb6c 100644 --- a/src/plugins/quickopen/quickopenplugin.cpp +++ b/src/plugins/quickopen/quickopenplugin.cpp @@ -47,9 +47,10 @@ #include <coreplugin/baseview.h> #include <coreplugin/coreconstants.h> +#include <coreplugin/icore.h> #include <coreplugin/uniqueidmanager.h> -#include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/progressmanager/progressmanager.h> #include <extensionsystem/pluginmanager.h> #include <qtconcurrent/QtConcurrentTools> diff --git a/src/plugins/quickopen/settingspage.h b/src/plugins/quickopen/settingspage.h index ddd1d5e28880fc14a293da9ca6c51bbccb204222..9bd0971a049b3791c3b1655c11cdd6db72c6adf4 100644 --- a/src/plugins/quickopen/settingspage.h +++ b/src/plugins/quickopen/settingspage.h @@ -41,7 +41,6 @@ #include <QtCore/QHash> #include <coreplugin/dialogs/ioptionspage.h> -#include <coreplugin/icore.h> QT_BEGIN_NAMESPACE class QListWidgetItem; diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp index dfa1350e5597ade677abf0aa7557788708c2c282..9400fcf998f0b5bc6183b8f00305bdd04a449ef5 100644 --- a/tests/manual/fakevim/main.cpp +++ b/tests/manual/fakevim/main.cpp @@ -17,21 +17,26 @@ class Proxy : public QObject Q_OBJECT public: - Proxy() : QObject(0) {} + Proxy(QWidget *widget, QObject *parent = 0) + : QObject(parent), m_widget(widget) + {} public slots: - void changeSelection(QWidget *w, const QList<QTextEdit::ExtraSelection> &s) + void changeSelection(const QList<QTextEdit::ExtraSelection> &s) { - if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(w)) + if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(m_widget)) ed->setExtraSelections(s); - else if (QTextEdit *ed = qobject_cast<QTextEdit *>(w)) + else if (QTextEdit *ed = qobject_cast<QTextEdit *>(m_widget)) ed->setExtraSelections(s); } - void changeExtraInformation(QWidget *w, const QString &info) + void changeExtraInformation(const QString &info) { - QMessageBox::information(w, "Information", info); + QMessageBox::information(m_widget, "Information", info); } + +private: + QWidget *m_widget; }; int main(int argc, char *argv[]) @@ -51,13 +56,13 @@ int main(int argc, char *argv[]) widget = new QTextEdit; title = "TextEdit"; } + widget->setObjectName("Editor"); widget->resize(450, 350); widget->setFocus(); - Proxy proxy; - + Proxy proxy(widget); - FakeVimHandler handler; + FakeVimHandler handler(widget, 0); QMainWindow mw; mw.setWindowTitle("Fakevim (" + title + ")"); @@ -77,18 +82,18 @@ int main(int argc, char *argv[]) QObject::connect(&handler, SIGNAL(commandBufferChanged(QString)), mw.statusBar(), SLOT(showMessage(QString))); - QObject::connect(&handler, SIGNAL(quitRequested(QWidget *)), + QObject::connect(&handler, SIGNAL(quitRequested()), &app, SLOT(quit())); QObject::connect(&handler, - SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)), - &proxy, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>))); + SIGNAL(selectionChanged(QList<QTextEdit::ExtraSelection>)), + &proxy, SLOT(changeSelection(QList<QTextEdit::ExtraSelection>))); QObject::connect(&handler, - SIGNAL(extraInformationChanged(QWidget*,QString)), - &proxy, SLOT(changeExtraInformation(QWidget*,QString))); + SIGNAL(extraInformationChanged(QString)), + &proxy, SLOT(changeExtraInformation(QString))); - handler.addWidget(widget); + handler.setupWidget(); if (args.size() >= 1) - handler.handleCommand(widget, "r " + args.at(0)); + handler.handleCommand("r " + args.at(0)); return app.exec(); }