forked from qt-creator/qt-creator
QmlJSOutline: Store the filter settings when switching files
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
#include "qmljsoutline.h"
|
#include "qmljsoutline.h"
|
||||||
#include "qmloutlinemodel.h"
|
#include "qmloutlinemodel.h"
|
||||||
|
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/ifile.h>
|
#include <coreplugin/ifile.h>
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
|
|
||||||
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtCore/QSettings>
|
||||||
#include <QtGui/QAction>
|
#include <QtGui/QAction>
|
||||||
#include <QtGui/QVBoxLayout>
|
#include <QtGui/QVBoxLayout>
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
using namespace QmlJS;
|
using namespace QmlJS;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -35,7 +38,9 @@ bool QmlJSOutlineFilterModel::filterAcceptsRow(int sourceRow,
|
|||||||
{
|
{
|
||||||
if (m_filterBindings) {
|
if (m_filterBindings) {
|
||||||
QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent);
|
QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||||
if (sourceIndex.data(QmlOutlineModel::ItemTypeRole) == QmlOutlineModel::PropertyType) {
|
QVariant itemType = sourceIndex.data(QmlOutlineModel::ItemTypeRole);
|
||||||
|
Q_ASSERT(itemType.isValid());
|
||||||
|
if (itemType.isValid() && itemType == QmlOutlineModel::PropertyType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,10 +54,8 @@ bool QmlJSOutlineFilterModel::filterBindings() const
|
|||||||
|
|
||||||
void QmlJSOutlineFilterModel::setFilterBindings(bool filterBindings)
|
void QmlJSOutlineFilterModel::setFilterBindings(bool filterBindings)
|
||||||
{
|
{
|
||||||
if (m_filterBindings != filterBindings) {
|
|
||||||
m_filterBindings = filterBindings;
|
m_filterBindings = filterBindings;
|
||||||
invalidateFilter();
|
invalidateFilter();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
|
QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
|
||||||
@@ -62,6 +65,8 @@ QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
|
|||||||
m_enableCursorSync(true),
|
m_enableCursorSync(true),
|
||||||
m_blockCursorSync(false)
|
m_blockCursorSync(false)
|
||||||
{
|
{
|
||||||
|
m_filterModel->setFilterBindings(false);
|
||||||
|
|
||||||
m_treeView->setModel(m_filterModel);
|
m_treeView->setModel(m_filterModel);
|
||||||
|
|
||||||
QVBoxLayout *layout = new QVBoxLayout;
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
@@ -74,7 +79,7 @@ QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
|
|||||||
m_showBindingsAction->setText(tr("Show bindings"));
|
m_showBindingsAction->setText(tr("Show bindings"));
|
||||||
m_showBindingsAction->setCheckable(true);
|
m_showBindingsAction->setCheckable(true);
|
||||||
m_showBindingsAction->setChecked(true);
|
m_showBindingsAction->setChecked(true);
|
||||||
connect(m_showBindingsAction, SIGNAL(triggered(bool)), this, SLOT(setShowBindings(bool)));
|
connect(m_showBindingsAction, SIGNAL(toggled(bool)), this, SLOT(setShowBindings(bool)));
|
||||||
|
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
}
|
}
|
||||||
@@ -109,6 +114,20 @@ void QmlJSOutlineWidget::setCursorSynchronization(bool syncWithCursor)
|
|||||||
updateSelectionInTree(m_editor.data()->outlineModelIndex());
|
updateSelectionInTree(m_editor.data()->outlineModelIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlJSOutlineWidget::restoreSettings(int position)
|
||||||
|
{
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
bool showBindings = settings->value("QmlJSOutline."+QString::number(position)+".ShowBindings", true).toBool();
|
||||||
|
m_showBindingsAction->setChecked(showBindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJSOutlineWidget::saveSettings(int position)
|
||||||
|
{
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->setValue("QmlJSOutline."+QString::number(position)+".ShowBindings",
|
||||||
|
m_showBindingsAction->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
void QmlJSOutlineWidget::modelUpdated()
|
void QmlJSOutlineWidget::modelUpdated()
|
||||||
{
|
{
|
||||||
m_treeView->expandAll();
|
m_treeView->expandAll();
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ public:
|
|||||||
// IOutlineWidget
|
// IOutlineWidget
|
||||||
virtual QList<QAction*> filterMenuActions() const;
|
virtual QList<QAction*> filterMenuActions() const;
|
||||||
virtual void setCursorSynchronization(bool syncWithCursor);
|
virtual void setCursorSynchronization(bool syncWithCursor);
|
||||||
|
virtual void restoreSettings(int position);
|
||||||
|
virtual void saveSettings(int position);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void modelUpdated();
|
void modelUpdated();
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ public:
|
|||||||
|
|
||||||
virtual QList<QAction*> filterMenuActions() const = 0;
|
virtual QList<QAction*> filterMenuActions() const = 0;
|
||||||
virtual void setCursorSynchronization(bool syncWithCursor) = 0;
|
virtual void setCursorSynchronization(bool syncWithCursor) = 0;
|
||||||
|
|
||||||
|
virtual void restoreSettings(int position) { Q_UNUSED(position); }
|
||||||
|
virtual void saveSettings(int position) { Q_UNUSED(position); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TEXTEDITOR_EXPORT IOutlineWidgetFactory : public QObject {
|
class TEXTEDITOR_EXPORT IOutlineWidgetFactory : public QObject {
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ namespace Internal {
|
|||||||
OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
|
OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
|
||||||
QStackedWidget(),
|
QStackedWidget(),
|
||||||
m_factory(factory),
|
m_factory(factory),
|
||||||
m_syncWithEditor(true)
|
m_syncWithEditor(true),
|
||||||
|
m_position(-1)
|
||||||
{
|
{
|
||||||
QLabel *label = new QLabel(tr("No outline available"), this);
|
QLabel *label = new QLabel(tr("No outline available"), this);
|
||||||
label->setAlignment(Qt::AlignCenter);
|
label->setAlignment(Qt::AlignCenter);
|
||||||
@@ -60,6 +61,33 @@ QToolButton *OutlineWidgetStack::filterButton()
|
|||||||
return m_filterButton;
|
return m_filterButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutlineWidgetStack::restoreSettings(int position)
|
||||||
|
{
|
||||||
|
m_position = position; // save it so that we can save/restore in updateCurrentEditor
|
||||||
|
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
const bool toggleSync = settings->value("Outline."+ QString::number(position) + ".SyncWithEditor",
|
||||||
|
true).toBool();
|
||||||
|
toggleSyncButton()->setChecked(toggleSync);
|
||||||
|
|
||||||
|
if (IOutlineWidget *outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget())) {
|
||||||
|
outlineWidget->restoreSettings(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutlineWidgetStack::saveSettings(int position)
|
||||||
|
{
|
||||||
|
Q_ASSERT(position == m_position);
|
||||||
|
|
||||||
|
QSettings *settings = Core::ICore::instance()->settings();
|
||||||
|
settings->setValue("Outline."+QString::number(position)+".SyncWithEditor",
|
||||||
|
toggleSyncButton()->isEnabled());
|
||||||
|
|
||||||
|
if (IOutlineWidget *outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget())) {
|
||||||
|
outlineWidget->saveSettings(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool OutlineWidgetStack::isCursorSynchronized() const
|
bool OutlineWidgetStack::isCursorSynchronized() const
|
||||||
{
|
{
|
||||||
return m_syncWithEditor;
|
return m_syncWithEditor;
|
||||||
@@ -98,10 +126,14 @@ void OutlineWidgetStack::updateCurrentEditor(Core::IEditor *editor)
|
|||||||
if (newWidget != currentWidget()) {
|
if (newWidget != currentWidget()) {
|
||||||
// delete old widget
|
// delete old widget
|
||||||
if (IOutlineWidget *outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget())) {
|
if (IOutlineWidget *outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget())) {
|
||||||
|
if (m_position > -1)
|
||||||
|
outlineWidget->saveSettings(m_position);
|
||||||
removeWidget(outlineWidget);
|
removeWidget(outlineWidget);
|
||||||
delete outlineWidget;
|
delete outlineWidget;
|
||||||
}
|
}
|
||||||
if (newWidget) {
|
if (newWidget) {
|
||||||
|
if (m_position > -1)
|
||||||
|
newWidget->restoreSettings(m_position);
|
||||||
newWidget->setCursorSynchronization(m_syncWithEditor);
|
newWidget->setCursorSynchronization(m_syncWithEditor);
|
||||||
addWidget(newWidget);
|
addWidget(newWidget);
|
||||||
setCurrentWidget(newWidget);
|
setCurrentWidget(newWidget);
|
||||||
@@ -153,18 +185,14 @@ void OutlineFactory::saveSettings(int position, QWidget *widget)
|
|||||||
{
|
{
|
||||||
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
|
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
|
||||||
Q_ASSERT(widgetStack);
|
Q_ASSERT(widgetStack);
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
widgetStack->saveSettings(position);
|
||||||
settings->setValue("Outline."+QString::number(position)+".SyncWithEditor",
|
|
||||||
widgetStack->toggleSyncButton()->isEnabled());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutlineFactory::restoreSettings(int position, QWidget *widget)
|
void OutlineFactory::restoreSettings(int position, QWidget *widget)
|
||||||
{
|
{
|
||||||
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
|
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
|
||||||
Q_ASSERT(widgetStack);
|
Q_ASSERT(widgetStack);
|
||||||
QSettings *settings = Core::ICore::instance()->settings();
|
widgetStack->restoreSettings(position);
|
||||||
widgetStack->toggleSyncButton()->setChecked(
|
|
||||||
settings->value("Outline."+QString::number(position)+".SyncWithEditor", true).toBool());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ public:
|
|||||||
QToolButton *toggleSyncButton();
|
QToolButton *toggleSyncButton();
|
||||||
QToolButton *filterButton();
|
QToolButton *filterButton();
|
||||||
|
|
||||||
|
void saveSettings(int position);
|
||||||
|
void restoreSettings(int position);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isCursorSynchronized() const;
|
bool isCursorSynchronized() const;
|
||||||
QWidget *dummyWidget() const;
|
QWidget *dummyWidget() const;
|
||||||
@@ -41,6 +44,7 @@ private:
|
|||||||
QToolButton *m_filterButton;
|
QToolButton *m_filterButton;
|
||||||
QMenu *m_filterMenu;
|
QMenu *m_filterMenu;
|
||||||
bool m_syncWithEditor;
|
bool m_syncWithEditor;
|
||||||
|
int m_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
class OutlineFactory : public Core::INavigationWidgetFactory
|
class OutlineFactory : public Core::INavigationWidgetFactory
|
||||||
|
|||||||
Reference in New Issue
Block a user