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 <QWidget>
#include <QIcon> #include <QIcon>
namespace Core { namespace Core::Internal {
namespace Internal {
EditMode::EditMode() : class EditModeWidget final : public MiniSplitter
m_splitter(new MiniSplitter), {
m_rightSplitWidgetLayout(new QVBoxLayout) 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; 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; auto rightPaneSplitter = new MiniSplitter;
rightPaneSplitter->insertWidget(0, rightSplitWidget); rightPaneSplitter->insertWidget(0, rightSplitWidget);
@@ -55,26 +49,38 @@ EditMode::EditMode() :
splitter->setStretchFactor(0, 3); splitter->setStretchFactor(0, 3);
splitter->setStretchFactor(1, 0); splitter->setStretchFactor(1, 0);
m_splitter->insertWidget(0, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Left)); insertWidget(0, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Left));
m_splitter->insertWidget(1, splitter); insertWidget(1, splitter);
m_splitter->insertWidget(2, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Right)); insertWidget(2, new NavigationWidgetPlaceHolder(Constants::MODE_EDIT, Side::Right));
m_splitter->setStretchFactor(0, 0); setStretchFactor(0, 0);
m_splitter->setStretchFactor(1, 1); setStretchFactor(1, 1);
m_splitter->setStretchFactor(2, 0); 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, connect(ModeManager::instance(), &ModeManager::currentModeChanged,
this, &EditMode::grabEditorManager); this, &EditMode::grabEditorManager);
m_splitter->setFocusProxy(editorPlaceHolder);
IContext::attach(m_splitter, Context(Constants::C_EDITORMANAGER)); setWidget(new EditModeWidget);
setWidget(m_splitter);
setContext(Context(Constants::C_EDIT_MODE, Constants::C_NAVIGATION_PANE)); setContext(Context(Constants::C_EDIT_MODE, Constants::C_NAVIGATION_PANE));
} }
EditMode::~EditMode() EditMode::~EditMode()
{ {
delete m_splitter; delete widget();
} }
void EditMode::grabEditorManager(Utils::Id mode) void EditMode::grabEditorManager(Utils::Id mode)
@@ -86,5 +92,4 @@ void EditMode::grabEditorManager(Utils::Id mode)
EditorManager::currentEditor()->widget()->setFocus(); EditorManager::currentEditor()->widget()->setFocus();
} }
} // namespace Internal } // namespace Core::Internal
} // namespace Core

View File

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