#pragma once /************************************************************************ MeOS - Orienteering Software Copyright (C) 2009-2022 Melin Software HB This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Melin Software HB - software@melin.nu - www.melin.nu Eksoppsvägen 16, SE-75646 UPPSALA, Sweden ************************************************************************/ #include "tabbase.h" class SpeakerMonitor; class spkClassSelection { // The currently selected leg int selectedLeg; // True if total results, otherwise stage results bool total; // Given a leg, get the corresponding (control, previous control) to watch map > legToControl; public: spkClassSelection() : selectedLeg(0), total(false) {} void setLeg(bool totalIn, int leg) {total = totalIn, selectedLeg=leg;} int getLeg() const {return selectedLeg;} bool isTotal() const {return total;} void setControl(int controlId, int previousControl) { legToControl[selectedLeg] = make_pair(controlId, previousControl); } int getControl() { if (legToControl.count(selectedLeg)==1) return legToControl[selectedLeg].first; else return -1; } int getPreviousControl() { if (legToControl.count(selectedLeg)==1) return legToControl[selectedLeg].second; else return -1; } }; class TabSpeaker : public TabBase { private: set controlsToWatch; set classesToWatch; // For runner report int runnerId = -1; int lastControlToWatch; int lastClassToWatch; set<__int64> shownEvents; vector events; oTimeLine::Priority watchLevel; int watchNumber; void generateControlList(gdioutput &gdi, int classId); void generateControlListForLeg(gdioutput &gdi, int classId, int leg); wstring lastControl; void manualTimePage(gdioutput &gdi) const; void storeManualTime(gdioutput &gdi); //Curren class- int classId; //Map CourseNo -> selected Control. //map selectedControl; map selectedControl; int deducePreviousControl(int classId, int leg, int control); bool ownWindow; void drawTimeLine(gdioutput &gdi); void splitAnalysis(gdioutput &gdi, int xp, int yp, pRunner r); // Runner Id:s to set priority for vector runnersToSet; SpeakerMonitor *speakerMonitor; SpeakerMonitor *getSpeakerMonitor(); void getSettings(gdioutput &gdi, multimap &settings); void importSettings(gdioutput &gdi, multimap &settings); static void loadSettings(vector< multimap > &settings); static void saveSettings(const vector< multimap > &settings); static wstring getSpeakerSettingsFile(); public: void setSelectedRunner(const oRunner &r) { runnerId = r.getId(); } bool onClear(gdioutput &gdi); void loadPriorityClass(gdioutput &gdi, int classId); void savePriorityClass(gdioutput &gdi); void updateTimeLine(gdioutput &gdi); //Clear selection data void clearCompetitionData(); int processButton(gdioutput &gdi, const ButtonInfo &bu); int processListBox(gdioutput &gdi, const ListBoxInfo &bu); int handleEvent(gdioutput &gdi, const EventInfo &ei); const char * getTypeStr() const {return "TSpeakerTab";} TabType getType() const {return TSpeakerTab;} bool loadPage(gdioutput &gdi); TabSpeaker(oEvent *oe); ~TabSpeaker(void); };