forked from qt-creator/qt-creator
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:
@@ -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();
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user