| Home · All Classes · Main Classes · Deprecated |
00001 /*************************************************************************** 00002 ** 00003 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 00004 ** All rights reserved. 00005 ** Contact: Nokia Corporation (directui@nokia.com) 00006 ** 00007 ** This file is part of libmeegotouch. 00008 ** 00009 ** If you have questions regarding the use of this file, please contact 00010 ** Nokia at directui@nokia.com. 00011 ** 00012 ** This library is free software; you can redistribute it and/or 00013 ** modify it under the terms of the GNU Lesser General Public 00014 ** License version 2.1 as published by the Free Software Foundation 00015 ** and appearing in the file LICENSE.LGPL included in the packaging 00016 ** of this file. 00017 ** 00018 ****************************************************************************/ 00019 00020 #include "mgriditemview.h" 00021 #include "mgriditemview_p.h" 00022 #include "mgriditem.h" 00023 00024 #include "mscalableimage.h" 00025 #include "mtheme.h" 00026 #include "mimagewidget.h" 00027 #include "mlabel.h" 00028 #include "mviewcreator.h" 00029 00030 #include <MButton> 00031 00032 #include <QGraphicsGridLayout> 00033 #include <QDebug> 00034 00035 MGridItemViewPrivate::MGridItemViewPrivate() 00036 : q_ptr(0), controller(0), layout(0), title(0), subtitle(0), image(0), layoutDirty(false) 00037 { 00038 } 00039 00040 MGridItemViewPrivate::~MGridItemViewPrivate() 00041 { 00042 } 00043 00044 // Use lazy initialize to reduce useless widget and get better performance 00045 void MGridItemViewPrivate::init() 00046 { 00047 layout = new QGraphicsGridLayout(); 00048 layout->setContentsMargins(0, 0, 0, 0); 00049 layout->setSpacing(0); 00050 controller->setLayout(layout); 00051 00052 iconAlign = Qt::AlignLeft; 00053 } 00054 00055 void MGridItemViewPrivate::initLayout() const 00056 { 00057 int count = layout->count(); 00058 for (int i = count - 1; i >= 0; --i) 00059 layout->removeAt(i); 00060 00061 MGridItemModel *model = (MGridItemModel *)controller->model(); 00062 if (!model->imageVisible()) { 00063 // Label 00064 initTitle(); 00065 layout->addItem(title, 0, 0); 00066 layout->setAlignment(title, Qt::AlignVCenter | Qt::AlignHCenter); 00067 } else { 00068 if (!model->titleVisible() && !model->subtitleVisible()) { 00069 // Image 00070 initImage(); 00071 layout->addItem(image, 0, 0); 00072 layout->setAlignment(image, Qt::AlignVCenter | Qt::AlignHCenter); 00073 } else if (!model->subtitleVisible()) { 00074 // ImageLabel 00075 initTitle(); 00076 initImage(); 00077 00078 if (iconAlign == Qt::AlignLeft) { 00079 layout->addItem(image, 0, 0); 00080 layout->addItem(title, 0, 1); 00081 } else { 00082 layout->addItem(title, 0, 0); 00083 layout->addItem(image, 0, 1); 00084 } 00085 } else { 00086 // Grid Item 00087 initTitle(); 00088 initSubtitle(); 00089 initImage(); 00090 00091 if (iconAlign == Qt::AlignLeft) { 00092 layout->addItem(image, 0, 0, 2, 1); 00093 layout->addItem(title, 0, 1); 00094 layout->addItem(subtitle, 1, 1); 00095 } else { 00096 layout->addItem(image, 0, 1, 2, 1); 00097 layout->addItem(title, 0, 0); 00098 layout->addItem(subtitle, 1, 0); 00099 } 00100 } 00101 } 00102 00103 layoutDirty = false; 00104 } 00105 00106 void MGridItemViewPrivate::initTitle() const 00107 { 00108 if (title == 0) { 00109 title = new MLabel(); 00110 title->setObjectName("MGridItemTitle"); 00111 } 00112 } 00113 00114 void MGridItemViewPrivate::initSubtitle() const 00115 { 00116 if (subtitle == 0) { 00117 subtitle = new MLabel(); 00118 subtitle->setObjectName("MGridItemSubtitle"); 00119 } 00120 } 00121 00122 void MGridItemViewPrivate::initImage() const 00123 { 00124 if (image == 0) { 00125 image = new MImageWidget(); 00126 image->setObjectName("MGridItemImage"); 00127 } 00128 } 00129 00130 void MGridItemViewPrivate::setTitle(const QString &text) 00131 { 00132 if (text.isEmpty()) return; 00133 initTitle(); 00134 title->setText(text); 00135 } 00136 00137 void MGridItemViewPrivate::setSubtitle(const QString &text) 00138 { 00139 if (text.isEmpty()) return; 00140 initSubtitle(); 00141 subtitle->setText(text); 00142 } 00143 00144 void MGridItemViewPrivate::setImage(const QString &name) 00145 { 00146 if (name.isEmpty() && controller->pixmap().isNull()) return; 00147 00148 Q_Q(MGridItemView); 00149 initImage(); 00150 00151 if (name.isEmpty()) 00152 image->setPixmap(controller->pixmap()); 00153 else 00154 image->setImage(name, q->style()->iconSize()); 00155 } 00156 00157 void MGridItemViewPrivate::_q_updateImage() 00158 { 00159 initImage(); 00160 image->setPixmap(controller->pixmap()); 00161 } 00162 00163 MGridItemView::MGridItemView(MGridItem *controller) : 00164 MWidgetView(controller), 00165 d_ptr(new MGridItemViewPrivate) 00166 { 00167 Q_D(MGridItemView); 00168 d->q_ptr = this; 00169 d->controller = controller; 00170 d->init(); 00171 00172 connect(controller, SIGNAL(pixmapChanged()), this, SLOT(_q_updateImage())); 00173 } 00174 00175 MGridItemView::MGridItemView(MGridItemViewPrivate &dd, MGridItem *controller) : 00176 MWidgetView(controller), 00177 d_ptr(&dd) 00178 { 00179 Q_D(MGridItemView); 00180 d->q_ptr = this; 00181 d->controller = controller; 00182 d->init(); 00183 00184 connect(controller, SIGNAL(pixmapChanged()), this, SLOT(_q_updateImage())); 00185 } 00186 00187 MGridItemView::~MGridItemView() 00188 { 00189 delete d_ptr; 00190 } 00191 00192 void MGridItemView::applyStyle() 00193 { 00194 Q_D(MGridItemView); 00195 00196 MWidgetView::applyStyle(); 00197 00198 // change the icon Alignment 00199 if (d->iconAlign != style()->iconAlign()) { 00200 d->iconAlign = style()->iconAlign(); 00201 d->layoutDirty = true; 00202 } 00203 } 00204 00205 void MGridItemView::drawContents(QPainter *painter, const QStyleOptionGraphicsItem *option) const 00206 { 00207 Q_D(const MGridItemView); 00208 if (d->layoutDirty) 00209 d->initLayout(); 00210 00211 MWidgetView::drawContents(painter, option); 00212 } 00213 00214 void MGridItemView::updateData(const QList<const char *>& modifications) 00215 { 00216 Q_D(MGridItemView); 00217 00218 MWidgetView::updateData(modifications); 00219 00220 const char *member; 00221 const int count = modifications.count(); 00222 for (int i = 0; i < count; ++i) { 00223 member = modifications[i]; 00224 00225 if (member == MGridItemModel::Image) { 00226 d->setImage(model()->image()); 00227 } else if (member == MGridItemModel::Title) { 00228 d->setTitle(model()->title()); 00229 } else if (member == MGridItemModel::Subtitle) { 00230 d->setSubtitle(model()->subtitle()); 00231 } else if (member == MGridItemModel::ImageVisible || member == MGridItemModel::TitleVisible || 00232 member == MGridItemModel::SubtitleVisible) { 00233 d->layoutDirty = true; 00234 } 00235 } 00236 } 00237 00238 void MGridItemView::setupModel() 00239 { 00240 Q_D(MGridItemView); 00241 MWidgetView::setupModel(); 00242 00243 d->setTitle(model()->title()); 00244 d->setSubtitle(model()->subtitle()); 00245 d->setImage(model()->image()); 00246 d->layoutDirty = true; 00247 } 00248 00249 M_REGISTER_VIEW_NEW(MGridItemView, MGridItem) 00250 00251 #include "moc_mgriditemview.cpp" 00252
| Copyright © 2010 Nokia Corporation | Generated on Thu Nov 4 2010 18:14:20 (PDT) Doxygen 1.7.1 |
MeeGo Touch |