TextEditor: Prepare sorting support for outline

Change-Id: Ic720e935b865005d6a0a7638b49fd0a55c94c639
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2020-05-27 08:20:02 +02:00
parent 3a97df0f61
commit 1bd7b98b9f
3 changed files with 31 additions and 1 deletions

View File

@@ -41,6 +41,8 @@ public:
virtual QList<QAction*> filterMenuActions() const = 0;
virtual void setCursorSynchronization(bool syncWithCursor) = 0;
virtual void setSorted(bool /*sorted*/) {}
virtual bool isSorted() const { return false; }
virtual void restoreSettings(const QVariantMap & /*map*/) { }
virtual QVariantMap settings() const { return QVariantMap(); }
@@ -55,6 +57,7 @@ public:
~IOutlineWidgetFactory() override;
virtual bool supportsEditor(Core::IEditor *editor) const = 0;
virtual bool supportsSorting() const { return false; }
virtual IOutlineWidget *createWidget(Core::IEditor *editor) = 0;
static void updateOutline();

View File

@@ -64,7 +64,8 @@ namespace Internal {
OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
QStackedWidget(),
m_factory(factory),
m_syncWithEditor(true)
m_syncWithEditor(true),
m_sorted(false)
{
QLabel *label = new QLabel(tr("No outline available"), this);
label->setAlignment(Qt::AlignCenter);
@@ -95,6 +96,13 @@ OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
m_filterMenu = new QMenu(m_filterButton);
m_filterButton->setMenu(m_filterMenu);
m_toggleSort = new QToolButton(this);
m_toggleSort->setIcon(Utils::Icons::SORT_ALPHABETICALLY_TOOLBAR.icon());
m_toggleSort->setCheckable(true);
m_toggleSort->setChecked(false);
m_toggleSort->setToolTip(tr("Sort Alphabetically"));
connect(m_toggleSort, &QAbstractButton::clicked, this, &OutlineWidgetStack::toggleSort);
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
this, &OutlineWidgetStack::updateEditor);
connect(factory, &OutlineFactory::updateOutline,
@@ -114,6 +122,11 @@ QToolButton *OutlineWidgetStack::filterButton()
return m_filterButton;
}
QToolButton *OutlineWidgetStack::sortButton()
{
return m_toggleSort;
}
void OutlineWidgetStack::saveSettings(QSettings *settings, int position)
{
const QString baseKey = QStringLiteral("Outline.%1.").arg(position);
@@ -158,6 +171,13 @@ void OutlineWidgetStack::toggleCursorSynchronization()
outlineWidget->setCursorSynchronization(m_syncWithEditor);
}
void OutlineWidgetStack::toggleSort()
{
m_sorted = !m_sorted;
if (auto outlineWidget = qobject_cast<IOutlineWidget*>(currentWidget()))
outlineWidget->setSorted(m_sorted);
}
void OutlineWidgetStack::updateFilterMenu()
{
m_filterMenu->clear();
@@ -182,6 +202,7 @@ void OutlineWidgetStack::updateEditor(Core::IEditor *editor)
for (IOutlineWidgetFactory *widgetFactory : qAsConst(g_outlineWidgetFactories)) {
if (widgetFactory->supportsEditor(editor)) {
newWidget = widgetFactory->createWidget(editor);
m_toggleSort->setVisible(widgetFactory->supportsSorting());
break;
}
}
@@ -199,6 +220,7 @@ void OutlineWidgetStack::updateEditor(Core::IEditor *editor)
if (newWidget) {
newWidget->restoreSettings(m_widgetSettings);
newWidget->setCursorSynchronization(m_syncWithEditor);
m_toggleSort->setChecked(newWidget->isSorted());
addWidget(newWidget);
setCurrentWidget(newWidget);
setFocusProxy(newWidget);
@@ -223,6 +245,7 @@ Core::NavigationView OutlineFactory::createWidget()
auto placeHolder = new OutlineWidgetStack(this);
n.widget = placeHolder;
n.dockToolBarWidgets.append(placeHolder->filterButton());
n.dockToolBarWidgets.append(placeHolder->sortButton());
n.dockToolBarWidgets.append(placeHolder->toggleSyncButton());
return n;
}

View File

@@ -46,6 +46,7 @@ public:
QToolButton *toggleSyncButton();
QToolButton *filterButton();
QToolButton *sortButton();
void saveSettings(QSettings *settings, int position);
void restoreSettings(QSettings *settings, int position);
@@ -55,6 +56,7 @@ private:
QWidget *dummyWidget() const;
void updateFilterMenu();
void toggleCursorSynchronization();
void toggleSort();
void updateEditor(Core::IEditor *editor);
void updateCurrentEditor();
@@ -62,9 +64,11 @@ private:
OutlineFactory *m_factory;
QToolButton *m_toggleSync;
QToolButton *m_filterButton;
QToolButton *m_toggleSort;
QMenu *m_filterMenu;
QVariantMap m_widgetSettings;
bool m_syncWithEditor;
bool m_sorted;
};
class OutlineFactory : public Core::INavigationWidgetFactory