#pragma once /************************************************************************ MeOS - Orienteering Software Copyright (C) 2009-2018 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 "oEventDraw.h" class TabClass : public TabBase { struct PursuitSettings { bool use; int firstTime; int maxTime; PursuitSettings(oClass &c) { firstTime = 3600; use = c.interpretClassType() != ctOpen; maxTime = 3600; } }; map pSettings; int pSavedDepth; int pFirstRestart; double pTimeScaling; int pInterval; class HandleCloseWindow : public GuiHandler { TabClass *tabClass; HandleCloseWindow(const HandleCloseWindow&); HandleCloseWindow &operator=(const HandleCloseWindow&); public: HandleCloseWindow() : tabClass(0) {} void handle(gdioutput &gdi, BaseInfo &info, GuiEventType type); friend class TabClass; }; HandleCloseWindow handleCloseWindow; bool EditChanged; int ClassId; int currentStage; wstring storedNStage; wstring storedStart; oEvent::PredefinedTypes storedPredefined; bool showForkingGuide; bool checkClassSelected(const gdioutput &gdi) const; void save(gdioutput &gdi, bool skipReload); void legSetup(gdioutput &gdi); vector cInfo; void saveDrawSettings() const; map cInfoCache; DrawInfo drawInfo; void setMultiDayClass(gdioutput &gdi, bool hasMulti, DrawMethod defaultMethod); void drawDialog(gdioutput &gdi, DrawMethod method, const oClass &cls); void pursuitDialog(gdioutput &gdi); bool warnDrawStartTime(gdioutput &gdi, int time); bool warnDrawStartTime(gdioutput &gdi, const wstring &firstStart); void static clearPage(gdioutput &gdi, bool autoRefresh); bool hasWarnedStartTime; bool hasWarnedDirect; bool tableMode; DrawMethod lastDrawMethod; int lastSeedMethod; bool lastSeedPreventClubNb; bool lastSeedReverse; wstring lastSeedGroups; int lastPairSize; wstring lastFirstStart; wstring lastInterval; wstring lastNumVac; wstring lastScaleFactor; wstring lastMaxAfter; bool lastHandleBibs; // Generate a table with class settings void showClassSettings(gdioutput &gdi); void visualizeField(gdioutput &gdi); // Read input from the table with class settings void readClassSettings(gdioutput &gdi); // Prepare for drawing by declaring starts and blocks void prepareForDrawing(gdioutput &gdi); void showClassSelection(gdioutput &gdi, int &bx, int &by, GUICALLBACK classesCB) const; // Set simultaneous start in a class void simultaneous(int classId, const wstring &time); void updateFairForking(gdioutput &gdi, pClass pc) const; void selectCourses(gdioutput &gdi, int legNo); bool showMulti(bool singleOnly) const; void defineForking(gdioutput &gdi, bool clearSettings); vector< vector > forkingSetup; static const wchar_t *getCourseLabel(bool pool); void getClassSettingsTable(gdioutput &gdi, GUICALLBACK cb); void saveClassSettingsTable(gdioutput &gdi, set &classModifiedFee, bool &modifiedBib); static wstring getBibCode(AutoBibType bt, const wstring &key); void setParallelOptions(const string &sdKey, gdioutput &gdi, pClass pc, int legno); void updateStartData(gdioutput &gdi, pClass pc, int leg, bool updateDependent, bool forceWrite); void updateSplitDistribution(gdioutput &gdi, int numInClass, int tot) const; DrawMethod getDefaultMethod(bool allowPursuit) const; void enableLoadSettings(gdioutput &gdi); void readDrawInfo(gdioutput &gdi, DrawInfo &drawInfo); void writeDrawInfo(gdioutput &gdi, const DrawInfo &drawInfo); static vector< pair > getPairOptions(); void setLockForkingState(gdioutput &gdi, bool poolState, bool lockState); void loadBasicDrawSetup(gdioutput &gdi, int &bx, int &by, const wstring& firstStart, int maxNumControl, const wstring& minInterval, const wstring& vacances, const set &clsId); void loadReadyToDistribute(gdioutput &gdi, int &bx, int &by); public: void clearCompetitionData(); void closeWindow(gdioutput &gdi); void saveClassSettingsTable(gdioutput &gdi); void multiCourse(gdioutput &gdi, int nLeg); bool loadPage(gdioutput &gdi); void selectClass(gdioutput &gdi, int cid); int classCB(gdioutput &gdi, int type, void *data); int multiCB(gdioutput &gdi, int type, void *data); const char * getTypeStr() const {return "TClassTab";} TabType getType() const {return TClassTab;} friend int DrawClassesCB(gdioutput *gdi, int type, void *data); TabClass(oEvent *oe); ~TabClass(void); };