forked from qt-creator/qt-creator
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:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user