forked from qt-creator/qt-creator
Move QmlConsole to Debugger
Now it is closer to its only user and possibly reusable for no-QML uses there. We also drop the QML/JS syntax checker. The application being debugged can already tell us about syntax errors. There is no need to duplicate that functionality. Change-Id: I2ba151f9f4c854c6119ba5462c21be40bddcebf9 Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com> Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
@@ -84,7 +84,7 @@
|
||||
\image qtquick-example-setting-breakpoint3.png
|
||||
|
||||
\li To execute JavaScript commands in the current context, open the
|
||||
\uicontrol {QML/JS Console} output pane.
|
||||
\uicontrol {Debugger Console} output pane.
|
||||
|
||||
\li To change the score to 1000, enter \c{gameCanvas.score = 1000}
|
||||
in the console.
|
||||
@@ -108,7 +108,7 @@
|
||||
\inlineimage qml-inspector-select-button.png
|
||||
(\uicontrol Select) to activate selection mode and then click the
|
||||
\uicontrol {Quit} button to move into the \uicontrol ButtonLabel component
|
||||
in the \uicontrol {QML/JS Console} and the code editor.
|
||||
in the \uicontrol {Locals and Expressions} and the code editor.
|
||||
|
||||
\li In the \uicontrol {Locals and Expressions} view, double-click the value of
|
||||
the \c text property to change it temporarily from \uicontrol {Quit} to
|
||||
|
||||
@@ -158,17 +158,17 @@
|
||||
\section1 Executing JavaScript Expressions
|
||||
|
||||
When the application is interrupted by a breakpoint, you can use the
|
||||
\uicontrol {QML/JS Console} to execute JavaScript expressions in the current
|
||||
\uicontrol {Debugger Console} to execute JavaScript expressions in the current
|
||||
context. To open it, choose \uicontrol Window > \uicontrol {Output Panes}
|
||||
> \uicontrol {QML/JS Console}.
|
||||
> \uicontrol {Debugger Console}.
|
||||
|
||||
\image qml-script-console.png "QML/JS Console"
|
||||
\image qml-script-console.png "Debugger Console"
|
||||
|
||||
For more information about using the console, see \l{QML/JS Console}.
|
||||
For more information about using the console, see \l{Debugger Console}.
|
||||
|
||||
\section1 Applying QML Changes at Runtime
|
||||
|
||||
When you change property values in the \uicontrol {QML/JS Console} or in the
|
||||
When you change property values in the \uicontrol {Debugger Console} or in the
|
||||
\uicontrol {Locals and Expressions} view, they are immediately updated in the running
|
||||
application, but not in the source code.
|
||||
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
|
||||
\li \uicontrol{Compile Output}
|
||||
|
||||
\li \uicontrol {QML/JS Console}
|
||||
\li \uicontrol {Debugger Console}
|
||||
|
||||
\li \uicontrol {To-Do Entries}
|
||||
|
||||
@@ -460,14 +460,14 @@
|
||||
|
||||
Select the \uicontrol {Cancel Build} button to cancel the build.
|
||||
|
||||
\section2 QML/JS Console
|
||||
\section2 Debugger Console
|
||||
|
||||
In the \uicontrol {QML/JS Console}, you can type JavaScript expressions and use them to get
|
||||
In the \uicontrol {Debugger Console}, you can type JavaScript expressions and use them to get
|
||||
information about the state of your application during debugging. You can change property
|
||||
values temporarily, without editing the source, and view the results in the running
|
||||
application.
|
||||
|
||||
\image qml-script-console.png "QML/JS Console"
|
||||
\image qml-script-console.png "Debugger Console"
|
||||
|
||||
You can change the property values permanently in the code editor.
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "consolemanagerinterface.h"
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
static ConsoleManagerInterface *g_instance = 0;
|
||||
|
||||
ConsoleManagerInterface::ConsoleManagerInterface(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
Q_ASSERT(!g_instance);
|
||||
g_instance = this;
|
||||
}
|
||||
|
||||
ConsoleManagerInterface::~ConsoleManagerInterface()
|
||||
{
|
||||
Q_ASSERT(g_instance == this);
|
||||
g_instance = 0;
|
||||
}
|
||||
|
||||
ConsoleManagerInterface *ConsoleManagerInterface::instance()
|
||||
{
|
||||
return g_instance;
|
||||
}
|
||||
|
||||
} // QmlJS
|
||||
@@ -1,63 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONSOLEMANAGERINTERFACE_H
|
||||
#define CONSOLEMANAGERINTERFACE_H
|
||||
|
||||
#include "qmljs_global.h"
|
||||
#include "consoleitem.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
class IScriptEvaluator;
|
||||
class QMLJS_EXPORT ConsoleManagerInterface : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ConsoleManagerInterface(QObject *parent = 0);
|
||||
~ConsoleManagerInterface();
|
||||
|
||||
static ConsoleManagerInterface *instance();
|
||||
|
||||
virtual void showConsolePane() = 0;
|
||||
|
||||
virtual void setScriptEvaluator(IScriptEvaluator *scriptEvaluator) = 0;
|
||||
virtual void setContext(const QString &context) = 0;
|
||||
|
||||
virtual void printToConsolePane(ConsoleItem::ItemType itemType, const QString &text,
|
||||
bool bringToForeground = false) = 0;
|
||||
virtual void printToConsolePane(ConsoleItem *item, bool bringToForeground = false) = 0;
|
||||
};
|
||||
|
||||
} // QmlJS
|
||||
|
||||
#endif // CONSOLEMANAGERINTERFACE_H
|
||||
@@ -1,49 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef ISCRIPTEVALUATOR_H
|
||||
#define ISCRIPTEVALUATOR_H
|
||||
|
||||
#include "qmljs_global.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
class IScriptEvaluator
|
||||
{
|
||||
public:
|
||||
IScriptEvaluator() {}
|
||||
|
||||
virtual bool evaluateScript(const QString &script) = 0;
|
||||
};
|
||||
} // QmlJS
|
||||
|
||||
#endif // ISCRIPTEVALUATOR_H
|
||||
@@ -34,9 +34,6 @@ HEADERS += \
|
||||
$$PWD/qmljsutils.h \
|
||||
$$PWD/qmljsstaticanalysismessage.h \
|
||||
$$PWD/jsoncheck.h \
|
||||
$$PWD/consolemanagerinterface.h \
|
||||
$$PWD/consoleitem.h \
|
||||
$$PWD/iscriptevaluator.h \
|
||||
$$PWD/qmljssimplereader.h \
|
||||
$$PWD/persistenttrie.h \
|
||||
$$PWD/qmljsqrcparser.h \
|
||||
@@ -72,8 +69,6 @@ SOURCES += \
|
||||
$$PWD/qmljsutils.cpp \
|
||||
$$PWD/qmljsstaticanalysismessage.cpp \
|
||||
$$PWD/jsoncheck.cpp \
|
||||
$$PWD/consolemanagerinterface.cpp \
|
||||
$$PWD/consoleitem.cpp \
|
||||
$$PWD/qmljssimplereader.cpp \
|
||||
$$PWD/persistenttrie.cpp \
|
||||
$$PWD/qmljsqrcparser.cpp \
|
||||
|
||||
@@ -17,9 +17,6 @@ QtcLibrary {
|
||||
Group {
|
||||
name: "General"
|
||||
files: [
|
||||
"consoleitem.cpp", "consoleitem.h",
|
||||
"consolemanagerinterface.cpp", "consolemanagerinterface.h",
|
||||
"iscriptevaluator.h",
|
||||
"jsoncheck.cpp", "jsoncheck.h",
|
||||
"persistenttrie.cpp", "persistenttrie.h",
|
||||
"qmljs.qrc",
|
||||
|
||||
@@ -28,40 +28,42 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsolepane.h"
|
||||
#include "qmlconsoleview.h"
|
||||
#include "qmlconsoleproxymodel.h"
|
||||
#include "qmlconsoleitemdelegate.h"
|
||||
#include "console.h"
|
||||
#include "consoleview.h"
|
||||
#include "consoleproxymodel.h"
|
||||
#include "consoleitemdelegate.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <coreplugin/coreicons.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/findplaceholder.h>
|
||||
#include <coreplugin/icore.h>
|
||||
#include <utils/savedaction.h>
|
||||
#include <aggregation/aggregate.h>
|
||||
#include <coreplugin/find/itemviewfind.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QToolButton>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
static const char CONSOLE[] = "Console";
|
||||
static const char SHOW_LOG[] = "showLog";
|
||||
static const char SHOW_WARNING[] = "showWarning";
|
||||
static const char SHOW_ERROR[] = "showError";
|
||||
const char CONSOLE[] = "Console";
|
||||
const char SHOW_LOG[] = "showLog";
|
||||
const char SHOW_WARNING[] = "showWarning";
|
||||
const char SHOW_ERROR[] = "showError";
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// QmlConsolePane
|
||||
// Console
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
: Core::IOutputPane(parent)
|
||||
Console::Console()
|
||||
{
|
||||
m_consoleItemModel = new ConsoleItemModel;
|
||||
|
||||
m_consoleWidget = new QWidget;
|
||||
m_consoleWidget->setWindowTitle(displayName());
|
||||
m_consoleWidget->setEnabled(true);
|
||||
@@ -70,32 +72,30 @@ QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
vbox->setMargin(0);
|
||||
vbox->setSpacing(0);
|
||||
|
||||
m_consoleView = new QmlConsoleView(m_consoleWidget);
|
||||
m_proxyModel = new QmlConsoleProxyModel(this);
|
||||
m_proxyModel->setSourceModel(QmlConsoleModel::qmlConsoleItemModel());
|
||||
connect(QmlConsoleModel::qmlConsoleItemModel(),
|
||||
&QmlConsoleItemModel::selectEditableRow,
|
||||
m_proxyModel,
|
||||
&QmlConsoleProxyModel::selectEditableRow);
|
||||
m_consoleView = new ConsoleView(m_consoleItemModel, m_consoleWidget);
|
||||
auto proxyModel = new ConsoleProxyModel(this);
|
||||
proxyModel->setSourceModel(m_consoleItemModel);
|
||||
connect(m_consoleItemModel,
|
||||
&ConsoleItemModel::selectEditableRow,
|
||||
proxyModel,
|
||||
&ConsoleProxyModel::selectEditableRow);
|
||||
|
||||
//Scroll to bottom when rows matching current filter settings are inserted
|
||||
//Not connecting rowsRemoved as the only way to remove rows is to clear the
|
||||
//model which will automatically reset the view.
|
||||
connect(QmlConsoleModel::qmlConsoleItemModel(), &QAbstractItemModel::rowsInserted,
|
||||
m_proxyModel, &QmlConsoleProxyModel::onRowsInserted);
|
||||
m_consoleView->setModel(m_proxyModel);
|
||||
connect(m_consoleItemModel, &QAbstractItemModel::rowsInserted,
|
||||
proxyModel, &ConsoleProxyModel::onRowsInserted);
|
||||
m_consoleView->setModel(proxyModel);
|
||||
|
||||
connect(m_proxyModel,
|
||||
SIGNAL(setCurrentIndex(QModelIndex,QItemSelectionModel::SelectionFlags)),
|
||||
m_consoleView->selectionModel(),
|
||||
SLOT(setCurrentIndex(QModelIndex,QItemSelectionModel::SelectionFlags)));
|
||||
connect(m_proxyModel, &QmlConsoleProxyModel::scrollToBottom,
|
||||
m_consoleView, &QmlConsoleView::onScrollToBottom);
|
||||
connect(proxyModel, &ConsoleProxyModel::setCurrentIndex,
|
||||
m_consoleView->selectionModel(), &QItemSelectionModel::setCurrentIndex);
|
||||
connect(proxyModel, &ConsoleProxyModel::scrollToBottom,
|
||||
m_consoleView, &ConsoleView::onScrollToBottom);
|
||||
|
||||
m_itemDelegate = new QmlConsoleItemDelegate(this);
|
||||
connect(m_consoleView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
||||
m_itemDelegate, SLOT(currentChanged(QModelIndex,QModelIndex)));
|
||||
m_consoleView->setItemDelegate(m_itemDelegate);
|
||||
auto itemDelegate = new ConsoleItemDelegate(m_consoleItemModel, this);
|
||||
connect(m_consoleView->selectionModel(), &QItemSelectionModel::currentChanged,
|
||||
itemDelegate, &ConsoleItemDelegate::currentChanged);
|
||||
m_consoleView->setItemDelegate(itemDelegate);
|
||||
|
||||
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate();
|
||||
aggregate->add(m_consoleView);
|
||||
@@ -115,7 +115,7 @@ QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
m_showDebugButtonAction->setChecked(true);
|
||||
m_showDebugButtonAction->setIcon(Core::Icons::INFO_TOOLBAR.icon());
|
||||
connect(m_showDebugButtonAction, &Utils::SavedAction::toggled,
|
||||
m_proxyModel, &QmlConsoleProxyModel::setShowLogs);
|
||||
proxyModel, &ConsoleProxyModel::setShowLogs);
|
||||
m_showDebugButton->setDefaultAction(m_showDebugButtonAction);
|
||||
|
||||
m_showWarningButton = new QToolButton(m_consoleWidget);
|
||||
@@ -129,7 +129,7 @@ QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
m_showWarningButtonAction->setChecked(true);
|
||||
m_showWarningButtonAction->setIcon(Core::Icons::WARNING_TOOLBAR.icon());
|
||||
connect(m_showWarningButtonAction, &Utils::SavedAction::toggled,
|
||||
m_proxyModel, &QmlConsoleProxyModel::setShowWarnings);
|
||||
proxyModel, &ConsoleProxyModel::setShowWarnings);
|
||||
m_showWarningButton->setDefaultAction(m_showWarningButtonAction);
|
||||
|
||||
m_showErrorButton = new QToolButton(m_consoleWidget);
|
||||
@@ -142,7 +142,8 @@ QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
m_showErrorButtonAction->setCheckable(true);
|
||||
m_showErrorButtonAction->setChecked(true);
|
||||
m_showErrorButtonAction->setIcon(Core::Icons::ERROR_TOOLBAR.icon());
|
||||
connect(m_showErrorButtonAction, &Utils::SavedAction::toggled, m_proxyModel, &QmlConsoleProxyModel::setShowErrors);
|
||||
connect(m_showErrorButtonAction, &Utils::SavedAction::toggled,
|
||||
proxyModel, &ConsoleProxyModel::setShowErrors);
|
||||
m_showErrorButton->setDefaultAction(m_showErrorButtonAction);
|
||||
|
||||
m_spacer = new QWidget(m_consoleWidget);
|
||||
@@ -151,46 +152,47 @@ QmlConsolePane::QmlConsolePane(QObject *parent)
|
||||
m_statusLabel = new QLabel(m_consoleWidget);
|
||||
|
||||
readSettings();
|
||||
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), SLOT(writeSettings()));
|
||||
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
|
||||
this, &Console::writeSettings);
|
||||
}
|
||||
|
||||
QmlConsolePane::~QmlConsolePane()
|
||||
Console::~Console()
|
||||
{
|
||||
writeSettings();
|
||||
delete m_consoleWidget;
|
||||
}
|
||||
|
||||
QWidget *QmlConsolePane::outputWidget(QWidget *)
|
||||
QWidget *Console::outputWidget(QWidget *)
|
||||
{
|
||||
return m_consoleWidget;
|
||||
}
|
||||
|
||||
QList<QWidget *> QmlConsolePane::toolBarWidgets() const
|
||||
QList<QWidget *> Console::toolBarWidgets() const
|
||||
{
|
||||
return QList<QWidget *>() << m_showDebugButton << m_showWarningButton << m_showErrorButton
|
||||
<< m_spacer << m_statusLabel;
|
||||
return { m_showDebugButton, m_showWarningButton, m_showErrorButton,
|
||||
m_spacer, m_statusLabel };
|
||||
}
|
||||
|
||||
int QmlConsolePane::priorityInStatusBar() const
|
||||
int Console::priorityInStatusBar() const
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
|
||||
void QmlConsolePane::clearContents()
|
||||
void Console::clearContents()
|
||||
{
|
||||
QmlConsoleModel::qmlConsoleItemModel()->clear();
|
||||
m_consoleItemModel->clear();
|
||||
}
|
||||
|
||||
void QmlConsolePane::visibilityChanged(bool /*visible*/)
|
||||
void Console::visibilityChanged(bool /*visible*/)
|
||||
{
|
||||
}
|
||||
|
||||
bool QmlConsolePane::canFocus() const
|
||||
bool Console::canFocus() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QmlConsolePane::hasFocus() const
|
||||
bool Console::hasFocus() const
|
||||
{
|
||||
for (QWidget *widget = m_consoleWidget->window()->focusWidget(); widget != 0;
|
||||
widget = widget->parentWidget()) {
|
||||
@@ -200,35 +202,35 @@ bool QmlConsolePane::hasFocus() const
|
||||
return false;
|
||||
}
|
||||
|
||||
void QmlConsolePane::setFocus()
|
||||
void Console::setFocus()
|
||||
{
|
||||
m_consoleView->setFocus();
|
||||
}
|
||||
|
||||
bool QmlConsolePane::canNext() const
|
||||
bool Console::canNext() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QmlConsolePane::canPrevious() const
|
||||
bool Console::canPrevious() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void QmlConsolePane::goToNext()
|
||||
void Console::goToNext()
|
||||
{
|
||||
}
|
||||
|
||||
void QmlConsolePane::goToPrev()
|
||||
void Console::goToPrev()
|
||||
{
|
||||
}
|
||||
|
||||
bool QmlConsolePane::canNavigate() const
|
||||
bool Console::canNavigate() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void QmlConsolePane::readSettings()
|
||||
void Console::readSettings()
|
||||
{
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
m_showDebugButtonAction->readSettings(settings);
|
||||
@@ -236,12 +238,12 @@ void QmlConsolePane::readSettings()
|
||||
m_showErrorButtonAction->readSettings(settings);
|
||||
}
|
||||
|
||||
void QmlConsolePane::setContext(const QString &context)
|
||||
void Console::setContext(const QString &context)
|
||||
{
|
||||
m_statusLabel->setText(context);
|
||||
}
|
||||
|
||||
void QmlConsolePane::writeSettings() const
|
||||
void Console::writeSettings() const
|
||||
{
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
m_showDebugButtonAction->writeSettings(settings);
|
||||
@@ -249,5 +251,47 @@ void QmlConsolePane::writeSettings() const
|
||||
m_showErrorButtonAction->writeSettings(settings);
|
||||
}
|
||||
|
||||
void Console::setScriptEvaluator(const ScriptEvaluator &evaluator)
|
||||
{
|
||||
m_scriptEvaluator = evaluator;
|
||||
if (!m_scriptEvaluator)
|
||||
setContext(QString());
|
||||
}
|
||||
|
||||
void Console::printItem(ConsoleItem::ItemType itemType, const QString &text)
|
||||
{
|
||||
printItem(new ConsoleItem(itemType, text));
|
||||
}
|
||||
|
||||
void Console::printItem(ConsoleItem *item)
|
||||
{
|
||||
m_consoleItemModel->appendItem(item);
|
||||
if (item->itemType() == ConsoleItem::ErrorType)
|
||||
popup(Core::IOutputPane::ModeSwitch);
|
||||
else if (item->itemType() == ConsoleItem::WarningType)
|
||||
flash();
|
||||
}
|
||||
|
||||
void Console::evaluate(const QString &expression)
|
||||
{
|
||||
if (m_scriptEvaluator) {
|
||||
m_consoleItemModel->shiftEditableRow();
|
||||
m_scriptEvaluator(expression);
|
||||
} else {
|
||||
auto item = new ConsoleItem(ConsoleItem::ErrorType,
|
||||
QCoreApplication::translate(
|
||||
"Debugger::Internal::Console",
|
||||
"Can only evaluate during a debug session."));
|
||||
m_consoleItemModel->shiftEditableRow();
|
||||
printItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
Console *debuggerConsole()
|
||||
{
|
||||
static Console *theConsole = new Console;
|
||||
return theConsole;
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,11 +28,17 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEPANE_H
|
||||
#define QMLCONSOLEPANE_H
|
||||
#ifndef DEBUGGER_CONSOLE_H
|
||||
#define DEBUGGER_CONSOLE_H
|
||||
|
||||
#include "consoleitem.h"
|
||||
|
||||
#include <coreplugin/ioutputpane.h>
|
||||
|
||||
#include <functional>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QToolButton;
|
||||
class QLabel;
|
||||
@@ -40,25 +46,25 @@ QT_END_NAMESPACE
|
||||
|
||||
namespace Utils { class SavedAction; }
|
||||
|
||||
namespace QmlJSTools {
|
||||
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleView;
|
||||
class QmlConsoleItemDelegate;
|
||||
class QmlConsoleProxyModel;
|
||||
class QmlConsoleItemModel;
|
||||
typedef std::function<bool(QString)> ScriptEvaluator;
|
||||
|
||||
class QmlConsolePane : public Core::IOutputPane
|
||||
class ConsoleItemModel;
|
||||
class ConsoleView;
|
||||
|
||||
class Console : public Core::IOutputPane
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QmlConsolePane(QObject *parent);
|
||||
~QmlConsolePane();
|
||||
Console();
|
||||
~Console();
|
||||
|
||||
QWidget *outputWidget(QWidget *);
|
||||
QList<QWidget *> toolBarWidgets() const;
|
||||
QString displayName() const { return tr("QML/JS Console"); }
|
||||
QString displayName() const { return tr("Debugger Console"); }
|
||||
int priorityInStatusBar() const;
|
||||
void clearContents();
|
||||
void visibilityChanged(bool visible);
|
||||
@@ -75,7 +81,12 @@ public:
|
||||
void readSettings();
|
||||
void setContext(const QString &context);
|
||||
|
||||
public slots:
|
||||
void setScriptEvaluator(const ScriptEvaluator &evaluator);
|
||||
|
||||
void evaluate(const QString &expression);
|
||||
void printItem(ConsoleItem *item);
|
||||
void printItem(ConsoleItem::ItemType itemType, const QString &text);
|
||||
|
||||
void writeSettings() const;
|
||||
|
||||
private:
|
||||
@@ -87,13 +98,15 @@ private:
|
||||
Utils::SavedAction *m_showErrorButtonAction;
|
||||
QWidget *m_spacer;
|
||||
QLabel *m_statusLabel;
|
||||
QmlConsoleView *m_consoleView;
|
||||
QmlConsoleItemDelegate *m_itemDelegate;
|
||||
QmlConsoleProxyModel *m_proxyModel;
|
||||
ConsoleItemModel *m_consoleItemModel;
|
||||
ConsoleView *m_consoleView;
|
||||
QWidget *m_consoleWidget;
|
||||
ScriptEvaluator m_scriptEvaluator;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace QmlJSTools
|
||||
Console *debuggerConsole();
|
||||
|
||||
#endif // QMLCONSOLEPANE_H
|
||||
} // namespace Internal
|
||||
} // namespace Debugger
|
||||
|
||||
#endif // DEBUGGER_CONSOLE_H
|
||||
17
src/plugins/debugger/console/console.pri
Normal file
17
src/plugins/debugger/console/console.pri
Normal file
@@ -0,0 +1,17 @@
|
||||
HEADERS += \
|
||||
$$PWD/consoleitem.h \
|
||||
$$PWD/consoleedit.h \
|
||||
$$PWD/consoleitemdelegate.h \
|
||||
$$PWD/consoleitemmodel.h \
|
||||
$$PWD/console.h \
|
||||
$$PWD/consoleproxymodel.h \
|
||||
$$PWD/consoleview.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/consoleitem.cpp \
|
||||
$$PWD/consoleedit.cpp \
|
||||
$$PWD/consoleitemdelegate.cpp \
|
||||
$$PWD/consoleitemmodel.cpp \
|
||||
$$PWD/console.cpp \
|
||||
$$PWD/consoleproxymodel.cpp \
|
||||
$$PWD/consoleview.cpp
|
||||
@@ -28,28 +28,25 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsoleedit.h"
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "qmlconsolemodel.h"
|
||||
|
||||
#include "consoleedit.h"
|
||||
#include "consoleitemmodel.h"
|
||||
#include "console.h"
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QUrl>
|
||||
#include <QMenu>
|
||||
#include <QKeyEvent>
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// QmlConsoleEdit
|
||||
// ConsoleEdit
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QmlConsoleEdit::QmlConsoleEdit(const QModelIndex &index, QWidget *parent) :
|
||||
ConsoleEdit::ConsoleEdit(const QModelIndex &index, QWidget *parent) :
|
||||
QTextEdit(parent),
|
||||
m_historyIndex(index)
|
||||
{
|
||||
@@ -60,7 +57,7 @@ QmlConsoleEdit::QmlConsoleEdit(const QModelIndex &index, QWidget *parent) :
|
||||
setTextInteractionFlags(Qt::TextEditorInteraction);
|
||||
}
|
||||
|
||||
void QmlConsoleEdit::keyPressEvent(QKeyEvent *e)
|
||||
void ConsoleEdit::keyPressEvent(QKeyEvent *e)
|
||||
{
|
||||
bool keyConsumed = false;
|
||||
|
||||
@@ -68,10 +65,8 @@ void QmlConsoleEdit::keyPressEvent(QKeyEvent *e)
|
||||
case Qt::Key_Return:
|
||||
case Qt::Key_Enter: {
|
||||
QString currentScript = getCurrentScript();
|
||||
if (m_interpreter.canEvaluate(currentScript)) {
|
||||
QmlConsoleModel::evaluate(currentScript);
|
||||
debuggerConsole()->evaluate(currentScript);
|
||||
emit editingFinished();
|
||||
}
|
||||
keyConsumed = true;
|
||||
break;
|
||||
}
|
||||
@@ -94,12 +89,12 @@ void QmlConsoleEdit::keyPressEvent(QKeyEvent *e)
|
||||
QTextEdit::keyPressEvent(e);
|
||||
}
|
||||
|
||||
void QmlConsoleEdit::focusOutEvent(QFocusEvent * /*e*/)
|
||||
void ConsoleEdit::focusOutEvent(QFocusEvent * /*e*/)
|
||||
{
|
||||
emit editingFinished();
|
||||
}
|
||||
|
||||
void QmlConsoleEdit::handleUpKey()
|
||||
void ConsoleEdit::handleUpKey()
|
||||
{
|
||||
QTC_ASSERT(m_historyIndex.isValid(), return);
|
||||
int currentRow = m_historyIndex.row();
|
||||
@@ -122,7 +117,7 @@ void QmlConsoleEdit::handleUpKey()
|
||||
}
|
||||
}
|
||||
|
||||
void QmlConsoleEdit::handleDownKey()
|
||||
void ConsoleEdit::handleDownKey()
|
||||
{
|
||||
QTC_ASSERT(m_historyIndex.isValid(), return);
|
||||
int currentRow = m_historyIndex.row();
|
||||
@@ -146,7 +141,7 @@ void QmlConsoleEdit::handleDownKey()
|
||||
}
|
||||
}
|
||||
|
||||
QString QmlConsoleEdit::getCurrentScript() const
|
||||
QString ConsoleEdit::getCurrentScript() const
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
cursor.setPosition(0);
|
||||
@@ -154,7 +149,7 @@ QString QmlConsoleEdit::getCurrentScript() const
|
||||
return cursor.selectedText();
|
||||
}
|
||||
|
||||
void QmlConsoleEdit::replaceCurrentScript(const QString &script)
|
||||
void ConsoleEdit::replaceCurrentScript(const QString &script)
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
cursor.setPosition(0);
|
||||
@@ -165,4 +160,4 @@ void QmlConsoleEdit::replaceCurrentScript(const QString &script)
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,23 +28,22 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEEDIT_H
|
||||
#define QMLCONSOLEEDIT_H
|
||||
#ifndef DEBUGGER_CONSOLEEDIT_H
|
||||
#define DEBUGGER_CONSOLEEDIT_H
|
||||
|
||||
#include "qmljsinterpreter.h"
|
||||
|
||||
#include <QTextEdit>
|
||||
#include <QModelIndex>
|
||||
#include <QString>
|
||||
#include <QTextEdit>
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleEdit : public QTextEdit
|
||||
class ConsoleEdit : public QTextEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QmlConsoleEdit(const QModelIndex &index, QWidget *parent);
|
||||
|
||||
public:
|
||||
ConsoleEdit(const QModelIndex &index, QWidget *parent);
|
||||
QString getCurrentScript() const;
|
||||
|
||||
protected:
|
||||
@@ -57,16 +56,14 @@ signals:
|
||||
protected:
|
||||
void handleUpKey();
|
||||
void handleDownKey();
|
||||
|
||||
void replaceCurrentScript(const QString &script);
|
||||
|
||||
private:
|
||||
QModelIndex m_historyIndex;
|
||||
QString m_cachedScript;
|
||||
QmlJSInterpreter m_interpreter;
|
||||
};
|
||||
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
} // Internal
|
||||
|
||||
#endif // QMLCONSOLEEDIT_H
|
||||
#endif // DEBUGGER_CONSOLEEDIT_H
|
||||
@@ -30,15 +30,10 @@
|
||||
|
||||
#include "consoleitem.h"
|
||||
|
||||
namespace QmlJS {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ConsoleItem
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QString addZeroWidthSpace(QString text)
|
||||
static QString addZeroWidthSpace(QString text)
|
||||
{
|
||||
for (int i = 0; i < text.length(); ++i) {
|
||||
if (text.at(i).isPunct())
|
||||
@@ -164,4 +159,5 @@ QString ConsoleItem::expression() const
|
||||
return text().remove(QChar(0x200b)); // ZERO WIDTH SPACE
|
||||
}
|
||||
|
||||
} // QmlJS
|
||||
} // Internal
|
||||
} // Debugger
|
||||
@@ -31,15 +31,15 @@
|
||||
#ifndef CONSOLEITEM_H
|
||||
#define CONSOLEITEM_H
|
||||
|
||||
#include "qmljs_global.h"
|
||||
#include <utils/treemodel.h>
|
||||
|
||||
#include <QString>
|
||||
#include <functional>
|
||||
|
||||
namespace QmlJS {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QMLJS_EXPORT ConsoleItem : public Utils::TreeItem
|
||||
class ConsoleItem : public Utils::TreeItem
|
||||
{
|
||||
public:
|
||||
enum Roles {
|
||||
@@ -85,6 +85,7 @@ private:
|
||||
std::function<void(ConsoleItem *)> m_doFetch;
|
||||
};
|
||||
|
||||
} // QmlJS
|
||||
} // Internal
|
||||
} // Debugger
|
||||
|
||||
#endif // CONSOLEITEM_H
|
||||
@@ -28,8 +28,8 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsoleitemdelegate.h"
|
||||
#include "qmlconsoleedit.h"
|
||||
#include "consoleitemdelegate.h"
|
||||
#include "consoleedit.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <coreplugin/coreicons.h>
|
||||
@@ -59,19 +59,18 @@ const char CONSOLE_BORDER_COLOR[] = "#C9C9C9";
|
||||
|
||||
const int ELLIPSIS_GRADIENT_WIDTH = 16;
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// QmlConsoleItemDelegate
|
||||
// ConsoleItemDelegate
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QmlConsoleItemDelegate::QmlConsoleItemDelegate(QObject *parent) :
|
||||
ConsoleItemDelegate::ConsoleItemDelegate(ConsoleItemModel *model, QObject *parent) :
|
||||
QStyledItemDelegate(parent),
|
||||
m_model(model),
|
||||
m_logIcon(Core::Icons::INFO.icon()),
|
||||
m_warningIcon(Core::Icons::WARNING.icon()),
|
||||
m_errorIcon(Core::Icons::ERROR.icon()),
|
||||
@@ -82,12 +81,12 @@ QmlConsoleItemDelegate::QmlConsoleItemDelegate(QObject *parent) :
|
||||
{
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::emitSizeHintChanged(const QModelIndex &index)
|
||||
void ConsoleItemDelegate::emitSizeHintChanged(const QModelIndex &index)
|
||||
{
|
||||
emit sizeHintChanged(index);
|
||||
}
|
||||
|
||||
QColor QmlConsoleItemDelegate::drawBackground(QPainter *painter, const QRect &rect,
|
||||
QColor ConsoleItemDelegate::drawBackground(QPainter *painter, const QRect &rect,
|
||||
const QModelIndex &index,
|
||||
bool selected) const
|
||||
{
|
||||
@@ -128,7 +127,7 @@ QColor QmlConsoleItemDelegate::drawBackground(QPainter *painter, const QRect &re
|
||||
return backgroundColor;
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
void ConsoleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
QStyleOptionViewItemV4 opt = option;
|
||||
@@ -179,7 +178,7 @@ void QmlConsoleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
|
||||
bool showExpandableIcon = type == ConsoleItem::DefaultType;
|
||||
|
||||
QRect rect(opt.rect.x(), opt.rect.top(), width, opt.rect.height());
|
||||
ConsoleItemPositions positions(rect, opt.font, showTypeIcon, showExpandableIcon);
|
||||
ConsoleItemPositions positions(m_model, rect, opt.font, showTypeIcon, showExpandableIcon);
|
||||
|
||||
// Paint TaskIconArea:
|
||||
if (showTypeIcon)
|
||||
@@ -256,7 +255,7 @@ void QmlConsoleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
QSize QmlConsoleItemDelegate::sizeHint(const QStyleOptionViewItem &option,
|
||||
QSize ConsoleItemDelegate::sizeHint(const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
QStyleOptionViewItemV4 opt = option;
|
||||
@@ -281,7 +280,7 @@ QSize QmlConsoleItemDelegate::sizeHint(const QStyleOptionViewItem &option,
|
||||
bool showExpandableIcon = type == ConsoleItem::DefaultType;
|
||||
|
||||
QRect rect(level * view->indentation(), 0, width, 0);
|
||||
ConsoleItemPositions positions(rect, opt.font, showTypeIcon, showExpandableIcon);
|
||||
ConsoleItemPositions positions(m_model, rect, opt.font, showTypeIcon, showExpandableIcon);
|
||||
|
||||
QFontMetrics fm(option.font);
|
||||
qreal height = fm.height();
|
||||
@@ -306,12 +305,12 @@ QSize QmlConsoleItemDelegate::sizeHint(const QStyleOptionViewItem &option,
|
||||
return QSize(width, height);
|
||||
}
|
||||
|
||||
QWidget *QmlConsoleItemDelegate::createEditor(QWidget *parent,
|
||||
QWidget *ConsoleItemDelegate::createEditor(QWidget *parent,
|
||||
const QStyleOptionViewItem &/*option*/,
|
||||
const QModelIndex &index) const
|
||||
|
||||
{
|
||||
QmlConsoleEdit *editor = new QmlConsoleEdit(index, parent);
|
||||
ConsoleEdit *editor = new ConsoleEdit(index, parent);
|
||||
// Fiddle the prompt into the margin so that we don't have to put it into the text.
|
||||
// Apparently you can have both background-image and background-color, which conveniently
|
||||
// prevents the painted text from shining through.
|
||||
@@ -324,28 +323,28 @@ QWidget *QmlConsoleItemDelegate::createEditor(QWidget *parent,
|
||||
"background-origin: margin;"
|
||||
"background-repeat: none;"
|
||||
"}"));
|
||||
connect(editor, &QmlConsoleEdit::editingFinished,
|
||||
this, &QmlConsoleItemDelegate::commitAndCloseEditor);
|
||||
connect(editor, &ConsoleEdit::editingFinished,
|
||||
this, &ConsoleItemDelegate::commitAndCloseEditor);
|
||||
return editor;
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::setEditorData(QWidget *editor,
|
||||
void ConsoleItemDelegate::setEditorData(QWidget *editor,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
QmlConsoleEdit *edtr = qobject_cast<QmlConsoleEdit *>(editor);
|
||||
ConsoleEdit *edtr = qobject_cast<ConsoleEdit *>(editor);
|
||||
edtr->insertPlainText(index.data(ConsoleItem::ExpressionRole).toString());
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::setModelData(QWidget *editor,
|
||||
void ConsoleItemDelegate::setModelData(QWidget *editor,
|
||||
QAbstractItemModel *model,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
QmlConsoleEdit *edtr = qobject_cast<QmlConsoleEdit *>(editor);
|
||||
ConsoleEdit *edtr = qobject_cast<ConsoleEdit *>(editor);
|
||||
model->setData(index, edtr->getCurrentScript(), ConsoleItem::ExpressionRole);
|
||||
model->setData(index, ConsoleItem::InputType, ConsoleItem::TypeRole);
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::updateEditorGeometry(QWidget *editor,
|
||||
void ConsoleItemDelegate::updateEditorGeometry(QWidget *editor,
|
||||
const QStyleOptionViewItem &option,
|
||||
const QModelIndex &/*index*/) const
|
||||
{
|
||||
@@ -353,21 +352,21 @@ void QmlConsoleItemDelegate::updateEditorGeometry(QWidget *editor,
|
||||
editor->setGeometry(QRect(opt.rect.x(), opt.rect.top(), opt.rect.width(), opt.rect.bottom()));
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::currentChanged(const QModelIndex ¤t,
|
||||
void ConsoleItemDelegate::currentChanged(const QModelIndex ¤t,
|
||||
const QModelIndex &previous)
|
||||
{
|
||||
emit sizeHintChanged(current);
|
||||
emit sizeHintChanged(previous);
|
||||
}
|
||||
|
||||
void QmlConsoleItemDelegate::commitAndCloseEditor()
|
||||
void ConsoleItemDelegate::commitAndCloseEditor()
|
||||
{
|
||||
QmlConsoleEdit *editor = qobject_cast<QmlConsoleEdit *>(sender());
|
||||
ConsoleEdit *editor = qobject_cast<ConsoleEdit *>(sender());
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor);
|
||||
}
|
||||
|
||||
qreal QmlConsoleItemDelegate::layoutText(QTextLayout &tl, int width,
|
||||
qreal ConsoleItemDelegate::layoutText(QTextLayout &tl, int width,
|
||||
bool *showFileLineInfo) const
|
||||
{
|
||||
qreal height = 0;
|
||||
@@ -389,4 +388,4 @@ qreal QmlConsoleItemDelegate::layoutText(QTextLayout &tl, int width,
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,24 +28,24 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEITEMDELEGATE_H
|
||||
#define QMLCONSOLEITEMDELEGATE_H
|
||||
#ifndef DEBUGGER_CONSOLEITEMDELEGATE_H
|
||||
#define DEBUGGER_CONSOLEITEMDELEGATE_H
|
||||
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "qmlconsolemodel.h"
|
||||
#include "consoleitemmodel.h"
|
||||
#include "console.h"
|
||||
|
||||
#include <QStyledItemDelegate>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QTextLayout)
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleItemDelegate : public QStyledItemDelegate
|
||||
class ConsoleItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QmlConsoleItemDelegate(QObject *parent);
|
||||
ConsoleItemDelegate(ConsoleItemModel *model, QObject *parent);
|
||||
|
||||
void emitSizeHintChanged(const QModelIndex &index);
|
||||
QColor drawBackground(QPainter *painter, const QRect &rect, const QModelIndex &index,
|
||||
@@ -74,6 +74,7 @@ private:
|
||||
qreal layoutText(QTextLayout &tl, int width, bool *success = 0) const;
|
||||
|
||||
private:
|
||||
ConsoleItemModel *m_model;
|
||||
const QIcon m_logIcon;
|
||||
const QIcon m_warningIcon;
|
||||
const QIcon m_errorIcon;
|
||||
@@ -99,8 +100,8 @@ private:
|
||||
class ConsoleItemPositions
|
||||
{
|
||||
public:
|
||||
ConsoleItemPositions(const QRect &rect, const QFont &font, bool showTaskIconArea,
|
||||
bool showExpandableIconArea)
|
||||
ConsoleItemPositions(ConsoleItemModel *model, const QRect &rect,
|
||||
const QFont &font, bool showTaskIconArea, bool showExpandableIconArea)
|
||||
: m_x(rect.x()),
|
||||
m_width(rect.width()),
|
||||
m_top(rect.top()),
|
||||
@@ -111,7 +112,6 @@ public:
|
||||
m_showExpandableIconArea(showExpandableIconArea)
|
||||
{
|
||||
m_fontHeight = QFontMetrics(font).height();
|
||||
QmlConsoleItemModel *model = QmlConsoleModel::qmlConsoleItemModel();
|
||||
m_maxFileLength = model->sizeOfFile(font);
|
||||
m_maxLineLength = model->sizeOfLineNumber(font);
|
||||
}
|
||||
@@ -174,10 +174,9 @@ public:
|
||||
static const int TASK_ICON_SIZE = 16;
|
||||
static const int ITEM_PADDING = 8;
|
||||
static const int ITEM_SPACING = 4;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace QmlJSTools
|
||||
} // namespace Debugger
|
||||
|
||||
#endif // QMLCONSOLEITEMDELEGATE_H
|
||||
#endif // DEBUGGER_CONSOLEITEMDELEGATE_H
|
||||
@@ -28,37 +28,35 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "consoleitemmodel.h"
|
||||
|
||||
#include <QFontMetrics>
|
||||
#include <QFont>
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// QmlConsoleItemModel
|
||||
// ConsoleItemModel
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QmlConsoleItemModel::QmlConsoleItemModel(QObject *parent) :
|
||||
ConsoleItemModel::ConsoleItemModel(QObject *parent) :
|
||||
Utils::TreeModel(new ConsoleItem, parent),
|
||||
m_maxSizeOfFileName(0)
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void QmlConsoleItemModel::clear()
|
||||
void ConsoleItemModel::clear()
|
||||
{
|
||||
Utils::TreeModel::clear();
|
||||
appendItem(new ConsoleItem(ConsoleItem::InputType));
|
||||
emit selectEditableRow(index(0, 0, QModelIndex()), QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
|
||||
void QmlConsoleItemModel::appendItem(ConsoleItem *item, int position)
|
||||
void ConsoleItemModel::appendItem(ConsoleItem *item, int position)
|
||||
{
|
||||
if (position < 0)
|
||||
position = rootItem()->childCount() - 1; // append before editable row
|
||||
@@ -69,13 +67,7 @@ void QmlConsoleItemModel::appendItem(ConsoleItem *item, int position)
|
||||
rootItem()->insertChild(position, item);
|
||||
}
|
||||
|
||||
void QmlConsoleItemModel::appendMessage(ConsoleItem::ItemType itemType,
|
||||
const QString &message, int position)
|
||||
{
|
||||
appendItem(new ConsoleItem(itemType, message), position);
|
||||
}
|
||||
|
||||
void QmlConsoleItemModel::shiftEditableRow()
|
||||
void ConsoleItemModel::shiftEditableRow()
|
||||
{
|
||||
int position = rootItem()->childCount();
|
||||
Q_ASSERT(position > 0);
|
||||
@@ -87,7 +79,7 @@ void QmlConsoleItemModel::shiftEditableRow()
|
||||
emit selectEditableRow(index(position, 0, QModelIndex()), QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
|
||||
int QmlConsoleItemModel::sizeOfFile(const QFont &font)
|
||||
int ConsoleItemModel::sizeOfFile(const QFont &font)
|
||||
{
|
||||
int lastReadOnlyRow = rootItem()->childCount();
|
||||
lastReadOnlyRow -= 2; // skip editable row
|
||||
@@ -104,11 +96,11 @@ int QmlConsoleItemModel::sizeOfFile(const QFont &font)
|
||||
return m_maxSizeOfFileName;
|
||||
}
|
||||
|
||||
int QmlConsoleItemModel::sizeOfLineNumber(const QFont &font)
|
||||
int ConsoleItemModel::sizeOfLineNumber(const QFont &font)
|
||||
{
|
||||
QFontMetrics fm(font);
|
||||
return fm.width(QLatin1String("88888"));
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,31 +28,31 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEITEMMODEL_H
|
||||
#define QMLCONSOLEITEMMODEL_H
|
||||
#ifndef DEBUGGER_CONSOLEITEMMODEL_H
|
||||
#define DEBUGGER_CONSOLEITEMMODEL_H
|
||||
|
||||
#include <qmljs/consoleitem.h>
|
||||
#include "consoleitem.h"
|
||||
#include <utils/treemodel.h>
|
||||
|
||||
#include <QItemSelectionModel>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QFont)
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QFont;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleItemModel : public Utils::TreeModel
|
||||
class ConsoleItemModel : public Utils::TreeModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
explicit QmlConsoleItemModel(QObject *parent = 0);
|
||||
explicit ConsoleItemModel(QObject *parent = 0);
|
||||
|
||||
void shiftEditableRow();
|
||||
|
||||
void appendItem(QmlJS::ConsoleItem *item, int position = -1);
|
||||
void appendMessage(QmlJS::ConsoleItem::ItemType itemType, const QString &message,
|
||||
int position = -1);
|
||||
void appendItem(ConsoleItem *item, int position = -1);
|
||||
|
||||
int sizeOfFile(const QFont &font);
|
||||
int sizeOfLineNumber(const QFont &font);
|
||||
@@ -68,6 +68,6 @@ private:
|
||||
};
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
|
||||
#endif // QMLCONSOLEITEMMODEL_H
|
||||
#endif // DEBUGGER_CONSOLEITEMMODEL_H
|
||||
@@ -28,48 +28,46 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsoleproxymodel.h"
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "consoleproxymodel.h"
|
||||
#include "consoleitemmodel.h"
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
QmlConsoleProxyModel::QmlConsoleProxyModel(QObject *parent) :
|
||||
ConsoleProxyModel::ConsoleProxyModel(QObject *parent) :
|
||||
QSortFilterProxyModel(parent),
|
||||
m_filter(ConsoleItem::AllTypes)
|
||||
{
|
||||
}
|
||||
|
||||
void QmlConsoleProxyModel::setShowLogs(bool show)
|
||||
void ConsoleProxyModel::setShowLogs(bool show)
|
||||
{
|
||||
m_filter = show ? (m_filter | ConsoleItem::DebugType)
|
||||
: (m_filter & ~ConsoleItem::DebugType);
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
void QmlConsoleProxyModel::setShowWarnings(bool show)
|
||||
void ConsoleProxyModel::setShowWarnings(bool show)
|
||||
{
|
||||
m_filter = show ? (m_filter | ConsoleItem::WarningType)
|
||||
: (m_filter & ~ConsoleItem::WarningType);
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
void QmlConsoleProxyModel::setShowErrors(bool show)
|
||||
void ConsoleProxyModel::setShowErrors(bool show)
|
||||
{
|
||||
m_filter = show ? (m_filter | ConsoleItem::ErrorType)
|
||||
: (m_filter & ~ConsoleItem::ErrorType);
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
void QmlConsoleProxyModel::selectEditableRow(const QModelIndex &index,
|
||||
void ConsoleProxyModel::selectEditableRow(const QModelIndex &index,
|
||||
QItemSelectionModel::SelectionFlags command)
|
||||
{
|
||||
emit setCurrentIndex(mapFromSource(index), command);
|
||||
}
|
||||
|
||||
bool QmlConsoleProxyModel::filterAcceptsRow(int sourceRow,
|
||||
bool ConsoleProxyModel::filterAcceptsRow(int sourceRow,
|
||||
const QModelIndex &sourceParent) const
|
||||
{
|
||||
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||
@@ -77,7 +75,7 @@ bool QmlConsoleProxyModel::filterAcceptsRow(int sourceRow,
|
||||
index, ConsoleItem::TypeRole).toInt());
|
||||
}
|
||||
|
||||
void QmlConsoleProxyModel::onRowsInserted(const QModelIndex &index, int start, int end)
|
||||
void ConsoleProxyModel::onRowsInserted(const QModelIndex &index, int start, int end)
|
||||
{
|
||||
int rowIndex = end;
|
||||
do {
|
||||
@@ -89,4 +87,4 @@ void QmlConsoleProxyModel::onRowsInserted(const QModelIndex &index, int start, i
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,22 +28,22 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEPROXYMODEL_H
|
||||
#define QMLCONSOLEPROXYMODEL_H
|
||||
#ifndef DEBUGGER_CONSOLEPROXYMODEL_H
|
||||
#define DEBUGGER_CONSOLEPROXYMODEL_H
|
||||
|
||||
#include <qmljs/consoleitem.h>
|
||||
#include "consoleitem.h"
|
||||
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QItemSelectionModel>
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleProxyModel : public QSortFilterProxyModel
|
||||
class ConsoleProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit QmlConsoleProxyModel(QObject *parent);
|
||||
explicit ConsoleProxyModel(QObject *parent);
|
||||
|
||||
public slots:
|
||||
void setShowLogs(bool show);
|
||||
@@ -62,10 +62,10 @@ protected:
|
||||
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
|
||||
|
||||
private:
|
||||
QFlags<QmlJS::ConsoleItem::ItemType> m_filter;
|
||||
QFlags<ConsoleItem::ItemType> m_filter;
|
||||
};
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
|
||||
#endif // QMLCONSOLEPROXYMODEL_H
|
||||
#endif // DEBUGGER_CONSOLEPROXYMODEL_H
|
||||
@@ -28,9 +28,9 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsoleview.h"
|
||||
#include "qmlconsoleitemdelegate.h"
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "consoleview.h"
|
||||
#include "consoleitemdelegate.h"
|
||||
#include "consoleitemmodel.h"
|
||||
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/manhattanstyle.h>
|
||||
@@ -49,15 +49,13 @@
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleViewStyle : public ManhattanStyle
|
||||
class ConsoleViewStyle : public ManhattanStyle
|
||||
{
|
||||
public:
|
||||
QmlConsoleViewStyle(const QString &baseStyleName) : ManhattanStyle(baseStyleName) {}
|
||||
ConsoleViewStyle(const QString &baseStyleName) : ManhattanStyle(baseStyleName) {}
|
||||
|
||||
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter,
|
||||
const QWidget *widget = 0) const
|
||||
@@ -77,12 +75,12 @@ public:
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// QmlConsoleView
|
||||
// ConsoleView
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QmlConsoleView::QmlConsoleView(QWidget *parent) :
|
||||
Utils::TreeView(parent)
|
||||
ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) :
|
||||
Utils::TreeView(parent), m_model(model)
|
||||
{
|
||||
setFrameStyle(QFrame::NoFrame);
|
||||
setHeaderHidden(true);
|
||||
@@ -122,7 +120,7 @@ QmlConsoleView::QmlConsoleView(QWidget *parent) :
|
||||
baseName = QLatin1String("cleanlooks");
|
||||
}
|
||||
}
|
||||
QmlConsoleViewStyle *style = new QmlConsoleViewStyle(baseName);
|
||||
ConsoleViewStyle *style = new ConsoleViewStyle(baseName);
|
||||
setStyle(style);
|
||||
style->setParent(this);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
@@ -131,17 +129,17 @@ QmlConsoleView::QmlConsoleView(QWidget *parent) :
|
||||
horizontalScrollBar()->setSingleStep(20);
|
||||
verticalScrollBar()->setSingleStep(20);
|
||||
|
||||
connect(this, &QmlConsoleView::activated, this, &QmlConsoleView::onRowActivated);
|
||||
connect(this, &ConsoleView::activated, this, &ConsoleView::onRowActivated);
|
||||
}
|
||||
|
||||
void QmlConsoleView::onScrollToBottom()
|
||||
void ConsoleView::onScrollToBottom()
|
||||
{
|
||||
// Keep scrolling to bottom if scroll bar is not at maximum()
|
||||
if (verticalScrollBar()->value() != verticalScrollBar()->maximum())
|
||||
scrollToBottom();
|
||||
}
|
||||
|
||||
void QmlConsoleView::mousePressEvent(QMouseEvent *event)
|
||||
void ConsoleView::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
QPoint pos = event->pos();
|
||||
QModelIndex index = indexAt(pos);
|
||||
@@ -151,7 +149,7 @@ void QmlConsoleView::mousePressEvent(QMouseEvent *event)
|
||||
bool handled = false;
|
||||
if (type == ConsoleItem::DefaultType) {
|
||||
bool showTypeIcon = index.parent() == QModelIndex();
|
||||
ConsoleItemPositions positions(visualRect(index), viewOptions().font, showTypeIcon,
|
||||
ConsoleItemPositions positions(m_model, visualRect(index), viewOptions().font, showTypeIcon,
|
||||
true);
|
||||
|
||||
if (positions.expandCollapseIcon().contains(pos)) {
|
||||
@@ -167,22 +165,22 @@ void QmlConsoleView::mousePressEvent(QMouseEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void QmlConsoleView::resizeEvent(QResizeEvent *e)
|
||||
void ConsoleView::resizeEvent(QResizeEvent *e)
|
||||
{
|
||||
static_cast<QmlConsoleItemDelegate *>(itemDelegate())->emitSizeHintChanged(
|
||||
static_cast<ConsoleItemDelegate *>(itemDelegate())->emitSizeHintChanged(
|
||||
selectionModel()->currentIndex());
|
||||
Utils::TreeView::resizeEvent(e);
|
||||
}
|
||||
|
||||
void QmlConsoleView::drawBranches(QPainter *painter, const QRect &rect,
|
||||
void ConsoleView::drawBranches(QPainter *painter, const QRect &rect,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
static_cast<QmlConsoleItemDelegate *>(itemDelegate())->drawBackground(painter, rect, index,
|
||||
static_cast<ConsoleItemDelegate *>(itemDelegate())->drawBackground(painter, rect, index,
|
||||
false);
|
||||
Utils::TreeView::drawBranches(painter, rect, index);
|
||||
}
|
||||
|
||||
void QmlConsoleView::contextMenuEvent(QContextMenuEvent *event)
|
||||
void ConsoleView::contextMenuEvent(QContextMenuEvent *event)
|
||||
{
|
||||
QModelIndex itemIndex = indexAt(event->pos());
|
||||
QMenu menu;
|
||||
@@ -207,20 +205,20 @@ void QmlConsoleView::contextMenuEvent(QContextMenuEvent *event)
|
||||
onRowActivated(itemIndex);
|
||||
} else if (a == clear) {
|
||||
QAbstractProxyModel *proxyModel = qobject_cast<QAbstractProxyModel *>(model());
|
||||
QmlConsoleItemModel *handler = qobject_cast<QmlConsoleItemModel *>(
|
||||
ConsoleItemModel *handler = qobject_cast<ConsoleItemModel *>(
|
||||
proxyModel->sourceModel());
|
||||
handler->clear();
|
||||
}
|
||||
}
|
||||
|
||||
void QmlConsoleView::focusInEvent(QFocusEvent *event)
|
||||
void ConsoleView::focusInEvent(QFocusEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
selectionModel()->setCurrentIndex(model()->index(model()->rowCount() - 1, 0),
|
||||
QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
|
||||
void QmlConsoleView::onRowActivated(const QModelIndex &index)
|
||||
void ConsoleView::onRowActivated(const QModelIndex &index)
|
||||
{
|
||||
if (!index.isValid())
|
||||
return;
|
||||
@@ -239,7 +237,7 @@ void QmlConsoleView::onRowActivated(const QModelIndex &index)
|
||||
}
|
||||
}
|
||||
|
||||
void QmlConsoleView::copyToClipboard(const QModelIndex &index)
|
||||
void ConsoleView::copyToClipboard(const QModelIndex &index)
|
||||
{
|
||||
if (!index.isValid())
|
||||
return;
|
||||
@@ -258,7 +256,7 @@ void QmlConsoleView::copyToClipboard(const QModelIndex &index)
|
||||
cb->setText(contents);
|
||||
}
|
||||
|
||||
bool QmlConsoleView::canShowItemInTextEditor(const QModelIndex &index)
|
||||
bool ConsoleView::canShowItemInTextEditor(const QModelIndex &index)
|
||||
{
|
||||
if (!index.isValid())
|
||||
return false;
|
||||
@@ -277,4 +275,4 @@ bool QmlConsoleView::canShowItemInTextEditor(const QModelIndex &index)
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
@@ -28,19 +28,22 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEVIEW_H
|
||||
#define QMLCONSOLEVIEW_H
|
||||
#ifndef DEBUGGER_CONSOLEVIEW_H
|
||||
#define DEBUGGER_CONSOLEVIEW_H
|
||||
|
||||
#include <utils/itemviews.h>
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleView : public Utils::TreeView
|
||||
class ConsoleItemModel;
|
||||
|
||||
class ConsoleView : public Utils::TreeView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QmlConsoleView(QWidget *parent);
|
||||
ConsoleView(ConsoleItemModel *model, QWidget *parent);
|
||||
|
||||
public slots:
|
||||
void onScrollToBottom();
|
||||
@@ -53,15 +56,15 @@ protected:
|
||||
void contextMenuEvent(QContextMenuEvent *event);
|
||||
void focusInEvent(QFocusEvent *event);
|
||||
|
||||
private slots:
|
||||
void onRowActivated(const QModelIndex &index);
|
||||
|
||||
private:
|
||||
void onRowActivated(const QModelIndex &index);
|
||||
void copyToClipboard(const QModelIndex &index);
|
||||
bool canShowItemInTextEditor(const QModelIndex &index);
|
||||
|
||||
ConsoleItemModel *m_model;
|
||||
};
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
} // Debugger
|
||||
|
||||
#endif // QMLCONSOLEVIEW_H
|
||||
#endif // DEBUGGER_CONSOLEVIEW_H
|
||||
@@ -147,5 +147,6 @@ include(pdb/pdb.pri)
|
||||
include(lldb/lldb.pri)
|
||||
include(qml/qml.pri)
|
||||
include(namedemangler/namedemangler.pri)
|
||||
include(console/console.pri)
|
||||
|
||||
include(shared/shared.pri)
|
||||
|
||||
@@ -156,6 +156,20 @@ QtcPlugin {
|
||||
]
|
||||
}
|
||||
|
||||
Group {
|
||||
name: "Debugger Console"
|
||||
prefix: "console/"
|
||||
files: [
|
||||
"consoleitem.cpp", "consoleitem.h",
|
||||
"consoleedit.cpp", "consoleedit.h",
|
||||
"consoleitemdelegate.cpp", "consoleitemdelegate.h",
|
||||
"consoleitemmodel.cpp", "consoleitemmodel.h",
|
||||
"console.cpp", "console.h",
|
||||
"consoleproxymodel.cpp", "consoleproxymodel.h",
|
||||
"consoleview.cpp" "consoleview.h"
|
||||
]
|
||||
}
|
||||
|
||||
Group {
|
||||
name: "shared"
|
||||
prefix: "shared/"
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
#include "terminal.h"
|
||||
#include "threadshandler.h"
|
||||
#include "watchhandler.h"
|
||||
#include <debugger/shared/peutils.h>
|
||||
#include "debugger/shared/peutils.h"
|
||||
#include "console/console.h"
|
||||
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/editormanager/ieditor.h>
|
||||
@@ -71,8 +72,6 @@
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/savedaction.h>
|
||||
|
||||
#include <qmljs/consolemanagerinterface.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QTimer>
|
||||
#include <QFileInfo>
|
||||
@@ -526,9 +525,8 @@ void DebuggerEngine::showMessage(const QString &msg, int channel, int timeout) c
|
||||
}
|
||||
//if (msg.size() && msg.at(0).isUpper() && msg.at(1).isUpper())
|
||||
// qDebug() << qPrintable(msg) << "IN STATE" << state();
|
||||
QmlJS::ConsoleManagerInterface *consoleManager = QmlJS::ConsoleManagerInterface::instance();
|
||||
if (channel == ConsoleOutput && consoleManager)
|
||||
consoleManager->printToConsolePane(QmlJS::ConsoleItem::DefaultType, msg);
|
||||
if (channel == ConsoleOutput)
|
||||
debuggerConsole()->printItem(ConsoleItem::DefaultType, msg);
|
||||
|
||||
Internal::showMessage(msg, channel, timeout);
|
||||
if (d->m_runControl) {
|
||||
@@ -1744,6 +1742,12 @@ void DebuggerEngine::executeDebuggerCommand(const QString &, DebuggerLanguages)
|
||||
showStatusMessage(tr("This debugger cannot handle user input."));
|
||||
}
|
||||
|
||||
bool DebuggerEngine::evaluateScript(const QString &)
|
||||
{
|
||||
showStatusMessage(tr("This debugger cannot handle user scripts."));
|
||||
return false;
|
||||
}
|
||||
|
||||
BreakHandler *DebuggerEngine::breakHandler() const
|
||||
{
|
||||
return Internal::breakHandler();
|
||||
|
||||
@@ -263,6 +263,7 @@ public:
|
||||
|
||||
virtual bool acceptsDebuggerCommands() const { return true; }
|
||||
virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
|
||||
virtual bool evaluateScript(const QString &expression);
|
||||
|
||||
virtual void assignValueInDebugger(WatchItem *item,
|
||||
const QString &expr, const QVariant &value);
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
#include "localsandexpressionswindow.h"
|
||||
#include "loadcoredialog.h"
|
||||
#include "sourceutils.h"
|
||||
#include <debugger/shared/hostutils.h>
|
||||
#include "shared/hostutils.h"
|
||||
#include "console/console.h"
|
||||
|
||||
#include "snapshothandler.h"
|
||||
#include "threadshandler.h"
|
||||
@@ -1239,8 +1240,9 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
|
||||
if (!m_arguments.isEmpty())
|
||||
connect(KitManager::instance(), &KitManager::kitsLoaded,
|
||||
this, &DebuggerPluginPrivate::parseCommandLineArguments);
|
||||
// Cpp/Qml ui setup
|
||||
|
||||
m_mainWindow = new DebuggerMainWindow;
|
||||
m_plugin->addAutoReleasedObject(debuggerConsole());
|
||||
|
||||
TaskHub::addCategory(TASK_CATEGORY_DEBUGGER_DEBUGINFO,
|
||||
tr("Debug Information"));
|
||||
|
||||
@@ -38,11 +38,11 @@
|
||||
#include <debugger/stackhandler.h>
|
||||
#include <debugger/threaddata.h>
|
||||
#include <debugger/watchhandler.h>
|
||||
#include <debugger/console/console.h>
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
#include <qmljseditor/qmljseditorconstants.h>
|
||||
#include <cppeditor/cppeditorconstants.h>
|
||||
#include <qmljs/consolemanagerinterface.h>
|
||||
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
@@ -451,9 +451,7 @@ void QmlCppEngine::shutdownEngine()
|
||||
{
|
||||
EDEBUG("\nMASTER SHUTDOWN ENGINE");
|
||||
m_cppEngine->shutdownSlaveEngine();
|
||||
QmlJS::ConsoleManagerInterface *consoleManager = QmlJS::ConsoleManagerInterface::instance();
|
||||
if (consoleManager)
|
||||
consoleManager->setScriptEvaluator(0);
|
||||
debuggerConsole()->setScriptEvaluator(ScriptEvaluator());
|
||||
}
|
||||
|
||||
void QmlCppEngine::quitDebugger()
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <debugger/threaddata.h>
|
||||
#include <debugger/watchhandler.h>
|
||||
#include <debugger/watchwindow.h>
|
||||
#include <debugger/console/console.h>
|
||||
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/helpmanager.h>
|
||||
@@ -56,7 +57,6 @@
|
||||
|
||||
#include <qmljseditor/qmljseditorconstants.h>
|
||||
#include <qmljs/qmljsmodelmanagerinterface.h>
|
||||
#include <qmljs/consolemanagerinterface.h>
|
||||
#include <qmldebug/qpacketprotocol.h>
|
||||
|
||||
#include <texteditor/textdocument.h>
|
||||
@@ -282,9 +282,9 @@ QmlEngine::QmlEngine(const DebuggerRunParameters &startParameters, DebuggerEngin
|
||||
d->automaticConnect = true;
|
||||
}
|
||||
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance())
|
||||
consoleManager->setScriptEvaluator(this);
|
||||
|
||||
debuggerConsole()->setScriptEvaluator([this](const QString &expr) -> bool {
|
||||
return evaluateScript(expr);
|
||||
});
|
||||
|
||||
d->connectionTimer.setInterval(4000);
|
||||
d->connectionTimer.setSingleShot(true);
|
||||
@@ -442,7 +442,7 @@ void QmlEngine::appStartupFailed(const QString &errorMessage)
|
||||
this, &QmlEngine::errorMessageBoxFinished);
|
||||
infoBox->show();
|
||||
} else {
|
||||
ConsoleManagerInterface::instance()->printToConsolePane(ConsoleItem::WarningType, error);
|
||||
debuggerConsole()->printItem(ConsoleItem::WarningType, error);
|
||||
}
|
||||
|
||||
notifyEngineRunFailed();
|
||||
@@ -622,8 +622,7 @@ void QmlEngine::shutdownEngine()
|
||||
{
|
||||
clearExceptionSelection();
|
||||
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance())
|
||||
consoleManager->setScriptEvaluator(0);
|
||||
debuggerConsole()->setScriptEvaluator(ScriptEvaluator());
|
||||
d->noDebugOutputTimer.stop();
|
||||
|
||||
// double check (ill engine?):
|
||||
@@ -1048,10 +1047,8 @@ void QmlEngine::expressionEvaluated(quint32 queryId, const QVariant &result)
|
||||
{
|
||||
if (d->queryIds.contains(queryId)) {
|
||||
d->queryIds.removeOne(queryId);
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance()) {
|
||||
if (ConsoleItem *item = constructLogItemTree(result))
|
||||
consoleManager->printToConsolePane(item);
|
||||
}
|
||||
debuggerConsole()->printItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1105,8 +1102,7 @@ void QmlEngine::updateCurrentContext()
|
||||
context = grandParentData->name;
|
||||
}
|
||||
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance())
|
||||
consoleManager->setContext(tr("Context:") + QLatin1Char(' ') + context);
|
||||
debuggerConsole()->setContext(tr("Context:") + QLatin1Char(' ') + context);
|
||||
}
|
||||
|
||||
void QmlEngine::executeDebuggerCommand(const QString &command, DebuggerLanguages languages)
|
||||
@@ -1137,10 +1133,7 @@ bool QmlEngine::evaluateScript(const QString &expression)
|
||||
d->queryIds.append(queryId);
|
||||
} else {
|
||||
didEvaluate = false;
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance()) {
|
||||
consoleManager->printToConsolePane(ConsoleItem::ErrorType,
|
||||
_("Error evaluating expression."));
|
||||
}
|
||||
debuggerConsole()->printItem(ConsoleItem::ErrorType, _("Error evaluating expression."));
|
||||
}
|
||||
} else {
|
||||
executeDebuggerCommand(expression, QmlLanguage);
|
||||
@@ -2014,8 +2007,7 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
|
||||
//This is most probably due to a wrong eval expression.
|
||||
//Redirect output to console.
|
||||
if (eventType.isEmpty()) {
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance())
|
||||
consoleManager->printToConsolePane(new ConsoleItem(
|
||||
debuggerConsole()->printItem(new ConsoleItem(
|
||||
ConsoleItem::ErrorType,
|
||||
resp.value(_(MESSAGE)).toString()));
|
||||
}
|
||||
@@ -2435,20 +2427,15 @@ void QmlEnginePrivate::insertSubItems(WatchItem *parent, const QVariantList &pro
|
||||
|
||||
void QmlEnginePrivate::handleExecuteDebuggerCommand(const QVariantMap &response)
|
||||
{
|
||||
auto consoleManager = ConsoleManagerInterface::instance();
|
||||
if (!consoleManager)
|
||||
return;
|
||||
|
||||
auto it = response.constFind(_(SUCCESS));
|
||||
if (it != response.constEnd() && it.value().toBool()) {
|
||||
consoleManager->printToConsolePane(constructLogItemTree(
|
||||
extractData(response.value(_(BODY)))));
|
||||
debuggerConsole()->printItem(constructLogItemTree(extractData(response.value(_(BODY)))));
|
||||
|
||||
// Update the locals
|
||||
foreach (int index, currentFrameScopes)
|
||||
scope(index);
|
||||
} else {
|
||||
consoleManager->printToConsolePane(new ConsoleItem(ConsoleItem::ErrorType,
|
||||
debuggerConsole()->printItem(new ConsoleItem(ConsoleItem::ErrorType,
|
||||
response.value(_(MESSAGE)).toString()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
#include <qmldebug/qdebugmessageclient.h>
|
||||
#include <qmldebug/qmloutputparser.h>
|
||||
#include <qmljs/iscriptevaluator.h>
|
||||
#include <qmljs/qmljsdocument.h>
|
||||
|
||||
namespace Debugger {
|
||||
@@ -46,7 +45,7 @@ class WatchItem;
|
||||
class QmlEnginePrivate;
|
||||
class QmlInspectorAgent;
|
||||
|
||||
class QmlEngine : public DebuggerEngine, QmlJS::IScriptEvaluator
|
||||
class QmlEngine : public DebuggerEngine
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#include <qmljs/parser/qmljsast_p.h>
|
||||
#include <qmljs/qmljsmodelmanagerinterface.h>
|
||||
#include <qmljs/consolemanagerinterface.h>
|
||||
#include <debugger/console/console.h>
|
||||
|
||||
#include <coreplugin/editormanager/documentmodel.h>
|
||||
|
||||
@@ -228,9 +228,7 @@ void appendDebugOutput(QtMsgType type, const QString &message, const QDebugConte
|
||||
return;
|
||||
}
|
||||
|
||||
if (auto consoleManager = ConsoleManagerInterface::instance())
|
||||
consoleManager->printToConsolePane(new ConsoleItem(itemType, message, info.file,
|
||||
info.line));
|
||||
debuggerConsole()->printItem(new ConsoleItem(itemType, message, info.file, info.line));
|
||||
}
|
||||
|
||||
void clearExceptionSelection()
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
/**************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmlconsolemanager.h"
|
||||
#include "qmlconsolepane.h"
|
||||
#include "qmlconsoleitemmodel.h"
|
||||
#include "qmlconsolemodel.h"
|
||||
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
#include <qmljs/iscriptevaluator.h>
|
||||
|
||||
#include <QVariant>
|
||||
#include <QCoreApplication>
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
namespace QmlJSTools {
|
||||
|
||||
class QmlConsoleManagerPrivate
|
||||
{
|
||||
public:
|
||||
Internal::QmlConsoleItemModel *qmlConsoleItemModel;
|
||||
Internal::QmlConsolePane *qmlConsolePane;
|
||||
IScriptEvaluator *scriptEvaluator;
|
||||
};
|
||||
|
||||
QmlConsoleManager::QmlConsoleManager(QObject *parent)
|
||||
: ConsoleManagerInterface(parent),
|
||||
d(new QmlConsoleManagerPrivate)
|
||||
{
|
||||
d->qmlConsoleItemModel = new Internal::QmlConsoleItemModel(this);
|
||||
d->qmlConsolePane = new Internal::QmlConsolePane(this);
|
||||
d->scriptEvaluator = 0;
|
||||
ExtensionSystem::PluginManager::addObject(d->qmlConsolePane);
|
||||
}
|
||||
|
||||
QmlConsoleManager::~QmlConsoleManager()
|
||||
{
|
||||
if (d->qmlConsolePane)
|
||||
ExtensionSystem::PluginManager::removeObject(d->qmlConsolePane);
|
||||
delete d;
|
||||
}
|
||||
|
||||
void QmlConsoleManager::showConsolePane()
|
||||
{
|
||||
if (d->qmlConsolePane)
|
||||
d->qmlConsolePane->popup(Core::IOutputPane::ModeSwitch);
|
||||
}
|
||||
|
||||
void QmlConsoleManager::setScriptEvaluator(IScriptEvaluator *scriptEvaluator)
|
||||
{
|
||||
d->scriptEvaluator = scriptEvaluator;
|
||||
if (!scriptEvaluator)
|
||||
setContext(QString());
|
||||
}
|
||||
|
||||
void QmlConsoleManager::setContext(const QString &context)
|
||||
{
|
||||
d->qmlConsolePane->setContext(context);
|
||||
}
|
||||
|
||||
void QmlConsoleManager::printToConsolePane(ConsoleItem::ItemType itemType,
|
||||
const QString &text, bool bringToForeground)
|
||||
{
|
||||
if (!d->qmlConsolePane)
|
||||
return;
|
||||
if (itemType == ConsoleItem::ErrorType)
|
||||
bringToForeground = true;
|
||||
if (bringToForeground)
|
||||
d->qmlConsolePane->popup(Core::IOutputPane::ModeSwitch);
|
||||
d->qmlConsoleItemModel->appendMessage(itemType, text);
|
||||
if (itemType == ConsoleItem::WarningType)
|
||||
d->qmlConsolePane->flash();
|
||||
}
|
||||
|
||||
void QmlConsoleManager::printToConsolePane(ConsoleItem *item, bool bringToForeground)
|
||||
{
|
||||
if (!d->qmlConsolePane)
|
||||
return;
|
||||
if (item->itemType() == ConsoleItem::ErrorType)
|
||||
bringToForeground = true;
|
||||
if (bringToForeground)
|
||||
d->qmlConsolePane->popup(Core::IOutputPane::ModeSwitch);
|
||||
d->qmlConsoleItemModel->appendItem(item);
|
||||
}
|
||||
|
||||
namespace Internal {
|
||||
|
||||
QmlConsoleItemModel *QmlConsoleModel::qmlConsoleItemModel()
|
||||
{
|
||||
QmlConsoleManager *manager = qobject_cast<QmlConsoleManager *>(QmlConsoleManager::instance());
|
||||
if (manager)
|
||||
return manager->d->qmlConsoleItemModel;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void QmlConsoleModel::evaluate(const QString &expression)
|
||||
{
|
||||
QmlConsoleManager *manager = qobject_cast<QmlConsoleManager *>(QmlConsoleManager::instance());
|
||||
if (manager) {
|
||||
if (manager->d->scriptEvaluator) {
|
||||
QmlConsoleModel::qmlConsoleItemModel()->shiftEditableRow();
|
||||
manager->d->scriptEvaluator->evaluateScript(expression);
|
||||
} else {
|
||||
ConsoleItem *item = new ConsoleItem(
|
||||
ConsoleItem::ErrorType, QCoreApplication::translate(
|
||||
"QmlJSTools::Internal::QmlConsoleModel",
|
||||
"Can only evaluate during a QML debug session."));
|
||||
if (item) {
|
||||
QmlConsoleModel::qmlConsoleItemModel()->shiftEditableRow();
|
||||
manager->printToConsolePane(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // QmlJSTools
|
||||
@@ -1,69 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEMANAGER_H
|
||||
#define QMLCONSOLEMANAGER_H
|
||||
|
||||
#include "qmljstools_global.h"
|
||||
|
||||
#include <qmljs/consolemanagerinterface.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlJS { class IScriptEvaluator; }
|
||||
namespace QmlJSTools {
|
||||
|
||||
namespace Internal { class QmlConsoleModel; }
|
||||
|
||||
class QmlConsoleManagerPrivate;
|
||||
class QMLJSTOOLS_EXPORT QmlConsoleManager : public QmlJS::ConsoleManagerInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QmlConsoleManager(QObject *parent);
|
||||
~QmlConsoleManager();
|
||||
|
||||
void showConsolePane();
|
||||
|
||||
void setScriptEvaluator(QmlJS::IScriptEvaluator *scriptEvaluator);
|
||||
void setContext(const QString &context);
|
||||
|
||||
void printToConsolePane(QmlJS::ConsoleItem::ItemType itemType, const QString &text,
|
||||
bool bringToForeground = false);
|
||||
void printToConsolePane(QmlJS::ConsoleItem *item, bool bringToForeground = false);
|
||||
|
||||
private:
|
||||
QmlConsoleManagerPrivate *d;
|
||||
friend class Internal::QmlConsoleModel;
|
||||
};
|
||||
|
||||
} // namespace QmlJSTools
|
||||
|
||||
#endif // QMLCONSOLEMANAGER_H
|
||||
@@ -1,51 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms and
|
||||
** conditions see http://www.qt.io/terms-conditions. For further information
|
||||
** use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QMLCONSOLEMODEL_H
|
||||
#define QMLCONSOLEMODEL_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace QmlJSTools {
|
||||
namespace Internal {
|
||||
|
||||
class QmlConsoleItemModel;
|
||||
|
||||
class QmlConsoleModel
|
||||
{
|
||||
public:
|
||||
static QmlConsoleItemModel *qmlConsoleItemModel();
|
||||
static void evaluate(const QString &expression);
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace QmlJSTools
|
||||
|
||||
#endif // QMLCONSOLEMODEL_H
|
||||
@@ -20,16 +20,7 @@ HEADERS += \
|
||||
$$PWD/qmljsindenter.h \
|
||||
$$PWD/qmljscodestylesettingspage.h \
|
||||
$$PWD/qmljssemanticinfo.h \
|
||||
$$PWD/qmljstools_global.h \
|
||||
$$PWD/qmlconsolemanager.h \
|
||||
$$PWD/qmlconsoleitemmodel.h \
|
||||
$$PWD/qmlconsolemodel.h \
|
||||
$$PWD/qmlconsolepane.h \
|
||||
$$PWD/qmlconsoleview.h \
|
||||
$$PWD/qmlconsoleitemdelegate.h \
|
||||
$$PWD/qmlconsoleedit.h \
|
||||
$$PWD/qmljsinterpreter.h \
|
||||
$$PWD/qmlconsoleproxymodel.h
|
||||
$$PWD/qmljstools_global.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/qmljsbundleprovider.cpp \
|
||||
@@ -43,15 +34,7 @@ SOURCES += \
|
||||
$$PWD/qmljslocatordata.cpp \
|
||||
$$PWD/qmljsindenter.cpp \
|
||||
$$PWD/qmljscodestylesettingspage.cpp \
|
||||
$$PWD/qmljssemanticinfo.cpp \
|
||||
$$PWD/qmlconsolemanager.cpp \
|
||||
$$PWD/qmlconsoleitemmodel.cpp \
|
||||
$$PWD/qmlconsolepane.cpp \
|
||||
$$PWD/qmlconsoleview.cpp \
|
||||
$$PWD/qmlconsoleitemdelegate.cpp \
|
||||
$$PWD/qmlconsoleedit.cpp \
|
||||
$$PWD/qmljsinterpreter.cpp \
|
||||
$$PWD/qmlconsoleproxymodel.cpp
|
||||
$$PWD/qmljssemanticinfo.cpp
|
||||
|
||||
RESOURCES += \
|
||||
qmljstools.qrc
|
||||
|
||||
@@ -44,22 +44,6 @@ QtcPlugin {
|
||||
"qmljstoolsplugin.h",
|
||||
"qmljstoolssettings.cpp",
|
||||
"qmljstoolssettings.h",
|
||||
"qmlconsolemanager.cpp",
|
||||
"qmlconsolemanager.h",
|
||||
"qmlconsoleitemmodel.cpp",
|
||||
"qmlconsoleitemmodel.h",
|
||||
"qmlconsolepane.cpp",
|
||||
"qmlconsolepane.h",
|
||||
"qmlconsoleview.cpp",
|
||||
"qmlconsoleview.h",
|
||||
"qmlconsoleitemdelegate.cpp",
|
||||
"qmlconsoleitemdelegate.h",
|
||||
"qmlconsoleedit.cpp",
|
||||
"qmlconsoleedit.h",
|
||||
"qmlconsoleproxymodel.cpp",
|
||||
"qmlconsoleproxymodel.h",
|
||||
"qmljsinterpreter.cpp",
|
||||
"qmljsinterpreter.h",
|
||||
"qmljstools.qrc"
|
||||
]
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "qmljscodestylesettingspage.h"
|
||||
#include "qmljstoolsconstants.h"
|
||||
#include "qmljstoolssettings.h"
|
||||
#include "qmlconsolemanager.h"
|
||||
#include "qmljsbundleprovider.h"
|
||||
|
||||
#include <coreplugin/icontext.h>
|
||||
@@ -67,7 +66,6 @@ QmlJSToolsPlugin::~QmlJSToolsPlugin()
|
||||
{
|
||||
m_instance = 0;
|
||||
m_modelManager = 0; // deleted automatically
|
||||
m_consoleManager = 0; // deleted automatically
|
||||
}
|
||||
|
||||
bool QmlJSToolsPlugin::initialize(const QStringList &arguments, QString *error)
|
||||
@@ -81,7 +79,6 @@ bool QmlJSToolsPlugin::initialize(const QStringList &arguments, QString *error)
|
||||
|
||||
// Objects
|
||||
m_modelManager = new ModelManager(this);
|
||||
m_consoleManager = new QmlConsoleManager(this);
|
||||
|
||||
// VCSManager *vcsManager = core->vcsManager();
|
||||
// DocumentManager *fileManager = core->fileManager();
|
||||
|
||||
@@ -43,7 +43,6 @@ QT_END_NAMESPACE
|
||||
namespace QmlJSTools {
|
||||
|
||||
class QmlJSToolsSettings;
|
||||
class QmlConsoleManager;
|
||||
|
||||
namespace Internal {
|
||||
|
||||
@@ -75,7 +74,6 @@ private slots:
|
||||
|
||||
private:
|
||||
ModelManager *m_modelManager;
|
||||
QmlConsoleManager *m_consoleManager;
|
||||
QmlJSToolsSettings *m_settings;
|
||||
QAction *m_resetCodeModelAction;
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
:DebugModeWidget.Locals and Expressions_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.LocalsAndWatchers' type='QDockWidget' visible='1' windowTitle='Locals and Expressions'}
|
||||
:DebugModeWidget.OK_QPushButton {container=':Qt Creator.DebugModeWidget_QSplitter' text='OK' type='QPushButton' unnamed='1' visible='1'}
|
||||
:DebugModeWidget_QComboBox {container=':Qt Creator.DebugModeWidget_QSplitter' occurrence='2' type='QComboBox' unnamed='1' visible='1'}
|
||||
:DebugModeWidget_QmlJSTools::Internal::QmlConsoleView {container=':Qt Creator.DebugModeWidget_QSplitter' type='QmlJSTools::Internal::QmlConsoleView' unnamed='1' visible='1'}
|
||||
:DebugModeWidget_Debugger::Internal::ConsoleView {container=':Qt Creator.DebugModeWidget_QSplitter' type='Debugger::Internal::ConsoleView' unnamed='1' visible='1'}
|
||||
:Debugger Toolbar.Continue_QToolButton {container=':DebugModeWidget.Debugger Toolbar_QDockWidget' text='Continue' type='QToolButton' unnamed='1' visible='1'}
|
||||
:Debugger Toolbar.Exit Debugger_QToolButton {container=':DebugModeWidget.Debugger Toolbar_QDockWidget' text='Stop Debugger' type='QToolButton' unnamed='1' visible='1'}
|
||||
:Debugger Toolbar.StatusText_Utils::StatusLabel {container=':DebugModeWidget.Debugger Toolbar_QDockWidget' type='Utils::StatusLabel' unnamed='1'}
|
||||
@@ -124,7 +124,7 @@
|
||||
:Path.Utils_BaseValidatingLineEdit {container=':qt_tabwidget_stackedwidget_QWidget' name='LineEdit' type='Utils::FancyLineEdit' visible='1'}
|
||||
:QML Debugging.No_QPushButton {text='No' type='QPushButton' unnamed='1' visible='1' window=':QML Debugging_QMessageBox'}
|
||||
:QML Debugging_QMessageBox {text='The option will only take effect if the project is recompiled. Do you want to recompile now?' type='QMessageBox' unnamed='1' visible='1'}
|
||||
:QmlJSTools::Internal::QmlConsoleEdit {columnIndex='0' container=':DebugModeWidget_QmlJSTools::Internal::QmlConsoleView' rowIndex='0' type='QmlJSTools::Internal::QmlConsoleEdit' unnamed='1' visible='1'}
|
||||
:Debugger::Internal::ConsoleEdit {columnIndex='0' container=':DebugModeWidget_Debugger::Internal::ConsoleView' rowIndex='0' type='Debugger::Internal::ConsoleEdit' unnamed='1' visible='1'}
|
||||
:Qt Creator.Add Bookmark_QToolButton {text='Add Bookmark' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||
:Qt Creator.Analyzer Toolbar_QDockWidget {name='Analyzer Toolbar' type='QDockWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Analyzer Toolbar'}
|
||||
:Qt Creator.CloseDoc_QToolButton {toolTip?='Close Document *' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||
|
||||
@@ -30,15 +30,15 @@
|
||||
|
||||
source("../../shared/qtcreator.py")
|
||||
|
||||
def typeToQmlConsole(expression):
|
||||
def typeToDebuggerConsole(expression):
|
||||
editableIndex = getQModelIndexStr("text=''",
|
||||
":DebugModeWidget_QmlJSTools::Internal::QmlConsoleView")
|
||||
":DebugModeWidget_Debugger::Internal::ConsoleView")
|
||||
mouseClick(editableIndex, 5, 5, 0, Qt.LeftButton)
|
||||
type(waitForObject(":QmlJSTools::Internal::QmlConsoleEdit"), expression)
|
||||
type(waitForObject(":QmlJSTools::Internal::QmlConsoleEdit"), "<Return>")
|
||||
type(waitForObject(":Debugger::Internal::ConsoleEdit"), expression)
|
||||
type(waitForObject(":Debigger::Internal::ConsoleEdit"), "<Return>")
|
||||
|
||||
def useQmlJSConsole(expression, expectedOutput, check=None, checkOutp=None):
|
||||
typeToQmlConsole(expression)
|
||||
def useDebuggerConsole(expression, expectedOutput, check=None, checkOutp=None):
|
||||
typeToDebuggerConsole(expression)
|
||||
|
||||
if expectedOutput == None:
|
||||
result = getQmlJSConsoleOutput()[-1]
|
||||
@@ -46,7 +46,7 @@ def useQmlJSConsole(expression, expectedOutput, check=None, checkOutp=None):
|
||||
return result
|
||||
|
||||
expected = getQModelIndexStr("text='%s'" % expectedOutput,
|
||||
":DebugModeWidget_QmlJSTools::Internal::QmlConsoleView")
|
||||
":DebugModeWidget_Debugger::Internal::ConsoleView")
|
||||
try:
|
||||
obj = waitForObject(expected, 3000)
|
||||
test.compare(obj.text, expectedOutput, "Verifying whether expected output appeared.")
|
||||
@@ -74,7 +74,7 @@ def debuggerHasStopped():
|
||||
def getQmlJSConsoleOutput():
|
||||
try:
|
||||
result = []
|
||||
consoleView = waitForObject(":DebugModeWidget_QmlJSTools::Internal::QmlConsoleView")
|
||||
consoleView = waitForObject(":DebugModeWidget_Debugger::Internal::ConsoleView")
|
||||
model = consoleView.model()
|
||||
return dumpItems(model)[:-1]
|
||||
except:
|
||||
@@ -98,7 +98,7 @@ def testLoggingFeatures():
|
||||
)
|
||||
|
||||
for expression, expect, tooltip in zip(expressions, expected, filterToolTips):
|
||||
typeToQmlConsole(expression)
|
||||
typeToDebuggerConsole(expression)
|
||||
output = getQmlJSConsoleOutput()[1:]
|
||||
test.compare(output, expect, "Verifying expected output.")
|
||||
filterButton = waitForObject("{container=':Qt Creator.DebugModeWidget_QSplitter' "
|
||||
@@ -143,8 +143,8 @@ def main():
|
||||
":Locals and Expressions_Debugger::Internal::WatchTreeView")
|
||||
# make sure the items inside the root item are visible
|
||||
doubleClick(waitForObject(rootIndex))
|
||||
if not object.exists(":DebugModeWidget_QmlJSTools::Internal::QmlConsoleView"):
|
||||
invokeMenuItem("Window", "Output Panes", "QML/JS Console")
|
||||
if not object.exists(":DebugModeWidget_Debugger::Internal::ConsoleView"):
|
||||
invokeMenuItem("Window", "Output Panes", "Debugger Console")
|
||||
progressBarWait()
|
||||
# color and float values have additional ZERO WIDTH SPACE (\u200b), different usage of
|
||||
# whitespaces inside expressions is part of the test
|
||||
|
||||
Reference in New Issue
Block a user