EditorManagerPlaceHolder: Don't restrict to one per mode

Make visibility the deciding factor which placeholder takes the main
editor area. A mode can have multiple placeholders as long as only a
single one is visible at a time.

Change-Id: I80b86dcb9e31b29f87fe42a465a3d3ad49eeef17
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Eike Ziller
2016-04-26 14:41:38 +02:00
committed by Eike Ziller
parent 6f3e4e8635
commit 4eab11262c
4 changed files with 16 additions and 24 deletions

View File

@@ -58,7 +58,7 @@ EditMode::EditMode() :
m_rightSplitWidgetLayout->setMargin(0); m_rightSplitWidgetLayout->setMargin(0);
QWidget *rightSplitWidget = new QWidget; QWidget *rightSplitWidget = new QWidget;
rightSplitWidget->setLayout(m_rightSplitWidgetLayout); rightSplitWidget->setLayout(m_rightSplitWidgetLayout);
auto editorPlaceHolder = new EditorManagerPlaceHolder(Constants::MODE_EDIT); auto editorPlaceHolder = new EditorManagerPlaceHolder;
m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder); m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder);
MiniSplitter *rightPaneSplitter = new MiniSplitter; MiniSplitter *rightPaneSplitter = new MiniSplitter;

View File

@@ -121,16 +121,12 @@ using namespace Utils;
//===================EditorManager===================== //===================EditorManager=====================
EditorManagerPlaceHolder::EditorManagerPlaceHolder(Id mode, QWidget *parent) EditorManagerPlaceHolder::EditorManagerPlaceHolder(QWidget *parent)
: QWidget(parent), m_mode(mode) : QWidget(parent)
{ {
setLayout(new QVBoxLayout); setLayout(new QVBoxLayout);
layout()->setMargin(0); layout()->setMargin(0);
setFocusProxy(EditorManagerPrivate::mainEditorArea()); setFocusProxy(EditorManagerPrivate::mainEditorArea());
connect(ModeManager::instance(), &ModeManager::currentModeChanged,
this, &EditorManagerPlaceHolder::currentModeChanged);
currentModeChanged(ModeManager::currentMode());
} }
EditorManagerPlaceHolder::~EditorManagerPlaceHolder() EditorManagerPlaceHolder::~EditorManagerPlaceHolder()
@@ -143,9 +139,8 @@ EditorManagerPlaceHolder::~EditorManagerPlaceHolder()
} }
} }
void EditorManagerPlaceHolder::currentModeChanged(Id mode) void EditorManagerPlaceHolder::showEvent(QShowEvent *)
{ {
if (m_mode == mode) {
QWidget *previousFocus = 0; QWidget *previousFocus = 0;
QWidget *em = EditorManagerPrivate::mainEditorArea(); QWidget *em = EditorManagerPrivate::mainEditorArea();
if (em->focusWidget() && em->focusWidget()->hasFocus()) if (em->focusWidget() && em->focusWidget()->hasFocus())
@@ -154,7 +149,6 @@ void EditorManagerPlaceHolder::currentModeChanged(Id mode)
em->show(); em->show();
if (previousFocus) if (previousFocus)
previousFocus->setFocus(); previousFocus->setFocus();
}
} }
// ---------------- EditorManager // ---------------- EditorManager

View File

@@ -72,13 +72,11 @@ class CORE_EXPORT EditorManagerPlaceHolder : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit EditorManagerPlaceHolder(Id mode, QWidget *parent = 0); explicit EditorManagerPlaceHolder(QWidget *parent = 0);
~EditorManagerPlaceHolder(); ~EditorManagerPlaceHolder();
private: protected:
void currentModeChanged(Id mode); void showEvent(QShowEvent *event) override;
Id m_mode;
}; };
class CORE_EXPORT EditorManager : public QObject class CORE_EXPORT EditorManager : public QObject

View File

@@ -205,7 +205,7 @@ void DebuggerMainWindow::finalizeSetup()
QWidget *createModeWindow(const Core::Id &mode, DebuggerMainWindow *mainWindow, QWidget *central) QWidget *createModeWindow(const Core::Id &mode, DebuggerMainWindow *mainWindow, QWidget *central)
{ {
if (!central) if (!central)
central = new EditorManagerPlaceHolder(mode); central = new EditorManagerPlaceHolder;
auto editorHolderLayout = new QVBoxLayout; auto editorHolderLayout = new QVBoxLayout;
editorHolderLayout->setMargin(0); editorHolderLayout->setMargin(0);