Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qxtletterboxwidget.h"
00026 #include "qxtletterboxwidget_p.h"
00027 #include <QLayout>
00028 #include <QStyle>
00029
00030 QxtLetterBoxWidgetPrivate::QxtLetterBoxWidgetPrivate() : center(0), timer(), margin(0)
00031 {
00032 timer.setSingleShot(true);
00033 }
00034
00054 QxtLetterBoxWidget::QxtLetterBoxWidget(QWidget* parent) : QFrame(parent)
00055 {
00056 QXT_INIT_PRIVATE(QxtLetterBoxWidget);
00057 connect(&qxt_d().timer, SIGNAL(timeout()), this, SLOT(resizeWidget()));
00058 }
00059
00063 QxtLetterBoxWidget::~QxtLetterBoxWidget()
00064 {
00065 }
00066
00077 QColor QxtLetterBoxWidget::backgroundColor() const
00078 {
00079 return palette().color(QPalette::Window);
00080 }
00081
00082 void QxtLetterBoxWidget::setBackgroundColor(const QColor& color)
00083 {
00084 QPalette pal = palette();
00085 pal.setColor(QPalette::Window, color);
00086 setPalette(pal);
00087 setAutoFillBackground(true);
00088 }
00089
00090 void QxtLetterBoxWidget::clearBackgroundColor()
00091 {
00092 setBackgroundColor(QColor());
00093 setAutoFillBackground(false);
00094 }
00095
00102 int QxtLetterBoxWidget::margin() const
00103 {
00104 return qxt_d().margin;
00105 }
00106
00107 void QxtLetterBoxWidget::setMargin(int margin)
00108 {
00109 if (qxt_d().margin != margin)
00110 {
00111 qxt_d().margin = margin;
00112 resizeWidget();
00113 }
00114 }
00115
00122 QWidget* QxtLetterBoxWidget::widget() const
00123 {
00124 return qxt_d().center;
00125 }
00126
00135 void QxtLetterBoxWidget::setWidget(QWidget* widget)
00136 {
00137 if (qxt_d().center && qxt_d().center != widget)
00138 qxt_d().center->deleteLater();
00139 qxt_d().center = widget;
00140 if (widget)
00141 {
00142 widget->setParent(this);
00143 resizeWidget();
00144 }
00145 }
00146
00156 uint QxtLetterBoxWidget::resizeDelay() const
00157 {
00158 return qxt_d().timer.interval();
00159 }
00160
00161 void QxtLetterBoxWidget::setResizeDelay(uint delay)
00162 {
00163 qxt_d().timer.setInterval(delay);
00164 }
00165
00169 void QxtLetterBoxWidget::resizeWidget()
00170 {
00171 if (qxt_d().center)
00172 {
00173 QSize s = qxt_d().center->sizeIncrement();
00174 s.scale(size(), Qt::KeepAspectRatio);
00175 s -= QSize(2 * qxt_d().margin, 2 * qxt_d().margin);
00176 s = QLayout::closestAcceptableSize(qxt_d().center, s);
00177 QRect r = QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, s, rect());
00178 qxt_d().center->setGeometry(r);
00179 }
00180 }
00181
00185 void QxtLetterBoxWidget::resizeEvent(QResizeEvent* event)
00186 {
00187 QFrame::resizeEvent(event);
00188 if (resizeDelay() > 0)
00189 qxt_d().timer.start();
00190 else
00191 resizeWidget();
00192 }