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);
QWidget *rightSplitWidget = new QWidget;
rightSplitWidget->setLayout(m_rightSplitWidgetLayout);
auto editorPlaceHolder = new EditorManagerPlaceHolder(Constants::MODE_EDIT);
auto editorPlaceHolder = new EditorManagerPlaceHolder;
m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder);
MiniSplitter *rightPaneSplitter = new MiniSplitter;

View File

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

View File

@@ -72,13 +72,11 @@ class CORE_EXPORT EditorManagerPlaceHolder : public QWidget
{
Q_OBJECT
public:
explicit EditorManagerPlaceHolder(Id mode, QWidget *parent = 0);
explicit EditorManagerPlaceHolder(QWidget *parent = 0);
~EditorManagerPlaceHolder();
private:
void currentModeChanged(Id mode);
Id m_mode;
protected:
void showEvent(QShowEvent *event) override;
};
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)
{
if (!central)
central = new EditorManagerPlaceHolder(mode);
central = new EditorManagerPlaceHolder;
auto editorHolderLayout = new QVBoxLayout;
editorHolderLayout->setMargin(0);