]> git.sesse.net Git - pkanalytics/blob - formations.cpp
Add the beginnings of formation support.
[pkanalytics] / formations.cpp
1 #include <string>
2 #include <vector>
3 #include <sqlite3.h>
4 #include "formations.h"
5
6 using namespace std;
7
8 FormationsModel::FormationsModel(sqlite3 *db, bool offense) : db(db), offense(offense)
9 {
10         load_data();
11 }
12
13 QVariant FormationsModel::headerData(int section, Qt::Orientation orientation, int role) const
14 {
15         if (role != Qt::DisplayRole) {
16                 return QVariant();
17         }
18         if (orientation == Qt::Horizontal) {
19                 if (section == 0) {
20                         return "Name";
21                 } else {
22                         return QVariant();
23                 }
24         } else {
25                 return "";
26         }
27 }
28
29 QVariant FormationsModel::data(const QModelIndex &index, int role) const
30 {
31         if (role == Qt::TextAlignmentRole) {
32                 return (Qt::AlignLeft | Qt::AlignVCenter).toInt();
33         }
34         if (role != Qt::DisplayRole) {
35                 return QVariant();
36         }
37         if (index.column() == 0) {
38                 if (index.row() == 0) {
39                         return QString::fromUtf8("(None/unknown)");
40                 } else if (index.row() == formations.size() + 1) {
41                         return QString::fromUtf8("Add new…");
42                 } else {
43                         return QString::fromUtf8(formations[index.row() - 1].name);
44                 }
45         }
46         return QVariant();
47 }
48
49 void FormationsModel::load_data()
50 {
51         formations.clear();
52
53         // Read the formations.
54         sqlite3_stmt *stmt;
55         int ret = sqlite3_prepare_v2(db, "SELECT formation, name FROM formation WHERE offense=? ORDER BY name", -1, &stmt, 0);
56         if (ret != SQLITE_OK) {
57                 fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
58                 abort();
59         }
60         sqlite3_bind_int(stmt, 1, offense);
61         for ( ;; ) {
62                 ret = sqlite3_step(stmt);
63                 if (ret == SQLITE_ROW) {
64                         Formation f;
65                         f.formation_id = sqlite3_column_int(stmt, 0);
66                         f.name = (const char *)sqlite3_column_text(stmt, 1);
67                         formations.push_back(f);
68                 } else if (ret == SQLITE_DONE) {
69                         break;
70                 } else {
71                         fprintf(stderr, "SELECT step: %s\n", sqlite3_errmsg(db));
72                         abort();
73                 }
74         }
75         ret = sqlite3_finalize(stmt);
76         if (ret != SQLITE_OK) {
77                 fprintf(stderr, "SELECT finalize: %s\n", sqlite3_errmsg(db));
78                 abort();
79         }
80 }