forked from qt-creator/qt-creator
introduce new helper class Core::Utils::TreeWidgetColumnStretcher
and use it for some options dialogs. The class fixes QTreeWidget to resize all columns to contents, except one stretching column. As opposed to standard QTreeWidget, all columns are still interactively resizable.
This commit is contained in:
36
src/libs/utils/treewidgetcolumnstretcher.cpp
Normal file
36
src/libs/utils/treewidgetcolumnstretcher.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#include "treewidgetcolumnstretcher.h"
|
||||
#include <QtGui/QTreeWidget>
|
||||
#include <QtGui/QHideEvent>
|
||||
#include <QtGui/QHeaderView>
|
||||
using namespace Core::Utils;
|
||||
|
||||
TreeWidgetColumnStretcher::TreeWidgetColumnStretcher(QTreeWidget *treeWidget, int columnToStretch)
|
||||
: QObject(treeWidget->header()), m_columnToStretch(columnToStretch)
|
||||
{
|
||||
parent()->installEventFilter(this);
|
||||
QHideEvent fake;
|
||||
TreeWidgetColumnStretcher::eventFilter(parent(), &fake);
|
||||
}
|
||||
|
||||
bool TreeWidgetColumnStretcher::eventFilter(QObject *obj, QEvent *ev)
|
||||
{
|
||||
if (obj == parent()) {
|
||||
if (ev->type() == QEvent::Show) {
|
||||
QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
|
||||
for (int i = 0; i < hv->count(); ++i)
|
||||
hv->setResizeMode(i, QHeaderView::Interactive);
|
||||
} else if (ev->type() == QEvent::Hide) {
|
||||
QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
|
||||
for (int i = 0; i < hv->count(); ++i)
|
||||
hv->setResizeMode(i, i == m_columnToStretch ? QHeaderView::Stretch : QHeaderView::ResizeToContents);
|
||||
} else if (ev->type() == QEvent::Resize) {
|
||||
QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
|
||||
if (hv->resizeMode(m_columnToStretch) == QHeaderView::Interactive) {
|
||||
QResizeEvent *re = static_cast<QResizeEvent*>(ev);
|
||||
int diff = re->size().width() - re->oldSize().width() ;
|
||||
hv->resizeSection(m_columnToStretch, qMax(32, hv->sectionSize(1) + diff));
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user