Core: Create an EditModeWidget class

A step towards having delayed mode widget construction.

Change-Id: I1d400e058d17aaebfc784000d8b2705debea6a51
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2024-07-08 09:48:17 +02:00
parent 0405801f17
commit 6c7a7db87b
2 changed files with 50 additions and 60 deletions

View File

@@ -19,26 +19,20 @@
#include <QWidget>
#include <QIcon>
namespace Core {
namespace Internal {
namespace Core::Internal {
EditMode::EditMode() :
m_splitter(new MiniSplitter),
m_rightSplitWidgetLayout(new QVBoxLayout)
class EditModeWidget final : public MiniSplitter
{
public:
EditModeWidget()
{
setObjectName(QLatin1String("EditMode"));
setDisplayName(Tr::tr("Edit"));
setIcon(Utils::Icon::modeIcon(Icons::MODE_EDIT_CLASSIC,
Icons::MODE_EDIT_FLAT, Icons::MODE_EDIT_FLAT_ACTIVE));
setPriority(Constants::P_MODE_EDIT);
setId(Constants::MODE_EDIT);
m_rightSplitWidgetLayout->setSpacing(0);
m_rightSplitWidgetLayout->setContentsMargins(0, 0, 0, 0);
QWidget *rightSplitWidget = new QWidget;
rightSplitWidget->setLayout(m_rightSplitWidgetLayout);
auto editorPlaceHolder = new EditorManagerPlaceHolder;
m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder);
QWidget *rightSplitWidget = new QWidget;
auto rightSplitWidgetLayout = new QVBoxLayout(rightSplitWidget);
rightSplitWidgetLayout->setSpacing(0);
rightSplitWidgetLayout->setContentsMargins(0, 0, 0, 0);
rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder);
auto rightPaneSplitter = new MiniSplitter;
rightPaneSplitter->insertWidget(0, rightSplitWidget);
@@ -55,26 +49,38 @@ EditMode::EditMode() :
splitter->setStretchFactor(0, 3);
splitter->setStretchFactor(1, 0);
m_splitter->insertWidget(0, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Left));
m_splitter->insertWidget(1, splitter);
m_splitter->insertWidget(2, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Right));
m_splitter->setStretchFactor(0, 0);
m_splitter->setStretchFactor(1, 1);
m_splitter->setStretchFactor(2, 0);
insertWidget(0, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Left));
insertWidget(1, splitter);
insertWidget(2, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Right));
setStretchFactor(0, 0);
setStretchFactor(1, 1);
setStretchFactor(2, 0);
setFocusProxy(editorPlaceHolder);
IContext::attach(this, Context(Constants::C_EDITORMANAGER));
}
};
EditMode::EditMode()
{
setObjectName(QLatin1String("EditMode"));
setDisplayName(Tr::tr("Edit"));
setIcon(Utils::Icon::modeIcon(Icons::MODE_EDIT_CLASSIC,
Icons::MODE_EDIT_FLAT, Icons::MODE_EDIT_FLAT_ACTIVE));
setPriority(Constants::P_MODE_EDIT);
setId(Constants::MODE_EDIT);
connect(ModeManager::instance(), &ModeManager::currentModeChanged,
this, &EditMode::grabEditorManager);
m_splitter->setFocusProxy(editorPlaceHolder);
IContext::attach(m_splitter, Context(Constants::C_EDITORMANAGER));
setWidget(m_splitter);
setWidget(new EditModeWidget);
setContext(Context(Constants::C_EDIT_MODE, Constants::C_NAVIGATION_PANE));
}
EditMode::~EditMode()
{
delete m_splitter;
delete widget();
}
void EditMode::grabEditorManager(Utils::Id mode)
@@ -86,5 +92,4 @@ void EditMode::grabEditorManager(Utils::Id mode)
EditorManager::currentEditor()->widget()->setFocus();
}
} // namespace Internal
} // namespace Core
} // namespace Core::Internal

View File

@@ -5,31 +5,16 @@
#include "imode.h"
QT_BEGIN_NAMESPACE
class QSplitter;
class QVBoxLayout;
QT_END_NAMESPACE
namespace Core::Internal {
namespace Core {
class EditorManager;
namespace Internal {
class EditMode : public IMode
class EditMode final : public IMode
{
Q_OBJECT
public:
EditMode();
~EditMode() override;
~EditMode() final;
private:
void grabEditorManager(Utils::Id mode);
QSplitter *m_splitter;
QVBoxLayout *m_rightSplitWidgetLayout;
};
} // namespace Internal
} // namespace Core
} // namespace Core::Internal