summaryrefslogtreecommitdiff
path: root/src/libs/utils/detailswidget.cpp
diff options
context:
space:
mode:
authorJens Bache-Wiig <jbache@trolltech.com>2010-03-10 19:19:46 +0100
committerJens Bache-Wiig <jbache@trolltech.com>2010-03-11 10:56:20 +0100
commit42ebc6b0f272ab23dd19fc8be30ca6816953db02 (patch)
tree4d41da36cf1b10df7ffa6d34ef8c425218b5c792 /src/libs/utils/detailswidget.cpp
parentf593b0d6850682605b0cfd753051b0aa67ec8acf (diff)
downloadqt-creator-42ebc6b0f272ab23dd19fc8be30ca6816953db02.tar.gz
Redesigned the project settings page
I redesigned the gradient boxes for a more subtle an professional look.
Diffstat (limited to 'src/libs/utils/detailswidget.cpp')
-rw-r--r--src/libs/utils/detailswidget.cpp407
1 files changed, 208 insertions, 199 deletions
diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp
index af1208f70c..5ab766bff5 100644
--- a/src/libs/utils/detailswidget.cpp
+++ b/src/libs/utils/detailswidget.cpp
@@ -40,232 +40,241 @@
namespace Utils {
-static const int MARGIN=8;
-
-// This widget is using a grid layout and places the items
-// in the following way:
-//
-// +------------+-------------------------+---------------+
-// + toolWidget | summaryLabel | detailsButton |
-// +------------+-------------------------+---------------+
-// | | widget |
-// +------------+-------------------------+---------------+
-
-struct DetailsWidgetPrivate {
- DetailsWidgetPrivate();
-
- DetailsButton *m_detailsButton;
- QGridLayout *m_grid;
- QLabel *m_summaryLabel;
- QWidget *m_toolWidget;
- QWidget *m_widget;
-
- QPixmap m_collapsedPixmap;
- QPixmap m_expandedPixmap;
-
- DetailsWidget::State m_state;
- bool m_hovered;
-};
-
-DetailsWidgetPrivate::DetailsWidgetPrivate() :
- m_detailsButton(new DetailsButton),
- m_grid(new QGridLayout),
- m_summaryLabel(new QLabel),
- m_toolWidget(0),
- m_widget(0),
- m_state(DetailsWidget::Collapsed),
- m_hovered(false)
-{
-}
-
-DetailsWidget::DetailsWidget(QWidget *parent) :
- QWidget(parent),
- d(new DetailsWidgetPrivate)
-{
- d->m_summaryLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
- d->m_summaryLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- d->m_summaryLabel->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
-
- d->m_grid->setContentsMargins(0, 0, 0, 0);
- d->m_grid->setSpacing(0);
- d->m_grid->addWidget(d->m_summaryLabel, 0, 1);
- d->m_grid->addWidget(d->m_detailsButton, 0, 2);
- setLayout(d->m_grid);
-
- connect(d->m_detailsButton, SIGNAL(toggled(bool)),
- this, SLOT(setExpanded(bool)));
- updateControls();
-}
-
-DetailsWidget::~DetailsWidget()
-{
- delete d;
-}
-
-void DetailsWidget::paintEvent(QPaintEvent *paintEvent)
-{
- QWidget::paintEvent(paintEvent);
-
- QPainter p(this);
-
- QPoint topLeft(d->m_summaryLabel->geometry().left(), contentsRect().top());
- const QRect paintArea(topLeft, contentsRect().bottomRight());
-
- if (d->m_state != Expanded) {
- if (d->m_collapsedPixmap.isNull() ||
- d->m_collapsedPixmap.size() != size())
- d->m_collapsedPixmap = cacheBackground(paintArea.size(), false);
- p.drawPixmap(paintArea, d->m_collapsedPixmap);
- } else {
- if (d->m_expandedPixmap.isNull() ||
- d->m_expandedPixmap.size() != size())
- d->m_expandedPixmap = cacheBackground(paintArea.size(), true);
- p.drawPixmap(paintArea, d->m_expandedPixmap);
+ static const int MARGIN=8;
+
+ // This widget is using a grid layout and places the items
+ // in the following way:
+ //
+ // +------------+-------------------------+---------------+
+ // + toolWidget | summaryLabel | detailsButton |
+ // +------------+-------------------------+---------------+
+ // | | widget |
+ // +------------+-------------------------+---------------+
+
+ struct DetailsWidgetPrivate {
+ DetailsWidgetPrivate();
+
+ DetailsButton *m_detailsButton;
+ QGridLayout *m_grid;
+ QLabel *m_summaryLabel;
+ QWidget *m_toolWidget;
+ QWidget *m_widget;
+
+ QPixmap m_collapsedPixmap;
+ QPixmap m_expandedPixmap;
+
+ DetailsWidget::State m_state;
+ bool m_hovered;
+ };
+
+ DetailsWidgetPrivate::DetailsWidgetPrivate() :
+ m_detailsButton(new DetailsButton),
+ m_grid(new QGridLayout),
+ m_summaryLabel(new QLabel),
+ m_toolWidget(0),
+ m_widget(0),
+ m_state(DetailsWidget::Collapsed),
+ m_hovered(false)
+ {
}
-}
-
-void DetailsWidget::enterEvent(QEvent * event)
-{
- QWidget::enterEvent(event);
- changeHoverState(true);
-}
-
-void DetailsWidget::leaveEvent(QEvent * event)
-{
- QWidget::leaveEvent(event);
- changeHoverState(false);
-}
-
-void DetailsWidget::setSummaryText(const QString &text)
-{
- d->m_summaryLabel->setText(text);
-}
-
-QString DetailsWidget::summaryText() const
-{
- return d->m_summaryLabel->text();
-}
-
-DetailsWidget::State DetailsWidget::state() const
-{
- return d->m_state;
-}
-
-void DetailsWidget::setState(State state)
-{
- if (state == d->m_state)
- return;
- d->m_state = state;
- updateControls();
-}
-
-void DetailsWidget::setExpanded(bool expanded)
-{
- setState(expanded ? Expanded : Collapsed);
-}
-
-void DetailsWidget::updateControls()
-{
- if (d->m_widget)
- d->m_widget->setVisible(d->m_state == Expanded || d->m_state == NoSummary);
- d->m_detailsButton->setChecked(d->m_state == Expanded && d->m_widget);
- d->m_summaryLabel->setEnabled(d->m_state == Collapsed && d->m_widget);
- d->m_detailsButton->setVisible(d->m_state != NoSummary);
- d->m_summaryLabel->setVisible(d->m_state != NoSummary);
+
+ DetailsWidget::DetailsWidget(QWidget *parent) :
+ QWidget(parent),
+ d(new DetailsWidgetPrivate)
{
- QWidget *w = this;
- while (w) {
- if (w->layout())
- w->layout()->activate();
- if (QScrollArea *area = qobject_cast<QScrollArea*>(w)) {
- QEvent e(QEvent::LayoutRequest);
- QCoreApplication::sendEvent(area, &e);
- }
- w = w->parentWidget();
+ d->m_summaryLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
+ d->m_summaryLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ d->m_summaryLabel->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
+
+ d->m_grid->setContentsMargins(0, 0, 0, 0);
+ d->m_grid->setSpacing(0);
+ d->m_grid->addWidget(d->m_summaryLabel, 0, 1);
+ d->m_grid->addWidget(d->m_detailsButton, 0, 2);
+ setLayout(d->m_grid);
+
+ connect(d->m_detailsButton, SIGNAL(toggled(bool)),
+ this, SLOT(setExpanded(bool)));
+ updateControls();
+ }
+
+ DetailsWidget::~DetailsWidget()
+ {
+ delete d;
+ }
+
+ void DetailsWidget::paintEvent(QPaintEvent *paintEvent)
+ {
+ QWidget::paintEvent(paintEvent);
+
+ QPainter p(this);
+
+ QPoint topLeft(d->m_summaryLabel->geometry().left(), contentsRect().top());
+ const QRect paintArea(topLeft, contentsRect().bottomRight());
+
+ if (d->m_state != Expanded) {
+ if (d->m_collapsedPixmap.isNull() ||
+ d->m_collapsedPixmap.size() != size())
+ d->m_collapsedPixmap = cacheBackground(paintArea.size(), false);
+ p.drawPixmap(paintArea, d->m_collapsedPixmap);
+ } else {
+ if (d->m_expandedPixmap.isNull() ||
+ d->m_expandedPixmap.size() != size())
+ d->m_expandedPixmap = cacheBackground(paintArea.size(), true);
+ p.drawPixmap(paintArea, d->m_expandedPixmap);
}
}
-}
-QWidget *DetailsWidget::widget() const
-{
- return d->m_widget;
-}
+ void DetailsWidget::enterEvent(QEvent * event)
+ {
+ QWidget::enterEvent(event);
+ changeHoverState(true);
+ }
-void DetailsWidget::setWidget(QWidget *widget)
-{
- if (d->m_widget == widget)
- return;
+ void DetailsWidget::leaveEvent(QEvent * event)
+ {
+ QWidget::leaveEvent(event);
+ changeHoverState(false);
+ }
- if (d->m_widget) {
- d->m_grid->removeWidget(d->m_widget);
- delete d->m_widget;
+ void DetailsWidget::setSummaryText(const QString &text)
+ {
+ d->m_summaryLabel->setText(text);
}
- d->m_widget = widget;
+ QString DetailsWidget::summaryText() const
+ {
+ return d->m_summaryLabel->text();
+ }
- if (d->m_widget) {
- d->m_widget->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
- d->m_grid->addWidget(d->m_widget, 1, 1, 1, 2);
+ DetailsWidget::State DetailsWidget::state() const
+ {
+ return d->m_state;
}
- updateControls();
-}
-void DetailsWidget::setToolWidget(QWidget *widget)
-{
- if (d->m_toolWidget == widget)
- return;
+ void DetailsWidget::setState(State state)
+ {
+ if (state == d->m_state)
+ return;
+ d->m_state = state;
+ updateControls();
+ }
- d->m_toolWidget = widget;
+ void DetailsWidget::setExpanded(bool expanded)
+ {
+ setState(expanded ? Expanded : Collapsed);
+ }
- if (!d->m_toolWidget)
- return;
+ void DetailsWidget::updateControls()
+ {
+ if (d->m_widget)
+ d->m_widget->setVisible(d->m_state == Expanded || d->m_state == NoSummary);
+ d->m_detailsButton->setChecked(d->m_state == Expanded && d->m_widget);
+ //d->m_summaryLabel->setEnabled(d->m_state == Collapsed && d->m_widget);
+ d->m_detailsButton->setVisible(d->m_state != NoSummary);
+ d->m_summaryLabel->setVisible(d->m_state != NoSummary);
+ {
+ QWidget *w = this;
+ while (w) {
+ if (w->layout())
+ w->layout()->activate();
+ if (QScrollArea *area = qobject_cast<QScrollArea*>(w)) {
+ QEvent e(QEvent::LayoutRequest);
+ QCoreApplication::sendEvent(area, &e);
+ }
+ w = w->parentWidget();
+ }
+ }
+ }
- d->m_toolWidget->adjustSize();
- d->m_grid->addWidget(d->m_toolWidget, 0, 0, 1, 1, Qt::AlignCenter);
+ QWidget *DetailsWidget::widget() const
+ {
+ return d->m_widget;
+ }
- d->m_grid->setColumnMinimumWidth(0, d->m_toolWidget->width());
- d->m_grid->setRowMinimumHeight(0, d->m_toolWidget->height());
+ void DetailsWidget::setWidget(QWidget *widget)
+ {
+ if (d->m_widget == widget)
+ return;
- changeHoverState(d->m_hovered);
-}
+ if (d->m_widget) {
+ d->m_grid->removeWidget(d->m_widget);
+ delete d->m_widget;
+ }
-QWidget *DetailsWidget::toolWidget() const
-{
- return d->m_toolWidget;
-}
+ d->m_widget = widget;
-QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded)
-{
- QLinearGradient lg;
- lg.setCoordinateMode(QGradient::ObjectBoundingMode);
- lg.setFinalStop(0, 1);
+ if (d->m_widget) {
+ d->m_widget->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
+ d->m_grid->addWidget(d->m_widget, 1, 1, 1, 2);
+ }
+ updateControls();
+ }
+
+ void DetailsWidget::setToolWidget(QWidget *widget)
+ {
+ if (d->m_toolWidget == widget)
+ return;
- lg.setColorAt(0, palette().color(QPalette::Midlight));
- lg.setColorAt(1, palette().color(QPalette::Button));
+ d->m_toolWidget = widget;
- QPixmap pixmap(size);
- QPainter p(&pixmap);
- p.setBrush(lg);
- p.setPen(QPen(palette().color(QPalette::Mid)));
+ if (!d->m_toolWidget)
+ return;
- p.drawRect(0, 0, size.width() - 1, size.height() - 1);
+ d->m_toolWidget->adjustSize();
+ d->m_grid->addWidget(d->m_toolWidget, 0, 0, 1, 1, Qt::AlignCenter);
- if (expanded) {
- p.drawLine(0, d->m_widget->geometry().top() - 1,
- d->m_summaryLabel->width(), d->m_widget->geometry().top() - 1);
+ d->m_grid->setColumnMinimumWidth(0, d->m_toolWidget->width());
+ d->m_grid->setRowMinimumHeight(0, d->m_toolWidget->height());
+
+ changeHoverState(d->m_hovered);
}
- return pixmap;
-}
+ QWidget *DetailsWidget::toolWidget() const
+ {
+ return d->m_toolWidget;
+ }
+
+ QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded)
+ {
+ QPixmap pixmap(size);
+ pixmap.fill(Qt::transparent);
+ QPainter p(&pixmap);
+
+ QRect topRect(0, 0, size.width(), d->m_summaryLabel->height());
+ QRect fullRect(0, 0, size.width(), size.height());
+ p.fillRect(fullRect, QColor(255, 255, 255, 40));
+
+ QColor highlight = palette().highlight().color();
+ highlight.setAlpha(0.5);
+ if (expanded) {
+ p.fillRect(topRect, highlight);
+ }
+
+ QLinearGradient lg(topRect.topLeft(), topRect.bottomLeft());
+ lg.setColorAt(0, QColor(255, 255, 255, 130));
+ lg.setColorAt(1, QColor(255, 255, 255, 0));
+ p.fillRect(topRect, lg);
+ p.setRenderHint(QPainter::Antialiasing, true);
+ p.translate(0.5, 0.5);
+ p.setPen(QColor(0, 0, 0, 40));
+ p.setBrush(Qt::NoBrush);
+ p.drawRoundedRect(fullRect.adjusted(0, 0, -1, -1), 2, 2);
+ p.setBrush(Qt::NoBrush);
+ p.setPen(QColor(255,255,255,140));
+ p.drawRoundedRect(fullRect.adjusted(1, 1, -2, -2), 2, 2);
+ p.setPen(QPen(palette().color(QPalette::Mid)));
+
+ return pixmap;
+ }
-void DetailsWidget::changeHoverState(bool hovered)
-{
- if (!d->m_toolWidget)
- return;
+ void DetailsWidget::changeHoverState(bool hovered)
+ {
+ if (!d->m_toolWidget)
+ return;
- d->m_toolWidget->setVisible(hovered);
+ d->m_toolWidget->setVisible(hovered);
- d->m_hovered = hovered;
-}
+ d->m_hovered = hovered;
+ }
} // namespace Utils