qwwtipwidget.cpp

00001 //
00002 // C++ Implementation: QwwTipWidget
00003 //
00004 // Description:
00005 //
00006 //
00007 // Author: Witold Wysota <wysota@wysota.eu.org>, (C) 2007
00008 //
00009 // Copyright: See COPYING file that comes with this distribution
00010 //
00011 //
00012 
00013 #include "qwwtipwidget.h"
00014 #include <QHBoxLayout>
00015 
00016 #include <QCheckBox>
00017 #include <QPushButton>
00018 #include <QTextBrowser>
00019 #include <QVBoxLayout>
00020 #include <QStringListModel>
00021 #include <QEvent>
00022 #include <QPixmap>
00023 
00029 class QwwTipWidgetPrivate {
00030 friend class QwwTipWidget;
00031   QwwTipWidgetPrivate(QwwTipWidget *par){
00032     pub = par;
00033     m_headerWidget = 0;
00034   }
00035   QwwTipWidget *pub;
00036   QAbstractItemModel *m_model;
00037   QWidget *m_headerWidget;
00038   QPersistentModelIndex m_currentTip;
00039   QPushButton *m_next, *m_prev, *m_close;
00040   QTextBrowser *m_browser;
00041   QCheckBox *m_check;
00042 };
00043 
00044 inline QwwTipWidgetPrivate* QwwTipWidget::d_func() { return priv; }
00045 inline QwwTipWidgetPrivate* QwwTipWidget::d_func() const { return priv; }
00046 
00047 
00061 void QwwTipWidget::initUi() {
00062     Q_D(QwwTipWidget);
00063     QHBoxLayout *l = new QHBoxLayout;
00064     d->m_check = new QCheckBox;
00065     d->m_check->setChecked(true);
00066     l->addWidget(d->m_check);
00067     l->addStretch();
00068     d->m_prev = new QPushButton;
00069     d->m_prev->setIcon(QPixmap(":/wwwidgets/arrowleft.png"));
00070     l->addWidget(d->m_prev);
00071     d->m_next = new QPushButton;
00072     d->m_next->setIcon(QPixmap(":/wwwidgets/arrowright.png"));
00073     l->addWidget(d->m_next);
00074     d->m_close = new QPushButton;
00075     d->m_close->setDefault(true);
00076     d->m_close->setAutoDefault(true);
00077     l->addWidget(d->m_close);
00078     QVBoxLayout *vl = new QVBoxLayout(this);
00079     d->m_browser = new QTextBrowser;
00080     d->m_browser->setOpenExternalLinks(true);
00081     vl->addWidget(d->m_browser);
00082     vl->addLayout(l);
00083     connect(d->m_close, SIGNAL(clicked()), this, SIGNAL(closed()));
00084     connect(d->m_prev, SIGNAL(clicked()), this, SLOT(prevTip()));
00085     connect(d->m_next, SIGNAL(clicked()), this, SLOT(nextTip()));
00086     setTabOrder(d->m_close, d->m_next);
00087     setTabOrder(d->m_next, d->m_prev);
00088     setTabOrder(d->m_prev, d->m_check);
00089     setTabOrder(d->m_check, d->m_close);
00090     setFocusProxy(d->m_close);
00091     retranslateUi();
00092 }
00093 
00098 void QwwTipWidget::retranslateUi(){
00099     Q_D(QwwTipWidget);
00100     d->m_check->setText(tr("Show tips on startup"));
00101     d->m_prev->setText(tr("&Prev"));
00102     d->m_next->setText(tr("&Next"));
00103     d->m_close->setText(tr("&Close"));
00104 }
00105 
00106 QwwTipWidget::QwwTipWidget(const QStringList & list, QWidget * parent) : QWidget(parent), priv(new QwwTipWidgetPrivate(this)) {
00107     Q_D(QwwTipWidget);
00108     d->m_model = new QStringListModel(list, this);
00109     d->m_currentTip = d->m_model->index(0,0);
00110     initUi();
00111     showTip();
00112 }
00113 
00114 
00115 QwwTipWidget::~ QwwTipWidget() {
00116     delete priv;
00117 }
00118 
00123 int QwwTipWidget::currentTip() const {
00124     Q_D(QwwTipWidget);
00125     return d->m_currentTip.row();
00126 }
00127 
00132 bool QwwTipWidget::tipsEnabled() const {
00133     Q_D(QwwTipWidget);
00134     return d->m_check->isChecked();
00135 }
00136 
00141 void QwwTipWidget::setHeaderWidget(QWidget *hw) {
00142     Q_D(QwwTipWidget);
00143     QVBoxLayout *l = dynamic_cast<QVBoxLayout*>(layout());
00144     if (!l) return;
00145     delete d->m_headerWidget;
00146     l->insertWidget(0, hw);
00147     d->m_headerWidget = hw;
00148 }
00149 
00154 QWidget * QwwTipWidget::headerWidget() const {
00155     Q_D(QwwTipWidget);
00156     return d->m_headerWidget;
00157 }
00158 
00163 const QPushButton * QwwTipWidget::nextButton() const {
00164     Q_D(QwwTipWidget);
00165     return d->m_next;
00166 }
00167 
00172 const QPushButton * QwwTipWidget::prevButton() const {
00173     Q_D(QwwTipWidget);
00174     return d->m_prev;
00175 }
00176 
00181 const QPushButton * QwwTipWidget::closeButton() const {
00182     Q_D(QwwTipWidget);
00183     return d->m_close;
00184 }
00185 
00190 const QTextBrowser * QwwTipWidget::tipCanvas() const {
00191     Q_D(QwwTipWidget);
00192     return d->m_browser;
00193 }
00194 
00195 bool QwwTipWidget::checkIsVisible() const {
00196     Q_D(QwwTipWidget);
00197     return d->m_check->isVisible();
00198 }
00199 
00200 bool QwwTipWidget::closeIsVisible() const {
00201     Q_D(QwwTipWidget);
00202     return d->m_close->isVisible();
00203 }
00204 
00205 void QwwTipWidget::nextTip() {
00206     Q_D(QwwTipWidget);
00207     int r = currentTip();
00208     int c = d->m_model->rowCount();
00209     r = r==c-1 ? 0 : r+1;
00210     setCurrentTip(r);
00211 }
00212 
00213 void QwwTipWidget::prevTip() {
00214     Q_D(QwwTipWidget);
00215     int r = currentTip();
00216     int c = d->m_model->rowCount();
00217     r = r==0 ? c-1 : r-1;
00218     setCurrentTip(r);
00219 }
00220 
00221 void QwwTipWidget::setTipsEnabled(bool v) {
00222     Q_D(QwwTipWidget);
00223     d->m_check->setChecked(v);
00224 }
00225 
00226 void QwwTipWidget::setCheckVisible(bool v) {
00227     Q_D(QwwTipWidget);
00228     d->m_check->setVisible(v);
00229 }
00230 
00231 void QwwTipWidget::setCloseVisible(bool v){
00232     Q_D(QwwTipWidget);
00233     d->m_close->setVisible(v);
00234 }
00235 
00236 void QwwTipWidget::setCloseHidden(bool v){
00237     Q_D(QwwTipWidget);
00238     d->m_close->setVisible(!v);
00239 }
00240 
00241 void QwwTipWidget::setCheckHidden(bool v) {
00242     Q_D(QwwTipWidget);
00243     d->m_check->setVisible(!v);
00244 }
00245 
00246 void QwwTipWidget::showTip() {
00247     Q_D(QwwTipWidget);
00248     d->m_browser->setHtml(d->m_currentTip.data(Qt::DisplayRole).toString());
00249 }
00250 
00251 QFrame::Shape QwwTipWidget::canvasFrameShape() const {
00252     Q_D(QwwTipWidget);
00253     return d->m_browser->frameShape();
00254 }
00255 
00256 void QwwTipWidget::setCanvasFrameShape(QFrame::Shape s) {
00257     Q_D(QwwTipWidget);
00258     d->m_browser->setFrameShape(s);
00259 }
00260 
00261 void QwwTipWidget::setTips(const QStringList &slist) {
00262     Q_D(QwwTipWidget);
00263     delete d->m_model;
00264     d->m_model = new QStringListModel(slist, this);
00265     setCurrentTip(0);
00266 }
00267 
00268 
00269 const QStringList QwwTipWidget::tips() const{
00270     Q_D(QwwTipWidget);
00271     return ((QStringListModel*)(d->m_model))->stringList();
00272 }
00273 
00274 void QwwTipWidget::setCurrentTip(int v){
00275     Q_D(QwwTipWidget);
00276     if(v>=d->m_model->rowCount()) v= d->m_model->rowCount()-1;
00277     if(v<0) v = 0;
00278     if(v==currentTip()) return;
00279     d->m_currentTip = d->m_model->index(v,0);
00280     showTip();
00281     emit tipChanged(v);
00282 }
00283 
00284 void QwwTipWidget::changeEvent(QEvent *e){
00285     if(e->type()==QEvent::LanguageChange){
00286         retranslateUi();
00287     }
00288     QWidget::changeEvent(e);
00289 }

Generated on Sat Apr 21 21:54:36 2007 for wwWidgets by  doxygen 1.5.1