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 QList<QAction*> filterMenuActions() const = 0;
|
||||||
virtual void setCursorSynchronization(bool syncWithCursor) = 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 void restoreSettings(const QVariantMap & /*map*/) { }
|
||||||
virtual QVariantMap settings() const { return QVariantMap(); }
|
virtual QVariantMap settings() const { return QVariantMap(); }
|
||||||
@@ -55,6 +57,7 @@ public:
|
|||||||
~IOutlineWidgetFactory() override;
|
~IOutlineWidgetFactory() override;
|
||||||
|
|
||||||
virtual bool supportsEditor(Core::IEditor *editor) const = 0;
|
virtual bool supportsEditor(Core::IEditor *editor) const = 0;
|
||||||
|
virtual bool supportsSorting() const { return false; }
|
||||||
virtual IOutlineWidget *createWidget(Core::IEditor *editor) = 0;
|
virtual IOutlineWidget *createWidget(Core::IEditor *editor) = 0;
|
||||||
|
|
||||||
static void updateOutline();
|
static void updateOutline();
|
||||||
|
@@ -64,7 +64,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_sorted(false)
|
||||||
{
|
{
|
||||||
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);
|
||||||
@@ -95,6 +96,13 @@ OutlineWidgetStack::OutlineWidgetStack(OutlineFactory *factory) :
|
|||||||
m_filterMenu = new QMenu(m_filterButton);
|
m_filterMenu = new QMenu(m_filterButton);
|
||||||
m_filterButton->setMenu(m_filterMenu);
|
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,
|
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
|
||||||
this, &OutlineWidgetStack::updateEditor);
|
this, &OutlineWidgetStack::updateEditor);
|
||||||
connect(factory, &OutlineFactory::updateOutline,
|
connect(factory, &OutlineFactory::updateOutline,
|
||||||
@@ -114,6 +122,11 @@ QToolButton *OutlineWidgetStack::filterButton()
|
|||||||
return m_filterButton;
|
return m_filterButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QToolButton *OutlineWidgetStack::sortButton()
|
||||||
|
{
|
||||||
|
return m_toggleSort;
|
||||||
|
}
|
||||||
|
|
||||||
void OutlineWidgetStack::saveSettings(QSettings *settings, int position)
|
void OutlineWidgetStack::saveSettings(QSettings *settings, int position)
|
||||||
{
|
{
|
||||||
const QString baseKey = QStringLiteral("Outline.%1.").arg(position);
|
const QString baseKey = QStringLiteral("Outline.%1.").arg(position);
|
||||||
@@ -158,6 +171,13 @@ void OutlineWidgetStack::toggleCursorSynchronization()
|
|||||||
outlineWidget->setCursorSynchronization(m_syncWithEditor);
|
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()
|
void OutlineWidgetStack::updateFilterMenu()
|
||||||
{
|
{
|
||||||
m_filterMenu->clear();
|
m_filterMenu->clear();
|
||||||
@@ -182,6 +202,7 @@ void OutlineWidgetStack::updateEditor(Core::IEditor *editor)
|
|||||||
for (IOutlineWidgetFactory *widgetFactory : qAsConst(g_outlineWidgetFactories)) {
|
for (IOutlineWidgetFactory *widgetFactory : qAsConst(g_outlineWidgetFactories)) {
|
||||||
if (widgetFactory->supportsEditor(editor)) {
|
if (widgetFactory->supportsEditor(editor)) {
|
||||||
newWidget = widgetFactory->createWidget(editor);
|
newWidget = widgetFactory->createWidget(editor);
|
||||||
|
m_toggleSort->setVisible(widgetFactory->supportsSorting());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,6 +220,7 @@ void OutlineWidgetStack::updateEditor(Core::IEditor *editor)
|
|||||||
if (newWidget) {
|
if (newWidget) {
|
||||||
newWidget->restoreSettings(m_widgetSettings);
|
newWidget->restoreSettings(m_widgetSettings);
|
||||||
newWidget->setCursorSynchronization(m_syncWithEditor);
|
newWidget->setCursorSynchronization(m_syncWithEditor);
|
||||||
|
m_toggleSort->setChecked(newWidget->isSorted());
|
||||||
addWidget(newWidget);
|
addWidget(newWidget);
|
||||||
setCurrentWidget(newWidget);
|
setCurrentWidget(newWidget);
|
||||||
setFocusProxy(newWidget);
|
setFocusProxy(newWidget);
|
||||||
@@ -223,6 +245,7 @@ Core::NavigationView OutlineFactory::createWidget()
|
|||||||
auto placeHolder = new OutlineWidgetStack(this);
|
auto placeHolder = new OutlineWidgetStack(this);
|
||||||
n.widget = placeHolder;
|
n.widget = placeHolder;
|
||||||
n.dockToolBarWidgets.append(placeHolder->filterButton());
|
n.dockToolBarWidgets.append(placeHolder->filterButton());
|
||||||
|
n.dockToolBarWidgets.append(placeHolder->sortButton());
|
||||||
n.dockToolBarWidgets.append(placeHolder->toggleSyncButton());
|
n.dockToolBarWidgets.append(placeHolder->toggleSyncButton());
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
@@ -46,6 +46,7 @@ public:
|
|||||||
|
|
||||||
QToolButton *toggleSyncButton();
|
QToolButton *toggleSyncButton();
|
||||||
QToolButton *filterButton();
|
QToolButton *filterButton();
|
||||||
|
QToolButton *sortButton();
|
||||||
|
|
||||||
void saveSettings(QSettings *settings, int position);
|
void saveSettings(QSettings *settings, int position);
|
||||||
void restoreSettings(QSettings *settings, int position);
|
void restoreSettings(QSettings *settings, int position);
|
||||||
@@ -55,6 +56,7 @@ private:
|
|||||||
QWidget *dummyWidget() const;
|
QWidget *dummyWidget() const;
|
||||||
void updateFilterMenu();
|
void updateFilterMenu();
|
||||||
void toggleCursorSynchronization();
|
void toggleCursorSynchronization();
|
||||||
|
void toggleSort();
|
||||||
void updateEditor(Core::IEditor *editor);
|
void updateEditor(Core::IEditor *editor);
|
||||||
void updateCurrentEditor();
|
void updateCurrentEditor();
|
||||||
|
|
||||||
@@ -62,9 +64,11 @@ private:
|
|||||||
OutlineFactory *m_factory;
|
OutlineFactory *m_factory;
|
||||||
QToolButton *m_toggleSync;
|
QToolButton *m_toggleSync;
|
||||||
QToolButton *m_filterButton;
|
QToolButton *m_filterButton;
|
||||||
|
QToolButton *m_toggleSort;
|
||||||
QMenu *m_filterMenu;
|
QMenu *m_filterMenu;
|
||||||
QVariantMap m_widgetSettings;
|
QVariantMap m_widgetSettings;
|
||||||
bool m_syncWithEditor;
|
bool m_syncWithEditor;
|
||||||
|
bool m_sorted;
|
||||||
};
|
};
|
||||||
|
|
||||||
class OutlineFactory : public Core::INavigationWidgetFactory
|
class OutlineFactory : public Core::INavigationWidgetFactory
|
||||||
|
Reference in New Issue
Block a user