6 #include <QAbstractTableModel>
12 enum class EventType {
42 class EventsModel : public QAbstractTableModel
45 EventsModel(sqlite3 *db, int match_id);
47 int rowCount(const QModelIndex &parent) const override
51 int columnCount(const QModelIndex &column) const override
55 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
56 QVariant data(const QModelIndex &index, int role) const override;
58 unsigned insert_event(uint64_t t, std::optional<int> player_id, std::optional<int> formation_id, const std::string &type = "unknown"); // Returns the row.
59 void delete_event(unsigned row);
60 EventType get_event_type(unsigned row) { return events[row].type; }
61 void set_event_type(unsigned row, const std::string &type);
62 void set_event_formation(unsigned row, int formation_id);
63 uint64_t get_time(unsigned row) { return events[row].t; }
64 unsigned get_last_event_pos(uint64_t t) const; // Last event that happened at or before t.
65 QModelIndex get_last_event_qt(uint64_t t) const {
66 return createIndex(get_last_event_pos(t), 0);
68 std::optional<int> get_player_id(unsigned row) { return events[row].player_id; }
71 unsigned our_score, their_score;
72 enum { NOT_STARTED, OFFENSE, DEFENSE } attack_state;
73 unsigned offensive_formation, defensive_formation;
75 enum { NOT_PULLING, SHOULD_PULL, PULL_IN_AIR } pull_state;
77 unsigned possession_sec;
78 unsigned stoppage_sec;
80 Status get_status_at(uint64_t t);
81 std::set<int> get_team_at(uint64_t t);
82 void set_team_at(uint64_t, const std::set<int> &new_team);
83 std::vector<int> sort_team(const std::set<int> &team) const; // Ordered first by gender, then by number.
84 void set_formation_at(uint64_t t, bool offense, unsigned formation);
86 // Used to notify when we've inserted a new one into the database.
87 void inserted_new_formation(int formation_id, const std::string &name) {
88 formations[formation_id] = Formation{ formation_id, name };
97 std::map<int, Player> players;
98 std::map<int, int> player_ordering; // From id to position.
104 std::map<int, Formation> formations;
109 std::optional<int> player_id;
110 std::optional<int> formation_id;
113 std::vector<Event> events;
121 #endif // !defined(_EVENTS_H)