BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ColumnResizer Class Reference

The ColumnResizer class provides vertically aligned widgets from diferent layouts. More...

Inheritance diagram for ColumnResizer:
[legend]
Collaboration diagram for ColumnResizer:
[legend]

Public Slots

void updateWidth ()
 

Public Member Functions

 ColumnResizer (QObject *parent=0)
 
virtual ~ColumnResizer ()
 
void addWidget (QWidget *widget)
 
void addWidgetsFromFormLayout (QFormLayout *, QFormLayout::ItemRole role)
 
void addWidgetsFromGridLayout (QGridLayout *, int column)
 
void addWidgetsFromLayout (QLayout *, int column)
 
void dropWidgetsFromGridLayout (QGridLayout *layout)
 

Protected Member Functions

virtual bool eventFilter (QObject *, QEvent *event)
 
void removeWidget (QWidget *widget)
 

Private Attributes

ColumnResizerPrivate *const d
 

Detailed Description

The ColumnResizer class provides vertically aligned widgets from diferent layouts.

Definition at line 37 of file ColumnResizer.h.

Constructor & Destructor Documentation

◆ ColumnResizer()

ColumnResizer::ColumnResizer ( QObject *  parent = 0)

Definition at line 117 of file ColumnResizer.cpp.

117  : QObject(parent), d(new ColumnResizerPrivate(this))
118 {
119 }
ColumnResizerPrivate *const d
Definition: ColumnResizer.h:58

◆ ~ColumnResizer()

ColumnResizer::~ColumnResizer ( )
virtual

Definition at line 121 of file ColumnResizer.cpp.

122 {
123  delete d;
124 }

References d.

Member Function Documentation

◆ addWidget()

void ColumnResizer::addWidget ( QWidget *  widget)

Definition at line 126 of file ColumnResizer.cpp.

127 {
128  d->m_widgets.append(widget);
129  widget->installEventFilter(this);
131 }
QList< QWidget * > m_widgets

References d, ColumnResizerPrivate::m_widgets, and ColumnResizerPrivate::scheduleWidthUpdate().

Referenced by addWidgetsFromFormLayout(), and addWidgetsFromGridLayout().

Here is the call graph for this function:

◆ addWidgetsFromFormLayout()

void ColumnResizer::addWidgetsFromFormLayout ( QFormLayout *  layout,
QFormLayout::ItemRole  role 
)

Definition at line 202 of file ColumnResizer.cpp.

203 {
204  for (int row = 0; row < layout->rowCount(); ++row) {
205  QLayoutItem* item = layout->itemAt(row, role);
206  if (!item) {
207  continue;
208  }
209  QWidget* widget = item->widget();
210  if (!widget) {
211  continue;
212  }
213  layout->removeItem(item);
214  delete item;
215  FormLayoutWidgetItem* newItem = new FormLayoutWidgetItem(widget, layout, role);
216  layout->setItem(row, role, newItem);
217  addWidget(widget);
218  d->m_wrWidgetItemList << newItem;
219  }
220 }
QList< FormLayoutWidgetItem * > m_wrWidgetItemList
void addWidget(QWidget *widget)

References addWidget(), d, and ColumnResizerPrivate::m_wrWidgetItemList.

Referenced by addWidgetsFromLayout().

Here is the call graph for this function:

◆ addWidgetsFromGridLayout()

void ColumnResizer::addWidgetsFromGridLayout ( QGridLayout *  layout,
int  column 
)

Definition at line 186 of file ColumnResizer.cpp.

187 {
188  for (int row = 0; row < layout->rowCount(); ++row) {
189  QLayoutItem* item = layout->itemAtPosition(row, column);
190  if (!item) {
191  continue;
192  }
193  QWidget* widget = item->widget();
194  if (!widget) {
195  continue;
196  }
197  addWidget(widget);
198  }
199  d->m_gridColumnInfoList << GridColumnInfo(layout, column);
200 }
QPair< QGridLayout *, int > GridColumnInfo
QList< GridColumnInfo > m_gridColumnInfoList

References addWidget(), d, and ColumnResizerPrivate::m_gridColumnInfoList.

Referenced by EnvironmentEditor::EnvironmentEditor(), GISASBeamEditor::GISASBeamEditor(), OffSpecularBeamEditor::OffSpecularBeamEditor(), PolarizationAnalysisEditor::PolarizationAnalysisEditor(), SpecularBeamEditor::SpecularBeamEditor(), and addWidgetsFromLayout().

Here is the call graph for this function:

◆ addWidgetsFromLayout()

void ColumnResizer::addWidgetsFromLayout ( QLayout *  layout,
int  column 
)

Definition at line 166 of file ColumnResizer.cpp.

167 {
168  ASSERT(column >= 0);
169  QGridLayout* gridLayout = qobject_cast<QGridLayout*>(layout);
170  QFormLayout* formLayout = qobject_cast<QFormLayout*>(layout);
171  if (gridLayout) {
172  addWidgetsFromGridLayout(gridLayout, column);
173  } else if (formLayout) {
174  if (column > QFormLayout::SpanningRole) {
175  qCritical() << "column should not be more than" << QFormLayout::SpanningRole
176  << "for QFormLayout";
177  return;
178  }
179  QFormLayout::ItemRole role = static_cast<QFormLayout::ItemRole>(column);
180  addWidgetsFromFormLayout(formLayout, role);
181  } else {
182  qCritical() << "Don't know how to handle layout" << layout;
183  }
184 }
#define ASSERT(condition)
Definition: Assert.h:31
void addWidgetsFromGridLayout(QGridLayout *, int column)
void addWidgetsFromFormLayout(QFormLayout *, QFormLayout::ItemRole role)

References addWidgetsFromFormLayout(), addWidgetsFromGridLayout(), and ASSERT.

Here is the call graph for this function:

◆ dropWidgetsFromGridLayout()

void ColumnResizer::dropWidgetsFromGridLayout ( QGridLayout *  layout)

Definition at line 222 of file ColumnResizer.cpp.

223 {
224  // d->block_update = true;
225  // removing all widgets from being supervised
226  for (int row = 0; row < layout->rowCount(); ++row) {
227  for (int column = 0; column < layout->columnCount(); ++column) {
228  QLayoutItem* item = layout->itemAtPosition(row, column);
229  if (!item) {
230  continue;
231  }
232  QWidget* widget = item->widget();
233  if (!widget) {
234  continue;
235  }
236  removeWidget(widget);
237  }
238  }
239 
240  // removing their layout
241  QMutableListIterator<GridColumnInfo> it(d->m_gridColumnInfoList);
242  while (it.hasNext()) {
243  GridColumnInfo ci = it.next();
244  if (ci.first == layout) {
245  it.remove();
246  }
247  }
248 
249  // d->block_update = false;
250  // d->scheduleWidthUpdate();
251 }
void removeWidget(QWidget *widget)

References d, ColumnResizerPrivate::m_gridColumnInfoList, and removeWidget().

Here is the call graph for this function:

◆ eventFilter()

bool ColumnResizer::eventFilter ( QObject *  ,
QEvent *  event 
)
protectedvirtual

Definition at line 158 of file ColumnResizer.cpp.

159 {
160  if (event->type() == QEvent::Resize) {
162  }
163  return false;
164 }

References d, and ColumnResizerPrivate::scheduleWidthUpdate().

Here is the call graph for this function:

◆ removeWidget()

void ColumnResizer::removeWidget ( QWidget *  widget)
protected

Definition at line 150 of file ColumnResizer.cpp.

151 {
152  if (d->m_widgets.contains(widget)) {
153  d->m_widgets.removeAll(widget);
154  widget->removeEventFilter(this);
155  }
156 }

References d, and ColumnResizerPrivate::m_widgets.

Referenced by dropWidgetsFromGridLayout().

◆ updateWidth

void ColumnResizer::updateWidth ( )
slot

Definition at line 133 of file ColumnResizer.cpp.

134 {
135  if (d->block_update)
136  return;
137  int width = 0;
138  for (auto widget : d->m_widgets) {
139  width = qMax(widget->sizeHint().width(), width);
140  }
141  for (auto item : d->m_wrWidgetItemList) {
142  item->setWidth(width);
143  item->formLayout()->update();
144  }
145  for (auto info : d->m_gridColumnInfoList) {
146  info.first->setColumnMinimumWidth(info.second, width);
147  }
148 }

References ColumnResizerPrivate::block_update, d, ColumnResizerPrivate::m_gridColumnInfoList, ColumnResizerPrivate::m_widgets, and ColumnResizerPrivate::m_wrWidgetItemList.

Referenced by ColumnResizerPrivate::ColumnResizerPrivate().

Member Data Documentation

◆ d


The documentation for this class was generated from the following files: