mirror of
https://github.com/OPM/ResInsight.git
synced 2026-09-03 20:53:13 -05:00
Rework caf Layout to work better when number of columns isn't fully specified
This commit is contained in:
@@ -311,35 +311,105 @@ const std::vector<PdmUiOrdering::FieldAndLayout>& PdmUiOrdering::uiItemsWithLayo
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int PdmUiOrdering::nrOfColumns() const
|
||||
PdmUiOrdering::TableLayout PdmUiOrdering::calculateTableLayout(const QString& uiConfigName) const
|
||||
{
|
||||
int maxColumns = 0;
|
||||
int currentRowColumns = 0;
|
||||
for (const FieldAndLayout& itemAndLayout : m_ordering)
|
||||
{
|
||||
int currentColumnSpan = itemAndLayout.second.totalColumnSpan;
|
||||
if (currentColumnSpan == LayoutOptions::MAX_COLUMN_SPAN)
|
||||
{
|
||||
int minimumFieldColumnSpan = 1;
|
||||
int minimumLabelColumnSpan = 0;
|
||||
if (itemAndLayout.first->uiLabelPosition() == PdmUiItemInfo::LEFT)
|
||||
{
|
||||
minimumLabelColumnSpan = 1;
|
||||
}
|
||||
currentColumnSpan = minimumLabelColumnSpan + minimumFieldColumnSpan;
|
||||
}
|
||||
TableLayout tableLayout;
|
||||
|
||||
if (itemAndLayout.second.newRow)
|
||||
for (size_t i = 0; i < m_ordering.size(); ++i)
|
||||
{
|
||||
if (m_ordering[i].first->isUiHidden(uiConfigName)) continue;
|
||||
|
||||
if (m_ordering[i].second.newRow || i == 0u)
|
||||
{
|
||||
currentRowColumns = currentColumnSpan;
|
||||
tableLayout.push_back(RowLayout());
|
||||
}
|
||||
else
|
||||
{
|
||||
currentRowColumns += currentColumnSpan;
|
||||
}
|
||||
maxColumns = std::max(maxColumns, currentRowColumns);
|
||||
tableLayout.back().push_back(m_ordering[i]);
|
||||
}
|
||||
return tableLayout;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int PdmUiOrdering::nrOfColumns(const TableLayout& tableLayout) const
|
||||
{
|
||||
int maxNrOfColumns = 0;
|
||||
|
||||
for (const auto& rowContent : tableLayout)
|
||||
{
|
||||
maxNrOfColumns = std::max(maxNrOfColumns, nrOfRequiredColumnsInRow(rowContent));
|
||||
}
|
||||
|
||||
return maxNrOfColumns;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int PdmUiOrdering::nrOfRequiredColumnsInRow(const RowLayout& rowItems) const
|
||||
{
|
||||
int totalColumns = 0;
|
||||
for (const FieldAndLayout& item : rowItems)
|
||||
{
|
||||
int totalItemColumns = 0, labelItemColumns = 0, fieldItemColumns = 0;
|
||||
nrOfColumnsRequiredForItem(item, &totalItemColumns, &labelItemColumns, &fieldItemColumns);
|
||||
totalColumns += totalItemColumns;
|
||||
}
|
||||
return totalColumns;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int PdmUiOrdering::nrOfExpandingItemsInRow(const RowLayout& rowItems) const
|
||||
{
|
||||
int nrOfExpandingItems = 0;
|
||||
for (const FieldAndLayout& item : rowItems)
|
||||
{
|
||||
if (item.second.totalColumnSpan == LayoutOptions::MAX_COLUMN_SPAN)
|
||||
nrOfExpandingItems++;
|
||||
}
|
||||
return nrOfExpandingItems;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void PdmUiOrdering::nrOfColumnsRequiredForItem(const FieldAndLayout& fieldAndLayout,
|
||||
int* totalColumnsRequired,
|
||||
int* labelColumnsRequired,
|
||||
int* fieldColumnsRequired) const
|
||||
{
|
||||
const PdmUiItem* uiItem = fieldAndLayout.first;
|
||||
CAF_ASSERT(uiItem && totalColumnsRequired && labelColumnsRequired && fieldColumnsRequired);
|
||||
|
||||
LayoutOptions layoutOption = fieldAndLayout.second;
|
||||
|
||||
if (uiItem->isUiGroup())
|
||||
{
|
||||
*totalColumnsRequired = 1;
|
||||
*labelColumnsRequired = 0;
|
||||
*fieldColumnsRequired = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*fieldColumnsRequired = 1;
|
||||
*labelColumnsRequired = 0;
|
||||
if (uiItem->uiLabelPosition() == PdmUiItemInfo::LEFT)
|
||||
{
|
||||
*labelColumnsRequired = 1;
|
||||
if (layoutOption.leftLabelColumnSpan != LayoutOptions::MAX_COLUMN_SPAN)
|
||||
{
|
||||
*labelColumnsRequired = layoutOption.leftLabelColumnSpan;
|
||||
}
|
||||
}
|
||||
*totalColumnsRequired = *labelColumnsRequired + *fieldColumnsRequired;
|
||||
}
|
||||
|
||||
if (layoutOption.totalColumnSpan != LayoutOptions::MAX_COLUMN_SPAN)
|
||||
{
|
||||
*totalColumnsRequired = layoutOption.totalColumnSpan;
|
||||
}
|
||||
return maxColumns;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -67,6 +67,8 @@ public:
|
||||
int leftLabelColumnSpan;
|
||||
};
|
||||
typedef std::pair<PdmUiItem*, LayoutOptions> FieldAndLayout;
|
||||
typedef std::vector<FieldAndLayout> RowLayout;
|
||||
typedef std::vector<RowLayout> TableLayout;
|
||||
|
||||
PdmUiOrdering(): m_skipRemainingFields(false) { };
|
||||
virtual ~PdmUiOrdering();
|
||||
@@ -92,10 +94,18 @@ public:
|
||||
void skipRemainingFields(bool doSkip = true);
|
||||
|
||||
// Pdm internal methods
|
||||
|
||||
const std::vector<PdmUiItem*> uiItems() const;
|
||||
const std::vector<FieldAndLayout>& uiItemsWithLayout() const;
|
||||
|
||||
const std::vector<PdmUiItem*> uiItems() const;
|
||||
const std::vector<FieldAndLayout>& uiItemsWithLayout() const;
|
||||
int nrOfColumns() const;
|
||||
std::vector<std::vector<FieldAndLayout>> calculateTableLayout(const QString& uiConfigName) const;
|
||||
int nrOfColumns(const TableLayout& tableLayout) const;
|
||||
int nrOfRequiredColumnsInRow(const RowLayout& rowItems) const;
|
||||
int nrOfExpandingItemsInRow(const RowLayout& rowItems) const;
|
||||
void nrOfColumnsRequiredForItem(const FieldAndLayout& fieldAndLayout,
|
||||
int* totalColumnsRequired,
|
||||
int* labelColumnsRequired,
|
||||
int* fieldColumnsRequired) const;
|
||||
bool contains(const PdmUiItem* item) const;
|
||||
bool isIncludingRemainingFields() const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user