source: projects/punch-card/punch-card-editor/src/qpunchcard/deckmodel.cc @ 47

Last change on this file since 47 was 47, checked in by sven, 10 years ago

Continued implementation:

  • removed bugs
  • improved features

Programming continues, but quite slow since I've got few time... unfortunately

File size: 3.0 KB
Line 
1#include "deckmodel.h"
2
3#include <QPainter>
4
5using namespace QPunchCard;
6
7DeckModel::DeckModel(EditorWindow* parent) : QAbstractListModel(parent), main(parent) {
8        // allgemeines widget einrichten
9        card_widget = new CardWidget();
10        //card_widget->setParent(this);
11        card_widget->setQuality( CardWidget::ThumbnailQuality );
12        setIconSizeByWidth(73);
13}
14
15void DeckModel::setIconSizeByWidth(int width) {
16        icon_size = QSize(width, qRound( ((double)width / 7375) * 3250 ) );
17        card_widget->setGeometry( QRect(QPoint(), icon_size) );
18}
19
20void DeckModel::setIconSizeByHeight(int height) {
21        icon_size = QSize( qRound( ((double)height / 3250) * 7375 ), height);
22        card_widget->setGeometry( QRect(QPoint(), icon_size) );
23}
24
25void DeckModel::setDeck(bool) {
26        if(!main) return; // das waere sowieso haesslich
27        this->deck = main->getDeck();
28        //cardwidgets.clear();
29        // werden neu angelegt von data() -> DecorationRole
30        /*if(opened) {
31                DeckIterator i(*deck);
32                while(i.hasNext()) {
33                        CardWidget* w = new CardWidget; // wird nicht kompilieren => dann 0 setzen.
34                        w->setCard(i.next());
35                        w->setQuality(CardWidget::ThumbnailQuality);
36                        w->setGeometry( QRect(QPoint(), icon_size) );
37                        cardwidgets.append(w);
38                }
39        }*/
40}
41
42
43QVariant DeckModel::data(const QModelIndex &index, int role) const {
44        if(! index.isValid())
45                return QVariant();
46
47        if(role == Qt::DecorationRole) {
48                // hm... will ne Deko kriegen und so
49                int i = index.row();
50
51                Q_ASSERT(main != 0);
52                Q_ASSERT(main->deck != 0);
53
54                DeckIndex card_index(main->deck, i);
55                if(!card_index.isValid()) {
56                        qDebug("DeckModel: ungueltige Karte %d gefragt", i);
57                        return QVariant();
58                }
59                /*
60                if(i >= cardwidgets.count()) {
61                        qDebug("Erstelle Kartenwidget %d", i);
62                        QPointer<CardWidget> w( new CardWidget );
63                        w->setCard( card_index.getCard() );
64                        w->setQuality( CardWidget::ThumbnailQuality );
65                        w->setGeometry( QRect(QPoint(), icon_size) );
66                        cardwidgets.insert(i, w);
67                }*/
68                card_widget->setCard( main->deck->at(i) );
69
70                qDebug("Zeichne Karte %d von %d", i, deck->count());
71                QPixmap ret = QPixmap::grabWidget( card_widget /* cardwidgets[i] */, QRect(QPoint(), icon_size));
72                // sicherheitshalber
73                card_widget->unsetCard();
74                return ret;
75
76        } else if(role == Qt::DisplayRole) {
77                return tr("Card %1").arg(index.row());
78        } else if(role == Qt::StatusTipRole) {
79                return tr("You can <b>click and move</b> this card in the deck. Or <b>select multiple cards<b> with the rubberband.");
80        }
81
82        return QVariant();
83}
84
85Qt::ItemFlags DeckModel::flags(const QModelIndex &index) const {
86        if(index.isValid())
87                return (Qt::ItemIsEnabled | Qt::ItemIsSelectable);
88        else
89                return 0;
90}
91
92int DeckModel::rowCount(const QModelIndex &parent) const {
93        if(parent.isValid())
94                return 0;
95        else
96                return deck->size();
97}
98
99
100void DeckModel::contentsChanged(DeckIndex left, DeckIndex right) {
101        // Ist halt ein casting DeckIndex -> int -> ModelIndex hier noetig,
102        // daher kann man nicht einfach SIGNAL => SIGNAL patchen
103
104        // mit dem folgenden sind Laengenaenderungen nicht abgedeckt:
105        //emit dataChanged( index(left), index(right));
106        // dummy damit compiler nicht weint:
107        { left + right; }
108        reset();
109}
Note: See TracBrowser for help on using the repository browser.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License