diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-11-10 14:01:09 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-11-10 15:46:41 +0100 |
commit | f6eeed0372c706483809caed181c5d9e879fad91 (patch) | |
tree | beee6fccc365d77b632e016db83a2290b01c7d66 /src/plugins/glsleditor/glsleditor.cpp | |
parent | bc70a688177ed1afe9364ac99afa5321660440c6 (diff) | |
download | qt-creator-f6eeed0372c706483809caed181c5d9e879fad91.tar.gz |
Initial import of the GLSL editor plug-in.
Diffstat (limited to 'src/plugins/glsleditor/glsleditor.cpp')
-rw-r--r-- | src/plugins/glsleditor/glsleditor.cpp | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp new file mode 100644 index 0000000000..4cee79db69 --- /dev/null +++ b/src/plugins/glsleditor/glsleditor.cpp @@ -0,0 +1,248 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "glsleditor.h" +#include "glsleditoreditable.h" +#include "glsleditorconstants.h" +#include "glsleditorplugin.h" + +#include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/actionmanager/actioncontainer.h> +#include <coreplugin/uniqueidmanager.h> +#include <coreplugin/actionmanager/command.h> +#include <coreplugin/editormanager/editormanager.h> +#include <coreplugin/icore.h> +#include <coreplugin/mimedatabase.h> +#include <extensionsystem/pluginmanager.h> +#include <texteditor/basetextdocument.h> +#include <texteditor/fontsettings.h> +#include <texteditor/tabsettings.h> +#include <texteditor/texteditorconstants.h> +#include <texteditor/texteditorsettings.h> +#include <texteditor/syntaxhighlighter.h> +#include <texteditor/refactoroverlay.h> +#include <texteditor/tooltip/tooltip.h> +#include <qmldesigner/qmldesignerconstants.h> +#include <utils/changeset.h> +#include <utils/uncommentselection.h> + +#include <QtCore/QFileInfo> +#include <QtCore/QSignalMapper> +#include <QtCore/QTimer> + +#include <QtGui/QMenu> +#include <QtGui/QComboBox> +#include <QtGui/QHeaderView> +#include <QtGui/QInputDialog> +#include <QtGui/QMainWindow> +#include <QtGui/QToolBar> +#include <QtGui/QTreeView> + +using namespace GLSL; +using namespace GLSLEditor; +using namespace GLSLEditor::Internal; + +enum { + UPDATE_DOCUMENT_DEFAULT_INTERVAL = 150 +}; + +GLSLTextEditor::GLSLTextEditor(QWidget *parent) : + TextEditor::BaseTextEditor(parent), + m_outlineCombo(0) +{ + setParenthesesMatchingEnabled(true); + setMarksVisible(true); + setCodeFoldingSupported(true); + setCodeFoldingVisible(true); + //setIndenter(new Indenter); + + m_updateDocumentTimer = new QTimer(this); + m_updateDocumentTimer->setInterval(UPDATE_DOCUMENT_DEFAULT_INTERVAL); + m_updateDocumentTimer->setSingleShot(true); + connect(m_updateDocumentTimer, SIGNAL(timeout()), this, SLOT(updateDocumentNow())); + + connect(this, SIGNAL(textChanged()), this, SLOT(updateDocument())); + +// baseTextDocument()->setSyntaxHighlighter(new Highlighter(document())); + +// if (m_modelManager) { +// m_semanticHighlighter->setModelManager(m_modelManager); +// connect(m_modelManager, SIGNAL(documentUpdated(GLSL::Document::Ptr)), +// this, SLOT(onDocumentUpdated(GLSL::Document::Ptr))); +// connect(m_modelManager, SIGNAL(libraryInfoUpdated(QString,GLSL::LibraryInfo)), +// this, SLOT(forceSemanticRehighlight())); +// connect(this->document(), SIGNAL(modificationChanged(bool)), this, SLOT(modificationChanged(bool))); +// } +} + +GLSLTextEditor::~GLSLTextEditor() +{ +} + +int GLSLTextEditor::editorRevision() const +{ + //return document()->revision(); + return 0; +} + +bool GLSLTextEditor::isOutdated() const +{ +// if (m_semanticInfo.revision() != editorRevision()) +// return true; + + return false; +} + +Core::IEditor *GLSLEditorEditable::duplicate(QWidget *parent) +{ + GLSLTextEditor *newEditor = new GLSLTextEditor(parent); + newEditor->duplicateFrom(editor()); + GLSLEditorPlugin::instance()->initializeEditor(newEditor); + return newEditor->editableInterface(); +} + +QString GLSLEditorEditable::id() const +{ + return QLatin1String(GLSLEditor::Constants::C_GLSLEDITOR_ID); +} + +bool GLSLEditorEditable::open(const QString &fileName) +{ + bool b = TextEditor::BaseTextEditorEditable::open(fileName); + editor()->setMimeType(Core::ICore::instance()->mimeDatabase()->findByFile(QFileInfo(fileName)).type()); + return b; +} + +Core::Context GLSLEditorEditable::context() const +{ + return m_context; +} + +void GLSLTextEditor::setFontSettings(const TextEditor::FontSettings &fs) +{ + TextEditor::BaseTextEditor::setFontSettings(fs); +#warning set up the GLSL highlighter +#if 0 + Highlighter *highlighter = qobject_cast<Highlighter*>(baseTextDocument()->syntaxHighlighter()); + if (!highlighter) + return; + + /* + NumberFormat, + StringFormat, + TypeFormat, + KeywordFormat, + LabelFormat, + CommentFormat, + VisualWhitespace, + */ + static QVector<QString> categories; + if (categories.isEmpty()) { + categories << QLatin1String(TextEditor::Constants::C_NUMBER) + << QLatin1String(TextEditor::Constants::C_STRING) + << QLatin1String(TextEditor::Constants::C_TYPE) + << QLatin1String(TextEditor::Constants::C_KEYWORD) + << QLatin1String(TextEditor::Constants::C_FIELD) + << QLatin1String(TextEditor::Constants::C_COMMENT) + << QLatin1String(TextEditor::Constants::C_VISUAL_WHITESPACE); + } + + highlighter->setFormats(fs.toTextCharFormats(categories)); + highlighter->rehighlight(); +#endif +} + +QString GLSLTextEditor::wordUnderCursor() const +{ + QTextCursor tc = textCursor(); + const QChar ch = characterAt(tc.position() - 1); + // make sure that we're not at the start of the next word. + if (ch.isLetterOrNumber() || ch == QLatin1Char('_')) + tc.movePosition(QTextCursor::Left); + tc.movePosition(QTextCursor::StartOfWord); + tc.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); + const QString word = tc.selectedText(); + return word; +} + +TextEditor::BaseTextEditorEditable *GLSLTextEditor::createEditableInterface() +{ + GLSLEditorEditable *editable = new GLSLEditorEditable(this); + createToolBar(editable); + return editable; +} + +void GLSLTextEditor::createToolBar(GLSLEditorEditable *editable) +{ + m_outlineCombo = new QComboBox; + m_outlineCombo->setMinimumContentsLength(22); +#warning set up the outline model + // m_outlineCombo->setModel(m_outlineModel); + + QTreeView *treeView = new QTreeView; + treeView->header()->hide(); + treeView->setItemsExpandable(false); + treeView->setRootIsDecorated(false); + m_outlineCombo->setView(treeView); + treeView->expandAll(); + + //m_outlineCombo->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + // Make the combo box prefer to expand + QSizePolicy policy = m_outlineCombo->sizePolicy(); + policy.setHorizontalPolicy(QSizePolicy::Expanding); + m_outlineCombo->setSizePolicy(policy); + + connect(m_outlineCombo, SIGNAL(activated(int)), this, SLOT(jumpToOutlineElement(int))); + + connect(file(), SIGNAL(changed()), this, SLOT(updateFileName())); + + QToolBar *toolBar = static_cast<QToolBar*>(editable->toolBar()); + + QList<QAction*> actions = toolBar->actions(); + toolBar->insertWidget(actions.first(), m_outlineCombo); +} + +bool GLSLTextEditor::event(QEvent *e) +{ + return BaseTextEditor::event(e); +} + +void GLSLTextEditor::unCommentSelection() +{ + Utils::unCommentSelection(this); +} + +void GLSLTextEditor::updateDocument() +{ +} + +void GLSLTextEditor::updateDocumentNow() +{ +} |