diff options
-rw-r--r-- | src/plugins/qmljseditor/qmljsoutline.cpp | 33 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljsoutline.h | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/ioutlinewidget.h | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/outlinefactory.cpp | 42 | ||||
-rw-r--r-- | src/plugins/texteditor/outlinefactory.h | 4 |
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 |