Subversion Repositories svn1-original

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
138 david 1
#include "qmdisqualified.h"
2
#include    "consts.h"
3
#include    "structs.h"
4
#include    "proto.h"
194 - 5
#include <QHeaderView>
195 david 6
#include <QPushButton>
138 david 7
 
8
qmDisqualified::qmDisqualified(QWidget *parent) :
194 - 9
    QWidget(parent)
10
 
138 david 11
{
195 david 12
    inPopulate = false;
13
    dirty = true;
194 - 14
    resize ( 600,400);
138 david 15
 
194 - 16
    QVBoxLayout *verticalLayout = new QVBoxLayout(this);
17
    verticalLayout->setContentsMargins(0, 0, 0, 0);
18
 
19
    QGroupBox *groupBox = new QGroupBox("Disqualified and Non Equestrian");
20
    verticalLayout->addWidget(groupBox);
21
 
22
    QVBoxLayout *verticalLayout2 = new QVBoxLayout(groupBox);
23
 
24
    tableWidget = new QTableWidget(groupBox);
25
    tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
26
    //tableWidget->setGeometry(QRect(10, 20, 501, 421));
27
    tableWidget->setAlternatingRowColors(true);
28
    tableWidget->horizontalHeader()->setProperty("showSortIndicator", QVariant(true));
29
    tableWidget->verticalHeader()->setDefaultSectionSize(20);
30
    tableWidget->verticalHeader()->setProperty("showSortIndicator", QVariant(false));
31
    verticalLayout2->addWidget(tableWidget);
32
 
33
    buttonBox = new QDialogButtonBox();
195 david 34
    pb_restore = buttonBox->addButton("Restore",QDialogButtonBox::ActionRole );
35
    pb_save = buttonBox->addButton("Save",QDialogButtonBox::ActionRole );
194 - 36
    verticalLayout->addWidget(buttonBox);
37
 
195 david 38
    connect(pb_save, SIGNAL(clicked()), this, SLOT(save()) );
39
    connect(pb_restore, SIGNAL(clicked()), this, SLOT(cancel()) );
194 - 40
    connect(tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(tableItemChanged(QTableWidgetItem *)));
195 david 41
    updateChanged (false);
138 david 42
}
43
 
44
qmDisqualified::~qmDisqualified()
45
{
194 - 46
 
138 david 47
}
48
 
49
void qmDisqualified::save(void)
50
{
140 - 51
    team_type team_buf;
194 - 52
    for ( int ii = 0; ii < tableWidget->rowCount(); ii++)
140 - 53
    {
54
        QTableWidgetItem *item;
194 - 55
        item = tableWidget->item(ii, 0);
140 - 56
        if ( item )
57
        {
58
            if ( item->data(Qt::UserRole + 1).toBool() )
59
            {
60
                int team = item->data(Qt::EditRole).toInt();
61
                if ( team )
62
                {
63
                    qDebug("Detected change:%d", team);
64
                    g_record( team, &team_buf );
65
 
194 - 66
                    item = tableWidget->item(ii,2);
140 - 67
                    team_buf.flags.disqualified =  ( item->checkState () == Qt::Checked);
68
 
194 - 69
                    item = tableWidget->item(ii,3);
140 - 70
                    team_buf.flags.non_equestrian =  ( item->checkState () == Qt::Checked);
71
//TODO: If nonEquestrian, then also disqualified ??  Original is.
72
 
194 - 73
                    item = tableWidget->item(ii,4);
140 - 74
                    team_buf.flags.valid =  ( item->checkState () == Qt::Checked);
75
 
76
                    put_team_record( team, &team_buf );
77
                }
78
            }
79
        }
80
    }
81
    populate();
82
 
138 david 83
}
84
 
85
void qmDisqualified::cancel(void)
86
{
87
    populate();
88
}
89
 
90
void qmDisqualified::populate(void)
91
{
92
    team_type team_buf;
93
    inPopulate = TRUE;
94
 
95
    /*
96
    ** Delete existing entries in the table
97
    */
194 - 98
    tableWidget->clearContents();
99
    tableWidget->setRowCount(config.max_team);
100
    tableWidget->setColumnCount(6);
101
    tableWidget->setSortingEnabled(FALSE);
138 david 102
 
103
    /*
104
    ** Scan all the team data
105
    */
106
    for ( int team = config.min_team; team <= config.max_team; team++)
107
    {
194 - 108
        tableWidget->hideRow ( team );
138 david 109
        if( valid_field( team ) )
110
        {
111
            g_record( team, &team_buf );
140 - 112
            if( team_buf.flags.valid || true )
138 david 113
            {
182 - 114
                qmDisqualifiedItem *item;
138 david 115
 
194 - 116
                tableWidget->showRow( team );
138 david 117
 
182 - 118
                item = new qmDisqualifiedItem(team);
140 - 119
                item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
194 - 120
                tableWidget->setItem(team, 0, item );
138 david 121
 
182 - 122
                item = new qmDisqualifiedItem(team_buf.name);
140 - 123
                item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
194 - 124
                tableWidget->setItem(team, 1, item );
138 david 125
 
194 - 126
                tableWidget->setItem(team, 2, new qmDisqualifiedItem("Disq", team_buf.flags.disqualified, team) );
127
                tableWidget->setItem(team, 3, new qmDisqualifiedItem("Non Equest",team_buf.flags.non_equestrian,team) );
128
                tableWidget->setItem(team, 4, new qmDisqualifiedItem("Enable", team_buf.flags.valid,team) );
193 - 129
 
130
                item = new qmDisqualifiedItem("Bad Times", team_buf.flags.bad_times);
131
                item->setFlags(Qt::ItemIsSelectable/* | Qt::ItemIsEnabled*/);
194 - 132
                tableWidget->setItem(team, 5, item  );
138 david 133
            }
134
        }
135
    }
194 - 136
    tableWidget->sortByColumn(0,Qt::AscendingOrder);
137
    tableWidget->setSortingEnabled(TRUE);
138
    tableWidget->resizeColumnsToContents();
182 - 139
 
138 david 140
    inPopulate = FALSE;
195 david 141
    updateChanged(false);
138 david 142
}
143
 
144
void qmDisqualified::tableItemChanged(QTableWidgetItem *item)
145
{
146
    if ( !inPopulate )
147
    {
140 - 148
        if ( item->column() )
149
        {
150
            qDebug ("DataChanged");
151
            item->setData(Qt::BackgroundRole, QBrush(QColor(255,0,0,50)));
152
 
153
            // Mark first item in row to help detect changes
154
            int row = item->row();
155
            item->tableWidget()->item(row,0)->setData(Qt::UserRole + 1, true );
195 david 156
            item->tableWidget()->item(row,0)->setData(Qt::BackgroundRole, QBrush(QColor(255,0,0,50)));
140 - 157
        }
195 david 158
 
159
        updateChanged(true);
138 david 160
    }
161
}
182 - 162
 
195 david 163
void qmDisqualified::updateChanged(bool newDirty)
164
{
165
    if (newDirty != dirty)
166
    {
167
        dirty = newDirty;
168
        if (dirty)
169
        {
170
            pb_save->setEnabled(true);
171
            pb_save->setStyleSheet("background-color: rgb(255, 0, 0);");
172
        }
173
        else
174
        {
175
            pb_save->setEnabled(false);
176
            pb_save->setStyleSheet("");
177
        }
178
    }
179
}
180
 
181
void qmDisqualified::showEvent ( QShowEvent * event )
182
{
183
    qDebug("qmDisqualified::showEvent");
184
    if ( ! event->spontaneous() && !dirty )
185
    {
186
        populate();
187
    }
188
}
189
 
182 - 190
qmDisqualifiedItem::qmDisqualifiedItem ( const QString & text, int type ) :  QTableWidgetItem(text, type+QTableWidgetItem::UserType)
191
{
192
    number = 0;
193
}
194
qmDisqualifiedItem::qmDisqualifiedItem ( int value, int type ) :  QTableWidgetItem(type+QTableWidgetItem::UserType)
195
{
196
    number = value;
197
    setData(0,value);
198
}
199
qmDisqualifiedItem::qmDisqualifiedItem ( const QString & text, bool checked, int num, int type ) : QTableWidgetItem(text, type+QTableWidgetItem::UserType)
200
{
201
    setCheckState(checked ? Qt::Checked : Qt::Unchecked);
202
    number = num;
203
}
204
 
205
// Special sorting, based on type
206
//      type == 0 : Text
207
//      type == 1 : Number
208
//      type == 2 : Checked
209
//
210
bool qmDisqualifiedItem::operator< ( const QTableWidgetItem & other ) const
211
{
212
    const qmDisqualifiedItem * other_widget = dynamic_cast<const qmDisqualifiedItem*>(&other);
213
    if (other_widget && other_widget->type() == QTableWidgetItem::UserType + 2 )
214
    {
215
        if (other_widget->checkState() == checkState() )
216
        {
217
//            qDebug ("Same(%d): %d : %d", other_widget->number < number, other_widget->number, number);
218
            if (this->tableWidget()->horizontalHeader()->sortIndicatorOrder() != Qt::AscendingOrder )
219
            {
220
                return other_widget->number < number;
221
            }
222
            else
223
            {
224
                return number < other_widget->number;
225
            }
226
        }
227
        return (other_widget->checkState() < checkState() );
228
    }
229
 
230
    return ( QTableWidgetItem::operator< (other) );
231
}