forked from qt-creator/qt-creator
Add the identifiers to the completion box.
Well, this is just a temporary hack :)
This commit is contained in:
@@ -28,10 +28,43 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
#include "glslcodecompletion.h"
|
#include "glslcodecompletion.h"
|
||||||
#include "glsleditor.h"
|
#include "glsleditor.h"
|
||||||
|
#include <QtGui/QIcon>
|
||||||
|
#include <QtGui/QPainter>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
using namespace GLSLEditor;
|
using namespace GLSLEditor;
|
||||||
|
|
||||||
|
// Temporary workaround until we have proper icons for QML completion items
|
||||||
|
static QIcon iconForColor(const QColor &color)
|
||||||
|
{
|
||||||
|
QPixmap pix(6, 6);
|
||||||
|
|
||||||
|
int pixSize = 20;
|
||||||
|
QBrush br(color);
|
||||||
|
|
||||||
|
QPixmap pm(2 * pixSize, 2 * pixSize);
|
||||||
|
QPainter pmp(&pm);
|
||||||
|
pmp.fillRect(0, 0, pixSize, pixSize, Qt::lightGray);
|
||||||
|
pmp.fillRect(pixSize, pixSize, pixSize, pixSize, Qt::lightGray);
|
||||||
|
pmp.fillRect(0, pixSize, pixSize, pixSize, Qt::darkGray);
|
||||||
|
pmp.fillRect(pixSize, 0, pixSize, pixSize, Qt::darkGray);
|
||||||
|
pmp.fillRect(0, 0, 2 * pixSize, 2 * pixSize, color);
|
||||||
|
br = QBrush(pm);
|
||||||
|
|
||||||
|
QPainter p(&pix);
|
||||||
|
int corr = 1;
|
||||||
|
QRect r = pix.rect().adjusted(corr, corr, -corr, -corr);
|
||||||
|
p.setBrushOrigin((r.width() % pixSize + pixSize) / 2 + corr, (r.height() % pixSize + pixSize) / 2 + corr);
|
||||||
|
p.fillRect(r, br);
|
||||||
|
|
||||||
|
p.fillRect(r.width() / 4 + corr, r.height() / 4 + corr,
|
||||||
|
r.width() / 2, r.height() / 2,
|
||||||
|
QColor(color.rgb()));
|
||||||
|
p.drawRect(pix.rect().adjusted(0, 0, -1, -1));
|
||||||
|
|
||||||
|
return pix;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *glsl_keywords[] =
|
static const char *glsl_keywords[] =
|
||||||
{ // ### TODO: get the keywords from the lexer
|
{ // ### TODO: get the keywords from the lexer
|
||||||
"attribute",
|
"attribute",
|
||||||
@@ -163,9 +196,11 @@ CodeCompletion::CodeCompletion(QObject *parent)
|
|||||||
m_startPosition(-1),
|
m_startPosition(-1),
|
||||||
m_restartCompletion(false)
|
m_restartCompletion(false)
|
||||||
{
|
{
|
||||||
|
const QIcon keywordIcon = iconForColor(Qt::darkYellow);
|
||||||
for (const char **it = glsl_keywords; *it; ++it) {
|
for (const char **it = glsl_keywords; *it; ++it) {
|
||||||
TextEditor::CompletionItem item(this);
|
TextEditor::CompletionItem item(this);
|
||||||
item.text = QString::fromLatin1(*it);
|
item.text = QString::fromLatin1(*it);
|
||||||
|
item.icon = keywordIcon;
|
||||||
m_keywordCompletions.append(item);
|
m_keywordCompletions.append(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,8 +242,18 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
|||||||
while (ch.isLetterOrNumber())
|
while (ch.isLetterOrNumber())
|
||||||
ch = editor->characterAt(--pos);
|
ch = editor->characterAt(--pos);
|
||||||
|
|
||||||
|
const QIcon symbolIcon = iconForColor(Qt::darkCyan);
|
||||||
m_completions += m_keywordCompletions;
|
m_completions += m_keywordCompletions;
|
||||||
|
|
||||||
|
if (GLSLTextEditor *ed = qobject_cast<GLSLTextEditor *>(m_editor->widget())) {
|
||||||
|
foreach (const QString &id, ed->identifiers()) {
|
||||||
|
TextEditor::CompletionItem item(this);
|
||||||
|
item.text = id;
|
||||||
|
item.icon = symbolIcon;
|
||||||
|
m_completions.append(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_startPosition = pos + 1;
|
m_startPosition = pos + 1;
|
||||||
return m_startPosition;
|
return m_startPosition;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,6 +124,11 @@ bool GLSLTextEditor::isOutdated() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSet<QString> GLSLTextEditor::identifiers() const
|
||||||
|
{
|
||||||
|
return m_identifiers;
|
||||||
|
}
|
||||||
|
|
||||||
Core::IEditor *GLSLEditorEditable::duplicate(QWidget *parent)
|
Core::IEditor *GLSLEditorEditable::duplicate(QWidget *parent)
|
||||||
{
|
{
|
||||||
GLSLTextEditor *newEditor = new GLSLTextEditor(parent);
|
GLSLTextEditor *newEditor = new GLSLTextEditor(parent);
|
||||||
@@ -285,4 +290,7 @@ void GLSLTextEditor::updateDocumentNow()
|
|||||||
|
|
||||||
// ### process the ast
|
// ### process the ast
|
||||||
(void) ast;
|
(void) ast;
|
||||||
|
|
||||||
|
// refresh the identifiers.
|
||||||
|
m_identifiers = engine.identifiers();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include <texteditor/quickfix.h>
|
#include <texteditor/quickfix.h>
|
||||||
|
|
||||||
#include <QtCore/QSharedPointer>
|
#include <QtCore/QSharedPointer>
|
||||||
|
#include <QtCore/QSet>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
@@ -62,6 +63,8 @@ public:
|
|||||||
int editorRevision() const;
|
int editorRevision() const;
|
||||||
bool isOutdated() const;
|
bool isOutdated() const;
|
||||||
|
|
||||||
|
QSet<QString> identifiers() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void setFontSettings(const TextEditor::FontSettings &);
|
virtual void setFontSettings(const TextEditor::FontSettings &);
|
||||||
|
|
||||||
@@ -82,6 +85,7 @@ private:
|
|||||||
|
|
||||||
QTimer *m_updateDocumentTimer;
|
QTimer *m_updateDocumentTimer;
|
||||||
QComboBox *m_outlineCombo;
|
QComboBox *m_outlineCombo;
|
||||||
|
QSet<QString> m_identifiers;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace GLSLEditor
|
} // namespace GLSLEditor
|
||||||
|
|||||||
Reference in New Issue
Block a user