diff --git a/src/libs/utils/treewidgetcolumnstretcher.cpp b/src/libs/utils/treewidgetcolumnstretcher.cpp new file mode 100644 index 00000000000..d33c04ac4ea --- /dev/null +++ b/src/libs/utils/treewidgetcolumnstretcher.cpp @@ -0,0 +1,36 @@ +#include "treewidgetcolumnstretcher.h" +#include +#include +#include +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(obj); + for (int i = 0; i < hv->count(); ++i) + hv->setResizeMode(i, QHeaderView::Interactive); + } else if (ev->type() == QEvent::Hide) { + QHeaderView *hv = qobject_cast(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(obj); + if (hv->resizeMode(m_columnToStretch) == QHeaderView::Interactive) { + QResizeEvent *re = static_cast(ev); + int diff = re->size().width() - re->oldSize().width() ; + hv->resizeSection(m_columnToStretch, qMax(32, hv->sectionSize(1) + diff)); + } + } + } + return false; +} diff --git a/src/libs/utils/treewidgetcolumnstretcher.h b/src/libs/utils/treewidgetcolumnstretcher.h new file mode 100644 index 00000000000..890f460289e --- /dev/null +++ b/src/libs/utils/treewidgetcolumnstretcher.h @@ -0,0 +1,63 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +**************************************************************************/ + +#ifndef TREEWIDGETCOLUMNSTRETCHER_H +#define TREEWIDGETCOLUMNSTRETCHER_H + +#include "utils_global.h" +#include + +QT_BEGIN_NAMESPACE +class QTreeWidget; +QT_END_NAMESPACE + +namespace Core { +namespace Utils { + +/* + +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. + +*/ + +class QTCREATOR_UTILS_EXPORT TreeWidgetColumnStretcher : public QObject +{ + int m_columnToStretch; +public: + TreeWidgetColumnStretcher(QTreeWidget *treeWidget, int columnToStretch); + + bool eventFilter(QObject *obj, QEvent *ev); +}; + +} // namespace Utils +} // namespace Core + +#endif // TREEWIDGETCOLUMNSTRETCHER_H diff --git a/src/libs/utils/utils.pro b/src/libs/utils/utils.pro index c1085aac370..a35874026bc 100644 --- a/src/libs/utils/utils.pro +++ b/src/libs/utils/utils.pro @@ -1,13 +1,10 @@ TEMPLATE = lib TARGET = Utils -QT += gui network - +QT += gui \ + network DEFINES += QTCREATOR_UTILS_LIBRARY - include(../../qtcreatorlibrary.pri) - -SOURCES += \ - reloadpromptutils.cpp \ +SOURCES += reloadpromptutils.cpp \ settingsutils.cpp \ filesearch.cpp \ pathchooser.cpp \ @@ -30,19 +27,16 @@ SOURCES += \ submitfieldwidget.cpp \ consoleprocess.cpp \ uncommentselection.cpp \ - parameteraction.cpp - -win32 { + parameteraction.cpp \ + treewidgetcolumnstretcher.cpp +win32 { SOURCES += abstractprocess_win.cpp \ - consoleprocess_win.cpp \ - winutils.cpp + consoleprocess_win.cpp \ + winutils.cpp HEADERS += winutils.h -} else { - SOURCES += consoleprocess_unix.cpp } - -HEADERS += \ - utils_global.h \ +else:SOURCES += consoleprocess_unix.cpp +HEADERS += utils_global.h \ reloadpromptutils.h \ settingsutils.h \ filesearch.h \ @@ -68,11 +62,10 @@ HEADERS += \ synchronousprocess.h \ submitfieldwidget.h \ uncommentselection.h \ - parameteraction.h - + parameteraction.h \ + treewidgetcolumnstretcher.h FORMS += filewizardpage.ui \ - projectintropage.ui \ - newclasswidget.ui \ - submiteditorwidget.ui - + projectintropage.ui \ + newclasswidget.ui \ + submiteditorwidget.ui RESOURCES += utils.qrc diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp index 561b8b182db..a8666becd75 100644 --- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp +++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp @@ -37,6 +37,8 @@ #include "filemanager.h" #include "icore.h" #include "uniqueidmanager.h" +#include + #include #include @@ -111,10 +113,7 @@ QWidget *ShortcutSettings::createPage(QWidget *parent) this, SLOT(commandChanged(QTreeWidgetItem *))); connect(m_page->shortcutEdit, SIGNAL(textChanged(QString)), this, SLOT(keyChanged())); - QHeaderView *hv = m_page->commandList->header(); - hv->resizeSection(0, 210); - hv->resizeSection(1, 110); - hv->setStretchLastSection(true); + new Core::Utils::TreeWidgetColumnStretcher(m_page->commandList, 1); commandChanged(0); diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp index e61904d1df8..b85607e3ea6 100644 --- a/src/plugins/qt4projectmanager/qtoptionspage.cpp +++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp @@ -4,6 +4,7 @@ #include "qt4projectmanagerconstants.h" #include "qtversionmanager.h" #include +#include #include #include @@ -60,6 +61,8 @@ void QtOptionsPage::apply() } //----------------------------------------------------- + + QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList versions, QtVersion *defaultVersion) : QWidget(parent) , m_defaultVersion(versions.indexOf(defaultVersion)) @@ -82,6 +85,8 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList ver m_ui->addButton->setIcon(QIcon(Core::Constants::ICON_PLUS)); m_ui->delButton->setIcon(QIcon(Core::Constants::ICON_MINUS)); + new Core::Utils::TreeWidgetColumnStretcher(m_ui->qtdirList, 1); + for (int i = 0; i < m_versions.count(); ++i) { const QtVersion * const version = m_versions.at(i); QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->qtdirList);