00001
00002
00003
00004
00005
00006
00007
00008
00009
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 }