mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 01:20:42 +00:00
Add ability to specify an area percentage in ToolWindowManager
This commit is contained in:
+36
-2
@@ -163,8 +163,12 @@ void ToolWindowManager::moveToolWindows(QList<QWidget *> toolWindows,
|
||||
}
|
||||
bool useParentSplitter = false;
|
||||
int indexInParentSplitter = 0;
|
||||
QList<QRect> parentSplitterGeometries;
|
||||
if (parentSplitter) {
|
||||
indexInParentSplitter = parentSplitter->indexOf(area.widget());
|
||||
for(int i = 0; i < parentSplitter->count(); i++) {
|
||||
parentSplitterGeometries.push_back(parentSplitter->widget(i)->geometry());
|
||||
}
|
||||
if (parentSplitter->orientation() == Qt::Vertical) {
|
||||
useParentSplitter = area.type() == TopOf || area.type() == BottomOf;
|
||||
} else {
|
||||
@@ -187,20 +191,49 @@ void ToolWindowManager::moveToolWindows(QList<QWidget *> toolWindows,
|
||||
} else {
|
||||
splitter->setOrientation(Qt::Horizontal);
|
||||
}
|
||||
|
||||
ToolWindowManagerArea* newArea = createArea();
|
||||
|
||||
// inherit the size policy from the widget we are wrapping
|
||||
splitter->setSizePolicy(area.widget()->sizePolicy());
|
||||
|
||||
// store old geometries so we can restore them
|
||||
QRect areaGeometry = area.widget()->geometry();
|
||||
QRect newGeometry = newArea->geometry();
|
||||
|
||||
splitter->addWidget(area.widget());
|
||||
area.widget()->show();
|
||||
ToolWindowManagerArea* newArea = createArea();
|
||||
|
||||
int indexInSplitter = 0;
|
||||
|
||||
if (area.type() == TopOf || area.type() == LeftOf) {
|
||||
splitter->insertWidget(0, newArea);
|
||||
indexInSplitter = 0;
|
||||
} else {
|
||||
splitter->addWidget(newArea);
|
||||
indexInSplitter = 1;
|
||||
}
|
||||
|
||||
// Convert area percentage desired to a stretch factor.
|
||||
const int totalStretch = 100;
|
||||
int pct = int(totalStretch*area.percentage());
|
||||
splitter->setStretchFactor(indexInSplitter, pct);
|
||||
splitter->setStretchFactor(1-indexInSplitter, totalStretch-pct);
|
||||
|
||||
if (parentSplitter) {
|
||||
parentSplitter->insertWidget(indexInParentSplitter, splitter);
|
||||
|
||||
for(int i = 0; i < qMin(parentSplitter->count(), parentSplitterGeometries.count()); i++) {
|
||||
parentSplitter->widget(i)->setGeometry(parentSplitterGeometries[i]);
|
||||
}
|
||||
} else {
|
||||
wrapper->layout()->addWidget(splitter);
|
||||
}
|
||||
|
||||
newArea->addToolWindows(toolWindows);
|
||||
|
||||
area.widget()->setGeometry(areaGeometry);
|
||||
newArea->setGeometry(newGeometry);
|
||||
}
|
||||
} else if (area.type() == EmptySpace) {
|
||||
ToolWindowManagerArea* newArea = createArea();
|
||||
@@ -709,8 +742,9 @@ QSplitter *ToolWindowManager::createSplitter() {
|
||||
return splitter;
|
||||
}
|
||||
|
||||
ToolWindowManager::AreaReference::AreaReference(ToolWindowManager::AreaReferenceType type, ToolWindowManagerArea *area) {
|
||||
ToolWindowManager::AreaReference::AreaReference(ToolWindowManager::AreaReferenceType type, ToolWindowManagerArea *area, float percentage) {
|
||||
m_type = type;
|
||||
m_percentage = percentage;
|
||||
setWidget(area);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ public:
|
||||
* Creates an area reference of the given \a type. If \a type requires specifying
|
||||
* area, it should be given in \a area argument. Otherwise \a area should have default value (0).
|
||||
*/
|
||||
AreaReference(AreaReferenceType type = NoArea, ToolWindowManagerArea* area = 0);
|
||||
AreaReference(AreaReferenceType type = NoArea, ToolWindowManagerArea* area = 0, float percentage = 0.5f);
|
||||
//! Returns type of the reference.
|
||||
AreaReferenceType type() const { return m_type; }
|
||||
//! Returns area of the reference, or 0 if it was not specified.
|
||||
@@ -153,7 +153,9 @@ public:
|
||||
private:
|
||||
AreaReferenceType m_type;
|
||||
QWidget* m_widget;
|
||||
float m_percentage;
|
||||
QWidget* widget() const { return m_widget; }
|
||||
float percentage() const { return m_percentage; }
|
||||
AreaReference(AreaReferenceType type, QWidget* widget);
|
||||
void setWidget(QWidget* widget);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user