diff options
author | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-05-28 15:14:25 +0200 |
---|---|---|
committer | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-05-28 15:14:25 +0200 |
commit | 203f6100eea1b75e50e7cb7d57836decbc8d4819 (patch) | |
tree | 38224e46bf1224ae8d11bc0c7384b2f8e62130f3 | |
parent | bf6d287025d24dfa36523b5eaf9464c6168cf811 (diff) |
Start expanding the photoAlbum example to include a grid view too.
-rw-r--r-- | examples/photoAlbum/main.cpp | 123 |
1 files changed, 102 insertions, 21 deletions
diff --git a/examples/photoAlbum/main.cpp b/examples/photoAlbum/main.cpp index c2120f3..4edba9d 100644 --- a/examples/photoAlbum/main.cpp +++ b/examples/photoAlbum/main.cpp @@ -22,10 +22,12 @@ ****************************************************************************/ #include <QtGui> -#include <qlistwidgetng.h> -#include <qkineticlistcontroller.h> #include <qgraphicslistview.h> +#include <qgraphicsgridview.h> #include <qlistdefaultmodel.h> +#include <qlistselectionmanager.h> +#include <qkineticlistcontroller.h> +#include <qpropertyanimation.h> class Photo : public QtGraphicsListViewItem { @@ -44,42 +46,73 @@ QSizeF Photo::sizeHint(int index, const QStyleOptionViewItemV4 *option, Qt::Size { Q_UNUSED(option); Q_UNUSED(index); - Q_UNUSED(which); Q_UNUSED(constraint); - return QSizeF(640, 480); + switch (which) { + case Qt::MinimumSize: + return QSizeF(1, 1); + case Qt::PreferredSize: + return QSizeF(640, 480).boundedTo(constraint); + case Qt::MaximumSize: + return constraint; + default: + break; + } + return QSize(); } void Photo::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - Q_UNUSED(option); Q_UNUSED(widget); const QPixmap pixmap = qvariant_cast<QPixmap>(data().value(Qt::DecorationRole)); - painter->drawPixmap(70, 52, pixmap); - painter->drawRect(69, 51, 501, 376); + const QSizeF bounded = pixmap.size().boundedTo(option->rect.size()); + QSizeF scaled = pixmap.size(); + scaled.scale(bounded, Qt::KeepAspectRatio); + const QRectF aligned = QStyle::alignedRect(option->direction, Qt::AlignCenter, scaled.toSize(), option->rect); + painter->drawPixmap(aligned, pixmap, pixmap.rect()); } +class Switcher : public QObject +{ + Q_OBJECT +public: + Switcher(QtGraphicsGridView *grid, QtGraphicsListView *list, QObject *parent = 0) + : QObject(parent), grid(grid), list(list), photo(0) { animation.setPropertyName("geometry"); } + ~Switcher() {} + +public slots: + void gridItemClicked(int index) { + grid->hide(); + list->setHorizontalOffset(index * list->size().width()); // ### ensure visible + list->show(); + // ### start animation + } + void listItemClicked(int index) { + Q_UNUSED(index); + list->hide(); + grid->setHorizontalOffset(0); + grid->show(); + // ### start animation + } + +private: + QtGraphicsGridView *grid; + QtGraphicsListView *list; + Photo *photo; + QPropertyAnimation animation; +}; + int main(int argc, char *argv[]) { QApplication app(argc, argv); QGraphicsView widget; widget.setScene(new QGraphicsScene(&widget)); - widget.resize(QSize(648, 490)); + widget.resize(QSize(640, 480)); widget.scene()->setSceneRect(0, 0, 640, 480); - widget.setBackgroundBrush(QPixmap(":images/background.jpg")); - QtGraphicsListView *view = new QtGraphicsListView(Qt::Horizontal); - QtListDefaultModel *model = new QtListDefaultModel(&widget); - QtKineticListController *controller = new QtKineticListController(&widget); + // data - view->setItemCreator(new QtGraphicsListViewItemCreator<Photo>()); - view->setParent(controller); - view->setGeometry(0, 0, 640, 480); - view->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); - controller->setView(view); - controller->setModel(model); - controller->setHorizontalOvershootEnabled(true); - controller->setCenterOnItemEnabled(true); + QtListDefaultModel *model = new QtListDefaultModel(&widget); QtListDefaultItem *item = new QtListDefaultItem; item->setData(QPixmap(":images/go.jpg"), Qt::DecorationRole); @@ -101,8 +134,56 @@ int main(int argc, char *argv[]) item->setData(QPixmap(":images/beach.jpg"), Qt::DecorationRole); model->appendItem(item); - widget.scene()->addItem(view); + item = new QtListDefaultItem; + item->setData(QPixmap(":images/background.jpg"), Qt::DecorationRole); + model->appendItem(item); + + // selections + + QtListSelectionManager *selections = new QtListSelectionManager(&widget); + + // views and controllers + + QtGraphicsListView *listView = new QtGraphicsListView(Qt::Horizontal); + QtKineticListController *listController = new QtKineticListController(&widget); + + listView->setItemCreator(new QtGraphicsListViewItemCreator<Photo>()); + listView->setGeometry(0, 0, 640, 480); + //listView->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); // ### + //listView->hide(); + + listController->setView(listView); + listController->setModel(model); + listController->setSelectionManager(selections); + listController->setHorizontalOvershootEnabled(true); + listController->setCenterOnItemEnabled(true); + + QtGraphicsGridView *gridView = new QtGraphicsGridView(4, Qt::Vertical); + //QtKineticListController *gridController = new QtKineticListController(&widget); + QtListController *gridController = new QtListController(&widget); + + gridView->setItemCreator(new QtGraphicsListViewItemCreator<Photo>()); + gridView->setGeometry(0, 0, 640, 480); + //gridView->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); // ### + gridView->hide(); + + gridController->setView(gridView); + gridController->setModel(model); + gridController->setSelectionManager(selections); + //gridController->setHorizontalOvershootEnabled(true); + //gridController->setCenterOnItemEnabled(true); + + Switcher switcher(gridView, listView); + QObject::connect(listController, SIGNAL(itemClicked(int, Qt::MouseButton)), + &switcher, SLOT(listItemClicked(int))); + QObject::connect(gridController, SIGNAL(itemClicked(int, Qt::MouseButton)), + &switcher, SLOT(gridItemClicked(int))); + + widget.scene()->addItem(listView); + widget.scene()->addItem(gridView); widget.show(); return app.exec(); } + +#include "main.moc" |