#pragma once /************************************************************************ MeOS - Orienteering Software Copyright (C) 2009-2021 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" #include "Printer.h" #include "autocompletehandler.h" class Table; class TabRunner : public TabBase, AutoCompleteHandler { private: void addToolbar(gdioutput &gdi); const wstring &getSearchString() const; void setCardNo(gdioutput &gdi, int cardNo); void enableControlButtons(gdioutput &gdi, bool enable, bool vacant); void cellAction(gdioutput &gdi, DWORD id, oBase *obj); void selectRunner(gdioutput &gdi, pRunner r); wstring lastSearchExpr; unordered_set lastFilter; DWORD timeToFill; int inputId; int searchCB(gdioutput &gdi, int type, void *data); int runnerCB(gdioutput &gdi, int type, void *data); int punchesCB(gdioutput &gdi, int type, void *data); int vacancyCB(gdioutput &gdi, int type, void *data); int currentMode; pRunner save(gdioutput &gdi, int runnerId, bool dontReloadRunners); void listRunners(gdioutput &gdi, const vector &r, bool filterVacant) const; void fillRunnerList(gdioutput &gdi); int cardModeStartY; int lastRace; wstring lastFee; int runnerId; bool ownWindow; bool listenToPunches; vector< pair > runnersToReport; vector unknown_dns; vector known_dns; vector known; vector unknown; void clearInForestData(); bool savePunchTime(pRunner r, gdioutput &gdi); PrinterObject splitPrinter; void showRunnerReport(gdioutput &gdi); static void runnerReport(oEvent &oe, gdioutput &gdi, int id, bool compactReport); void showVacancyList(gdioutput &gdi, const string &method="", int classId=0); void showCardsList(gdioutput &gdi); bool canSetStart(pRunner r) const; bool canSetFinish(pRunner r) const; void warnDuplicateCard(gdioutput &gdi, int cno, pRunner r); pRunner warnDuplicateCard(int cno, pRunner r); int numShorteningLevels() const; void updateNumShort(gdioutput &gdi, pCourse crs, pRunner r); static void updateStatus(gdioutput &gdi, pRunner r); static void autoGrowCourse(gdioutput &gdi); void loadEconomy(gdioutput &gdi, oRunner &r); class EconomyHandler : public GuiHandler { int runnerId; oEvent *oe; oRunner &getRunner() const; public: void init(oRunner &r); void handle(gdioutput &gdi, BaseInfo &info, GuiEventType type); void save(gdioutput &gdi); }; shared_ptr ecoHandler; EconomyHandler *getEconomyHandler(oRunner &r); protected: void clearCompetitionData(); public: static pClub extractClub(oEvent *oe, gdioutput &gdi); void handleAutoComplete(gdioutput &gdi, AutoCompleteInfo &info) override; const char * getTypeStr() const {return "TRunnerTab";} TabType getType() const {return TRunnerTab;} void showInForestList(gdioutput &gdi); bool loadPage(gdioutput &gdi); bool loadPage(gdioutput &gdi, int runnerId); static void generateRunnerReport(oEvent &oe, gdioutput &gdi, vector> &runnersToReport); TabRunner(oEvent *oe); ~TabRunner(void); friend int runnerSearchCB(gdioutput *gdi, int type, void *data); friend int RunnerCB(gdioutput *gdi, int type, void *data); friend int PunchesCB(gdioutput *gdi, int type, void *data); friend int VacancyCB(gdioutput *gdi, int type, void *data); };