aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmljseditor/qmljsoutline.cpp33
-rw-r--r--src/plugins/qmljseditor/qmljsoutline.h2
-rw-r--r--src/plugins/texteditor/ioutlinewidget.h3
-rw-r--r--src/plugins/texteditor/outlinefactory.cpp42
-rw-r--r--src/plugins/texteditor/outlinefactory.h4
5 files changed, 70 insertions, 14 deletions
diff --git a/src/plugins/qmljseditor/qmljsoutline.cpp b/src/plugins/qmljseditor/qmljsoutline.cpp
index c349dfc9ed..3a6f869c5d 100644
--- a/src/plugins/qmljseditor/qmljsoutline.cpp
+++ b/src/plugins/qmljseditor/qmljsoutline.cpp
@@ -1,12 +1,15 @@
#include "qmljsoutline.h"
#include "qmloutlinemodel.h"
+#include <coreplugin/icore.h>
#include <coreplugin/ifile.h>
#include <coreplugin/editormanager/editormanager.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QSettings>
#include <QtGui/QAction>
#include <QtGui/QVBoxLayout>
-#include <QDebug>
using namespace QmlJS;
enum {
@@ -35,7 +38,9 @@ bool QmlJSOutlineFilterModel::filterAcceptsRow(int sourceRow,
{
if (m_filterBindings) {
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;
}
}
@@ -49,10 +54,8 @@ bool QmlJSOutlineFilterModel::filterBindings() const
void QmlJSOutlineFilterModel::setFilterBindings(bool filterBindings)
{
- if (m_filterBindings != filterBindings) {
- m_filterBindings = filterBindings;
- invalidateFilter();
- }
+ m_filterBindings = filterBindings;
+ invalidateFilter();
}
QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
@@ -62,6 +65,8 @@ QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
m_enableCursorSync(true),
m_blockCursorSync(false)
{
+ m_filterModel->setFilterBindings(false);
+
m_treeView->setModel(m_filterModel);
QVBoxLayout *layout = new QVBoxLayout;
@@ -74,7 +79,7 @@ QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
m_showBindingsAction->setText(tr("Show bindings"));
m_showBindingsAction->setCheckable(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);
}
@@ -109,6 +114,20 @@ void QmlJSOutlineWidget::setCursorSynchronization(bool syncWithCursor)
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()
{
m_treeView->expandAll();
diff --git a/src/plugins/qmljseditor/qmljsoutline.h b/src/plugins/qmljseditor/qmljsoutline.h
index 27c2e4f8d4..4032426663 100644
--- a/src/plugins/qmljseditor/qmljsoutline.h
+++ b/src/plugins/qmljseditor/qmljsoutline.h
@@ -53,6 +53,8 @@ public:
// IOutlineWidget
virtual QList<QAction*> filterMenuActions() const;
virtual void setCursorSynchronization(bool syncWithCursor);
+ virtual void restoreSettings(int position);
+ virtual void saveSettings(int position);
private slots:
void modelUpdated();
diff --git a/src/plugins/texteditor/ioutlinewidget.h b/src/plugins/texteditor/ioutlinewidget.h
index 1ac85f8074..d2d3403de6 100644
--- a/src/plugins/texteditor/ioutlinewidget.h
+++ b/src/plugins/texteditor/ioutlinewidget.h
@@ -18,6 +18,9 @@ public:
virtual QList<QAction*> filterMenuActions() const = 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 {
diff --git a/src/plugins/texteditor/outlinefactory.cpp b/src/plugins/texteditor/outlinefactory.cpp
index b80599ef34..374b53f2e9 100644
--- a/src/plugins/texteditor/outlinefactory.cpp
+++ b/src/plugins/texteditor/outlinefactory.cpp
@@ -14,7 +14,8 @@ namespace Internal {
OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
QStackedWidget(),
m_factory(factory),
- m_syncWithEditor(true)
+ m_syncWithEditor(true),
+ m_position(-1)
{
QLabel *label = new QLabel(tr("No outline available"), this);
label->setAlignment(Qt::AlignCenter);
@@ -60,6 +61,33 @@ QToolButton *OutlineWidgetStack::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
{
return m_syncWithEditor;
@@ -98,10 +126,14 @@ void OutlineWidgetStack::updateCurrentEditor(Core::IEditor *editor)
if (newWidget != currentWidget()) {
// delete old widget
if (IOutlineWidget *outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget())) {
+ if (m_position > -1)
+ outlineWidget->saveSettings(m_position);
removeWidget(outlineWidget);
delete outlineWidget;
}
if (newWidget) {
+ if (m_position > -1)
+ newWidget->restoreSettings(m_position);
newWidget->setCursorSynchronization(m_syncWithEditor);
addWidget(newWidget);
setCurrentWidget(newWidget);
@@ -153,18 +185,14 @@ void OutlineFactory::saveSettings(int position, QWidget *widget)
{
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
Q_ASSERT(widgetStack);
- QSettings *settings = Core::ICore::instance()->settings();
- settings->setValue("Outline."+QString::number(position)+".SyncWithEditor",
- widgetStack->toggleSyncButton()->isEnabled());
+ widgetStack->saveSettings(position);
}
void OutlineFactory::restoreSettings(int position, QWidget *widget)
{
OutlineWidgetStack *widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
Q_ASSERT(widgetStack);
- QSettings *settings = Core::ICore::instance()->settings();
- widgetStack->toggleSyncButton()->setChecked(
- settings->value("Outline."+QString::number(position)+".SyncWithEditor", true).toBool());
+ widgetStack->restoreSettings(position);
}
} // namespace Internal
diff --git a/src/plugins/texteditor/outlinefactory.h b/src/plugins/texteditor/outlinefactory.h
index 8c5fe1b5c0..3614b93299 100644
--- a/src/plugins/texteditor/outlinefactory.h
+++ b/src/plugins/texteditor/outlinefactory.h
@@ -25,6 +25,9 @@ public:
QToolButton *toggleSyncButton();
QToolButton *filterButton();
+ void saveSettings(int position);
+ void restoreSettings(int position);
+
private:
bool isCursorSynchronized() const;
QWidget *dummyWidget() const;
@@ -41,6 +44,7 @@ private:
QToolButton *m_filterButton;
QMenu *m_filterMenu;
bool m_syncWithEditor;
+ int m_position;
};
class OutlineFactory : public Core::INavigationWidgetFactory