MeOS version 3.5.880 Update 1
This commit is contained in:
parent
383eb286ce
commit
00906d29ea
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -40,7 +40,7 @@ MeOSFeatures::MeOSFeatures(void)
|
||||
add(Network, L"NW", "Several MeOS Clients in a network");
|
||||
|
||||
addHead("MeOS Features");
|
||||
add(Speaker, L"SP", "Använd speakerstöd");
|
||||
add(Speaker, L"SP", "Använd speakerstöd");
|
||||
add(SeveralStages, L"ST", "Several stages");
|
||||
add(Economy, L"EC", "Economy and fees").require(EditClub).require(Clubs);
|
||||
add(Vacancy, L"VA", "Vacancies and entry cancellations").require(DrawStartList);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// printer.h: printing utilities.
|
||||
// printer.h: printing utilities.
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "RestService.h"
|
||||
#include "meos_util.h"
|
||||
#include "restserver.h"
|
||||
@ -42,7 +42,7 @@ void RestService::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
if (!server)
|
||||
gdi.addInput("Port", itow(port), 10, 0, L"Port:", L"#http://localhost:[PORT]/meos");
|
||||
else
|
||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||
|
||||
gdi.popX();
|
||||
gdi.addString("", 10, "help:rest");
|
||||
@ -53,13 +53,13 @@ void RestService::status(gdioutput &gdi) {
|
||||
gdi.addString("", 1, name);
|
||||
|
||||
if (server) {
|
||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||
|
||||
RestServer::Statistics rs;
|
||||
server->getStatistics(rs);
|
||||
gdi.addString("", 0, "Antal förfrågningar: X.#" + itos(rs.numRequests));
|
||||
gdi.addString("", 0, "Antal förfrågningar: X.#" + itos(rs.numRequests));
|
||||
gdi.addString("", 0, "Genomsnittlig svarstid: X ms.#" + itos(rs.averageResponseTime));
|
||||
gdi.addString("", 0, "Längsta svarstid: X ms.#" + itos(rs.maxResponseTime));
|
||||
gdi.addString("", 0, "Längsta svarstid: X ms.#" + itos(rs.maxResponseTime));
|
||||
|
||||
gdi.dropLine(0.6);
|
||||
gdi.addButton("Update", "Uppdatera").setHandler(this);
|
||||
@ -72,7 +72,7 @@ void RestService::status(gdioutput &gdi) {
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("InfoService", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("InfoService", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -579,7 +579,7 @@ void RunnerDB::setupCNHash() const
|
||||
static bool isVowel(int c) {
|
||||
return c=='a' || c=='e' || c=='i' ||
|
||||
c=='o' || c=='u' || c=='y' ||
|
||||
c=='å' || c=='ä' || c=='ö';
|
||||
c=='å' || c=='ä' || c=='ö';
|
||||
}
|
||||
|
||||
void RunnerDB::canonizeSplitName(const wstring &name, vector<wstring> &split)
|
||||
@ -617,7 +617,7 @@ void RunnerDB::canonizeSplitName(const wstring &name, vector<wstring> &split)
|
||||
}
|
||||
|
||||
if (outp>4 && out[outp-1]=='s')
|
||||
out[outp-1] = 0; // Identify Linköping och Linköpings
|
||||
out[outp-1] = 0; // Identify Linköping och Linköpings
|
||||
split.push_back(out);
|
||||
}
|
||||
while(cname[k] == ' ')
|
||||
@ -1206,7 +1206,7 @@ void RunnerDB::releaseTables() {
|
||||
Table *RunnerDB::getRunnerTB()//Table mode
|
||||
{
|
||||
if (runnerTable == 0) {
|
||||
Table *table=new Table(oe, 20, L"Löpardatabasen", "runnerdb");
|
||||
Table *table=new Table(oe, 20, L"Löpardatabasen", "runnerdb");
|
||||
|
||||
table->addColumn("Index", 70, true, true);
|
||||
table->addColumn("Id", 70, true, true);
|
||||
@ -1214,9 +1214,9 @@ Table *RunnerDB::getRunnerTB()//Table mode
|
||||
table->addColumn("Klubb", 200, false);
|
||||
table->addColumn("SI", 70, true, true);
|
||||
table->addColumn("Nationalitet", 70, false, true);
|
||||
table->addColumn("Kön", 50, false, true);
|
||||
table->addColumn("Födelseår", 70, true, true);
|
||||
table->addColumn("Anmäl", 70, false, true);
|
||||
table->addColumn("Kön", 50, false, true);
|
||||
table->addColumn("Födelseår", 70, true, true);
|
||||
table->addColumn("Anmäl", 70, false, true);
|
||||
|
||||
table->setTableProp(Table::CAN_INSERT|Table::CAN_DELETE|Table::CAN_PASTE);
|
||||
table->setClearOnHide(false);
|
||||
@ -1292,7 +1292,7 @@ Table *RunnerDB::getClubTB()//Table mode
|
||||
Table *table = new Table(oe, 20, L"Klubbdatabasen", "clubdb");
|
||||
|
||||
table->addColumn("Id", 70, true, true);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
|
||||
table->addColumn("Namn", 200, false);
|
||||
oClub::buildTableCol(oe, table);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
@ -27,7 +27,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -1768,7 +1768,7 @@ void SICard::analyseHour12Time(DWORD zeroTime) {
|
||||
void SIPunch::analyseHour12Time(DWORD zeroTime) {
|
||||
if (Code != -1 && Time>=0 && Time <=12*3600) {
|
||||
if (zeroTime < 12 * 3600) {
|
||||
//Förmiddag
|
||||
//Förmiddag
|
||||
if (Time < zeroTime)
|
||||
Time += 12 * 3600; //->Eftermiddag
|
||||
}
|
||||
@ -1896,7 +1896,6 @@ void SportIdent::addCard(const SICard &sic)
|
||||
void SportIdent::addPunch(DWORD Time, int Station, int Card, int Mode)
|
||||
{
|
||||
SICard sic(ConvertedTimeStatus::Hour24);
|
||||
memset(&sic, 0, sizeof(sic));
|
||||
sic.CardNumber=Card;
|
||||
sic.StartPunch.Code = -1;
|
||||
sic.CheckPunch.Code = -1;
|
||||
@ -2115,8 +2114,8 @@ void SportIdent::getInfoString(const wstring &com, vector<wstring> &infov)
|
||||
info += makeDash(L"-") + itow(k+1);
|
||||
|
||||
const SI_StationData &da = si->data[k];
|
||||
if (da.extended) info+=lang.tl(L": Utökat protokoll. ");
|
||||
else info+=lang.tl(L": Äldre protokoll. ");
|
||||
if (da.extended) info+=lang.tl(L": Utökat protokoll. ");
|
||||
else info+=lang.tl(L": Äldre protokoll. ");
|
||||
|
||||
switch(da.stationMode){
|
||||
case 2:
|
||||
@ -2124,16 +2123,16 @@ void SportIdent::getInfoString(const wstring &com, vector<wstring> &infov)
|
||||
info+=lang.tl(L"Kontrol");
|
||||
break;
|
||||
case 4:
|
||||
info+=lang.tl(L"Mål");
|
||||
info+=lang.tl(L"Mål");
|
||||
break;
|
||||
case 3:
|
||||
info+=lang.tl(L"Start");
|
||||
break;
|
||||
case 5:
|
||||
info+=lang.tl(L"Läs brickor");
|
||||
info+=lang.tl(L"Läs brickor");
|
||||
break;
|
||||
case 7:
|
||||
info+=lang.tl(L"Töm");
|
||||
info+=lang.tl(L"Töm");
|
||||
break;
|
||||
case 10:
|
||||
info+=lang.tl(L"Check");
|
||||
@ -2142,7 +2141,7 @@ void SportIdent::getInfoString(const wstring &com, vector<wstring> &infov)
|
||||
info+=lang.tl(L"SRR Dongle ") + (da.radioChannel == 0? lang.tl(L"red channel.") : lang.tl(L"blue channel."));
|
||||
break;
|
||||
default:
|
||||
info+=lang.tl(L"Okänd funktion");
|
||||
info+=lang.tl(L"Okänd funktion");
|
||||
}
|
||||
|
||||
if (da.stationNumber) {
|
||||
@ -2152,9 +2151,9 @@ void SportIdent::getInfoString(const wstring &com, vector<wstring> &infov)
|
||||
}
|
||||
|
||||
info += lang.tl(L" Kommunikation: ");
|
||||
if (da.autoSend) info+=lang.tl(L"skicka stämplar.");
|
||||
if (da.autoSend) info+=lang.tl(L"skicka stämplar.");
|
||||
else if (da.handShake) info+=lang.tl(L"handskakning.");
|
||||
else info+=lang.tl(L"[VARNING] ingen/okänd.");
|
||||
else info+=lang.tl(L"[VARNING] ingen/okänd.");
|
||||
|
||||
infov.push_back(info);
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// SportIdent.h: interface for the SportIdent class.
|
||||
// SportIdent.h: interface for the SportIdent class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
const BYTE STX=0x02;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
//meos.pch will be the pre-compiled header
|
||||
//stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
106
code/TabAuto.cpp
106
code/TabAuto.cpp
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -169,7 +169,7 @@ void TabAuto::syncCallback(gdioutput &gdi)
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
if (!msg.empty()) {
|
||||
gdi.alert(msg);
|
||||
@ -240,7 +240,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
int nRunner=gdi.getTextNo("nRunner");
|
||||
|
||||
if (nRunner>0 &&
|
||||
gdi.ask(L"Vill du dumpa aktuellt tävling och skapa en testtävling?")) {
|
||||
gdi.ask(L"Vill du dumpa aktuellt tävling och skapa en testtävling?")) {
|
||||
oe->generateTestCompetition(nClass, nRunner, gdi.isChecked("UseRelay"));
|
||||
gdi.getTabs().get(TCmpTab)->loadPage(gdi);
|
||||
return 0;
|
||||
@ -328,7 +328,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
int t=convertAbsoluteTimeMS(minute);
|
||||
|
||||
if (t<2 || t>7200) {
|
||||
gdi.alert("Intervallet måste anges på formen MM:SS.");
|
||||
gdi.alert("Intervallet måste anges på formen MM:SS.");
|
||||
}
|
||||
else {
|
||||
PrintResultMachine *prm=dynamic_cast<PrintResultMachine*>(getMachine(bu.getExtraInt()));
|
||||
@ -385,7 +385,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
}
|
||||
|
||||
if (file.empty()) {
|
||||
throw meosException("Filnamnet får inte vara tomt");
|
||||
throw meosException("Filnamnet får inte vara tomt");
|
||||
}
|
||||
|
||||
//Try exporting.
|
||||
@ -508,7 +508,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
else if ( bu.id == "BrowseSplits") {
|
||||
int index=0;
|
||||
vector< pair<wstring, wstring> > ext;
|
||||
ext.push_back(make_pair(L"Sträcktider", L"*.xml"));
|
||||
ext.push_back(make_pair(L"Sträcktider", L"*.xml"));
|
||||
|
||||
wstring wf = gdi.browseForSave(ext, L"xml", index);
|
||||
|
||||
@ -599,22 +599,22 @@ bool TabAuto::loadPage(gdioutput &gdi)
|
||||
gdi.addString("", 10, "help:10000");
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", fontMediumPlus, "Tillgängliga automater").setColor(colorDarkBlue);
|
||||
gdi.addString("", fontMediumPlus, "Tillgängliga automater").setColor(colorDarkBlue);
|
||||
gdi.dropLine();
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addButton("Result", "Resultatutskrift / export", AutomaticCB, "tooltip:resultprint");
|
||||
gdi.addButton("OnlineResults", "Resultat online", AutomaticCB, "Publicera resultat direkt på nätet");
|
||||
gdi.addButton("OnlineInput", "Inmatning online", AutomaticCB, "Hämta stämplingar m.m. från nätet");
|
||||
gdi.addButton("OnlineResults", "Resultat online", AutomaticCB, "Publicera resultat direkt på nätet");
|
||||
gdi.addButton("OnlineInput", "Inmatning online", AutomaticCB, "Hämta stämplingar m.m. från nätet");
|
||||
gdi.popX();
|
||||
gdi.dropLine(2.5);
|
||||
gdi.addButton("SaveBackup", "Säkerhetskopiering", AutomaticCB);
|
||||
gdi.addButton("SaveBackup", "Säkerhetskopiering", AutomaticCB);
|
||||
gdi.addButton("InfoService", "Informationsserver", AutomaticCB);
|
||||
gdi.addButton("Punches", "Stämplingstest", AutomaticCB, "Simulera inläsning av stämplar");
|
||||
gdi.addButton("Punches", "Stämplingstest", AutomaticCB, "Simulera inläsning av stämplar");
|
||||
gdi.popX();
|
||||
gdi.dropLine(2.5);
|
||||
gdi.addButton("Splits", "Sträcktider (WinSplits)", AutomaticCB, "Spara sträcktider till en fil för automatisk synkronisering med WinSplits");
|
||||
gdi.addButton("Prewarning", "Förvarningsröst", AutomaticCB, "tooltip:voice");
|
||||
gdi.addButton("Splits", "Sträcktider (WinSplits)", AutomaticCB, "Spara sträcktider till en fil för automatisk synkronisering med WinSplits");
|
||||
gdi.addButton("Prewarning", "Förvarningsröst", AutomaticCB, "tooltip:voice");
|
||||
|
||||
|
||||
gdi.fillDown();
|
||||
@ -704,7 +704,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("DoPrint", "Skriv ut", AutomaticCB, doPrint);
|
||||
gdi.dropLine(-0.5);
|
||||
gdi.addButton("PrinterSetup", "Skrivare...", AutomaticCB, "Välj skrivare...").setExtra(getId());
|
||||
gdi.addButton("PrinterSetup", "Skrivare...", AutomaticCB, "Välj skrivare...").setExtra(getId());
|
||||
|
||||
gdi.dropLine(4);
|
||||
gdi.popX();
|
||||
@ -713,16 +713,16 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
int cx = gdi.getCX();
|
||||
gdi.addInput("ExportFile", exportFile, 32, 0, L"Fil att exportera till:");
|
||||
gdi.dropLine(0.7);
|
||||
gdi.addButton("BrowseFile", "Bläddra...", AutomaticCB);
|
||||
gdi.addButton("BrowseFile", "Bläddra...", AutomaticCB);
|
||||
gdi.setCX(cx);
|
||||
gdi.dropLine(2.3);
|
||||
gdi.addCheckbox("StructuredExport", "Strukturerat exportformat", 0, structuredExport);
|
||||
gdi.addCheckbox("HTMLRefresh", "HTML med AutoRefresh", 0, htmlRefresh != 0);
|
||||
gdi.dropLine(1.2);
|
||||
gdi.setCX(cx);
|
||||
gdi.addInput("ExportScript", exportScript, 32, 0, L"Skript att köra efter export:");
|
||||
gdi.addInput("ExportScript", exportScript, 32, 0, L"Skript att köra efter export:");
|
||||
gdi.dropLine(0.7);
|
||||
gdi.addButton("BrowseScript", "Bläddra...", AutomaticCB);
|
||||
gdi.addButton("BrowseScript", "Bläddra...", AutomaticCB);
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
|
||||
@ -763,7 +763,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
else
|
||||
gdi.selectItemByData("ListType", listInfo.getListCode());
|
||||
|
||||
gdi.addSelection("LegNumber", 140, 300, 0, L"Sträcka:");
|
||||
gdi.addSelection("LegNumber", 140, 300, 0, L"Sträcka:");
|
||||
set<int> clsUnused;
|
||||
vector< pair<wstring, size_t> > out;
|
||||
oe.fillLegNumbers(clsUnused, listInfo.isTeamList(), true, out);
|
||||
@ -772,20 +772,20 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, pageBreak);
|
||||
gdi.addCheckbox("ShowInterResults", "Visa mellantider", 0, showInterResult,
|
||||
"Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", 0, splitAnalysis);
|
||||
"Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", 0, splitAnalysis);
|
||||
|
||||
gdi.addCheckbox("OnlyChanged", "Skriv endast ut ändade sidor", 0, po.onlyChanged);
|
||||
gdi.addCheckbox("OnlyChanged", "Skriv endast ut ändade sidor", 0, po.onlyChanged);
|
||||
|
||||
gdi.popX();
|
||||
gdi.addButton("SelectAll", "Välj allt", AutomaticCB, "").setExtra(L"Classes");
|
||||
gdi.addButton("SelectAll", "Välj allt", AutomaticCB, "").setExtra(L"Classes");
|
||||
gdi.popX();
|
||||
gdi.addButton("SelectNone", "Välj inget", AutomaticCB, "").setExtra(L"Classes");
|
||||
gdi.addButton("SelectNone", "Välj inget", AutomaticCB, "").setExtra(L"Classes");
|
||||
}
|
||||
else {
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 1, L"Lista av typ 'X'#" + listInfo.getName());
|
||||
gdi.addCheckbox("OnlyChanged", "Skriv endast ut ändade sidor", 0, po.onlyChanged);
|
||||
gdi.addCheckbox("OnlyChanged", "Skriv endast ut ändade sidor", 0, po.onlyChanged);
|
||||
}
|
||||
}
|
||||
|
||||
@ -848,7 +848,7 @@ void PrintResultMachine::status(gdioutput &gdi)
|
||||
gdi.dropLine();
|
||||
if (doExport) {
|
||||
gdi.popX();
|
||||
gdi.addString("", 0, "Målfil: ");
|
||||
gdi.addString("", 0, "Målfil: ");
|
||||
gdi.addStringUT(0, exportFile).setColor(colorRed);
|
||||
gdi.dropLine();
|
||||
}
|
||||
@ -866,12 +866,12 @@ void PrintResultMachine::status(gdioutput &gdi)
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("PrintNow", "Exportera nu", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Result", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("Result", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
void PrewarningMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
settingsTitle(gdi, "Förvarningsröst");
|
||||
settingsTitle(gdi, "Förvarningsröst");
|
||||
startCancelInterval(gdi, "StartPrewarning", created, IntervalNone, L"");
|
||||
|
||||
gdi.addString("", 10, "help:computer_voice");
|
||||
@ -882,7 +882,7 @@ void PrewarningMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.dropLine();
|
||||
gdi.addButton("WaveBrowse", "Bläddra...", AutomaticCB);
|
||||
gdi.addButton("WaveBrowse", "Bläddra...", AutomaticCB);
|
||||
gdi.popX();
|
||||
|
||||
gdi.addListBox("Controls", 100, 200, 0, L"", L"", true);
|
||||
@ -893,7 +893,7 @@ void PrewarningMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setSelection("Controls", controls);
|
||||
gdi.popX();
|
||||
gdi.addButton("SelectAll", "Välj alla", AutomaticCB, "").setExtra(L"Controls");
|
||||
gdi.addButton("SelectAll", "Välj alla", AutomaticCB, "").setExtra(L"Controls");
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
@ -906,11 +906,11 @@ void PrewarningMachine::status(gdioutput &gdi)
|
||||
{
|
||||
gdi.addString("", 1, name);
|
||||
|
||||
string info="Förvarning på (SI-kod): ";
|
||||
string info="Förvarning på (SI-kod): ";
|
||||
bool first=true;
|
||||
|
||||
if (controls.empty())
|
||||
info+="alla stämplingar";
|
||||
info+="alla stämplingar";
|
||||
else {
|
||||
for (set<int>::iterator it=controlsSI.begin();it!=controlsSI.end();++it) {
|
||||
char bf[32];
|
||||
@ -929,14 +929,14 @@ void PrewarningMachine::status(gdioutput &gdi)
|
||||
gdi.popX();
|
||||
gdi.dropLine(0.3);
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("TestVoice", "Testa rösten", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("TestVoice", "Testa rösten", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Prewarning", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("Prewarning", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
void PunchMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
settingsTitle(gdi, "Test av stämplingsinläsningar");
|
||||
settingsTitle(gdi, "Test av stämplingsinläsningar");
|
||||
wstring time=created ? L"10" : itow(interval);
|
||||
startCancelInterval(gdi, "StartPunch", created, IntervalSecond, time);
|
||||
|
||||
@ -953,13 +953,13 @@ void PunchMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
gdi.dropLine(5);
|
||||
gdi.addString("", 1, "Generera testtävling");
|
||||
gdi.addString("", 1, "Generera testtävling");
|
||||
gdi.fillRight();
|
||||
gdi.addInput("nRunner", L"100", 10, 0, L"Antal löpare");
|
||||
gdi.addInput("nRunner", L"100", 10, 0, L"Antal löpare");
|
||||
gdi.addInput("nClass", L"10", 10, 0, L"Antal klasser");
|
||||
gdi.dropLine();
|
||||
gdi.addCheckbox("UseRelay", "Med stafettklasser");
|
||||
gdi.addButton("GenerateCMP", "Generera testtävling", AutomaticCB);
|
||||
gdi.addButton("GenerateCMP", "Generera testtävling", AutomaticCB);
|
||||
}
|
||||
|
||||
void PunchMachine::status(gdioutput &gdi)
|
||||
@ -968,7 +968,7 @@ void PunchMachine::status(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
if (interval>0){
|
||||
gdi.addString("", 0, "Stämplar om: ");
|
||||
gdi.addString("", 0, "Stämplar om: ");
|
||||
gdi.addTimer(gdi.getCY(), gdi.getCX(), timerIgnoreSign|timeSeconds, (GetTickCount()-timeout)/1000);
|
||||
gdi.addString("", 0, "(sekunder)");
|
||||
}
|
||||
@ -979,7 +979,7 @@ void PunchMachine::status(gdioutput &gdi)
|
||||
gdi.dropLine(2);
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Punches", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("Punches", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
@ -1040,11 +1040,11 @@ void SplitsMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
else if (created)
|
||||
time = L"30";
|
||||
|
||||
settingsTitle(gdi, "Sträcktider / WinSplits");
|
||||
settingsTitle(gdi, "Sträcktider / WinSplits");
|
||||
startCancelInterval(gdi, "StartSplits", created, IntervalSecond, time);
|
||||
|
||||
gdi.addString("", 0, "Intervall (sekunder). Lämna blankt för att uppdatera när "
|
||||
"tävlingsdata ändras.");
|
||||
gdi.addString("", 0, "Intervall (sekunder). Lämna blankt för att uppdatera när "
|
||||
"tävlingsdata ändras.");
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.addString("", 10, "help:winsplits_auto");
|
||||
@ -1054,7 +1054,7 @@ void SplitsMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
gdi.fillRight();
|
||||
gdi.addInput("FileName", file, 30, 0, L"Filnamn:");
|
||||
gdi.dropLine(0.9);
|
||||
gdi.addButton("BrowseSplits", "Bläddra...", AutomaticCB);
|
||||
gdi.addButton("BrowseSplits", "Bläddra...", AutomaticCB);
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
@ -1072,13 +1072,13 @@ void SplitsMachine::status(gdioutput &gdi)
|
||||
if (interval>0){
|
||||
gdi.popX();
|
||||
gdi.dropLine(1);
|
||||
gdi.addString("", 0, "Skriver sträcktider om: ");
|
||||
gdi.addString("", 0, "Skriver sträcktider om: ");
|
||||
gdi.addTimer(gdi.getCY(), gdi.getCX(), timerIgnoreSign|timeSeconds, (GetTickCount()-timeout)/1000);
|
||||
gdi.addString("", 0, "(sekunder)");
|
||||
}
|
||||
else {
|
||||
gdi.dropLine(1);
|
||||
gdi.addString("", 0, "Skriver sträcktider när tävlingsdata ändras.");
|
||||
gdi.addString("", 0, "Skriver sträcktider när tävlingsdata ändras.");
|
||||
}
|
||||
|
||||
gdi.popX();
|
||||
@ -1086,7 +1086,7 @@ void SplitsMachine::status(gdioutput &gdi)
|
||||
gdi.dropLine(2);
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Splits", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("Splits", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
@ -1109,7 +1109,7 @@ void SaveMachine::status(gdioutput &gdi) {
|
||||
if (interval>0){
|
||||
gdi.popX();
|
||||
gdi.dropLine(1);
|
||||
gdi.addString("", 0, "Säkerhetskopierar om: ");
|
||||
gdi.addString("", 0, "Säkerhetskopierar om: ");
|
||||
gdi.addTimer(gdi.getCY(), gdi.getCX(), timerIgnoreSign, (GetTickCount()-timeout)/1000);
|
||||
}
|
||||
|
||||
@ -1118,7 +1118,7 @@ void SaveMachine::status(gdioutput &gdi) {
|
||||
gdi.dropLine(2);
|
||||
gdi.addButton("Stop", "Stoppa automaten", AutomaticCB).setExtra(getId());
|
||||
gdi.fillDown();
|
||||
gdi.addButton("SaveBackup", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.addButton("SaveBackup", "Inställningar...", AutomaticCB).setExtra(getId());
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
@ -1133,14 +1133,14 @@ void SaveMachine::process(gdioutput &gdi, oEvent *oe, AutoSyncType ast) {
|
||||
}
|
||||
|
||||
void SaveMachine::settings(gdioutput &gdi, oEvent &oe, bool created) {
|
||||
settingsTitle(gdi, "Säkerhetskopiering");
|
||||
settingsTitle(gdi, "Säkerhetskopiering");
|
||||
wstring time=created ? L"10:00" : getTimeMS(interval);
|
||||
startCancelInterval(gdi, "StartBackup", created, IntervalMinute, time);
|
||||
|
||||
int cx = gdi.getCX();
|
||||
gdi.addInput("BaseFile", baseFile, 32, 0, L"Mapp:");
|
||||
gdi.dropLine(0.7);
|
||||
gdi.addButton("BrowseFolder", "Bläddra...", AutomaticCB).setExtra(L"BaseFile");
|
||||
gdi.addButton("BrowseFolder", "Bläddra...", AutomaticCB).setExtra(L"BaseFile");
|
||||
gdi.setCX(cx);
|
||||
}
|
||||
|
||||
@ -1150,11 +1150,11 @@ void SaveMachine::saveSettings(gdioutput &gdi) {
|
||||
int t=convertAbsoluteTimeMS(minute);
|
||||
|
||||
if (t<2 || t>7200) {
|
||||
throw meosException("Intervallet måste anges på formen MM:SS.");
|
||||
throw meosException("Intervallet måste anges på formen MM:SS.");
|
||||
}
|
||||
wstring f = gdi.getText("BaseFile");
|
||||
if (f.empty()) {
|
||||
throw meosException("Filnamnet får inte vara tomt");
|
||||
throw meosException("Filnamnet får inte vara tomt");
|
||||
}
|
||||
|
||||
if (*f.rbegin() != '\\' && *f.rbegin() != '/')
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -160,7 +160,7 @@ public:
|
||||
void settings(gdioutput &gdi, oEvent &oe, bool created);
|
||||
void saveSettings(gdioutput &gdi);
|
||||
|
||||
SaveMachine():AutoMachine("Säkerhetskopiera") , saveIter(0) {
|
||||
SaveMachine():AutoMachine("Säkerhetskopiera") , saveIter(0) {
|
||||
}
|
||||
};
|
||||
|
||||
@ -177,7 +177,7 @@ public:
|
||||
PrewarningMachine *clone() const {return new PrewarningMachine(*this);}
|
||||
void status(gdioutput &gdi);
|
||||
void process(gdioutput &gdi, oEvent *oe, AutoSyncType ast);
|
||||
PrewarningMachine():AutoMachine("Förvarningsröst") {}
|
||||
PrewarningMachine():AutoMachine("Förvarningsröst") {}
|
||||
friend class TabAuto;
|
||||
};
|
||||
|
||||
@ -212,7 +212,7 @@ public:
|
||||
void settings(gdioutput &gdi, oEvent &oe, bool created);
|
||||
void status(gdioutput &gdi);
|
||||
void process(gdioutput &gdi, oEvent *oe, AutoSyncType ast);
|
||||
PunchMachine():AutoMachine("Stämplingsautomat"), radio(0) {}
|
||||
PunchMachine():AutoMachine("Stämplingsautomat"), radio(0) {}
|
||||
friend class TabAuto;
|
||||
};
|
||||
|
||||
@ -228,7 +228,7 @@ public:
|
||||
void settings(gdioutput &gdi, oEvent &oe, bool created);
|
||||
void status(gdioutput &gdi);
|
||||
void process(gdioutput &gdi, oEvent *oe, AutoSyncType ast);
|
||||
SplitsMachine() : AutoMachine("Sträcktider/WinSplits"), leg(-1) {}
|
||||
SplitsMachine() : AutoMachine("Sträcktider/WinSplits"), leg(-1) {}
|
||||
friend class TabAuto;
|
||||
};
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -220,7 +220,7 @@ int TabClass::multiCB(gdioutput &gdi, int type, void *data)
|
||||
for (size_t k = 0; k < allR.size(); k++) {
|
||||
if (allR[k]->getCourseId() != 0) {
|
||||
if (!doClear) {
|
||||
if (gdi.ask(L"Vill du nollställa alla manuellt tilldelade banor?"))
|
||||
if (gdi.ask(L"Vill du nollställa alla manuellt tilldelade banor?"))
|
||||
doClear = true;
|
||||
else
|
||||
break;
|
||||
@ -322,9 +322,9 @@ int TabClass::multiCB(gdioutput &gdi, int type, void *data)
|
||||
if (j == 0)
|
||||
ctrl += lang.tl("Start");
|
||||
else if (j + 1 == forks[k].size())
|
||||
ctrl += lang.tl("Mål");
|
||||
ctrl += lang.tl("Mål");
|
||||
else
|
||||
ctrl += lang.tl("Växel");
|
||||
ctrl += lang.tl("Växel");
|
||||
}
|
||||
int next = -100;
|
||||
if (j + 1 < forks[k].size()) {
|
||||
@ -355,14 +355,14 @@ int TabClass::multiCB(gdioutput &gdi, int type, void *data)
|
||||
for (set< pair<int, int> >::const_iterator p = unfairLegs.begin();
|
||||
p != unfairLegs.end(); ++p) {
|
||||
|
||||
wstring f = p->first > 0 ? itow(p->first) : lang.tl("Växel");
|
||||
wstring s = p->second > 0 ? itow(p->second) : lang.tl("Växel");
|
||||
wstring f = p->first > 0 ? itow(p->first) : lang.tl("Växel");
|
||||
wstring s = p->second > 0 ? itow(p->second) : lang.tl("Växel");
|
||||
gdi_new->addStringUT(0, makeDash(f + L" - " + s));
|
||||
}
|
||||
}
|
||||
|
||||
gdi_new->dropLine();
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
gdi_new->refresh();
|
||||
}
|
||||
else if (bi.id == "OneCourse") {
|
||||
@ -462,7 +462,7 @@ int TabClass::multiCB(gdioutput &gdi, int type, void *data)
|
||||
oe->adjustTeamMultiRunners(pc);
|
||||
}
|
||||
else {
|
||||
gdi.alert("Antalet sträckor måste vara ett heltal mellan 0 och 40.");
|
||||
gdi.alert("Antalet sträckor måste vara ett heltal mellan 0 och 40.");
|
||||
}
|
||||
}
|
||||
else if (bi.id.substr(0, 7)=="@Course") {
|
||||
@ -637,7 +637,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addInput("Restart", oe->getAbsTime(t+600), 6, 0, L"Omstartstid");
|
||||
gdi.dropLine(0.9);
|
||||
gdi.addButton("DoRestart","OK", ClassesCB);
|
||||
gdi.addButton("Cancel","Stäng", ClassesCB);
|
||||
gdi.addButton("Cancel","Stäng", ClassesCB);
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
@ -661,11 +661,11 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
return 0;
|
||||
}
|
||||
if (restart<rope) {
|
||||
gdi.alert("Repdragningstiden måste ligga före omstartstiden.");
|
||||
gdi.alert("Repdragningstiden måste ligga före omstartstiden.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
gdi.addString("", 0, L"Sätter reptid (X) och omstartstid (Y) för:#" +
|
||||
gdi.addString("", 0, L"Sätter reptid (X) och omstartstid (Y) för:#" +
|
||||
oe->getAbsTime(rope) + L"#" + oe->getAbsTime(restart));
|
||||
|
||||
for (it=cls.begin(); it!=cls.end(); ++it) {
|
||||
@ -822,7 +822,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addString("", boldLarge, "Lotta flera klasser");
|
||||
gdi.dropLine(0.5);
|
||||
|
||||
gdi.addString("", 0, "Importerar lottningsinställningar...");
|
||||
gdi.addString("", 0, "Importerar lottningsinställningar...");
|
||||
set<int> classes;
|
||||
for (auto &ds : DrawSettingsCSV::read(gdi, *oe, fn)) {
|
||||
pClass pc = oe->getClass(ds.classId);
|
||||
@ -891,7 +891,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
oe->addAutoBib();
|
||||
|
||||
clearPage(gdi, false);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
|
||||
oListParam par;
|
||||
oListInfo info;
|
||||
@ -904,7 +904,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.refresh();
|
||||
}
|
||||
else if (bi.id == "RemoveVacant") {
|
||||
if (gdi.ask(L"Vill du radera alla vakanser från tävlingen?")) {
|
||||
if (gdi.ask(L"Vill du radera alla vakanser från tävlingen?")) {
|
||||
oe->removeVacanies(0);
|
||||
gdi.disableInput(bi.id.c_str());
|
||||
}
|
||||
@ -955,7 +955,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(3600), 10, 0, L"Första (ordinarie) start:");
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(3600), 10, 0, L"Första (ordinarie) start:");
|
||||
gdi.addInput("MinInterval", L"2:00", 10, 0, L"Minsta startintervall:");
|
||||
gdi.fillDown();
|
||||
gdi.addInput("Vacances", L"5%", 10, 0, L"Andel vakanser:");
|
||||
@ -967,7 +967,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.selectItemByData("Method", getDefaultMethod({ DMRandom, DMSOFT }));
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("LateBefore", "Efteranmälda före ordinarie");
|
||||
gdi.addCheckbox("LateBefore", "Efteranmälda före ordinarie");
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.popX();
|
||||
@ -981,7 +981,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
if (multiDay)
|
||||
gdi.addButton("Pursuit", "Hantera jaktstart", ClassesCB);
|
||||
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setCancel();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setCancel();
|
||||
|
||||
|
||||
gdi.dropLine(3);
|
||||
@ -1083,7 +1083,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
oe->generateListInfo(par, gdi.getLineHeight(), info);
|
||||
oe->generateList(gdi, false, info, true);
|
||||
gdi.dropLine();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.refresh();
|
||||
}
|
||||
else if (bi.id.substr(0,5) == "PLUse") {
|
||||
@ -1111,7 +1111,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
lateBefore, useSoft, pairSize);
|
||||
oe->addAutoBib();
|
||||
gdi.scrollToBottom();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
}
|
||||
else if (bi.id == "SelectMisses") {
|
||||
set<int> lst;
|
||||
@ -1224,12 +1224,12 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdioutput *gdi_new = getExtraWindow("help", true);
|
||||
|
||||
if (!gdi_new)
|
||||
gdi_new = createExtraWindow("help", makeDash(L"MeOS - " + lang.tl(L"Hjälp")), gdi.scaleLength(640));
|
||||
gdi_new = createExtraWindow("help", makeDash(L"MeOS - " + lang.tl(L"Hjälp")), gdi.scaleLength(640));
|
||||
gdi_new->clearPage(true);
|
||||
gdi_new->addString("", boldLarge, "Lotta flera klasser");
|
||||
gdi_new->addString("", 10, "help_draw");
|
||||
gdi_new->dropLine();
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
}
|
||||
else if (bi.id == "CloseWindow") {
|
||||
gdi.closeWindow();
|
||||
@ -1243,7 +1243,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.restore("ReadyToDistribute");
|
||||
/*
|
||||
gdi.addButton("Cancel", "Avbryt", ClassesCB).setCancel();
|
||||
gdi.addButton("HelpDraw", "Hjälp...", ClassesCB, "");
|
||||
gdi.addButton("HelpDraw", "Hjälp...", ClassesCB, "");
|
||||
gdi.dropLine(3);
|
||||
*/
|
||||
|
||||
@ -1268,12 +1268,12 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
throw meosException("Ogiltigt maximalt intervall. ");
|
||||
|
||||
if (drawInfo.minClassInterval < drawInfo.baseInterval) {
|
||||
throw meosException("Startintervallet får inte vara kortare än basintervallet.");
|
||||
throw meosException("Startintervallet får inte vara kortare än basintervallet.");
|
||||
}
|
||||
|
||||
if (drawInfo.minClassInterval % drawInfo.baseInterval != 0 ||
|
||||
drawInfo.maxClassInterval % drawInfo.baseInterval != 0) {
|
||||
throw meosException("Ett startintervall måste vara en multipel av basintervallet.");
|
||||
throw meosException("Ett startintervall måste vara en multipel av basintervallet.");
|
||||
}
|
||||
|
||||
gdi.enableEditControls(false);
|
||||
@ -1306,16 +1306,16 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdioutput *gdi_new = getExtraWindow(visualDrawWindow, true);
|
||||
if (!gdi_new)
|
||||
gdi_new = createExtraWindow(visualDrawWindow, makeDash(L"MeOS - " + lang.tl(L"Visualisera startfältet")), gdi.scaleLength(1000));
|
||||
gdi_new = createExtraWindow(visualDrawWindow, makeDash(L"MeOS - " + lang.tl(L"Visualisera startfältet")), gdi.scaleLength(1000));
|
||||
|
||||
gdi_new->clearPage(false);
|
||||
gdi_new->addString("", boldLarge, "Visualisera startfältet");
|
||||
gdi_new->addString("", boldLarge, "Visualisera startfältet");
|
||||
gdi_new->dropLine();
|
||||
gdi_new->addString("", 0, "För muspekaren över en markering för att få mer information.");
|
||||
gdi_new->addString("", 0, "För muspekaren över en markering för att få mer information.");
|
||||
gdi_new->dropLine();
|
||||
visualizeField(*gdi_new);
|
||||
gdi_new->dropLine();
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
gdi_new->addButton("CloseWindow", "Stäng", ClassesCB);
|
||||
gdi_new->registerEvent("CloseWindow", 0).setHandler(&handleCloseWindow);
|
||||
gdi_new->refresh();
|
||||
gdi.refreshFast();
|
||||
@ -1402,7 +1402,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
int t=oe->getRelativeTime(time);
|
||||
|
||||
if (t<=0)
|
||||
throw std::exception("Ogiltig första starttid. Måste vara efter nolltid.");
|
||||
throw std::exception("Ogiltig första starttid. Måste vara efter nolltid.");
|
||||
|
||||
|
||||
oEvent::DrawType dtype(oEvent::drawAll);
|
||||
@ -1470,7 +1470,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
sg.push_back(val);
|
||||
}
|
||||
if (invalid || sg.empty())
|
||||
throw meosException(L"Ogiltig storlek på seedningsgrupper X.#" + seedGroups);
|
||||
throw meosException(L"Ogiltig storlek på seedningsgrupper X.#" + seedGroups);
|
||||
|
||||
bool noClubNb = gdi.isChecked("PreventClubNb");
|
||||
bool reverse = gdi.isChecked("ReverseSeedning");
|
||||
@ -1490,7 +1490,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
// Clear input
|
||||
gdi.restore("", false);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setCancel();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setCancel();
|
||||
|
||||
gdi.dropLine();
|
||||
|
||||
@ -1558,7 +1558,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
bool multiDay = oe->hasPrevStage();
|
||||
|
||||
if (multiDay) {
|
||||
gdi.addCheckbox("HandleMultiDay", "Använd funktioner för fleretappsklass", ClassesCB, true);
|
||||
gdi.addCheckbox("HandleMultiDay", "Använd funktioner för fleretappsklass", ClassesCB, true);
|
||||
}
|
||||
|
||||
gdi.addSelection("Method", 200, 200, ClassesCB, L"Metod:");
|
||||
@ -1621,7 +1621,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
vector< pair<wstring, size_t> > bibOptions;
|
||||
vector< pair<wstring, size_t> > bibTeamOptions;
|
||||
bibOptions.push_back(make_pair(lang.tl("Manuell"), AutoBibManual));
|
||||
bibOptions.push_back(make_pair(lang.tl("Löpande"), AutoBibConsecutive));
|
||||
bibOptions.push_back(make_pair(lang.tl("Löpande"), AutoBibConsecutive));
|
||||
bibOptions.push_back(make_pair(lang.tl("Ingen"), AutoBibNone));
|
||||
bibOptions.push_back(make_pair(lang.tl("Automatisk"), AutoBibExplicit));
|
||||
|
||||
@ -1638,8 +1638,8 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
if (pc->getNumDistinctRunners() > 1 || pc->getQualificationFinal()) {
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Oberoende"), BibFree));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Samma"), BibSame));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Ökande"), BibAdd));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Sträcka"), BibLeg));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Ökande"), BibAdd));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Sträcka"), BibLeg));
|
||||
gdi.addSelection("BibTeam", 80, 100, 0, L"Lagmedlem:", L"Ange relation mellan lagets och deltagarnas nummerlappar.");
|
||||
gdi.addItem("BibTeam", bibTeamOptions);
|
||||
gdi.selectItemByData("BibTeam", pc->getBibMode());
|
||||
@ -1701,7 +1701,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdi.restore("bib", false);
|
||||
gdi.dropLine();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setDefault();
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB).setDefault();
|
||||
|
||||
oListParam par;
|
||||
par.selection.insert(cid);
|
||||
@ -1774,7 +1774,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
pc->splitClass(ClassSplitMethod(lbi.data), parts, outClass);
|
||||
|
||||
clearPage(gdi, true);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
|
||||
oListParam par;
|
||||
par.selection.insert(outClass.begin(), outClass.end());
|
||||
@ -1824,17 +1824,17 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
}
|
||||
if (cls.empty())
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
|
||||
|
||||
clearPage(gdi, true);
|
||||
gdi.addString("", boldLarge, L"Slå ihop klass: X (denna klass behålls)#" + pc->getName());
|
||||
gdi.addString("", boldLarge, L"Slå ihop klass: X (denna klass behålls)#" + pc->getName());
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 10, "help:12138");
|
||||
gdi.dropLine(2);
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("Class", 150, 300, 0, L"Klass att slå ihop:");
|
||||
gdi.addSelection("Class", 150, 300, 0, L"Klass att slå ihop:");
|
||||
gdi.addItem("Class", cls);
|
||||
if (def != -1)
|
||||
gdi.selectItemByData("Class", def);
|
||||
@ -1842,7 +1842,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.selectFirstItem("Class");
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addButton("DoMergeAsk", "Slå ihop", ClassesCB).setDefault();
|
||||
gdi.addButton("DoMergeAsk", "Slå ihop", ClassesCB).setDefault();
|
||||
gdi.addButton("Cancel", "Avbryt", ClassesCB).setCancel();
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
@ -1861,9 +1861,9 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
throw std::exception("Ingen klass vald.");
|
||||
|
||||
if (mergeClass->getId() == ClassId)
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
|
||||
if (gdi.ask(L"Vill du flytta löpare från X till Y och ta bort Z?#"
|
||||
if (gdi.ask(L"Vill du flytta löpare från X till Y och ta bort Z?#"
|
||||
+ mergeClass->getName() + L"#" + pc->getName() + L"#" + mergeClass->getName())) {
|
||||
bi.id = "DoMerge";
|
||||
return classCB(gdi, type, &bi);
|
||||
@ -1885,12 +1885,12 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
throw std::exception("Ingen klass vald.");
|
||||
|
||||
if (lbi.data==ClassId)
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
throw std::exception("En klass kan inte slås ihop med sig själv.");
|
||||
|
||||
pc->mergeClass(lbi.data);
|
||||
|
||||
clearPage(gdi, true);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClassesCB);
|
||||
|
||||
oListParam par;
|
||||
par.selection.insert(ClassId);
|
||||
@ -1911,7 +1911,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
wstring name = gdi.getText("Name");
|
||||
pClass c = oe->getClass(ClassId);
|
||||
if (!name.empty() && c && c->getName() != name) {
|
||||
if (gdi.ask(L"Vill du lägga till klassen 'X'?#" + name)) {
|
||||
if (gdi.ask(L"Vill du lägga till klassen 'X'?#" + name)) {
|
||||
c = oe->addClass(name);
|
||||
ClassId = c->getId();
|
||||
save(gdi, false);
|
||||
@ -1935,7 +1935,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
DWORD cid=ClassId;
|
||||
|
||||
if (oe->isClassUsed(cid))
|
||||
gdi.alert("Klassen används och kan inte tas bort.");
|
||||
gdi.alert("Klassen används och kan inte tas bort.");
|
||||
else
|
||||
oe->removeClass(cid);
|
||||
|
||||
@ -1974,7 +1974,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.setText("SplitInput", L"2");
|
||||
}
|
||||
else {
|
||||
gdi.setTextTranslate("TypeDesc", L"Löpare per klass:", true);
|
||||
gdi.setTextTranslate("TypeDesc", L"Löpare per klass:", true);
|
||||
gdi.setText("SplitInput", L"100");
|
||||
}
|
||||
}
|
||||
@ -1994,7 +1994,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
if (ClassId>0)
|
||||
save(gdi, true);
|
||||
if (EditChanged) {
|
||||
if (gdi.ask(L"Spara ändringar?"))
|
||||
if (gdi.ask(L"Spara ändringar?"))
|
||||
gdi.sendCtrlMessage("Save");
|
||||
}
|
||||
return true;
|
||||
@ -2160,8 +2160,8 @@ void TabClass::showClassSettings(gdioutput &gdi)
|
||||
gdi.dropLine();
|
||||
|
||||
y = gdi.getCY();
|
||||
gdi.addString("", y, xp, 1, "Sammanställning, klasser:");
|
||||
gdi.addString("", y, xp+300, 0, "Första start:");
|
||||
gdi.addString("", y, xp, 1, "Sammanställning, klasser:");
|
||||
gdi.addString("", y, xp+300, 0, "Första start:");
|
||||
gdi.addString("", y, xp+300+width, 0, "Intervall:");
|
||||
gdi.addString("", y, xp+300+width*2, 0, "Vakanser:");
|
||||
gdi.addString("", y, xp+300+width*3, 0, "Reserverade:");
|
||||
@ -2218,21 +2218,21 @@ void TabClass::showClassSettings(gdioutput &gdi)
|
||||
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addButton("VisualizeDraw", "Visualisera startfältet...", ClassesCB);
|
||||
gdi.addButton("VisualizeDraw", "Visualisera startfältet...", ClassesCB);
|
||||
|
||||
gdi.addButton("SaveDrawSettings", "Spara starttider", ClassesCB,
|
||||
"Spara inmatade tider i tävlingen utan att tilldela starttider.");
|
||||
"Spara inmatade tider i tävlingen utan att tilldela starttider.");
|
||||
|
||||
gdi.addButton("ExportDrawSettings", "Exportera...", ClassesCB,
|
||||
"Exportera ett kalkylblad med lottningsinställningar som du kan redigera och sedan läsa in igen.");
|
||||
"Exportera ett kalkylblad med lottningsinställningar som du kan redigera och sedan läsa in igen.");
|
||||
|
||||
|
||||
gdi.addButton("DrawAllAdjust", "Ändra inställningar", ClassesCB,
|
||||
"Ändra grundläggande inställningar och gör en ny fördelning").setExtra(13);
|
||||
gdi.addButton("DrawAllAdjust", "Ändra inställningar", ClassesCB,
|
||||
"Ändra grundläggande inställningar och gör en ny fördelning").setExtra(13);
|
||||
|
||||
if (!cInfo.empty()) {
|
||||
gdi.addButton("DrawAdjust", "Uppdatera fördelning", ClassesCB,
|
||||
"Uppdatera fördelningen av starttider med hänsyn till manuella ändringar ovan");
|
||||
gdi.addButton("DrawAdjust", "Uppdatera fördelning", ClassesCB,
|
||||
"Uppdatera fördelningen av starttider med hänsyn till manuella ändringar ovan");
|
||||
gdi.disableInput("DrawAdjust");
|
||||
}
|
||||
|
||||
@ -2257,13 +2257,13 @@ void TabClass::showClassSettings(gdioutput &gdi)
|
||||
|
||||
gdi.selectItemByData("Method", getDefaultMethod({DMRandom, DMSOFT}));
|
||||
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:");
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:");
|
||||
gdi.addItem("PairSize", getPairOptions());
|
||||
gdi.selectItemByData("PairSize", 1);
|
||||
|
||||
gdi.dropLine(0.9);
|
||||
|
||||
gdi.addButton("DoDrawAll", "Utför lottning", ClassesCB);
|
||||
gdi.addButton("DoDrawAll", "Utför lottning", ClassesCB);
|
||||
|
||||
rc.right = gdi.getCX() + gdi.scaleLength(5);
|
||||
gdi.addRectangle(rc, colorLightGreen);
|
||||
@ -2452,7 +2452,7 @@ void TabClass::legSetup(gdioutput &gdi)
|
||||
|
||||
gdi.addString("", 10, "help:relaysetup");
|
||||
gdi.dropLine();
|
||||
gdi.addSelection("Predefined", 150, 200, MultiCB, L"Fördefinierade tävlingsformer:").ignore(true);
|
||||
gdi.addSelection("Predefined", 150, 200, MultiCB, L"Fördefinierade tävlingsformer:").ignore(true);
|
||||
oe->fillPredefinedCmp(gdi, "Predefined");
|
||||
if (storedPredefined == oEvent::PredefinedTypes(-1)) {
|
||||
bool hasPatrol = oe->getMeOSFeatures().hasFeature(MeOSFeatures::Patrol);
|
||||
@ -2468,7 +2468,7 @@ void TabClass::legSetup(gdioutput &gdi)
|
||||
gdi.selectItemByData("Predefined", storedPredefined);
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addInput("NStage", storedNStage, 4, MultiCB, L"Antal sträckor:").ignore(true);
|
||||
gdi.addInput("NStage", storedNStage, 4, MultiCB, L"Antal sträckor:").ignore(true);
|
||||
gdi.addInput("StartTime", storedStart, 6, MultiCB, L"Starttid (HH:MM:SS):");
|
||||
gdi.popX();
|
||||
|
||||
@ -2480,7 +2480,7 @@ void TabClass::legSetup(gdioutput &gdi)
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.dropLine(3);
|
||||
gdi.addButton("SetNStage", "Verkställ", MultiCB);
|
||||
gdi.addButton("SetNStage", "Verkställ", MultiCB);
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Cancel", "Avbryt", ClassesCB);
|
||||
|
||||
@ -2522,7 +2522,7 @@ void TabClass::multiCourse(gdioutput &gdi, int nLeg) {
|
||||
}
|
||||
else {
|
||||
gdi.addString("", 2, "Flera banor / stafett / patrull / banpool");
|
||||
gdi.addString("", 0, "Låt klassen ha mer än en bana eller sträcka");
|
||||
gdi.addString("", 0, "Låt klassen ha mer än en bana eller sträcka");
|
||||
gdi.dropLine();
|
||||
}
|
||||
gdi.setRestorePoint("RelaySetup");
|
||||
@ -2548,10 +2548,10 @@ void TabClass::multiCourse(gdioutput &gdi, int nLeg) {
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
gdi.addCheckbox("CoursePool", "Använd banpool", MultiCB, false,
|
||||
"Knyt löparna till banor från en pool vid målgång.");
|
||||
gdi.addCheckbox("CoursePool", "Använd banpool", MultiCB, false,
|
||||
"Knyt löparna till banor från en pool vid målgång.");
|
||||
|
||||
gdi.addButton("OneCourse", "Endast en bana", MultiCB, "Använd endast en bana i klassen");
|
||||
gdi.addButton("OneCourse", "Endast en bana", MultiCB, "Använd endast en bana i klassen");
|
||||
gdi.setRestorePoint("Courses");
|
||||
selectCourses(gdi, 0);
|
||||
|
||||
@ -2565,7 +2565,7 @@ void TabClass::multiCourse(gdioutput &gdi, int nLeg) {
|
||||
else {
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("ChangeLeg", "Ändra klassinställningar...", MultiCB, "Starta en guide som hjälper dig göra klassinställningar");
|
||||
gdi.addButton("ChangeLeg", "Ändra klassinställningar...", MultiCB, "Starta en guide som hjälper dig göra klassinställningar");
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
@ -2635,11 +2635,11 @@ void TabClass::multiCourse(gdioutput &gdi, int nLeg) {
|
||||
|
||||
if (k==0) { //Add headers
|
||||
gdi.addString("", headYPos, headXPos[0], 0, "Str.");
|
||||
gdi.addString("", headYPos, headXPos[1], 0, "Sträcktyp:");
|
||||
gdi.addString("", headYPos, headXPos[1], 0, "Sträcktyp:");
|
||||
gdi.addString("", headYPos, headXPos[2], 0, "Starttyp:");
|
||||
gdi.addString("", headYPos, headXPos[3], 0, "Starttid:");
|
||||
if (multipleRaces)
|
||||
gdi.addString("", headYPos, headXPos[4], 0, "Löpare:");
|
||||
gdi.addString("", headYPos, headXPos[4], 0, "Löpare:");
|
||||
if (hasRelay) {
|
||||
gdi.addString("", headYPos, headXPos[5], 0, "Rep:");
|
||||
gdi.addString("", headYPos, headXPos[6], 0, "Omstart:");
|
||||
@ -2649,12 +2649,12 @@ void TabClass::multiCourse(gdioutput &gdi, int nLeg) {
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("CoursePool", "Använd banpool", MultiCB, false,
|
||||
"Knyt löparna till banor från en pool vid målgång.");
|
||||
gdi.addCheckbox("Unordered", "Oordnade parallella sträckor", MultiCB, false,
|
||||
"Tillåt löpare inom en parallell grupp att springa gruppens banor i godtycklig ordning.");
|
||||
gdi.addCheckbox("LockForking", "Lås gafflingar", MultiCB, false,
|
||||
"Markera för att förhindra oavsiktlig ändring av gafflingsnycklar.");
|
||||
gdi.addCheckbox("CoursePool", "Använd banpool", MultiCB, false,
|
||||
"Knyt löparna till banor från en pool vid målgång.");
|
||||
gdi.addCheckbox("Unordered", "Oordnade parallella sträckor", MultiCB, false,
|
||||
"Tillåt löpare inom en parallell grupp att springa gruppens banor i godtycklig ordning.");
|
||||
gdi.addCheckbox("LockForking", "Lås gafflingar", MultiCB, false,
|
||||
"Markera för att förhindra oavsiktlig ändring av gafflingsnycklar.");
|
||||
|
||||
gdi.popX();
|
||||
gdi.fillRight();
|
||||
@ -2704,7 +2704,7 @@ void TabClass::save(gdioutput &gdi, bool skipReload)
|
||||
return;
|
||||
|
||||
if (name.empty())
|
||||
throw std::exception("Klassen måste ha ett namn.");
|
||||
throw std::exception("Klassen måste ha ett namn.");
|
||||
|
||||
bool create=false;
|
||||
|
||||
@ -2894,9 +2894,9 @@ bool TabClass::loadPage(gdioutput &gdi)
|
||||
|
||||
const int button_w=gdi.scaleLength(90);
|
||||
string switchMode;
|
||||
switchMode=tableMode ? "Formulärläge" : "Tabelläge";
|
||||
switchMode=tableMode ? "Formulärläge" : "Tabelläge";
|
||||
gdi.addButton(2, 2, button_w, "SwitchMode", switchMode,
|
||||
ClassesCB, "Välj vy", false, false).fixedCorner();
|
||||
ClassesCB, "Välj vy", false, false).fixedCorner();
|
||||
|
||||
if (tableMode) {
|
||||
Table *tbl=oe->getClassTB();
|
||||
@ -2978,19 +2978,19 @@ bool TabClass::loadPage(gdioutput &gdi)
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(3.5);
|
||||
gdi.addCheckbox("AllowQuickEntry", "Tillåt direktanmälan", 0);
|
||||
gdi.addCheckbox("AllowQuickEntry", "Tillåt direktanmälan", 0);
|
||||
gdi.addCheckbox("NoTiming", "Utan tidtagning", 0);
|
||||
|
||||
if (showAdvanced) {
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
gdi.addCheckbox("FreeStart", "Fri starttid", 0, false, "Klassen lottas inte, startstämpling");
|
||||
gdi.addCheckbox("IgnoreStart", "Ignorera startstämpling", 0, false, "Uppdatera inte starttiden vid startstämpling");
|
||||
gdi.addCheckbox("FreeStart", "Fri starttid", 0, false, "Klassen lottas inte, startstämpling");
|
||||
gdi.addCheckbox("IgnoreStart", "Ignorera startstämpling", 0, false, "Uppdatera inte starttiden vid startstämpling");
|
||||
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
|
||||
gdi.addCheckbox("DirectResult", "Resultat vid målstämpling", 0, false,
|
||||
gdi.addCheckbox("DirectResult", "Resultat vid målstämpling", 0, false,
|
||||
"help:DirectResult");
|
||||
}
|
||||
gdi.dropLine(2);
|
||||
@ -3007,7 +3007,7 @@ bool TabClass::loadPage(gdioutput &gdi)
|
||||
}
|
||||
}
|
||||
if (hasCF) {
|
||||
gdi.addCheckbox("LockStartList", "Lås startlista", 0, false,
|
||||
gdi.addCheckbox("LockStartList", "Lås startlista", 0, false,
|
||||
"help:LockStartList");
|
||||
|
||||
gdi.dropLine(2);
|
||||
@ -3046,16 +3046,16 @@ bool TabClass::loadPage(gdioutput &gdi)
|
||||
}
|
||||
|
||||
if (unlockedClass) {
|
||||
func.push_back(ButtonData("LockAllForks", "Lås gafflingar", true));
|
||||
func.push_back(ButtonData("LockAllForks", "Lås gafflingar", true));
|
||||
}
|
||||
if (lockedClass) {
|
||||
func.push_back(ButtonData("UnLockAllForks", "Tillåt gafflingsändringar", true));
|
||||
func.push_back(ButtonData("UnLockAllForks", "Tillåt gafflingsändringar", true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showAdvanced) {
|
||||
func.push_back(ButtonData("Merge", "Slå ihop klasser...", false));
|
||||
func.push_back(ButtonData("Merge", "Slå ihop klasser...", false));
|
||||
func.push_back(ButtonData("Split", "Dela klassen...", false));
|
||||
}
|
||||
|
||||
@ -3074,7 +3074,7 @@ bool TabClass::loadPage(gdioutput &gdi)
|
||||
func.push_back(ButtonData("RemoveVacant", "Radera vakanser", true));
|
||||
}
|
||||
|
||||
func.push_back(ButtonData("QuickSettings", "Snabbinställningar", true));
|
||||
func.push_back(ButtonData("QuickSettings", "Snabbinställningar", true));
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::MultipleRaces))
|
||||
func.push_back(ButtonData("QualificationFinal", "Kval-Final-Schema", false));
|
||||
@ -3212,7 +3212,7 @@ void TabClass::saveClassSettingsTable(gdioutput &gdi) {
|
||||
|
||||
void TabClass::prepareForDrawing(gdioutput &gdi) {
|
||||
clearPage(gdi, false);
|
||||
gdi.addString("", 2, "Klassinställningar");
|
||||
gdi.addString("", 2, "Klassinställningar");
|
||||
int baseLine = gdi.getCY();
|
||||
gdi.addString("", 10, "help:59395");
|
||||
gdi.pushX();
|
||||
@ -3297,7 +3297,7 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
gdi.dropLine(1);
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
ListBoxInfo &seedmethod = gdi.addSelection("SeedMethod", 120, 100, 0, L"Seedningskälla:");
|
||||
ListBoxInfo &seedmethod = gdi.addSelection("SeedMethod", 120, 100, 0, L"Seedningskälla:");
|
||||
vector< pair<wstring, size_t> > methods;
|
||||
oClass::getSeedingMethods(methods);
|
||||
gdi.addItem("SeedMethod", methods);
|
||||
@ -3312,9 +3312,9 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
gdi.addCheckbox("PreventClubNb", "Hindra att deltagare från samma klubb startar på angränsande tider",
|
||||
gdi.addCheckbox("PreventClubNb", "Hindra att deltagare från samma klubb startar på angränsande tider",
|
||||
0, lastSeedPreventClubNb).setSynchData(&lastSeedPreventClubNb);
|
||||
gdi.addCheckbox("ReverseSeedning", "Låt de bästa start först", 0, lastSeedReverse).
|
||||
gdi.addCheckbox("ReverseSeedning", "Låt de bästa start först", 0, lastSeedReverse).
|
||||
setSynchData(&lastSeedReverse);
|
||||
}
|
||||
else {
|
||||
@ -3325,17 +3325,17 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
|
||||
if (method == DMRandom || method == DMSOFT || method == DMPursuit
|
||||
|| method == DMReversePursuit || method == DMSeeded) {
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:").setSynchData(&lastPairSize);
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:").setSynchData(&lastPairSize);
|
||||
gdi.addItem("PairSize", getPairOptions());
|
||||
gdi.selectItemByData("PairSize", pairSize);
|
||||
}
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(firstStart), 10, 0, L"Första start:").setSynchData(&lastFirstStart);
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(firstStart), 10, 0, L"Första start:").setSynchData(&lastFirstStart);
|
||||
|
||||
if (method == DMPursuit || method == DMReversePursuit) {
|
||||
gdi.addInput("MaxAfter", lastMaxAfter, 10, 0, L"Maxtid efter:", L"Maximal tid efter ledaren för att delta i jaktstart").setSynchData(&lastMaxAfter);
|
||||
gdi.addInput("TimeRestart", oe->getAbsTime(firstStart + 3600), 8, 0, L"Första omstartstid:");
|
||||
gdi.addInput("MaxAfter", lastMaxAfter, 10, 0, L"Maxtid efter:", L"Maximal tid efter ledaren för att delta i jaktstart").setSynchData(&lastMaxAfter);
|
||||
gdi.addInput("TimeRestart", oe->getAbsTime(firstStart + 3600), 8, 0, L"Första omstartstid:");
|
||||
gdi.addInput("ScaleFactor", lastScaleFactor, 8, 0, L"Tidsskalning:").setSynchData(&lastScaleFactor);
|
||||
}
|
||||
|
||||
@ -3346,9 +3346,9 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
gdi.addInput("Vacanses", itow(vac), 10, 0, L"Antal vakanser:").setSynchData(&lastNumVac);
|
||||
|
||||
if ((method == DMRandom || method == DMSOFT || method == DMSeeded) && pc.getNumStages() > 1 && pc.getClassType() != oClassPatrol) {
|
||||
gdi.addSelection("Leg", 90, 100, 0, L"Sträcka:", L"Sträcka att lotta");
|
||||
gdi.addSelection("Leg", 90, 100, 0, L"Sträcka:", L"Sträcka att lotta");
|
||||
for (unsigned k = 0; k<pc.getNumStages(); k++)
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X#" + itos(k+1)), k);
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X#" + itos(k+1)), k);
|
||||
|
||||
gdi.selectFirstItem("Leg");
|
||||
}
|
||||
@ -3360,7 +3360,7 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("HandleBibs", "Tilldela nummerlappar:", ClassesCB, lastHandleBibs).setSynchData(&lastHandleBibs);
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addInput("Bib", L"", 10, 0, L"", L"Mata in första nummerlappsnummer, eller blankt för att ta bort nummerlappar");
|
||||
gdi.addInput("Bib", L"", 10, 0, L"", L"Mata in första nummerlappsnummer, eller blankt för att ta bort nummerlappar");
|
||||
gdi.setInputStatus("Bib", lastHandleBibs);
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2.5);
|
||||
@ -3379,8 +3379,8 @@ void TabClass::drawDialog(gdioutput &gdi, DrawMethod method, const oClass &pc) {
|
||||
gdi.addButton("DoDraw", "Tilldela", ClassesCB, "Tilldela starttider");
|
||||
|
||||
if (method == DMRandom || method == DMSOFT) {
|
||||
gdi.addButton("DoDrawBefore", "Ej lottade, före", ClassesCB, "Lotta löpare som saknar starttid");
|
||||
gdi.addButton("DoDrawAfter", "Ej lottade, efter", ClassesCB, "Lotta löpare som saknar starttid");
|
||||
gdi.addButton("DoDrawBefore", "Ej lottade, före", ClassesCB, "Lotta löpare som saknar starttid");
|
||||
gdi.addButton("DoDrawAfter", "Ej lottade, efter", ClassesCB, "Lotta löpare som saknar starttid");
|
||||
}
|
||||
|
||||
gdi.addButton("DoDeleteStart", "Radera starttider", ClassesCB);
|
||||
@ -3420,7 +3420,7 @@ void TabClass::setMultiDayClass(gdioutput &gdi, bool hasMulti, DrawMethod defaul
|
||||
|
||||
if (hasMulti) {
|
||||
gdi.addItem("Method", lang.tl("Jaktstart"), DMPursuit);
|
||||
gdi.addItem("Method", lang.tl("Omvänd jaktstart"), DMReversePursuit);
|
||||
gdi.addItem("Method", lang.tl("Omvänd jaktstart"), DMReversePursuit);
|
||||
}
|
||||
else if (defaultMethod > 10)
|
||||
defaultMethod = DMSOFT;
|
||||
@ -3458,9 +3458,9 @@ void TabClass::pursuitDialog(gdioutput &gdi) {
|
||||
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addInput("MaxAfter", formatTime(pSavedDepth), 10, 0, L"Maxtid efter:", L"Maximal tid efter ledaren för att delta i jaktstart");
|
||||
gdi.addInput("TimeRestart", L"+" + formatTime(pFirstRestart), 8, 0, L"Första omstartstid:", L"Ange tiden relativt klassens första start");
|
||||
gdi.addInput("Interval", formatTime(pInterval), 8, 0, L"Startintervall:", L"Ange startintervall för minutstart");
|
||||
gdi.addInput("MaxAfter", formatTime(pSavedDepth), 10, 0, L"Maxtid efter:", L"Maximal tid efter ledaren för att delta i jaktstart");
|
||||
gdi.addInput("TimeRestart", L"+" + formatTime(pFirstRestart), 8, 0, L"Första omstartstid:", L"Ange tiden relativt klassens första start");
|
||||
gdi.addInput("Interval", formatTime(pInterval), 8, 0, L"Startintervall:", L"Ange startintervall för minutstart");
|
||||
wchar_t bf[32];
|
||||
swprintf_s(bf, L"%f", pTimeScaling);
|
||||
gdi.addInput("ScaleFactor", bf, 8, 0, L"Tidsskalning:");
|
||||
@ -3469,8 +3469,8 @@ void TabClass::pursuitDialog(gdioutput &gdi) {
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
//xxx
|
||||
//gdi.addCheckbox("Pairwise", "Tillämpa parstart", 0, false);
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:");
|
||||
//gdi.addCheckbox("Pairwise", "Tillämpa parstart", 0, false);
|
||||
gdi.addSelection("PairSize", 150, 200, 0, L"Tillämpa parstart:");
|
||||
gdi.addItem("PairSize", getPairOptions());
|
||||
gdi.selectItemByData("PairSize", 1);
|
||||
|
||||
@ -3481,8 +3481,8 @@ void TabClass::pursuitDialog(gdioutput &gdi) {
|
||||
const int len40 = gdi.scaleLength(30);
|
||||
const int len200 = gdi.scaleLength(200);
|
||||
|
||||
gdi.addString("", cy, cx, 1, "Välj klasser");
|
||||
gdi.addString("", cy, cx + len200 + len40, 1, "Första starttid");
|
||||
gdi.addString("", cy, cx, 1, "Välj klasser");
|
||||
gdi.addString("", cy, cx + len200 + len40, 1, "Första starttid");
|
||||
cy += gdi.getLineHeight()*2;
|
||||
|
||||
for (size_t k = 0; k<cls.size(); k++) {
|
||||
@ -3512,8 +3512,8 @@ void TabClass::pursuitDialog(gdioutput &gdi) {
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("SelectAllNoneP", "Välj alla", ClassesCB).setExtra(1);
|
||||
gdi.addButton("SelectAllNoneP", "Välj ingen", ClassesCB).setExtra(0);
|
||||
gdi.addButton("SelectAllNoneP", "Välj alla", ClassesCB).setExtra(1);
|
||||
gdi.addButton("SelectAllNoneP", "Välj ingen", ClassesCB).setExtra(0);
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
RECT rc;
|
||||
@ -3523,15 +3523,15 @@ void TabClass::pursuitDialog(gdioutput &gdi) {
|
||||
gdi.setCX(rc.left + gdi.scaleLength(10));
|
||||
gdi.setCY(rc.top + gdi.scaleLength(10));
|
||||
gdi.addButton("DoPursuit", "Jaktstart", ClassesCB).setDefault().setExtra(1);
|
||||
gdi.addButton("DoPursuit", "Omvänd jaktstart", ClassesCB).setExtra(2);
|
||||
gdi.addButton("DoPursuit", "Omvänd jaktstart", ClassesCB).setExtra(2);
|
||||
|
||||
rc.right = gdi.getCX() + gdi.scaleLength(5);
|
||||
gdi.addRectangle(rc, colorLightGreen);
|
||||
gdi.setCX(rc.right + gdi.scaleLength(10));
|
||||
|
||||
gdi.addButton("SavePursuit", "Spara starttider", ClassesCB, "Spara inmatade tider i tävlingen utan att tilldela starttider.");
|
||||
gdi.addButton("SavePursuit", "Spara starttider", ClassesCB, "Spara inmatade tider i tävlingen utan att tilldela starttider.");
|
||||
|
||||
gdi.addButton("CancelPursuit", "Återgå", ClassesCB).setCancel();
|
||||
gdi.addButton("CancelPursuit", "Återgå", ClassesCB).setCancel();
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
@ -3545,20 +3545,20 @@ void TabClass::showClassSelection(gdioutput &gdi, int &bx, int &by, GUICALLBACK
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
|
||||
gdi.addButton("SelectAll", "Välj allt", ClassesCB,
|
||||
"Välj alla klasser").isEdit(true);
|
||||
gdi.addButton("SelectAll", "Välj allt", ClassesCB,
|
||||
"Välj alla klasser").isEdit(true);
|
||||
|
||||
gdi.addButton("SelectMisses", "Saknad starttid", ClassesCB,
|
||||
"Välj klasser där någon löpare saknar starttid").isEdit(true);
|
||||
"Välj klasser där någon löpare saknar starttid").isEdit(true);
|
||||
|
||||
gdi.dropLine(2.3);
|
||||
gdi.popX();
|
||||
|
||||
gdi.addButton("SelectUndrawn", "Ej lottade", ClassesCB,
|
||||
"Välj klasser där alla löpare saknar starttid").isEdit(true);
|
||||
"Välj klasser där alla löpare saknar starttid").isEdit(true);
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.addButton("SelectNone", "Välj inget", ClassesCB,
|
||||
gdi.addButton("SelectNone", "Välj inget", ClassesCB,
|
||||
"Avmarkera allt").isEdit(true);
|
||||
gdi.popX();
|
||||
|
||||
@ -3579,8 +3579,8 @@ void TabClass::showClassSelection(gdioutput &gdi, int &bx, int &by, GUICALLBACK
|
||||
}
|
||||
wstring name = it->first;
|
||||
if (name.empty())
|
||||
name = lang.tl(L"övriga");
|
||||
gdi.addButton("SelectStart", L"Välj X#" + name, ClassesCB, L"").isEdit(true).setExtra(it->second);
|
||||
name = lang.tl(L"övriga");
|
||||
gdi.addButton("SelectStart", L"Välj X#" + name, ClassesCB, L"").isEdit(true).setExtra(it->second);
|
||||
cnt++;
|
||||
}
|
||||
gdi.dropLine(2.5);
|
||||
@ -3650,7 +3650,7 @@ const wchar_t *TabClass::getCourseLabel(bool pool) {
|
||||
if (pool)
|
||||
return L"Banpool:";
|
||||
else
|
||||
return L"Sträckans banor:";
|
||||
return L"Sträckans banor:";
|
||||
}
|
||||
|
||||
void TabClass::selectCourses(gdioutput &gdi, int legNo) {
|
||||
@ -3671,12 +3671,12 @@ void TabClass::selectCourses(gdioutput &gdi, int legNo) {
|
||||
bool simpleView = pc->getNumStages() == 1;
|
||||
|
||||
if (!simpleView) {
|
||||
swprintf_s(bf, lang.tl("Banor för %s, sträcka %d").c_str(), pc->getName().c_str(), legNo+1);
|
||||
swprintf_s(bf, lang.tl("Banor för %s, sträcka %d").c_str(), pc->getName().c_str(), legNo+1);
|
||||
gdi.addStringUT(1, bf);
|
||||
ButtonInfo &bi1 = gdi.addButton("@Course" + itos(legNo-1), "<< Föregående", MultiCB);
|
||||
ButtonInfo &bi1 = gdi.addButton("@Course" + itos(legNo-1), "<< Föregående", MultiCB);
|
||||
if (legNo<=0)
|
||||
gdi.disableInput(bi1.id.c_str());
|
||||
ButtonInfo &bi2 = gdi.addButton("@Course" + itos(legNo+1), "Nästa >>", MultiCB);
|
||||
ButtonInfo &bi2 = gdi.addButton("@Course" + itos(legNo+1), "Nästa >>", MultiCB);
|
||||
if (unsigned(legNo + 1) >= pc->getNumStages())
|
||||
gdi.disableInput(bi2.id.c_str());
|
||||
gdi.popX();
|
||||
@ -3698,7 +3698,7 @@ void TabClass::selectCourses(gdioutput &gdi, int legNo) {
|
||||
gdi.setCX(x2);
|
||||
gdi.fillDown();
|
||||
|
||||
gdi.addButton("MAdd", "<< Lägg till", MultiCB);
|
||||
gdi.addButton("MAdd", "<< Lägg till", MultiCB);
|
||||
gdi.setCX(x1);
|
||||
gdi.refresh();
|
||||
if (pc->getNumStages() > 1)
|
||||
@ -3838,7 +3838,7 @@ void TabClass::getClassSettingsTable(gdioutput &gdi, GUICALLBACK cb) {
|
||||
if (useBibs) {
|
||||
gdi.addString("", yp, e, 1, "Nummerlapp");
|
||||
bibOptions.push_back(make_pair(lang.tl("Manuell"), 0));
|
||||
bibOptions.push_back(make_pair(lang.tl("Löpande"), 1));
|
||||
bibOptions.push_back(make_pair(lang.tl("Löpande"), 1));
|
||||
bibOptions.push_back(make_pair(lang.tl("Ingen"), 2));
|
||||
|
||||
int bibW = gdi.scaleLength(100);
|
||||
@ -3848,8 +3848,8 @@ void TabClass::getClassSettingsTable(gdioutput &gdi, GUICALLBACK cb) {
|
||||
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Oberoende"), BibFree));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Samma"), BibSame));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Ökande"), BibAdd));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Sträcka"), BibLeg));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Ökande"), BibAdd));
|
||||
bibTeamOptions.push_back(make_pair(lang.tl("Sträcka"), BibLeg));
|
||||
bibW += gdi.scaleLength(85);
|
||||
}
|
||||
|
||||
@ -3857,7 +3857,7 @@ void TabClass::getClassSettingsTable(gdioutput &gdi, GUICALLBACK cb) {
|
||||
g += bibW;
|
||||
}
|
||||
|
||||
gdi.addString("", yp, f, 1, "Direktanmälan");
|
||||
gdi.addString("", yp, f, 1, "Direktanmälan");
|
||||
|
||||
vector< pair<wstring,size_t> > arg;
|
||||
oe->fillCourses(arg, true);
|
||||
@ -3893,7 +3893,7 @@ void TabClass::getClassSettingsTable(gdioutput &gdi, GUICALLBACK cb) {
|
||||
}
|
||||
|
||||
if (useBibs) {
|
||||
gdi.addCombo(e, cyp, "Bib" + id, 90, 100, 0, L"", L"Ange löpande numrering eller första nummer i klassen.");
|
||||
gdi.addCombo(e, cyp, "Bib" + id, 90, 100, 0, L"", L"Ange löpande numrering eller första nummer i klassen.");
|
||||
gdi.addItem("Bib" + id, bibOptions);
|
||||
|
||||
wstring bib = it->getDCI().getString("Bib");
|
||||
@ -4111,7 +4111,7 @@ vector< pair<wstring, size_t> > TabClass::getPairOptions() {
|
||||
vector< pair<wstring, size_t> > res;
|
||||
|
||||
res.push_back(make_pair(lang.tl("Ingen parstart"), 1));
|
||||
res.push_back(make_pair(lang.tl("Parvis (två och två)"), 2));
|
||||
res.push_back(make_pair(lang.tl("Parvis (två och två)"), 2));
|
||||
for (int j = 3; j <= 10; j++) {
|
||||
res.push_back(make_pair(lang.tl("X och Y[N by N]#" + itos(j) + "#" + itos(j)), j));
|
||||
}
|
||||
@ -4288,7 +4288,7 @@ vector<DrawSettingsCSV> DrawSettingsCSV::read(gdioutput &gdi, const oEvent &oe,
|
||||
try {
|
||||
|
||||
if (row.size() <= 7)
|
||||
throw wstring(L"Rad X är ogiltig#" + itow(lineNo) + L": " + row[0] + L"...");
|
||||
throw wstring(L"Rad X är ogiltig#" + itow(lineNo) + L": " + row[0] + L"...");
|
||||
|
||||
pClass pc = oe.getClass(cid);
|
||||
if (!pc || (!row[1].empty() && !compareClassName(pc->getName(), row[1]))) {
|
||||
@ -4300,7 +4300,7 @@ vector<DrawSettingsCSV> DrawSettingsCSV::read(gdioutput &gdi, const oEvent &oe,
|
||||
if (!pc)
|
||||
throw wstring(L"Hittar inte klass X#" + row[0] + L"/" + row[1]);
|
||||
else if (usedId.count(pc->getId()))
|
||||
throw wstring(L"Klassen X är listad flera gånger#" + row[0] + L"/" + row[1]);
|
||||
throw wstring(L"Klassen X är listad flera gånger#" + row[0] + L"/" + row[1]);
|
||||
|
||||
usedId.insert(pc->getId());
|
||||
dl.classId = pc->getId();
|
||||
@ -4333,12 +4333,12 @@ void TabClass::loadBasicDrawSetup(gdioutput &gdi, int &bx, int &by, const wstrin
|
||||
|
||||
gdi.setSelection("Classes", clsId);
|
||||
|
||||
gdi.addString("", 1, "Grundinställningar");
|
||||
gdi.addString("", 1, "Grundinställningar");
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addInput("FirstStart", firstStart, 10, 0, L"Första start:");
|
||||
gdi.addInput("FirstStart", firstStart, 10, 0, L"Första start:");
|
||||
gdi.addInput("nFields", L"10", 10, 0, L"Max parallellt startande:");
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
@ -4348,7 +4348,7 @@ void TabClass::loadBasicDrawSetup(gdioutput &gdi, int &bx, int &by, const wstrin
|
||||
|
||||
vector< pair<wstring, size_t> > items;
|
||||
items.push_back(make_pair(lang.tl("Inga"), 1));
|
||||
items.push_back(make_pair(lang.tl("Första kontrollen"), 2));
|
||||
items.push_back(make_pair(lang.tl("Första kontrollen"), 2));
|
||||
for (int k = 2; k<10; k++)
|
||||
items.push_back(make_pair(lang.tl("X kontroller#" + itos(k)), k + 1));
|
||||
items.push_back(make_pair(lang.tl("Hela banan"), 1000));
|
||||
@ -4358,7 +4358,7 @@ void TabClass::loadBasicDrawSetup(gdioutput &gdi, int &bx, int &by, const wstrin
|
||||
gdi.popX();
|
||||
gdi.dropLine(4);
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("AllowNeighbours", "Tillåt samma bana inom basintervall", 0, oe->getPropertyInt("DrawInterlace", 1) == 0);
|
||||
gdi.addCheckbox("AllowNeighbours", "Tillåt samma bana inom basintervall", 0, oe->getPropertyInt("DrawInterlace", 1) == 0);
|
||||
gdi.addCheckbox("CoursesTogether", "Lotta klasser med samma bana gemensamt", 0, false);
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
@ -4367,19 +4367,19 @@ void TabClass::loadBasicDrawSetup(gdioutput &gdi, int &bx, int &by, const wstrin
|
||||
gdi.fillRight();
|
||||
gdi.addInput("BaseInterval", L"1:00", 10, 0, L"Basintervall (min):");
|
||||
gdi.addInput("MinInterval", minInterval, 10, 0, L"Minsta intervall i klass:");
|
||||
gdi.addInput("MaxInterval", minInterval, 10, 0, L"Största intervall i klass:");
|
||||
gdi.addInput("MaxInterval", minInterval, 10, 0, L"Största intervall i klass:");
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(4);
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 1, "Vakanser och efteranmälda");
|
||||
gdi.addString("", 1, "Vakanser och efteranmälda");
|
||||
gdi.dropLine(0.4);
|
||||
gdi.fillRight();
|
||||
gdi.popX();
|
||||
gdi.addInput("Vacances", vacances, 6, 0, L"Andel vakanser:");
|
||||
gdi.addInput("VacancesMin", L"1", 6, 0, L"Min. vakanser (per klass):");
|
||||
gdi.addInput("VacancesMax", L"10", 6, 0, L"Max. vakanser (per klass):");
|
||||
gdi.addInput("Extra", L"0%", 6, 0, L"Förväntad andel efteranmälda:");
|
||||
gdi.addInput("Extra", L"0%", 6, 0, L"Förväntad andel efteranmälda:");
|
||||
|
||||
gdi.dropLine(4);
|
||||
gdi.fillDown();
|
||||
@ -4396,13 +4396,13 @@ void TabClass::loadReadyToDistribute(gdioutput &gdi, int &bx, int &by) {
|
||||
rcPrepare.top = gdi.getCY();
|
||||
gdi.setCX(gdi.getCX() + gdi.getLineHeight());
|
||||
gdi.dropLine();
|
||||
gdi.addString("", fontMediumPlus, "Förbered lottning");
|
||||
gdi.addString("", fontMediumPlus, "Förbered lottning");
|
||||
gdi.dropLine(2.2);
|
||||
gdi.popX();
|
||||
gdi.setCX(gdi.getCX() + gdi.getLineHeight());
|
||||
gdi.addButton("PrepareDrawAll", "Fördela starttider...", ClassesCB).isEdit(true);
|
||||
gdi.addButton("PrepareDrawAll", "Fördela starttider...", ClassesCB).isEdit(true);
|
||||
gdi.addButton("EraseStartAll", "Radera starttider...", ClassesCB).isEdit(true).setExtra(0);
|
||||
gdi.addButton("LoadSettings", "Hämta inställningar från föregående lottning", ClassesCB).isEdit(true);
|
||||
gdi.addButton("LoadSettings", "Hämta inställningar från föregående lottning", ClassesCB).isEdit(true);
|
||||
enableLoadSettings(gdi);
|
||||
|
||||
gdi.dropLine(3);
|
||||
@ -4417,12 +4417,12 @@ void TabClass::loadReadyToDistribute(gdioutput &gdi, int &bx, int &by) {
|
||||
gdi.setCX(gdi.getCX() + gdi.getLineHeight());
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.addString("", fontMediumPlus, "Efteranmälningar");
|
||||
gdi.addString("", fontMediumPlus, "Efteranmälningar");
|
||||
gdi.dropLine(2.2);
|
||||
gdi.popX();
|
||||
gdi.setCX(gdi.getCX() + gdi.getLineHeight());
|
||||
gdi.addButton("DrawAllBefore", "Efteranmälda (före ordinarie)", ClassesCB).isEdit(true);
|
||||
gdi.addButton("DrawAllAfter", "Efteranmälda (efter ordinarie)", ClassesCB).isEdit(true);
|
||||
gdi.addButton("DrawAllBefore", "Efteranmälda (före ordinarie)", ClassesCB).isEdit(true);
|
||||
gdi.addButton("DrawAllAfter", "Efteranmälda (efter ordinarie)", ClassesCB).isEdit(true);
|
||||
|
||||
gdi.dropLine(3);
|
||||
rcPrepare.bottom = gdi.getCY();
|
||||
@ -4432,7 +4432,7 @@ void TabClass::loadReadyToDistribute(gdioutput &gdi, int &bx, int &by) {
|
||||
gdi.popX();
|
||||
|
||||
gdi.addButton("Cancel", "Avbryt", ClassesCB).setCancel();
|
||||
gdi.addButton("HelpDraw", "Hjälp...", ClassesCB, "");
|
||||
gdi.addButton("HelpDraw", "Hjälp...", ClassesCB, "");
|
||||
gdi.dropLine(3);
|
||||
|
||||
by = max(by, gdi.getCY());
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Stigbergsvägen 11, SE-75242 UPPSALA, Sweden
|
||||
Stigbergsvägen 11, SE-75242 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -122,7 +122,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
if (bi.id=="Save") {
|
||||
}
|
||||
else if (bi.id == "EraseClubs") {
|
||||
if (gdi.ask(L"Vill du ta bort alla klubbar från tävlingen? Alla deltagare blir klubblösa.")) {
|
||||
if (gdi.ask(L"Vill du ta bort alla klubbar från tävlingen? Alla deltagare blir klubblösa.")) {
|
||||
oClub::clearClubs(*oe);
|
||||
}
|
||||
}
|
||||
@ -144,7 +144,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
pc->generateInvoice(gdi, pay, paid, dpm, ppm);
|
||||
}
|
||||
gdi.addButton(gdi.getWidth()+20, 15, gdi.scaleLength(120),
|
||||
"Cancel", "Återgå", ClubsCB, "", true, false);
|
||||
"Cancel", "Återgå", ClubsCB, "", true, false);
|
||||
gdi.addButton(gdi.getWidth()+20, 45, gdi.scaleLength(120),
|
||||
"Print", "Skriv ut...", ClubsCB,
|
||||
"Skriv ut fakturan", true, false);
|
||||
@ -174,7 +174,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.pushX();
|
||||
gdi.addButton("DoAllInvoice", "Skapa fakturor", ClubsCB);
|
||||
#ifdef _DEBUG
|
||||
gdi.addButton("ImportAnswer", "Hämta svar om elektroniska fakturor", ClubsCB);
|
||||
gdi.addButton("ImportAnswer", "Hämta svar om elektroniska fakturor", ClubsCB);
|
||||
#endif
|
||||
gdi.addButton("Cancel", "Avbryt", ClubsCB);
|
||||
gdi.refresh();
|
||||
@ -190,7 +190,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
oe->printInvoices(gdi, oEvent::InvoicePrintType(lbi.data), path, false);
|
||||
|
||||
gdi.addButton(gdi.getWidth()+20, 15, gdi.scaleLength(120),
|
||||
"Cancel", "Återgå", ClubsCB, "", true, false);
|
||||
"Cancel", "Återgå", ClubsCB, "", true, false);
|
||||
|
||||
if (lbi.data>10) { // To file
|
||||
gdi.addButton(gdi.getWidth()+20, 45, gdi.scaleLength(120),
|
||||
@ -249,7 +249,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
wstring nn;
|
||||
oe->printInvoices(gdi, oEvent::IPTAllPrint, nn, true);
|
||||
gdi.addButton(gdi.getWidth()+20, 15, gdi.scaleLength(120), "Cancel",
|
||||
"Återgå", ClubsCB, "", true, false);
|
||||
"Återgå", ClubsCB, "", true, false);
|
||||
gdi.addButton(gdi.getWidth()+20, 45, gdi.scaleLength(120), "Print",
|
||||
"Skriv ut...", ClubsCB, "Skriv ut fakturan", true, false);
|
||||
|
||||
@ -260,7 +260,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
pClub pc = oe->getClub(ClubId);
|
||||
if (pc) {
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldText, "Slå ihop klubb");
|
||||
gdi.addString("", boldText, "Slå ihop klubb");
|
||||
|
||||
wchar_t bf[256];
|
||||
swprintf_s(bf, lang.tl("help:12352").c_str(), pc->getName().c_str(), pc->getId());
|
||||
@ -274,7 +274,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("DoMerge", "Slå ihop", ClubsCB);
|
||||
gdi.addButton("DoMerge", "Slå ihop", ClubsCB);
|
||||
gdi.addButton("Cancel", "Avbryt", ClubsCB);
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
@ -290,7 +290,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
pClub pc2 = oe->getClub(gdi.getSelectedItem("NewClub").first);
|
||||
|
||||
if (pc1==pc2)
|
||||
throw std::exception("En klubb kan inte slås ihop med sig själv.");
|
||||
throw std::exception("En klubb kan inte slås ihop med sig själv.");
|
||||
|
||||
if (pc1 && pc2)
|
||||
oe->mergeClub(pc2->getId(), pc1->getId());
|
||||
@ -298,16 +298,16 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
else if (bi.id == "InvoiceSettings") {
|
||||
gdi.clearPage(true);
|
||||
gdi.addString("", boldLarge, "Fakturainställningar");
|
||||
gdi.addString("", boldLarge, "Fakturainställningar");
|
||||
gdi.dropLine();
|
||||
firstInvoice = oClub::getFirstInvoiceNumber(*oe);
|
||||
if (firstInvoice == 0)
|
||||
firstInvoice = oe->getPropertyInt("FirstInvoice", 1000);
|
||||
|
||||
gdi.addInput("FirstInvoice", itow(firstInvoice), 5, 0, L"Första fakturanummer:");
|
||||
gdi.addInput("FirstInvoice", itow(firstInvoice), 5, 0, L"Första fakturanummer:");
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", boldText, "Organisatör");
|
||||
gdi.addString("", boldText, "Organisatör");
|
||||
|
||||
vector<string> fields;
|
||||
gdi.pushY();
|
||||
@ -327,8 +327,8 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addString("", normalText, "Avgifter och valuta ställer du in under");
|
||||
gdi.addString("CmpSettings", normalText, "Tävlingsinställningar.", ClubsCB);
|
||||
gdi.addString("", normalText, "Avgifter och valuta ställer du in under");
|
||||
gdi.addString("CmpSettings", normalText, "Tävlingsinställningar.", ClubsCB);
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
@ -336,7 +336,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addString("", boldText, "Formatering");
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addString("", 0, "Koordinater (mm) för adressfält:");
|
||||
gdi.addString("", 0, "Koordinater (mm) för adressfält:");
|
||||
wstring xc = oe->getPropertyString("addressxpos", L"125");
|
||||
wstring yc = oe->getPropertyString("addressypos", L"50");
|
||||
gdi.addStringUT(0, "x:");
|
||||
@ -415,19 +415,19 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
int px = gdi.getCX();
|
||||
gdi.addInput("BaseFee", oe->formatCurrency(baseFee), 8, 0, L"Avgift:");
|
||||
gdi.addInput("FirstDate", firstDate, 10, 0, L"Undre datumgräns:", L"ÅÅÅÅ-MM-DD");
|
||||
gdi.addInput("LastDate", lastDate, 10, 0, L"Övre datumgräns:", L"ÅÅÅÅ-MM-DD");
|
||||
gdi.addInput("FirstDate", firstDate, 10, 0, L"Undre datumgräns:", L"ÅÅÅÅ-MM-DD");
|
||||
gdi.addInput("LastDate", lastDate, 10, 0, L"Övre datumgräns:", L"ÅÅÅÅ-MM-DD");
|
||||
|
||||
manualFees(gdi, useManualFee);
|
||||
|
||||
gdi.setCX(px);
|
||||
gdi.dropLine(4);
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("FilterAge", "Åldersfilter:", ClubsCB, filterAge);
|
||||
gdi.addCheckbox("FilterAge", "Åldersfilter:", ClubsCB, filterAge);
|
||||
|
||||
gdi.dropLine(-1);
|
||||
gdi.addInput("LowLimit", lowAge > 0 ? itow(lowAge) : L"", 5, 0, L"Undre gräns (år):");
|
||||
gdi.addInput("HighLimit", highAge > 0 ? itow(highAge) : L"", 5, 0, L"Övre gräns (år):");
|
||||
gdi.addInput("LowLimit", lowAge > 0 ? itow(lowAge) : L"", 5, 0, L"Undre gräns (år):");
|
||||
gdi.addInput("HighLimit", highAge > 0 ? itow(highAge) : L"", 5, 0, L"Övre gräns (år):");
|
||||
ageFilter(gdi, filterAge, useManualFee);
|
||||
|
||||
gdi.popX();
|
||||
@ -441,9 +441,9 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addButton("ShowFiltered", "Visa valda deltagare", ClubsCB);
|
||||
|
||||
gdi.addButton("DoFees", "Tilldela avgifter", ClubsCB);
|
||||
gdi.addButton("ClearFees", "Nollställ avgifter", ClubsCB);
|
||||
gdi.addButton("ClearFees", "Nollställ avgifter", ClubsCB);
|
||||
|
||||
gdi.addButton("Cancel", "Återgå", ClubsCB);
|
||||
gdi.addButton("Cancel", "Återgå", ClubsCB);
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2);
|
||||
@ -538,11 +538,11 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.dropLine();
|
||||
|
||||
if (count == 0)
|
||||
gdi.addString("", 1, "Ingen deltagare matchar sökkriteriet").setColor(colorRed);
|
||||
gdi.addString("", 1, "Ingen deltagare matchar sökkriteriet").setColor(colorRed);
|
||||
else if (op == 0 || op == 2)
|
||||
gdi.addString("", 1, "Ändrade avgift för X deltagare#" + itos(modified)).setColor(colorGreen);
|
||||
gdi.addString("", 1, "Ändrade avgift för X deltagare#" + itos(modified)).setColor(colorGreen);
|
||||
else if (op == 1)
|
||||
gdi.addString("", 1, "Nollställde avgift för X deltagare#" + itos(modified)).setColor(colorGreen);
|
||||
gdi.addString("", 1, "Nollställde avgift för X deltagare#" + itos(modified)).setColor(colorGreen);
|
||||
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -626,11 +626,11 @@ bool TabClub::loadPage(gdioutput &gdi)
|
||||
gdi.addSelection("Clubs", 200, 300, ClubsCB);
|
||||
oe->fillClubs(gdi, "Clubs");
|
||||
gdi.selectItemByData("Clubs", ClubId);
|
||||
gdi.addButton("Merge", "Ta bort / slå ihop...", ClubsCB);
|
||||
gdi.addButton("Merge", "Ta bort / slå ihop...", ClubsCB);
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Economy))
|
||||
gdi.addButton("Invoice", "Faktura", ClubsCB);
|
||||
if (oe->useRunnerDb())
|
||||
gdi.addButton("Update", "Uppdatera", ClubsCB, "Uppdatera klubbens uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
gdi.addButton("Update", "Uppdatera", ClubsCB, "Uppdatera klubbens uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Economy)) {
|
||||
gdi.popX();
|
||||
@ -640,10 +640,10 @@ bool TabClub::loadPage(gdioutput &gdi)
|
||||
gdi.popX();
|
||||
gdi.dropLine(1.5);
|
||||
gdi.addButton("Fees", "Avgifter...", ClubsCB);
|
||||
gdi.addButton("InvoiceSettings", "Fakturainställningar...", ClubsCB);
|
||||
gdi.addButton("InvoiceSettings", "Fakturainställningar...", ClubsCB);
|
||||
|
||||
gdi.addButton("AllInvoice", "Skapa fakturor...", ClubsCB);
|
||||
gdi.addButton("Summary", "Sammanställning", ClubsCB);
|
||||
gdi.addButton("Summary", "Sammanställning", ClubsCB);
|
||||
}
|
||||
|
||||
gdi.popX();
|
||||
@ -654,10 +654,10 @@ bool TabClub::loadPage(gdioutput &gdi)
|
||||
gdi.popX();
|
||||
gdi.dropLine(1.5);
|
||||
if (oe->useRunnerDb()) {
|
||||
gdi.addButton("UpdateAll", "Uppdatera alla klubbar", ClubsCB, "Uppdatera klubbarnas uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
gdi.addButton("UpdateAllRunners", "Uppdatera klubbar && löpare", ClubsCB, "Uppdatera klubbarnas och löparnas uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
gdi.addButton("UpdateAll", "Uppdatera alla klubbar", ClubsCB, "Uppdatera klubbarnas uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
gdi.addButton("UpdateAllRunners", "Uppdatera klubbar && löpare", ClubsCB, "Uppdatera klubbarnas och löparnas uppgifter med data från löpardatabasen/distriktsregistret");
|
||||
}
|
||||
gdi.addButton("EraseClubs", "Radera alla klubbar", ClubsCB, "Radera alla klubbar och ta bort klubbtillhörighet");
|
||||
gdi.addButton("EraseClubs", "Radera alla klubbar", ClubsCB, "Radera alla klubbar och ta bort klubbtillhörighet");
|
||||
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
@ -672,7 +672,7 @@ bool TabClub::loadPage(gdioutput &gdi)
|
||||
|
||||
void TabClub::importAcceptedInvoice(gdioutput &gdi, const wstring &file) {
|
||||
|
||||
gdi.addString("", boldLarge, "Hämta svar om elektroniska fakturor");
|
||||
gdi.addString("", boldLarge, "Hämta svar om elektroniska fakturor");
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2);
|
||||
@ -694,7 +694,7 @@ void TabClub::importAcceptedInvoice(gdioutput &gdi, const wstring &file) {
|
||||
hasAccepted[id].second += L", " + (*it)[2];
|
||||
}
|
||||
else
|
||||
gdi.addString("", 0, "Okänd klubb med id X#" + itos(id)).setColor(colorRed);
|
||||
gdi.addString("", 0, "Okänd klubb med id X#" + itos(id)).setColor(colorRed);
|
||||
}
|
||||
else
|
||||
throw meosException("Bad file format.");
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -81,12 +81,12 @@ void TabControl::selectControl(gdioutput &gdi, pControl pc)
|
||||
|
||||
wstring info;
|
||||
if (numVisit > 0) {
|
||||
info = L"Antal besökare X, genomsnittlig bomtid Y, största bomtid Z#" +
|
||||
info = L"Antal besökare X, genomsnittlig bomtid Y, största bomtid Z#" +
|
||||
itow(numVisit) + L" (" + itow(numVisitExp) + L")#" + getTimeMS(pc->getMissedTimeTotal() / numVisit) +
|
||||
L"#" + getTimeMS(pc->getMissedTimeMax());
|
||||
}
|
||||
else if (numVisitExp > 0) {
|
||||
info = L"Förväntat antal besökare: X#" + itow(numVisitExp);
|
||||
info = L"Förväntat antal besökare: X#" + itow(numVisitExp);
|
||||
}
|
||||
gdi.setText("ControlID", itow(pc->getId()), true);
|
||||
|
||||
@ -159,7 +159,7 @@ void TabControl::save(gdioutput &gdi)
|
||||
throw std::exception("Internal error");
|
||||
if (pc->getStatus() != oControl::StatusFinish && pc->getStatus() != oControl::StatusStart) {
|
||||
if (!pc->setNumbers(gdi.getText("Code")))
|
||||
gdi.alert("Kodsiffran måste vara ett heltal. Flera kodsiffror måste separeras med komma.");
|
||||
gdi.alert("Kodsiffran måste vara ett heltal. Flera kodsiffror måste separeras med komma.");
|
||||
|
||||
pc->setStatus(oControl::ControlStatus(gdi.getSelectedItem("Status").first));
|
||||
pc->setTimeAdjust(gdi.getText("TimeAdjust"));
|
||||
@ -337,7 +337,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
|
||||
if (oe->isControlUsed(cid))
|
||||
gdi.alert("Kontrollen används och kan inte tas bort.");
|
||||
gdi.alert("Kontrollen används och kan inte tas bort.");
|
||||
else
|
||||
oe->removeControl(cid);
|
||||
|
||||
@ -358,23 +358,23 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
Table *table=new Table(oe, 20, L"Kontroll X#" + itow(controlId), "controlvisitor");
|
||||
|
||||
table->addColumn("Id", 70, true, true);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
|
||||
table->addColumn("Namn", 150, false);
|
||||
table->addColumn("Bana", 70, false);
|
||||
table->addColumn("På banan", 70, false);
|
||||
table->addColumn("På banan", 70, false);
|
||||
table->addColumn("Bricka", 70, true, true);
|
||||
|
||||
table->addColumn("Tidpunkt", 70, false);
|
||||
table->addColumn("Stämpelkod", 70, true);
|
||||
table->addColumn("Föregående kontroll", 70, false);
|
||||
table->addColumn("Stämpelkod", 70, true);
|
||||
table->addColumn("Föregående kontroll", 70, false);
|
||||
table->setGenerator(::visitorTable, this);
|
||||
table->setTableProp(0);
|
||||
table->update();
|
||||
gdi.clearPage(false);
|
||||
int xp=gdi.getCX();
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Show", "Återgå", ControlsCB);
|
||||
gdi.addButton("Show", "Återgå", ControlsCB);
|
||||
gdi.addTable(table, xp, gdi.getCY());
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -382,10 +382,10 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
Table *table=new Table(oe, 20, L"Kontroll X#" + itow(controlId), "controlcourse");
|
||||
|
||||
table->addColumn("Id", 70, true, true);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
table->addColumn("Ändrad", 70, false);
|
||||
|
||||
table->addColumn("Bana", 70, false, true);
|
||||
table->addColumn("Förekomst", 70, true, true);
|
||||
table->addColumn("Förekomst", 70, true, true);
|
||||
table->addColumn("Antal deltagare", 70, true, true);
|
||||
|
||||
table->setGenerator(::courseTable, this);
|
||||
@ -394,7 +394,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.clearPage(false);
|
||||
int xp=gdi.getCX();
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Show", "Återgå", ControlsCB);
|
||||
gdi.addButton("Show", "Återgå", ControlsCB);
|
||||
gdi.addTable(table, xp, gdi.getCY());
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -440,9 +440,9 @@ bool TabControl::loadPage(gdioutput &gdi)
|
||||
|
||||
const int button_w=gdi.scaleLength(90);
|
||||
string switchMode;
|
||||
switchMode=tableMode ? "Formulärläge" : "Tabelläge";
|
||||
switchMode=tableMode ? "Formulärläge" : "Tabelläge";
|
||||
gdi.addButton(2, 2, button_w, "SwitchMode", switchMode,
|
||||
ControlsCB, "Välj vy", false, false).fixedCorner();
|
||||
ControlsCB, "Välj vy", false, false).fixedCorner();
|
||||
|
||||
if (tableMode) {
|
||||
Table *tbl=oe->getControlTB();
|
||||
@ -475,12 +475,12 @@ bool TabControl::loadPage(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
gdi.addInput("Name", L"", 16, 0, L"Kontrollnamn:");
|
||||
|
||||
gdi.addSelection("Status", 150, 100, ControlsCB, L"Status:", L"Ange om kontrollen fungerar och hur den ska användas.");
|
||||
gdi.addSelection("Status", 150, 100, ControlsCB, L"Status:", L"Ange om kontrollen fungerar och hur den ska användas.");
|
||||
oe->fillControlStatus(gdi, "Status");
|
||||
|
||||
gdi.addInput("TimeAdjust", L"", 6, 0, L"Tidsjustering:");
|
||||
gdi.fillDown();
|
||||
gdi.addInput("MinTime", L"", 6, 0, L"Minsta sträcktid:");
|
||||
gdi.addInput("MinTime", L"", 6, 0, L"Minsta sträcktid:");
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(0.5);
|
||||
@ -489,10 +489,10 @@ bool TabControl::loadPage(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addInput("Code", L"", 16, 0, L"Stämpelkod(er):");
|
||||
gdi.addInput("Code", L"", 16, 0, L"Stämpelkod(er):");
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Rogaining)) {
|
||||
gdi.addInput("Point", L"", 6, 0, L"Rogaining-poäng:");
|
||||
gdi.addInput("Point", L"", 6, 0, L"Rogaining-poäng:");
|
||||
}
|
||||
gdi.popX();
|
||||
gdi.dropLine(3.5);
|
||||
@ -503,7 +503,7 @@ bool TabControl::loadPage(gdioutput &gdi)
|
||||
gdi.addButton("Remove", "Radera", ControlsCB);
|
||||
gdi.disableInput("Remove");
|
||||
gdi.addButton("Courses", "Banor...", ControlsCB);
|
||||
gdi.addButton("Visitors", "Besökare...", ControlsCB);
|
||||
gdi.addButton("Visitors", "Besökare...", ControlsCB);
|
||||
gdi.addButton("Add", "Ny kontroll", ControlsCB);
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -232,7 +232,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode)
|
||||
wstring name=gdi.getText("Name");
|
||||
|
||||
if (name.empty()) {
|
||||
gdi.alert("Banan måste ha ett namn.");
|
||||
gdi.alert("Banan måste ha ett namn.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -274,7 +274,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode)
|
||||
if (gdi.isChecked("WithLoops")) {
|
||||
int cc = gdi.getTextNo("CommonControl");
|
||||
if (cc == 0)
|
||||
throw meosException("Ange en varvningskontroll för banan");
|
||||
throw meosException("Ange en varvningskontroll för banan");
|
||||
pc->setCommonControl(cc);
|
||||
}
|
||||
else
|
||||
@ -345,20 +345,20 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
return 0;
|
||||
}
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, L"Redigera sträcklängder för X#" + pc->getName());
|
||||
gdi.addString("", boldLarge, L"Redigera sträcklängder för X#" + pc->getName());
|
||||
gdi.dropLine();
|
||||
int w = gdi.scaleLength(120);
|
||||
int xp = gdi.getCX() + w;
|
||||
int yp = gdi.getCY();
|
||||
gdi.addString("", 1, "Sträcka:");
|
||||
gdi.addString("", yp, xp, 1, "Längd:");
|
||||
gdi.addString("", 1, "Sträcka:");
|
||||
gdi.addString("", yp, xp, 1, "Längd:");
|
||||
|
||||
for (int i = 0; i <= pc->getNumControls(); i++) {
|
||||
int len = pc->getLegLength(i);
|
||||
pControl cbegin = pc->getControl(i-1);
|
||||
wstring begin = i == 0 ? lang.tl("Start") : (cbegin ? cbegin->getName() : L"");
|
||||
pControl cend = pc->getControl(i);
|
||||
wstring end = i == pc->getNumControls() ? lang.tl("Mål") : (cend ? cend->getName() : L"");
|
||||
wstring end = i == pc->getNumControls() ? lang.tl("Mål") : (cend ? cend->getName() : L"");
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addStringUT(0, begin + makeDash(L" - ") + end + L":").xlimit = w-10;
|
||||
@ -493,7 +493,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
clsNames += cls[k]->getName();
|
||||
}
|
||||
if (courseDrawClasses.empty())
|
||||
throw meosException("Ingen klass använder banan.");
|
||||
throw meosException("Ingen klass använder banan.");
|
||||
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, L"Lotta klasser med banan X#" + crs->getName());
|
||||
@ -505,7 +505,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
int firstStart = 3600;
|
||||
int interval = 2*60;
|
||||
int vac = 1;
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(firstStart), 10, 0, L"Första start:");
|
||||
gdi.addInput("FirstStart", oe->getAbsTime(firstStart), 10, 0, L"Första start:");
|
||||
gdi.addInput("Interval", formatTime(interval), 10, 0, L"Startintervall (min):");
|
||||
gdi.addInput("Vacances", itow(vac), 10, 0, L"Antal vakanser:");
|
||||
gdi.fillDown();
|
||||
@ -554,7 +554,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
oe->addAutoBib();
|
||||
|
||||
gdi.clearPage(false);
|
||||
gdi.addButton("Cancel", "Återgå", CourseCB);
|
||||
gdi.addButton("Cancel", "Återgå", CourseCB);
|
||||
|
||||
oListParam par;
|
||||
oListInfo info;
|
||||
@ -581,7 +581,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
else
|
||||
name += L" 2";
|
||||
}
|
||||
if (gdi.ask(L"Vill du lägga till banan 'X' (Y)?#" + name + L"#" + ctrl)) {
|
||||
if (gdi.ask(L"Vill du lägga till banan 'X' (Y)?#" + name + L"#" + ctrl)) {
|
||||
pc = oe->addCourse(name);
|
||||
courseId = pc->getId();
|
||||
gdi.setText("Name", name);
|
||||
@ -604,7 +604,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
throw meosException("Ingen bana vald.");
|
||||
|
||||
if (oe->isCourseUsed(cid))
|
||||
gdi.alert("Banan används och kan inte tas bort.");
|
||||
gdi.alert("Banan används och kan inte tas bort.");
|
||||
else
|
||||
oe->removeCourse(cid);
|
||||
|
||||
@ -723,7 +723,7 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.addString("", boldText, "Funktioner");
|
||||
gdi.dropLine();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("ImportCourses", "Importera från fil...", CourseCB);
|
||||
gdi.addButton("ImportCourses", "Importera från fil...", CourseCB);
|
||||
gdi.addButton("ExportCourses", "Exportera...", CourseCB);
|
||||
gdi.popX();
|
||||
gdi.dropLine(2.5);
|
||||
@ -761,17 +761,17 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addInput("Climb", L"", 8, 0, L"Climb (m):");
|
||||
gdi.addInput("Length", L"", 8, 0, L"Längd (m):");
|
||||
gdi.addInput("Length", L"", 8, 0, L"Längd (m):");
|
||||
gdi.dropLine(0.9);
|
||||
gdi.fillDown();
|
||||
gdi.addButton("LegLengths", "Redigera sträcklängder...", CourseCB).isEdit(true);
|
||||
gdi.addButton("LegLengths", "Redigera sträcklängder...", CourseCB).isEdit(true);
|
||||
gdi.dropLine(0.5);
|
||||
gdi.popX();
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("FirstAsStart", "Använd första kontrollen som start", CourseCB);
|
||||
gdi.addCheckbox("FirstAsStart", "Använd första kontrollen som start", CourseCB);
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("LastAsFinish", "Använd sista kontrollen som mål", CourseCB);
|
||||
gdi.addCheckbox("LastAsFinish", "Använd sista kontrollen som mål", CourseCB);
|
||||
gdi.popX();
|
||||
|
||||
gdi.fillRight();
|
||||
@ -780,7 +780,7 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.addString("", 0, "Varvningskontroll:");
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addSelection("CommonControl", 50, 200, 0, L"", L"En bana med slingor tillåter deltagaren att ta slingorna i valfri ordning");
|
||||
gdi.addSelection("CommonControl", 50, 200, 0, L"", L"En bana med slingor tillåter deltagaren att ta slingorna i valfri ordning");
|
||||
|
||||
gdi.dropLine(0.2);
|
||||
gdi.popX();
|
||||
@ -809,20 +809,20 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("Rogaining", 120, 80, CourseCB);
|
||||
gdi.addItem("Rogaining", lang.tl("Ingen rogaining"), 0);
|
||||
gdi.addItem("Rogaining", lang.tl("Tidsgräns"), 1);
|
||||
gdi.addItem("Rogaining", lang.tl("Poänggräns"), 2);
|
||||
gdi.addItem("Rogaining", lang.tl("Tidsgräns"), 1);
|
||||
gdi.addItem("Rogaining", lang.tl("Poänggräns"), 2);
|
||||
|
||||
gdi.setCX(gdi.getCX()+gdi.scaleLength(20));
|
||||
gdi.dropLine(-0.8);
|
||||
int cx = gdi.getCX();
|
||||
gdi.addInput("PointLimit", L"", 8, 0, L"Poänggräns:").isEdit(false);
|
||||
gdi.addInput("TimeLimit", L"", 8, 0, L"Tidsgräns:").isEdit(false);
|
||||
gdi.addInput("PointReduction", L"", 8, 0, L"Poängavdrag (per minut):").isEdit(false);
|
||||
gdi.addInput("PointLimit", L"", 8, 0, L"Poänggräns:").isEdit(false);
|
||||
gdi.addInput("TimeLimit", L"", 8, 0, L"Tidsgräns:").isEdit(false);
|
||||
gdi.addInput("PointReduction", L"", 8, 0, L"Poängavdrag (per minut):").isEdit(false);
|
||||
gdi.dropLine(3.5);
|
||||
rc.right = gdi.getCX() + 5;
|
||||
gdi.setCX(cx);
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("ReductionPerMinute", "Poängavdrag per påbörjad minut");
|
||||
gdi.addCheckbox("ReductionPerMinute", "Poängavdrag per påbörjad minut");
|
||||
|
||||
rc.bottom = gdi.getCY() + 5;
|
||||
gdi.addRectangle(rc, colorLightBlue, true);
|
||||
@ -997,13 +997,13 @@ void TabCourse::setupCourseImport(gdioutput& gdi, GUICALLBACK cb) {
|
||||
gdi.addInput("FileName", L"", 48, 0, L"Filnamn:");
|
||||
gdi.dropLine();
|
||||
gdi.fillDown();
|
||||
gdi.addButton("BrowseCourse", "Bläddra...", CourseCB);
|
||||
gdi.addButton("BrowseCourse", "Bläddra...", CourseCB);
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.popX();
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("AddClasses", "Lägg till klasser", 0, true);
|
||||
gdi.addCheckbox("AddClasses", "Lägg till klasser", 0, true);
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.fillRight();
|
||||
@ -1132,7 +1132,7 @@ wstring TabCourse::encodeCourse(const wstring &in, bool firstStart, bool lastFin
|
||||
out += dash + formatControl(newC[i], bf);
|
||||
|
||||
if (newC.size() == 1) {
|
||||
out += dash + lang.tl("Mål");
|
||||
out += dash + lang.tl("Mål");
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
@ -1145,9 +1145,9 @@ wstring TabCourse::encodeCourse(const wstring &in, bool firstStart, bool lastFin
|
||||
out = lang.tl("Start") + dash;
|
||||
}
|
||||
if (lastFinish)
|
||||
out += lang.tl("Mål") + L"(" + itow(newC[i]) + L")";
|
||||
out += lang.tl("Mål") + L"(" + itow(newC[i]) + L")";
|
||||
else
|
||||
out += formatControl(newC[i], bf) + dash + lang.tl("Mål");
|
||||
out += formatControl(newC[i], bf) + dash + lang.tl("Mål");
|
||||
}
|
||||
else {
|
||||
out += formatControl(newC[i], bf);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
152
code/TabList.cpp
152
code/TabList.cpp
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -151,12 +151,12 @@ int ListsCB(gdioutput *gdi, int type, void *data)
|
||||
|
||||
int TabList::baseButtons(gdioutput &gdi, int extraButtons) {
|
||||
gdi.addButton(gdi.getWidth()+20, 15, gdi.scaleLength(120),
|
||||
"Cancel", ownWindow ? "Stäng" : "Återgå", ListsCB, "", true, false);
|
||||
"Cancel", ownWindow ? "Stäng" : "Återgå", ListsCB, "", true, false);
|
||||
|
||||
gdi.addButton(gdi.getWidth()+20, 18+gdi.getButtonHeight(), gdi.scaleLength(120),
|
||||
"Print", "Skriv ut...", ListsCB, "Skriv ut listan.", true, false);
|
||||
gdi.addButton(gdi.getWidth()+20, 21+2*gdi.getButtonHeight(), gdi.scaleLength(120),
|
||||
"HTML", "Webb...", ListsCB, "Spara för webben.", true, false);
|
||||
"HTML", "Webb...", ListsCB, "Spara för webben.", true, false);
|
||||
gdi.addButton(gdi.getWidth()+20, 24+3*gdi.getButtonHeight(), gdi.scaleLength(120),
|
||||
"PDF", "PDF...", ListsCB, "Spara som PDF.", true, false);
|
||||
gdi.addButton(gdi.getWidth()+20, 27+4*gdi.getButtonHeight(), gdi.scaleLength(120),
|
||||
@ -182,11 +182,11 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
int baseY = 15;
|
||||
if (!gdi.isFullScreen()) {
|
||||
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(120),
|
||||
"Cancel", ownWindow ? "Stäng" : "Återgå", ListsCB, "", true, false);
|
||||
"Cancel", ownWindow ? "Stäng" : "Återgå", ListsCB, "", true, false);
|
||||
|
||||
baseY += 3 + gdi.getButtonHeight();
|
||||
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(120),
|
||||
"FullScreenLive", "Fullskärm", ListsCB, "Visa listan i fullskärm", true, false);
|
||||
"FullScreenLive", "Fullskärm", ListsCB, "Visa listan i fullskärm", true, false);
|
||||
}
|
||||
SelectedList = "GeneralList";
|
||||
return;
|
||||
@ -249,7 +249,7 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
|
||||
if (!ownWindow) {
|
||||
gdi.addButton(gdi.getWidth()+20, baseY, gdi.scaleLength(120),
|
||||
"Window", "Eget fönster", ListsCB, "Öppna i ett nytt fönster.", true, false);
|
||||
"Window", "Eget fönster", ListsCB, "Öppna i ett nytt fönster.", true, false);
|
||||
|
||||
gdi.addButton(gdi.getWidth()+20, baseY + 3 + 1*gdi.getButtonHeight(), gdi.scaleLength(120),
|
||||
"Automatic", "Automatisera", ListsCB, "Skriv ut eller exportera listan automatiskt.", true, false);
|
||||
@ -262,16 +262,16 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
|
||||
baseY += 3 + gdi.getButtonHeight();
|
||||
gdi.addButton(gdi.getWidth()+20, baseY, gdi.scaleLength(120),
|
||||
"FullScreen", "Fullskärm", ListsCB, "Visa listan i fullskärm", true, false);
|
||||
"FullScreen", "Fullskärm", ListsCB, "Visa listan i fullskärm", true, false);
|
||||
*/
|
||||
baseY += 3 + gdi.getButtonHeight();
|
||||
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(120),
|
||||
"ListDesign", "Utseende...", ListsCB, "Justera visningsinställningar", true, false);
|
||||
"ListDesign", "Utseende...", ListsCB, "Justera visningsinställningar", true, false);
|
||||
|
||||
if (!currentList.getParam().saved && !oe->isReadOnly()) {
|
||||
baseY += 3 + gdi.getButtonHeight();
|
||||
gdi.addButton(gdi.getWidth()+20, baseY, gdi.scaleLength(120),
|
||||
"Remember", "Kom ihåg listan", ListsCB, "Spara den här listan som en favoritlista", true, false);
|
||||
"Remember", "Kom ihåg listan", ListsCB, "Spara den här listan som en favoritlista", true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,7 +363,7 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
else if (bi.id == "ListDesign") {
|
||||
gdioutput *gdi_settings = getExtraWindow("list_settings", true);
|
||||
if (!gdi_settings) {
|
||||
gdi_settings = createExtraWindow("list_settings", lang.tl("Inställningar"), gdi.scaleLength(600), gdi.scaleLength(400));
|
||||
gdi_settings = createExtraWindow("list_settings", lang.tl("Inställningar"), gdi.scaleLength(600), gdi.scaleLength(400));
|
||||
}
|
||||
if (gdi_settings) {
|
||||
loadSettings(*gdi_settings, gdi.getTag());
|
||||
@ -427,13 +427,13 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
if (gdi.getSelectedItem("SavedInstance", lbi)) {
|
||||
const oListParam &par = oe->getListContainer().getParam(lbi.data);
|
||||
gdi.clearPage(true);
|
||||
gdi.addString("", boldLarge, L"Döp om X#" + par.getName());
|
||||
gdi.addString("", boldLarge, L"Döp om X#" + par.getName());
|
||||
gdi.setData("ParamIx", lbi.data);
|
||||
gdi.dropLine();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("Name", par.getName(), 36);
|
||||
gdi.setInputFocus("Name", true);
|
||||
gdi.addButton("DoRenameSaved", "Döp om", ListsCB);
|
||||
gdi.addButton("DoRenameSaved", "Döp om", ListsCB);
|
||||
gdi.addButton("Cancel", "Avbryt", ListsCB);
|
||||
gdi.dropLine(3);
|
||||
}
|
||||
@ -451,16 +451,16 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
//oe->getListContainer().mergeParam(0, lbi.data);
|
||||
const oListParam &par = oe->getListContainer().getParam(lbi.data);
|
||||
gdi.clearPage(true);
|
||||
gdi.addString("", boldLarge, L"Slå ihop X#" + par.getName());
|
||||
gdi.addString("", boldLarge, L"Slå ihop X#" + par.getName());
|
||||
gdi.setData("ParamIx", lbi.data);
|
||||
gdi.dropLine();
|
||||
gdi.addListBox("Merge", 350, 250, 0, L"Slå ihop med:");
|
||||
gdi.addListBox("Merge", 350, 250, 0, L"Slå ihop med:");
|
||||
vector < pair<wstring, size_t> > cand;
|
||||
oe->getListContainer().getMergeCandidates(lbi.data, cand);
|
||||
gdi.addItem("Merge", cand);
|
||||
gdi.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("DoMerge", "Slå ihop", ListsCB);
|
||||
gdi.addButton("DoMerge", "Slå ihop", ListsCB);
|
||||
gdi.addButton("Cancel", "Avbryt", ListsCB);
|
||||
gdi.dropLine(3);
|
||||
}
|
||||
@ -1004,12 +1004,12 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, "Tillgängliga listor");
|
||||
gdi.addString("", boldLarge, "Tillgängliga listor");
|
||||
int xx = gdi.getCX() + gdi.scaleLength(360);
|
||||
int bx = gdi.getCX();
|
||||
if (!installedLists.empty()) {
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, "Listor i tävlingen");
|
||||
gdi.addString("", 1, "Listor i tävlingen");
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
for (size_t k = 0; k < installedLists.size(); k++) {
|
||||
@ -1039,7 +1039,7 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addStringUT(0, lists[k].first, 0);
|
||||
if (!installedId.count(lists[k].second.first)) {
|
||||
gdi.setCX(xx);
|
||||
gdi.addString("CustomList", 0, "Lägg till", ListsCB).setColor(colorDarkGreen).setExtra(k);
|
||||
gdi.addString("CustomList", 0, "Lägg till", ListsCB).setColor(colorDarkGreen).setExtra(k);
|
||||
gdi.addString("RemoveList", 0, "Radera permanent", ListsCB).setColor(colorDarkRed).setExtra(k);
|
||||
}
|
||||
gdi.dropLine();
|
||||
@ -1058,8 +1058,8 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
gdi.dropLine(2);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("BrowseList", "Bläddra...", ListsCB);
|
||||
gdi.addButton("Cancel", "Återgå", ListsCB).setCancel();
|
||||
gdi.addButton("BrowseList", "Bläddra...", ListsCB);
|
||||
gdi.addButton("Cancel", "Återgå", ListsCB).setCancel();
|
||||
gdi.refresh();
|
||||
}
|
||||
else if (bi.id == "BrowseList") {
|
||||
@ -1234,7 +1234,7 @@ void TabList::enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to) {
|
||||
if (to) {
|
||||
gdi.enableInput("ResultSpecialTo");
|
||||
gdi.addItem("ResultSpecialTo", d);
|
||||
gdi.addItem("ResultSpecialTo", lang.tl("Mål"), 0);
|
||||
gdi.addItem("ResultSpecialTo", lang.tl("Mål"), 0);
|
||||
if (!gdi.selectItemByData("ResultSpecialTo", oe.getPropertyInt("ControlTo", 0))) {
|
||||
gdi.selectItemByData("ResultSpecialTo", 0); // Fallback
|
||||
}
|
||||
@ -1296,8 +1296,8 @@ void TabList::makeClassSelection(gdioutput &gdi) {
|
||||
gdi.fillRight();
|
||||
gdi.dropLine(0.5);
|
||||
|
||||
gdi.addButton("SelectAll", "Välj allt", ListsCB);
|
||||
gdi.addButton("SelectNone", "Välj inget", ListsCB);
|
||||
gdi.addButton("SelectAll", "Välj allt", ListsCB);
|
||||
gdi.addButton("SelectNone", "Välj inget", ListsCB);
|
||||
gdi.popX();
|
||||
}
|
||||
|
||||
@ -1320,9 +1320,9 @@ void TabList::loadGeneralList(gdioutput &gdi)
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser / klubbar", ListsCB, oe->getPropertyInt("pagebreak", 0)!=0);
|
||||
|
||||
gdi.addCheckbox("ShowInterResults", "Visa mellantider", ListsCB, oe->getPropertyInt("intertime", 1)!=0, "Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", ListsCB, oe->getPropertyInt("splitanalysis", 1)!=0);
|
||||
gdi.addCheckbox("UseLargeSize", "Använd stor font", 0, lastLargeSize);
|
||||
gdi.addCheckbox("ShowInterResults", "Visa mellantider", ListsCB, oe->getPropertyInt("intertime", 1)!=0, "Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", ListsCB, oe->getPropertyInt("splitanalysis", 1)!=0);
|
||||
gdi.addCheckbox("UseLargeSize", "Använd stor font", 0, lastLargeSize);
|
||||
|
||||
if (lastLimitPer == -1) {
|
||||
lastLimitPer = oe->getPropertyInt("classlimit", 0);
|
||||
@ -1331,13 +1331,13 @@ void TabList::loadGeneralList(gdioutput &gdi)
|
||||
if (lastLimitPer > 0)
|
||||
lastClassLimit = itow(lastLimitPer);
|
||||
|
||||
gdi.addInput("ClassLimit", lastClassLimit, 5, 0, L"Begränsa antal per klass:");
|
||||
gdi.addInput("ClassLimit", lastClassLimit, 5, 0, L"Begränsa antal per klass:");
|
||||
gdi.dropLine();
|
||||
|
||||
makeFromTo(gdi);
|
||||
/*gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addSelection("ResultSpecialFrom", 140, 300, ListsCB, "Från kontroll:");
|
||||
gdi.addSelection("ResultSpecialFrom", 140, 300, ListsCB, "Från kontroll:");
|
||||
gdi.disableInput("ResultSpecialFrom");
|
||||
|
||||
gdi.addSelection("ResultSpecialTo", 140, 300, ListsCB, "Till kontroll:");
|
||||
@ -1347,10 +1347,10 @@ void TabList::loadGeneralList(gdioutput &gdi)
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
*/
|
||||
gdi.addSelection("LegNumber", 140, 300, ListsCB, L"Sträcka:");
|
||||
gdi.addSelection("LegNumber", 140, 300, ListsCB, L"Sträcka:");
|
||||
gdi.disableInput("LegNumber");
|
||||
|
||||
gdi.addInput("InputNumber", lastInputNumber, 5, 0, L"Listparameter:", L"Ett värde vars tolkning beror på listan.");
|
||||
gdi.addInput("InputNumber", lastInputNumber, 5, 0, L"Listparameter:", L"Ett värde vars tolkning beror på listan.");
|
||||
gdi.disableInput("InputNumber");
|
||||
gdi.popX();
|
||||
|
||||
@ -1386,7 +1386,7 @@ void TabList::makeFromTo(gdioutput &gdi) {
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
|
||||
gdi.addSelection("ResultSpecialFrom", 140, 300, ListsCB, L"Från kontroll:");
|
||||
gdi.addSelection("ResultSpecialFrom", 140, 300, ListsCB, L"Från kontroll:");
|
||||
gdi.disableInput("ResultSpecialFrom");
|
||||
|
||||
gdi.addSelection("ResultSpecialTo", 140, 300, ListsCB, L"Till kontroll:");
|
||||
@ -1445,7 +1445,7 @@ static void addAnimationSettings(gdioutput &gdi, oListParam &dst) {
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("Time", itow(dst.timePerPage), 5, 0, L"Visningstid:");
|
||||
gdi.addSelection("NPage", 70, 200, 0, L"Sidor per skärm:");
|
||||
gdi.addSelection("NPage", 70, 200, 0, L"Sidor per skärm:");
|
||||
for (int i = 1; i <= 8; i++)
|
||||
gdi.addItem("NPage", itow(i), i);
|
||||
if (dst.nColumns == 0)
|
||||
@ -1470,12 +1470,12 @@ void TabList::loadSettings(gdioutput &gdi, string targetTag) {
|
||||
gdi.setColorMode(RGB(242, 240, 250));
|
||||
gdi.setData("target", targetTag);
|
||||
settingsTarget = targetTag;
|
||||
gdi.addString("", fontMediumPlus, L"Visningsinställningar för 'X'#" + currentList.getName());
|
||||
gdi.addString("", fontMediumPlus, L"Visningsinställningar för 'X'#" + currentList.getName());
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addSelection("Background", 200, 100, 0, L"Bakgrund:").setHandler(&settingsClass);
|
||||
gdi.addItem("Background", lang.tl("Standard"), 0);
|
||||
gdi.addItem("Background", lang.tl("Färg"), 1);
|
||||
gdi.addItem("Background", lang.tl("Färg"), 1);
|
||||
//gdi.addItem("Background", lang.tl("Bild"), 2);
|
||||
tmpSettingsParam = currentList.getParam();
|
||||
int bgColor = currentList.getParam().bgColor;
|
||||
@ -1484,18 +1484,18 @@ void TabList::loadSettings(gdioutput &gdi, string targetTag) {
|
||||
gdi.selectItemByData("Background", useColor ? 1 : 0);
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("BGColor", "Bakgrundsfärg...").setHandler(&settingsClass).setExtra(bgColor);
|
||||
gdi.addButton("BGColor", "Bakgrundsfärg...").setHandler(&settingsClass).setExtra(bgColor);
|
||||
gdi.setInputStatus("BGColor", useColor);
|
||||
gdi.addButton("FGColor", "Textfärg...").setHandler(&settingsClass).setExtra(fgColor);
|
||||
gdi.addButton("FGColor", "Textfärg...").setHandler(&settingsClass).setExtra(fgColor);
|
||||
|
||||
gdi.popX();
|
||||
|
||||
gdi.dropLine(3);
|
||||
gdi.addSelection("Mode", 200, 100, 0, L"Visning:").setHandler(&settingsClass);
|
||||
gdi.addItem("Mode", lang.tl("Fönster"), 0);
|
||||
gdi.addItem("Mode", lang.tl("Fönster (rullande)"), 3);
|
||||
gdi.addItem("Mode", lang.tl("Fullskärm (sidvis)"), 1);
|
||||
gdi.addItem("Mode", lang.tl("Fullskärm (rullande)"), 2);
|
||||
gdi.addItem("Mode", lang.tl("Fönster"), 0);
|
||||
gdi.addItem("Mode", lang.tl("Fönster (rullande)"), 3);
|
||||
gdi.addItem("Mode", lang.tl("Fullskärm (sidvis)"), 1);
|
||||
gdi.addItem("Mode", lang.tl("Fullskärm (rullande)"), 2);
|
||||
gdi.selectItemByData("Mode", tmpSettingsParam.screenMode);
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
@ -1504,7 +1504,7 @@ void TabList::loadSettings(gdioutput &gdi, string targetTag) {
|
||||
gdi.setData("ymode", gdi.getCY());
|
||||
gdi.dropLine(3);
|
||||
|
||||
gdi.addButton("ApplyList", "Verkställ").setHandler(&settingsClass);
|
||||
gdi.addButton("ApplyList", "Verkställ").setHandler(&settingsClass);
|
||||
|
||||
if (tmpSettingsParam.screenMode == 1)
|
||||
addAnimationSettings(gdi, tmpSettingsParam);
|
||||
@ -1668,7 +1668,7 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
oe->sanityCheck(gdi, true);
|
||||
gdi.fillDown();
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, makeDash(L"Resultatlista - inställningar"));
|
||||
gdi.addString("", boldLarge, makeDash(L"Resultatlista - inställningar"));
|
||||
|
||||
//gdi.addSelection("ListType", 200, 300, ListsCB, "Lista");
|
||||
//oe->fillListTypes(gdi, "ListType", 0);
|
||||
@ -1679,8 +1679,8 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("SelectAll", "Välj allt", ListsCB);
|
||||
gdi.addButton("SelectNone", "Välj inget", ListsCB);
|
||||
gdi.addButton("SelectAll", "Välj allt", ListsCB);
|
||||
gdi.addButton("SelectNone", "Välj inget", ListsCB);
|
||||
|
||||
gdi.popY();
|
||||
gdi.setCX(gdi.scaleLength(250));
|
||||
@ -1714,13 +1714,13 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Relay)) {
|
||||
lists.push_back(make_pair(lang.tl(L"Stafett - total"), 3));
|
||||
lists.push_back(make_pair(lang.tl(L"Stafett - sammanställning"), 4));
|
||||
lists.push_back(make_pair(lang.tl(L"Stafett - sammanställning"), 4));
|
||||
|
||||
lists.push_back(make_pair(lang.tl(L"Stafett - sträcka"),
|
||||
lists.push_back(make_pair(lang.tl(L"Stafett - sträcka"),
|
||||
getListIx(tag2ListIx, usedListIx, "legresult", 5)));
|
||||
}
|
||||
|
||||
lists.push_back(make_pair(lang.tl(L"Allmänna resultat"), 6));
|
||||
lists.push_back(make_pair(lang.tl(L"Allmänna resultat"), 6));
|
||||
|
||||
size_t startIx = lists.size();
|
||||
for (size_t k = 0; k < dlists.size(); k++) {
|
||||
@ -1747,13 +1747,13 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
gdi.pushX();
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", ListsCB, oe->getPropertyInt("pagebreak", 0)!=0);
|
||||
gdi.addCheckbox("ShowInterResults", "Visa mellantider", 0, lastInterResult,
|
||||
"Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("ShowSplits", "Lista med sträcktider", 0, lastSplitState);
|
||||
gdi.addCheckbox("UseLargeSize", "Använd stor font", 0, lastLargeSize);
|
||||
"Mellantider visas för namngivna kontroller.");
|
||||
gdi.addCheckbox("ShowSplits", "Lista med sträcktider", 0, lastSplitState);
|
||||
gdi.addCheckbox("UseLargeSize", "Använd stor font", 0, lastLargeSize);
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.popX();
|
||||
gdi.addString("", 0, "Topplista, N bästa:");
|
||||
gdi.addString("", 0, "Topplista, N bästa:");
|
||||
gdi.dropLine(-0.2);
|
||||
|
||||
if (lastLimitPer == -1) {
|
||||
@ -1768,14 +1768,14 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
gdi.dropLine(2);
|
||||
gdi.addString("", 0, "Listparameter:");
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addInput("InputNumber", lastInputNumber, 5, 0, L"", L"Ett värde vars tolkning beror på listan.");
|
||||
gdi.addInput("InputNumber", lastInputNumber, 5, 0, L"", L"Ett värde vars tolkning beror på listan.");
|
||||
gdi.disableInput("InputNumber");
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
|
||||
makeFromTo(gdi);
|
||||
|
||||
gdi.addSelection("LegNumber", 140, 300, ListsCB, L"Sträcka:");
|
||||
gdi.addSelection("LegNumber", 140, 300, ListsCB, L"Sträcka:");
|
||||
gdi.disableInput("LegNumber");
|
||||
gdi.popX();
|
||||
|
||||
@ -1841,7 +1841,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
oListInfo li;
|
||||
oe->getListType(EStdNone, li);
|
||||
|
||||
gdi.addString("", boldLarge, "Listor och sammanställningar");
|
||||
gdi.addString("", boldLarge, "Listor och sammanställningar");
|
||||
|
||||
gdi.addString("", 10, "help:30750");
|
||||
|
||||
@ -1868,7 +1868,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
}
|
||||
if (cnf.hasRelay()) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("TeamStartList", "Stafett (sammanställning)", ListsCB);
|
||||
gdi.addButton("TeamStartList", "Stafett (sammanställning)", ListsCB);
|
||||
}
|
||||
if (cnf.hasPatrol()) {
|
||||
checkWidth(gdi);
|
||||
@ -1877,7 +1877,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
for (size_t k = 0; k<cnf.legNStart.size(); k++) {
|
||||
if (cnf.legNStart[k].size() > 0) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("LegNStart", "Sträcka X#" + itos(k+1), ListsCB).setExtra(k);
|
||||
gdi.addButton("LegNStart", "Sträcka X#" + itos(k+1), ListsCB).setExtra(k);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1903,7 +1903,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
checkWidth(gdi);
|
||||
}
|
||||
|
||||
gdi.addButton("ResultIndSplit", "Sträcktider", ListsCB);
|
||||
gdi.addButton("ResultIndSplit", "Sträcktider", ListsCB);
|
||||
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("Result:latestresult", "Latest Results", ListsCB).setExtra(1);
|
||||
@ -1921,18 +1921,18 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
if (cnf.raceNRes[k].size() > 0) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("RaceNRes", "Lopp X#" + itos(k+1), ListsCB,
|
||||
"Resultat för ett visst lopp.").setExtra(k);
|
||||
"Resultat för ett visst lopp.").setExtra(k);
|
||||
hasMulti = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasMulti) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("MultiResults", "Alla lopp", ListsCB, "Individuell resultatlista, sammanställning av flera lopp.");
|
||||
gdi.addButton("MultiResults", "Alla lopp", ListsCB, "Individuell resultatlista, sammanställning av flera lopp.");
|
||||
}
|
||||
if (cnf.hasRelay()) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("TeamResults", "Stafett (sammanställning)", ListsCB);
|
||||
gdi.addButton("TeamResults", "Stafett (sammanställning)", ListsCB);
|
||||
}
|
||||
if (cnf.hasPatrol()) {
|
||||
checkWidth(gdi);
|
||||
@ -1940,7 +1940,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
}
|
||||
for (map<int, vector<int> >::const_iterator it = cnf.legResult.begin(); it != cnf.legResult.end(); ++it) {
|
||||
checkWidth(gdi);
|
||||
gdi.addButton("LegNResult", "Sträcka X#" + itos(it->first+1), ListsCB).setExtra(it->first);
|
||||
gdi.addButton("LegNResult", "Sträcka X#" + itos(it->first+1), ListsCB).setExtra(it->first);
|
||||
}
|
||||
|
||||
if (cnf.hasRogaining()) {
|
||||
@ -1990,8 +1990,8 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
gdi.autoGrow("SavedInstance");
|
||||
gdi.selectFirstItem("SavedInstance");
|
||||
gdi.addButton("ShowSaved", "Visa", ListsCB);
|
||||
gdi.addButton("RenameSaved", "Döp om", ListsCB);
|
||||
gdi.addButton("MergeSaved", "Slå ihop...", ListsCB);
|
||||
gdi.addButton("RenameSaved", "Döp om", ListsCB);
|
||||
gdi.addButton("MergeSaved", "Slå ihop...", ListsCB);
|
||||
gdi.addButton("SplitSaved", "Dela upp...", ListsCB);
|
||||
|
||||
bool split = oe->getListContainer().canSplit(savedParams[0].second);
|
||||
@ -2012,7 +2012,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
if (cnf.hasIndividual()) {
|
||||
gdi.addButton("PriceList", "Prisutdelningslista", ListsCB);
|
||||
}
|
||||
gdi.addButton("PreReport", "Kör kontroll inför tävlingen...", ListsCB);
|
||||
gdi.addButton("PreReport", "Kör kontroll inför tävlingen...", ListsCB);
|
||||
checkWidth(gdi);
|
||||
|
||||
if (cnf.hasMultiCourse) {
|
||||
@ -2021,7 +2021,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
|
||||
if (cnf.hasTeamClass()) {
|
||||
gdi.addButton("GenLst:courseteamtable", "Gafflingar i tabellformat", ListsCB,
|
||||
"Från den här listan kan man skapa etiketter att klistra på kartor");
|
||||
"Från den här listan kan man skapa etiketter att klistra på kartor");
|
||||
checkWidth(gdi);
|
||||
}
|
||||
}
|
||||
@ -2043,7 +2043,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
checkWidth(gdi);
|
||||
}
|
||||
|
||||
gdi.addButton("GenLst:courseusage", "Bananvändning", ListsCB);
|
||||
gdi.addButton("GenLst:courseusage", "Bananvändning", ListsCB);
|
||||
checkWidth(gdi);
|
||||
|
||||
gdi.addButton("GenLst:controloverview", "Kontroller", ListsCB);
|
||||
@ -2059,12 +2059,12 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
|
||||
gdi.dropLine(3);
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser / klubbar", ListsCB, oe->getPropertyInt("pagebreak", 0)!=0);
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", ListsCB, oe->getPropertyInt("splitanalysis", 1)!=0);
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", ListsCB, oe->getPropertyInt("splitanalysis", 1)!=0);
|
||||
|
||||
gdi.popX();
|
||||
gdi.fillRight();
|
||||
gdi.dropLine(2);
|
||||
gdi.addString("", 0, "Begränsning, antal visade per klass: ");
|
||||
gdi.addString("", 0, "Begränsning, antal visade per klass: ");
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addSelection("ClassLimit", 70, 350, ListsCB);
|
||||
gdi.addItem("ClassLimit", lang.tl("Ingen"), 0);
|
||||
@ -2116,16 +2116,16 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
gdi.clearPage(false);
|
||||
gdi.fillDown();
|
||||
if (type == Splits)
|
||||
gdi.addString("", boldLarge, "Inställningar sträcktidsutskrift");
|
||||
gdi.addString("", boldLarge, "Inställningar sträcktidsutskrift");
|
||||
else
|
||||
gdi.addString("", boldLarge, "Inställningar startbevis");
|
||||
gdi.addString("", boldLarge, "Inställningar startbevis");
|
||||
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
if (setupPrinter) {
|
||||
gdi.addButton("PrinterSetup", "Skrivare...", ListsCB, "Skrivarinställningar");
|
||||
gdi.addButton("PrinterSetup", "Skrivare...", ListsCB, "Skrivarinställningar");
|
||||
gdi.dropLine(0.3);
|
||||
}
|
||||
|
||||
@ -2135,7 +2135,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
bool withSpeed = (oe.getDCI().getInt("Analysis") & 2) == 0;
|
||||
bool withResult = (oe.getDCI().getInt("Analysis") & 4) == 0;
|
||||
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", 0, withSplitAnalysis);
|
||||
gdi.addCheckbox("SplitAnalysis", "Med sträcktidsanalys", 0, withSplitAnalysis);
|
||||
gdi.addCheckbox("Speed", "Med km-tid", 0, withSpeed);
|
||||
gdi.addCheckbox("Results", "Med resultat", 0, withResult);
|
||||
|
||||
@ -2147,7 +2147,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
|
||||
if (type == Splits) {
|
||||
const bool wideFormat = oe.getPropertyInt("WideSplitFormat", 0) == 1;
|
||||
gdi.addCheckbox("WideFormat", "Sträcktider i kolumner (för standardpapper)", ListsCB, wideFormat);
|
||||
gdi.addCheckbox("WideFormat", "Sträcktider i kolumner (för standardpapper)", ListsCB, wideFormat);
|
||||
|
||||
if (returnMode == TSITab) {
|
||||
int printLen = oe.getPropertyInt("NumSplitsOnePage", 3);
|
||||
@ -2159,7 +2159,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
gdi.selectItemByData("NumPerPage", printLen);
|
||||
|
||||
int maxWait = oe.getPropertyInt("SplitPrintMaxWait", 60);
|
||||
gdi.addInput("MaxWaitTime", itow(maxWait), 8, 0, L"Längsta tid i sekunder att vänta med utskrift");
|
||||
gdi.addInput("MaxWaitTime", itow(maxWait), 8, 0, L"Längsta tid i sekunder att vänta med utskrift");
|
||||
|
||||
enableWideFormat(gdi, wideFormat);
|
||||
}
|
||||
@ -2483,7 +2483,7 @@ void TabList::getPublicLists(oEvent &oe, vector<oListParam> &lists) {
|
||||
getResultClub(lists.back(), cnf);
|
||||
}
|
||||
|
||||
//gdi.addButton("ResultIndSplit", "Sträcktider", ListsCB);
|
||||
//gdi.addButton("ResultIndSplit", "Sträcktider", ListsCB);
|
||||
|
||||
if (cnf.isMultiStageEvent()) {
|
||||
//gdi.addButton("Result:stageresult", "Etappresultat", ListsCB);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -493,7 +493,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
wstring name=gdi.getText("Name");
|
||||
|
||||
if (name.empty())
|
||||
throw std::exception("Alla deltagare måste ha ett namn.");
|
||||
throw std::exception("Alla deltagare måste ha ett namn.");
|
||||
|
||||
int cardNo = gdi.getTextNo("CardNo");
|
||||
|
||||
@ -544,7 +544,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
if (cardNoChanged && cardNo>0) {
|
||||
pRunner warnCardDupl = warnDuplicateCard(cardNo, r);
|
||||
if (warnCardDupl) {
|
||||
gdi.alert(L"Varning: Brickan X används redan av Y.#" + itow(cardNo) + L"#" + warnCardDupl->getCompleteIdentification());
|
||||
gdi.alert(L"Varning: Brickan X används redan av Y.#" + itow(cardNo) + L"#" + warnCardDupl->getCompleteIdentification());
|
||||
}
|
||||
}
|
||||
|
||||
@ -563,7 +563,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
bool noSetStatus = false;
|
||||
if (cardNo > 0 && r->getCard() &&
|
||||
r->getCard()->getCardNo() != cardNo && r->getCardNo() != cardNo) {
|
||||
if (gdi.ask(L"Vill du koppla isär X från inläst bricka Y?#" + r->getName() +
|
||||
if (gdi.ask(L"Vill du koppla isär X från inläst bricka Y?#" + r->getName() +
|
||||
L"#" + r->getCard()->getCardNoString())) {
|
||||
r->setStatus(StatusUnknown, true, false, false);
|
||||
r->setCard(0);
|
||||
@ -575,7 +575,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
}
|
||||
|
||||
if (cardNo > 0 && cardNo != r->getCardNo() && oe->hasNextStage()) {
|
||||
if (gdi.ask(L"Vill du använda den nya brickan till alla etapper?")) {
|
||||
if (gdi.ask(L"Vill du använda den nya brickan till alla etapper?")) {
|
||||
r->setTransferCardNoNextStage(true);
|
||||
}
|
||||
}
|
||||
@ -621,7 +621,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
pClass pNewCls = oe->getClass(classId);
|
||||
if (pNewCls && pNewCls->getClassType() == oClassRelay) {
|
||||
if (!r->getTeam()) {
|
||||
gdi.alert("För att delta i en lagklass måste deltagaren ingå i ett lag.");
|
||||
gdi.alert("För att delta i en lagklass måste deltagaren ingå i ett lag.");
|
||||
classId = 0;
|
||||
}
|
||||
else if (r->getTeam()->getClassId(true) != classId && r->getClassId(true) != classId) {
|
||||
@ -632,7 +632,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
|
||||
bool readStatusIn = true;
|
||||
if (r->getClassId(true) != classId && r->getInputStatus() != StatusNotCompetiting && r->hasInputData()) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?")) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?")) {
|
||||
r->resetInputData();
|
||||
readStatusIn = false;
|
||||
}
|
||||
@ -656,7 +656,7 @@ pRunner TabRunner::save(gdioutput &gdi, int runnerId, bool willExit) {
|
||||
}
|
||||
|
||||
if (checkStatus && sIn != r->getStatus())
|
||||
gdi.alert("Status matchar inte data i löparbrickan.");
|
||||
gdi.alert("Status matchar inte data i löparbrickan.");
|
||||
|
||||
if (gdi.hasField("StatusIn") && readStatusIn) {
|
||||
r->setInputStatus(RunnerStatus(gdi.getSelectedItem("StatusIn").first));
|
||||
@ -712,7 +712,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.selectItemByData("Runners", r->getId());
|
||||
}
|
||||
else
|
||||
gdi.alert("Löparen hittades inte");
|
||||
gdi.alert("Löparen hittades inte");
|
||||
}
|
||||
else if (bi.id == "ShowAll") {
|
||||
fillRunnerList(gdi);
|
||||
@ -861,7 +861,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
showInForestList(gdi);
|
||||
}
|
||||
else if (bi.id == "RemoveVacant") {
|
||||
if (gdi.ask(L"Vill du radera alla vakanser från tävlingen?")) {
|
||||
if (gdi.ask(L"Vill du radera alla vakanser från tävlingen?")) {
|
||||
oe->removeVacanies(0);
|
||||
gdi.disableInput(bi.id.c_str());
|
||||
}
|
||||
@ -912,7 +912,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
wstring name = gdi.getText("Name");
|
||||
pRunner r = oe->getRunner(runnerId, 0);
|
||||
if (!name.empty() && r && r->getName() != name && r->getNameRaw() != name) {
|
||||
if (gdi.ask(L"Vill du lägga till deltagaren 'X'?#" + name)) {
|
||||
if (gdi.ask(L"Vill du lägga till deltagaren 'X'?#" + name)) {
|
||||
r = oe->addRunner(name, 0, 0, 0,0, false);
|
||||
runnerId = r->getId();
|
||||
}
|
||||
@ -940,9 +940,9 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
if (!runnerId)
|
||||
return 0;
|
||||
|
||||
if (gdi.ask(L"Vill du verkligen ta bort löparen?")) {
|
||||
if (gdi.ask(L"Vill du verkligen ta bort löparen?")) {
|
||||
if (oe->isRunnerUsed(runnerId))
|
||||
gdi.alert("Löparen ingår i ett lag och kan inte tas bort.");
|
||||
gdi.alert("Löparen ingår i ett lag och kan inte tas bort.");
|
||||
else {
|
||||
pRunner r = oe->getRunner(runnerId, 0);
|
||||
if (r)
|
||||
@ -969,7 +969,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
pRunner r = oe->getRunner(runnerId, 0);
|
||||
r = r->getMultiRunner(0);
|
||||
|
||||
if (r && gdi.ask(L"Bekräfta att deltagaren har lämnat återbud.")) {
|
||||
if (r && gdi.ask(L"Bekräfta att deltagaren har lämnat återbud.")) {
|
||||
if (r->getStartTime()>0) {
|
||||
pRunner newRunner = oe->addRunnerVacant(r->getClassId(true));
|
||||
newRunner->cloneStartTime(r);
|
||||
@ -1009,7 +1009,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
gdi.addString("", 0, "Välj en vakant plats nedan.");
|
||||
gdi.addString("", 0, "Välj en vakant plats nedan.");
|
||||
|
||||
oe->generateVacancyList(gdi, RunnerCB);
|
||||
|
||||
@ -1289,13 +1289,13 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
return -1;
|
||||
|
||||
wchar_t bf[1024];
|
||||
swprintf_s(bf, lang.tl("Bekräfta att %s byter klass till %s.").c_str(),
|
||||
swprintf_s(bf, lang.tl("Bekräfta att %s byter klass till %s.").c_str(),
|
||||
r->getName().c_str(), vacancy->getClass(true).c_str());
|
||||
if (gdi.ask(wstring(L"#") + bf)) {
|
||||
|
||||
vacancy->synchronize();
|
||||
if (!vacancy->isVacant())
|
||||
throw meosException("Starttiden är upptagen.");
|
||||
throw meosException("Starttiden är upptagen.");
|
||||
|
||||
oRunner temp(oe, 0);
|
||||
temp.setTemporary();
|
||||
@ -1314,7 +1314,7 @@ int TabRunner::runnerCB(gdioutput &gdi, int type, void *data)
|
||||
r->setStartNo(vacancy->getStartNo(), false);
|
||||
|
||||
if (oe->hasPrevStage()) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?"))
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?"))
|
||||
r->resetInputData();
|
||||
}
|
||||
|
||||
@ -1341,7 +1341,7 @@ void TabRunner::showCardsList(gdioutput &gdi)
|
||||
currentMode = 3;
|
||||
gdi.clearPage(false);
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", boldLarge, "Hantera löparbrickor");
|
||||
gdi.addString("", boldLarge, "Hantera löparbrickor");
|
||||
gdi.addString("", 10, "help:14343");
|
||||
addToolbar(gdi);
|
||||
gdi.dropLine();
|
||||
@ -1380,12 +1380,12 @@ int TabRunner::vacancyCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
r->synchronize();
|
||||
if (!r->isVacant())
|
||||
throw std::exception("Starttiden är upptagen.");
|
||||
throw std::exception("Starttiden är upptagen.");
|
||||
|
||||
wstring name = gdi.getText("Name");
|
||||
|
||||
if (name.empty())
|
||||
throw std::exception("Alla deltagare måste ha ett namn.");
|
||||
throw std::exception("Alla deltagare måste ha ett namn.");
|
||||
|
||||
int cardNo = gdi.getTextNo("CardNo");
|
||||
|
||||
@ -1446,7 +1446,7 @@ int TabRunner::vacancyCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
|
||||
if (oe->hasPrevStage()) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?"))
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?"))
|
||||
r->resetInputData();
|
||||
}
|
||||
|
||||
@ -1530,10 +1530,10 @@ void TabRunner::showRunnerReport(gdioutput &gdi)
|
||||
if (!oe->isReadOnly()) {
|
||||
if (!ownWindow) {
|
||||
gdi.addButton("Kiosk", "Resultatkiosk", RunnerCB);
|
||||
gdi.addButton("Window", "Eget fönster", RunnerCB, "Öppna i ett nytt fönster.");
|
||||
gdi.addButton("Window", "Eget fönster", RunnerCB, "Öppna i ett nytt fönster.");
|
||||
}
|
||||
gdi.dropLine(0.2);
|
||||
gdi.addCheckbox("ListenReadout", "Visa senast inlästa deltagare", RunnerCB, listenToPunches);
|
||||
gdi.addCheckbox("ListenReadout", "Visa senast inlästa deltagare", RunnerCB, listenToPunches);
|
||||
}
|
||||
|
||||
gdi.dropLine(3);
|
||||
@ -1679,7 +1679,7 @@ void TabRunner::runnerReport(gdioutput &gdi, int id, bool compact) {
|
||||
gdi.addString("", fontMedium, L"Starttid: X #" + r->getStartTimeCompact());
|
||||
|
||||
if (r->getFinishTime() > 0)
|
||||
gdi.addString("", fontMedium, L"Måltid: X #" + r->getFinishTimeS());
|
||||
gdi.addString("", fontMedium, L"Måltid: X #" + r->getFinishTimeS());
|
||||
|
||||
const wstring &after = oe->formatListString(lRunnerTimeAfter, r);
|
||||
if (!after.empty()) {
|
||||
@ -1745,7 +1745,7 @@ void TabRunner::runnerReport(gdioutput &gdi, int id, bool compact) {
|
||||
if (after[k] > 0)
|
||||
split += L" (" + itow(place[k]) + L", +" + getTimeMS(after[k]) + L")";
|
||||
else if (place[k] == 1)
|
||||
split += lang.tl(" (sträckseger)");
|
||||
split += lang.tl(" (sträckseger)");
|
||||
else if (place[k] > 0)
|
||||
split += L" " + itow(place[k]);
|
||||
|
||||
@ -1876,8 +1876,8 @@ void TabRunner::showVacancyList(gdioutput &gdi, const string &method, int classI
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addButton("VacancyAdd", "Tillsätt ytterligare vakans", VacancyCB);
|
||||
//gdi.addButton("Cancel", "Återgå", VacancyCB);
|
||||
gdi.addButton("VacancyAdd", "Tillsätt ytterligare vakans", VacancyCB);
|
||||
//gdi.addButton("Cancel", "Återgå", VacancyCB);
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(2);
|
||||
@ -1895,7 +1895,7 @@ void TabRunner::showVacancyList(gdioutput &gdi, const string &method, int classI
|
||||
}
|
||||
else if (method == "add") {
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", boldLarge, "Tillsätt vakans");
|
||||
gdi.addString("", boldLarge, "Tillsätt vakans");
|
||||
addToolbar(gdi);
|
||||
|
||||
gdi.dropLine();
|
||||
@ -1956,13 +1956,13 @@ void TabRunner::showVacancyList(gdioutput &gdi, const string &method, int classI
|
||||
|
||||
gdi.dropLine(2.8);
|
||||
gdi.popX();
|
||||
gdi.addCheckbox("StartInfo", "Skriv ut startbevis", SportIdentCB, tsi.hasPrintStartInfo(), "Skriv ut startbevis för deltagaren");
|
||||
gdi.addCheckbox("StartInfo", "Skriv ut startbevis", SportIdentCB, tsi.hasPrintStartInfo(), "Skriv ut startbevis för deltagaren");
|
||||
|
||||
if (oe->hasNextStage())
|
||||
gdi.addCheckbox("AllStages", "Anmäl till efterföljande etapper", 0, tsi.storedInfo.allStages);
|
||||
gdi.addCheckbox("AllStages", "Anmäl till efterföljande etapper", 0, tsi.storedInfo.allStages);
|
||||
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addButton("PrinterSetup", "Skrivarinställningar...", VacancyCB, "Skrivarinställningar för sträcktider och startbevis");
|
||||
gdi.addButton("PrinterSetup", "Skrivarinställningar...", VacancyCB, "Skrivarinställningar för sträcktider och startbevis");
|
||||
gdi.setCX(gdi.getCX() + gdi.scaleLength(40));
|
||||
gdi.addButton("CancelVacant", "Avbryt", VacancyCB);
|
||||
|
||||
@ -1975,7 +1975,7 @@ void TabRunner::showVacancyList(gdioutput &gdi, const string &method, int classI
|
||||
gdi.pushX();
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.addString("", fontMediumPlus, "Välj klass och starttid nedan");
|
||||
gdi.addString("", fontMediumPlus, "Välj klass och starttid nedan");
|
||||
oe->generateVacancyList(gdi, VacancyCB);
|
||||
gdi.setInputFocus("CardNo");
|
||||
}
|
||||
@ -2006,7 +2006,7 @@ void TabRunner::showInForestList(gdioutput &gdi)
|
||||
gdi.dropLine();
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Import", "Importera stämplingar...", SportIdentCB).setExtra(1);
|
||||
gdi.addButton("Import", "Importera stämplingar...", SportIdentCB).setExtra(1);
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Vacancy)) {
|
||||
vector<pRunner> rr;
|
||||
@ -2022,9 +2022,9 @@ void TabRunner::showInForestList(gdioutput &gdi)
|
||||
gdi.addButton("RemoveVacant", "Radera vakanser", RunnerCB);
|
||||
}
|
||||
}
|
||||
gdi.addButton("SetDNS", "Sätt okända löpare utan registrering till <Ej Start>", RunnerCB);
|
||||
gdi.addButton("SetDNS", "Sätt okända löpare utan registrering till <Ej Start>", RunnerCB);
|
||||
gdi.fillDown();
|
||||
gdi.addButton("SetUnknown", "Återställ löpare <Ej Start> med registrering till <Status Okänd>", RunnerCB);
|
||||
gdi.addButton("SetUnknown", "Återställ löpare <Ej Start> med registrering till <Status Okänd>", RunnerCB);
|
||||
gdi.dropLine();
|
||||
gdi.popX();
|
||||
|
||||
@ -2035,14 +2035,14 @@ void TabRunner::showInForestList(gdioutput &gdi)
|
||||
if (!unknown.empty()) {
|
||||
gdi.dropLine();
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 1, "Löpare, Status Okänd, som saknar registrering");
|
||||
gdi.addString("", 1, "Löpare, Status Okänd, som saknar registrering");
|
||||
listRunners(gdi, unknown, true);
|
||||
}
|
||||
else {
|
||||
if (hasDNS) {
|
||||
BaseInfo &bi = gdi.getBaseInfo("SetDNS");
|
||||
bi.id = "UndoSetDNS";
|
||||
gdi.setTextTranslate(bi.id, L"Återställ <Ej Start> till <Status Okänd>");
|
||||
gdi.setTextTranslate(bi.id, L"Återställ <Ej Start> till <Status Okänd>");
|
||||
}
|
||||
else {
|
||||
gdi.disableInput("SetDNS");
|
||||
@ -2051,14 +2051,14 @@ void TabRunner::showInForestList(gdioutput &gdi)
|
||||
|
||||
if (!known.empty()) {
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, "Löpare, Status Okänd, med registrering (kvar-i-skogen)");
|
||||
gdi.addString("", 1, "Löpare, Status Okänd, med registrering (kvar-i-skogen)");
|
||||
gdi.dropLine(0.5);
|
||||
listRunners(gdi, known, false);
|
||||
}
|
||||
|
||||
if (!known_dns.empty()) {
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, "Löpare, Ej Start, med registrering (kvar-i-skogen!?)");
|
||||
gdi.addString("", 1, "Löpare, Ej Start, med registrering (kvar-i-skogen!?)");
|
||||
gdi.dropLine(0.5);
|
||||
listRunners(gdi, known_dns, false);
|
||||
}
|
||||
@ -2149,12 +2149,12 @@ void TabRunner::cellAction(gdioutput &gdi, DWORD id, oBase *obj)
|
||||
gdi.popX();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("SearchText", L"", 15).setBgColor(colorLightCyan);
|
||||
gdi.addButton("Search", "Sök deltagare", RunnerCB, "Sök på namn, bricka eller startnummer.");
|
||||
gdi.addButton("Search", "Sök deltagare", RunnerCB, "Sök på namn, bricka eller startnummer.");
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
gdi.addButton("Pair", "Para ihop", RunnerCB).setExtra(c->getId());
|
||||
gdi.addButton("Unpair", "Sätt som oparad", RunnerCB).setExtra(c->getId());
|
||||
gdi.addButton("Unpair", "Sätt som oparad", RunnerCB).setExtra(c->getId());
|
||||
gdi.addButton("Cancel", "Avbryt", RunnerCB);
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
@ -2171,7 +2171,7 @@ void disablePunchCourseAdd(gdioutput &gdi)
|
||||
}
|
||||
|
||||
const wstring &TabRunner::getSearchString() const {
|
||||
return lang.tl(L"Sök (X)#Ctrl+F");
|
||||
return lang.tl(L"Sök (X)#Ctrl+F");
|
||||
}
|
||||
|
||||
void disablePunchCourseChange(gdioutput &gdi)
|
||||
@ -2210,7 +2210,7 @@ int TabRunner::punchesCB(gdioutput &gdi, int type, void *data)
|
||||
pRunner r=oe->getRunner(rid, 0);
|
||||
|
||||
if (!r){
|
||||
gdi.alert("Deltagaren måste sparas innan stämplingar kan hanteras.");
|
||||
gdi.alert("Deltagaren måste sparas innan stämplingar kan hanteras.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2413,10 +2413,10 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.registerEvent("SearchRunnerBack", runnerSearchCB).setKeyCommand(KC_FINDBACK);
|
||||
|
||||
gdi.addInput("SearchText", getSearchString(), 13, runnerSearchCB, L"",
|
||||
L"Sök på namn, bricka eller startnummer.").isEdit(false)
|
||||
L"Sök på namn, bricka eller startnummer.").isEdit(false)
|
||||
.setBgColor(colorLightCyan).ignore(true);
|
||||
gdi.dropLine(-0.2);
|
||||
//gdi.addButton("Search", "Sök", RunnerCB, "Sök på namn, bricka eller startnummer.");
|
||||
//gdi.addButton("Search", "Sök", RunnerCB, "Sök på namn, bricka eller startnummer.");
|
||||
gdi.addButton("ShowAll", "Visa alla", RunnerCB).isEdit(false);
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
@ -2429,7 +2429,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Vacancy)) {
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Move", "Klassbyte", RunnerCB);
|
||||
gdi.addButton("NoStart", "Återbud", RunnerCB);
|
||||
gdi.addButton("NoStart", "Återbud", RunnerCB);
|
||||
}
|
||||
|
||||
gdi.newColumn();
|
||||
@ -2486,7 +2486,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
if (oe->hasMultiRunner()) {
|
||||
gdi.fillRight();
|
||||
gdi.popX();
|
||||
gdi.addString("", 0, "Välj lopp:");
|
||||
gdi.addString("", 0, "Välj lopp:");
|
||||
gdi.fillDown();
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addSelection("MultiR", 160, 100, RunnerCB);
|
||||
@ -2530,7 +2530,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.popX();
|
||||
|
||||
gdi.addInput("Start", L"", 8, 0, L"Starttid:");
|
||||
gdi.addInput("Finish", L"", 8, 0, L"Måltid:");
|
||||
gdi.addInput("Finish", L"", 8, 0, L"Måltid:");
|
||||
|
||||
const bool timeAdjust = oe->getMeOSFeatures().hasFeature(MeOSFeatures::TimeAdjust);
|
||||
const bool pointAdjust = oe->getMeOSFeatures().hasFeature(MeOSFeatures::PointAdjust);
|
||||
@ -2539,10 +2539,10 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
if (timeAdjust) {
|
||||
gdi.addInput("TimeAdjust", L"", 8, 0, L"Tidstillägg:");
|
||||
gdi.addInput("TimeAdjust", L"", 8, 0, L"Tidstillägg:");
|
||||
}
|
||||
if (pointAdjust) {
|
||||
gdi.addInput("PointAdjust", L"", 8, 0, L"Poängavdrag:");
|
||||
gdi.addInput("PointAdjust", L"", 8, 0, L"Poängavdrag:");
|
||||
}
|
||||
}
|
||||
gdi.dropLine(3);
|
||||
@ -2552,7 +2552,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.disableInput("Time");
|
||||
|
||||
if (oe->hasRogaining()) {
|
||||
gdi.addInput("Points", L"", 5, 0, L"Poäng:").isEdit(false).ignore(true);
|
||||
gdi.addInput("Points", L"", 5, 0, L"Poäng:").isEdit(false).ignore(true);
|
||||
gdi.disableInput("Points");
|
||||
}
|
||||
|
||||
@ -2577,7 +2577,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
int dx = int(gdi.getLineHeight()*0.7);
|
||||
int ccx = xx + dx;
|
||||
gdi.setCX(ccx);
|
||||
gdi.addString("", 1, "Resultat från tidigare etapper");
|
||||
gdi.addString("", 1, "Resultat från tidigare etapper");
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
|
||||
@ -2590,7 +2590,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(3);
|
||||
gdi.addInput("TimeIn", L"", 5, 0, L"Tid:");
|
||||
if (oe->hasRogaining()) {
|
||||
gdi.addInput("PointIn", L"", 5, 0, L"Poäng:");
|
||||
gdi.addInput("PointIn", L"", 5, 0, L"Poäng:");
|
||||
}
|
||||
gdi.dropLine(3);
|
||||
RECT rc;
|
||||
@ -2608,7 +2608,7 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Save", "Spara", RunnerCB, "help:save").setDefault();
|
||||
gdi.addButton("Undo", "Ångra", RunnerCB);
|
||||
gdi.addButton("Undo", "Ångra", RunnerCB);
|
||||
gdi.dropLine(2.2);
|
||||
gdi.popX();
|
||||
gdi.addButton("Remove", "Radera", RunnerCB);
|
||||
@ -2622,12 +2622,12 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.setCX(hx + gdi.scaleLength(5));
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
gdi.addListBox("Punches", 150, 300, PunchesCB, L"Stämplingar:").ignore(true);
|
||||
gdi.addButton("RemoveC", "Ta bort stämpling >>", RunnerCB);
|
||||
gdi.addListBox("Punches", 150, 300, PunchesCB, L"Stämplingar:").ignore(true);
|
||||
gdi.addButton("RemoveC", "Ta bort stämpling >>", RunnerCB);
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("PTime", L"", 8, 0, L"", L"Stämplingstid");
|
||||
gdi.addInput("PTime", L"", 8, 0, L"", L"Stämplingstid");
|
||||
gdi.fillDown();
|
||||
gdi.addButton("SaveC", "Spara tid", PunchesCB);
|
||||
gdi.popX();
|
||||
@ -2639,8 +2639,8 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(2.5);
|
||||
gdi.fillDown();
|
||||
gdi.addListBox("Course", 140, 300, PunchesCB, L"Banmall:").ignore(true);
|
||||
gdi.addButton("AddC", "<< Lägg till stämpling", PunchesCB);
|
||||
gdi.addButton("AddAllC", "<< Lägg till alla", PunchesCB);
|
||||
gdi.addButton("AddC", "<< Lägg till stämpling", PunchesCB);
|
||||
gdi.addButton("AddAllC", "<< Lägg till alla", PunchesCB);
|
||||
|
||||
gdi.synchronizeListScroll("Punches", "Course");
|
||||
disablePunchCourse(gdi);
|
||||
@ -2652,14 +2652,14 @@ bool TabRunner::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(0.2);
|
||||
gdi.fillRight();
|
||||
gdi.addButton(gdi.getCX(), gdi.getCY(), gdi.scaleLength(120), "SplitPrint",
|
||||
"Skriv ut sträcktider", RunnerCB, "", false, false).isEdit(true).setExtra(0);
|
||||
gdi.addButton("PrintSettings", "...", RunnerCB, "Inställningar").isEdit(true).setExtra(0);
|
||||
"Skriv ut sträcktider", RunnerCB, "", false, false).isEdit(true).setExtra(0);
|
||||
gdi.addButton("PrintSettings", "...", RunnerCB, "Inställningar").isEdit(true).setExtra(0);
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
gdi.setCX(contX);
|
||||
gdi.addButton(gdi.getCX(), gdi.getCY(), gdi.scaleLength(120), "SplitPrint",
|
||||
"Skriv ut startbevis", RunnerCB, "", false, false).isEdit(true).setExtra(1);
|
||||
gdi.addButton("PrintSettings", "...", RunnerCB, "Inställningar").isEdit(true).setExtra(1);
|
||||
gdi.addButton("PrintSettings", "...", RunnerCB, "Inställningar").isEdit(true).setExtra(1);
|
||||
gdi.pushY();
|
||||
|
||||
int by = gdi.getHeight();
|
||||
@ -2691,12 +2691,12 @@ void TabRunner::addToolbar(gdioutput &gdi) {
|
||||
int dx = 2;
|
||||
|
||||
gdi.addButton(dx, 2, button_w, "FormMode",
|
||||
"Formulärläge", RunnerCB, "", false, true).fixedCorner();
|
||||
"Formulärläge", RunnerCB, "", false, true).fixedCorner();
|
||||
gdi.check("FormMode", currentMode==0);
|
||||
dx += button_w;
|
||||
|
||||
gdi.addButton(dx, 2, button_w, "TableMode",
|
||||
"Tabelläge", RunnerCB, "", false, true).fixedCorner();
|
||||
"Tabelläge", RunnerCB, "", false, true).fixedCorner();
|
||||
gdi.check("TableMode", currentMode==1);
|
||||
dx += button_w;
|
||||
|
||||
@ -2720,7 +2720,7 @@ void TabRunner::addToolbar(gdioutput &gdi) {
|
||||
}
|
||||
|
||||
gdi.addButton(dx, 2 ,button_w, "ReportMode",
|
||||
"Rapportläge", RunnerCB, "", false, true).fixedCorner();
|
||||
"Rapportläge", RunnerCB, "", false, true).fixedCorner();
|
||||
gdi.check("ReportMode", currentMode==5);
|
||||
dx += button_w;
|
||||
|
||||
@ -2791,7 +2791,7 @@ void TabRunner::warnDuplicateCard(gdioutput &gdi, int cno, pRunner r) {
|
||||
InputInfo &cardNo = dynamic_cast<InputInfo &>(gdi.getBaseInfo("CardNo"));
|
||||
if (warnCardDupl) {
|
||||
cardNo.setBgColor(colorLightRed);
|
||||
gdi.updateToolTip("CardNo", L"Brickan används av X.#" + warnCardDupl->getCompleteIdentification());
|
||||
gdi.updateToolTip("CardNo", L"Brickan används av X.#" + warnCardDupl->getCompleteIdentification());
|
||||
cardNo.refresh();
|
||||
}
|
||||
else {
|
||||
@ -2875,7 +2875,7 @@ void TabRunner::EconomyHandler::init(oRunner &r) {
|
||||
oRunner &TabRunner::EconomyHandler::getRunner() const {
|
||||
pRunner p = oe->getRunner(runnerId, 0);
|
||||
if (!p)
|
||||
throw meosException("Löpare saknas");
|
||||
throw meosException("Löpare saknas");
|
||||
return *p;
|
||||
}
|
||||
|
||||
@ -2949,9 +2949,9 @@ void TabRunner::loadEconomy(gdioutput &gdi, oRunner &r) {
|
||||
auto h = getEconomyHandler(r);
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addInput("EntryDate", r.getEntryDate(true), 10, 0, L"Anmälningsdatum:");
|
||||
gdi.addInput("EntryDate", r.getEntryDate(true), 10, 0, L"Anmälningsdatum:");
|
||||
gdi.fillDown();
|
||||
gdi.addInput("EntryTime", formatTime(r.getDCI().getInt("EntryTime")), 10, 0, L"Anmälningstid:");
|
||||
gdi.addInput("EntryTime", formatTime(r.getDCI().getInt("EntryTime")), 10, 0, L"Anmälningstid:");
|
||||
gdi.setInputStatus("EntryDate", r.getTeam() == 0);
|
||||
gdi.setInputStatus("EntryTime", r.getTeam() == 0);
|
||||
|
||||
@ -2995,8 +2995,8 @@ void TabRunner::loadEconomy(gdioutput &gdi, oRunner &r) {
|
||||
gdi.disableInput("ModCls");
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Cancel", "Ångra").setHandler(h);
|
||||
gdi.addButton("Close", "Stäng").setHandler(h);
|
||||
gdi.addButton("Cancel", "Ångra").setHandler(h);
|
||||
gdi.addButton("Close", "Stäng").setHandler(h);
|
||||
gdi.addButton("Save", "Spara").setHandler(h);
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
176
code/TabSI.cpp
176
code/TabSI.cpp
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -154,10 +154,10 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
if (gSI->openComListen(port.c_str(), gdi.getTextNo("BaudRate"))) {
|
||||
gSI->startMonitorThread(port.c_str());
|
||||
loadPage(gdi);
|
||||
gdi.addString("", 1, L"Lyssnar på X.#"+port).setColor(colorDarkGreen);
|
||||
gdi.addString("", 1, L"Lyssnar på X.#"+port).setColor(colorDarkGreen);
|
||||
}
|
||||
else
|
||||
gdi.addString("", 1, "FEL: Porten kunde inte öppnas").setColor(colorRed);
|
||||
gdi.addString("", 1, "FEL: Porten kunde inte öppnas").setColor(colorRed);
|
||||
gdi.dropLine();
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -187,7 +187,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
if (gSI->isPortOpen(port)) {
|
||||
gSI->closeCom(port.c_str());
|
||||
gdi.addStringUT(0, lang.tl(L"Kopplar ifrån SportIdent på ") + port + lang.tl(L"... OK"));
|
||||
gdi.addStringUT(0, lang.tl(L"Kopplar ifrån SportIdent på ") + port + lang.tl(L"... OK"));
|
||||
gdi.popX();
|
||||
gdi.dropLine();
|
||||
refillComPorts(gdi);
|
||||
@ -199,7 +199,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.dropLine();
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
gdi.addInput("tcpPortNo", L"10000", 8,0, L"Port för TCP:");
|
||||
gdi.addInput("tcpPortNo", L"10000", 8,0, L"Port för TCP:");
|
||||
gdi.dropLine();
|
||||
gdi.addButton("StartTCP", "Starta", SportIdentCB);
|
||||
gdi.addButton("CancelTCP", "Avbryt", SportIdentCB);
|
||||
@ -212,11 +212,11 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
gdi.addStringUT(0, lang.tl(L"Startar SI på ") + port + L"...");
|
||||
gdi.addStringUT(0, lang.tl(L"Startar SI på ") + port + L"...");
|
||||
gdi.refresh();
|
||||
if (gSI->openCom(port.c_str())){
|
||||
gSI->startMonitorThread(port.c_str());
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ")+ port + L": "+lang.tl(L"OK"));
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ")+ port + L": "+lang.tl(L"OK"));
|
||||
printSIInfo(gdi, port);
|
||||
|
||||
SI_StationInfo *si = gSI->findStation(port);
|
||||
@ -228,7 +228,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
Sleep(300);
|
||||
if (gSI->openCom(port.c_str())) {
|
||||
gSI->startMonitorThread(port.c_str());
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + port + L": " + lang.tl(L"OK"));
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + port + L": " + lang.tl(L"OK"));
|
||||
printSIInfo(gdi, port);
|
||||
|
||||
SI_StationInfo *si = gSI->findStation(port);
|
||||
@ -237,7 +237,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
else {
|
||||
gdi.setRestorePoint();
|
||||
gdi.addStringUT(1, lang.tl(L"SI på ") + port + L": " + lang.tl(L"FEL, inget svar.")).setColor(colorRed);
|
||||
gdi.addStringUT(1, lang.tl(L"SI på ") + port + L": " + lang.tl(L"FEL, inget svar.")).setColor(colorRed);
|
||||
gdi.dropLine();
|
||||
gdi.refresh();
|
||||
|
||||
@ -280,7 +280,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
else
|
||||
swprintf_s(bf, 64, L"COM%d", lbi.data);
|
||||
gdi.fillDown();
|
||||
gdi.addStringUT(0, lang.tl(L"Hämtar information om ") + wstring(bf)+ L".");
|
||||
gdi.addStringUT(0, lang.tl(L"Hämtar information om ") + wstring(bf)+ L".");
|
||||
printSIInfo(gdi, bf);
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -288,7 +288,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
else if (bi.id=="AutoDetect")
|
||||
{
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 0, "Söker efter SI-enheter... ");
|
||||
gdi.addString("", 0, "Söker efter SI-enheter... ");
|
||||
gdi.refresh();
|
||||
list<int> ports;
|
||||
if (!gSI->autoDetect(ports)) {
|
||||
@ -305,11 +305,11 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
char bfn[128];
|
||||
sprintf_s(bfn, 128, "COM%d", p);
|
||||
|
||||
gdi.addString((string("SIInfo")+bfn).c_str(), 0, L"#" + lang.tl(L"Startar SI på ") + wstring(bf) + L"...");
|
||||
gdi.addString((string("SIInfo")+bfn).c_str(), 0, L"#" + lang.tl(L"Startar SI på ") + wstring(bf) + L"...");
|
||||
gdi.refresh();
|
||||
if (gSI->openCom(bf)) {
|
||||
gSI->startMonitorThread(bf);
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " + lang.tl(L"OK"));
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " + lang.tl(L"OK"));
|
||||
printSIInfo(gdi, bf);
|
||||
|
||||
SI_StationInfo *si = gSI->findStation(bf);
|
||||
@ -318,14 +318,14 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
else if (gSI->openCom(bf)) {
|
||||
gSI->startMonitorThread(bf);
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " + lang.tl(L"OK"));
|
||||
gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " + lang.tl(L"OK"));
|
||||
printSIInfo(gdi, bf);
|
||||
|
||||
SI_StationInfo *si = gSI->findStation(bf);
|
||||
if (si && !si->extended())
|
||||
gdi.addString("", boldText, "warn:notextended").setColor(colorDarkRed);
|
||||
}
|
||||
else gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " +lang.tl(L"FEL, inget svar"));
|
||||
else gdi.addStringUT(0, lang.tl(L"SI på ") + wstring(bf) + L": " +lang.tl(L"FEL, inget svar"));
|
||||
|
||||
gdi.refresh();
|
||||
gdi.popX();
|
||||
@ -393,7 +393,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
csv.importPunches(*oe, file.c_str(), punches);
|
||||
if (!punches.empty()) {
|
||||
gdi.dropLine(2);
|
||||
gdi.addString("", 1, "Inlästa stämplar");
|
||||
gdi.addString("", 1, "Inlästa stämplar");
|
||||
set<string> dates;
|
||||
showReadPunches(gdi, punches, dates);
|
||||
|
||||
@ -434,14 +434,14 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.pushX();
|
||||
gdi.dropLine(3);
|
||||
|
||||
gdi.addString("", 1, "Inlästa brickor");
|
||||
gdi.addString("", 1, "Inlästa brickor");
|
||||
showReadCards(gdi, cards);
|
||||
gdi.dropLine();
|
||||
gdi.fillDown();
|
||||
if (interactiveReadout)
|
||||
gdi.addString("", 0, "Välj Spara för att lagra brickorna. Interaktiv inläsning är aktiverad.");
|
||||
gdi.addString("", 0, "Välj Spara för att lagra brickorna. Interaktiv inläsning är aktiverad.");
|
||||
else
|
||||
gdi.addString("", 0, "Välj Spara för att lagra brickorna. Interaktiv inläsning är INTE aktiverad.");
|
||||
gdi.addString("", 0, "Välj Spara för att lagra brickorna. Interaktiv inläsning är INTE aktiverad.");
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
@ -583,7 +583,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
wstring club=gdi.getText("Club", true);
|
||||
|
||||
if (name.length()==0){
|
||||
gdi.alert("Alla deltagare måste ha ett namn.");
|
||||
gdi.alert("Alla deltagare måste ha ett namn.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -652,7 +652,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
club = noClub->getName();
|
||||
}
|
||||
else
|
||||
club=lang.tl("Klubblös");
|
||||
club=lang.tl("Klubblös");
|
||||
}
|
||||
|
||||
int year = 0;
|
||||
@ -710,7 +710,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.getSelectedItem("Classes", lbi);
|
||||
|
||||
if (lbi.data==0 || lbi.data==-1) {
|
||||
gdi.alert("Du måste välja en klass");
|
||||
gdi.alert("Du måste välja en klass");
|
||||
return 0;
|
||||
}
|
||||
pClass pc = oe->getClass(lbi.data);
|
||||
@ -720,7 +720,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
wstring club = gdi.getText("Club", true);
|
||||
|
||||
if (club.empty() && oe->getMeOSFeatures().hasFeature(MeOSFeatures::Clubs))
|
||||
club = lang.tl("Klubblös");
|
||||
club = lang.tl("Klubblös");
|
||||
|
||||
int year = 0;
|
||||
pRunner r=gEvent->addRunner(gdi.getText("Runners"), club,
|
||||
@ -795,7 +795,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
if (lbi.data==0 || lbi.data==-1)
|
||||
{
|
||||
gdi.alert("Du måste välja en klass");
|
||||
gdi.alert("Du måste välja en klass");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -804,7 +804,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
if (gdi.getData("RunnerId", rid) && rid>0)
|
||||
r = gEvent->getRunner(rid, 0);
|
||||
else r = gEvent->addRunner(lang.tl(L"Oparad bricka"), lang.tl("Okänd"), 0, 0, 0, false);
|
||||
else r = gEvent->addRunner(lang.tl(L"Oparad bricka"), lang.tl("Okänd"), 0, 0, 0, false);
|
||||
|
||||
r->setClassId(lbi.data, true);
|
||||
|
||||
@ -820,7 +820,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
wstring name=gdi.getText("Name");
|
||||
if (name.empty()) {
|
||||
gdi.alert("Alla deltagare måste ha ett namn.");
|
||||
gdi.alert("Alla deltagare måste ha ett namn.");
|
||||
return 0;
|
||||
}
|
||||
int rid = bi.getExtraInt();
|
||||
@ -829,7 +829,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
pRunner cardRunner = oe->getRunnerByCardNo(cardNo, 0, true);
|
||||
if (cardNo>0 && cardRunner!=0 && cardRunner!=r) {
|
||||
gdi.alert(L"Bricknummret är upptaget (X).#" + cardRunner->getName() + L", " + cardRunner->getClass(true));
|
||||
gdi.alert(L"Bricknummret är upptaget (X).#" + cardRunner->getName() + L", " + cardRunner->getClass(true));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -841,7 +841,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.alert(L"Ingen klass vald");
|
||||
return 0;
|
||||
}
|
||||
pClass pc = oe->getClassCreate(0, lang.tl(L"Öppen klass"));
|
||||
pClass pc = oe->getClassCreate(0, lang.tl(L"Öppen klass"));
|
||||
lbi.data = pc->getId();
|
||||
pc->setAllowQuickEntry(true);
|
||||
pc->synchronize();
|
||||
@ -937,7 +937,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
info+=bib;
|
||||
|
||||
if (updated)
|
||||
info += lang.tl(L" [Uppdaterad anmälan]");
|
||||
info += lang.tl(L" [Uppdaterad anmälan]");
|
||||
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
@ -965,7 +965,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
else if (bi.id == "ManualOK") {
|
||||
if (runnerMatchedId == -1)
|
||||
throw meosException("Löparen hittades inte");
|
||||
throw meosException("Löparen hittades inte");
|
||||
|
||||
bool useNow = gdi.getExtraInt("FinishTime") == 1;
|
||||
wstring time = useNow ? getLocalTimeOnly() : gdi.getText("FinishTime");
|
||||
@ -979,10 +979,10 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
pRunner r = oe->getRunner(runnerMatchedId, 0);
|
||||
if (r==0)
|
||||
throw meosException("Löparen hittades inte");
|
||||
throw meosException("Löparen hittades inte");
|
||||
|
||||
if (r->getStatus() != StatusUnknown) {
|
||||
if (!gdi.ask(L"X har redan ett resultat. Vi du fortsätta?#" + r->getCompleteIdentification()))
|
||||
if (!gdi.ask(L"X har redan ett resultat. Vi du fortsätta?#" + r->getCompleteIdentification()))
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1008,7 +1008,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.check("StatusOK", !dnf);
|
||||
}
|
||||
else if (bi.id == "CCSClear") {
|
||||
if (gdi.ask(L"Vill du göra om avbockningen från början igen?")) {
|
||||
if (gdi.ask(L"Vill du göra om avbockningen från början igen?")) {
|
||||
checkedCardFlags.clear();
|
||||
gdi.restore("CCSInit", false);
|
||||
showCheckCardStatus(gdi, "fillrunner");
|
||||
@ -1069,7 +1069,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
wcscpy_s(bf, L"TCP");
|
||||
|
||||
if (gSI->isPortOpen(bf))
|
||||
gdi.setText("StartSI", lang.tl("Koppla ifrån"));
|
||||
gdi.setText("StartSI", lang.tl("Koppla ifrån"));
|
||||
else
|
||||
gdi.setText("StartSI", lang.tl("Aktivera"));
|
||||
}
|
||||
@ -1099,7 +1099,7 @@ int TabSI::siCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.enableInput("PrintSplits");
|
||||
gdi.enableInput("UseManualInput");
|
||||
gdi.fillDown();
|
||||
gdi.addButton("Import", "Importera från fil...", SportIdentCB);
|
||||
gdi.addButton("Import", "Importera från fil...", SportIdentCB);
|
||||
|
||||
if (gdi.isChecked("UseManualInput"))
|
||||
showManualInput(gdi);
|
||||
@ -1452,7 +1452,7 @@ void TabSI::refillComPorts(gdioutput &gdi)
|
||||
|
||||
if (active){
|
||||
gdi.selectItemByData("ComPort", active);
|
||||
gdi.setText("StartSI", lang.tl("Koppla ifrån"));
|
||||
gdi.setText("StartSI", lang.tl("Koppla ifrån"));
|
||||
}
|
||||
else{
|
||||
gdi.selectItemByData("ComPort", inactive);
|
||||
@ -1552,7 +1552,7 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
gdi.dropLine(-1.4);
|
||||
gdi.setCX(gdi.getCX()-gdi.getLineHeight());
|
||||
|
||||
gdi.addInput("Finish", oe->getAbsTime(f), 6, 0, L"Mål");
|
||||
gdi.addInput("Finish", oe->getAbsTime(f), 6, 0, L"Mål");
|
||||
gdi.addSelection("NC", 45, 200, SportIdentCB, L"NC");
|
||||
const int src[11] = {33, 34, 45, 50, 36, 38, 59, 61, 62, 67, 100};
|
||||
|
||||
@ -1582,7 +1582,7 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
gdi.addButton("Save", "Bricka", SportIdentCB);
|
||||
gdi.fillDown();
|
||||
|
||||
gdi.addButton("SaveP", "Stämpling", SportIdentCB);
|
||||
gdi.addButton("SaveP", "Stämpling", SportIdentCB);
|
||||
gdi.popX();
|
||||
#endif
|
||||
gdi.addString("", boldLarge, "SportIdent");
|
||||
@ -1596,8 +1596,8 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
|
||||
refillComPorts(gdi);
|
||||
|
||||
gdi.addButton("AutoDetect", "Sök och starta automatiskt...", SportIdentCB);
|
||||
gdi.addButton("PrinterSetup", "Skrivarinställningar...", SportIdentCB, "Skrivarinställningar för sträcktider och startbevis");
|
||||
gdi.addButton("AutoDetect", "Sök och starta automatiskt...", SportIdentCB);
|
||||
gdi.addButton("PrinterSetup", "Skrivarinställningar...", SportIdentCB, "Skrivarinställningar för sträcktider och startbevis");
|
||||
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
@ -1612,10 +1612,10 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
gdi.setCY(yb + gdi.scaleLength(10));
|
||||
gdi.addString("", fontMediumPlus, "Funktion:");
|
||||
gdi.addSelection("ReadType", 200, 200, SportIdentCB);
|
||||
gdi.addItem("ReadType", lang.tl("Avläsning/radiotider"), ModeReadOut);
|
||||
gdi.addItem("ReadType", lang.tl("Avläsning/radiotider"), ModeReadOut);
|
||||
gdi.addItem("ReadType", lang.tl("Tilldela hyrbrickor"), ModeAssignCards);
|
||||
gdi.addItem("ReadType", lang.tl("Avstämning hyrbrickor"), ModeCheckCards);
|
||||
gdi.addItem("ReadType", lang.tl("Anmälningsläge"), ModeEntry);
|
||||
gdi.addItem("ReadType", lang.tl("Avstämning hyrbrickor"), ModeCheckCards);
|
||||
gdi.addItem("ReadType", lang.tl("Anmälningsläge"), ModeEntry);
|
||||
gdi.addItem("ReadType", lang.tl("Print card data"), ModeCardData);
|
||||
|
||||
gdi.selectItemByData("ReadType", mode);
|
||||
@ -1627,15 +1627,15 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
}
|
||||
|
||||
if (!oe->empty())
|
||||
gdi.addCheckbox("Interactive", "Interaktiv inläsning", SportIdentCB, interactiveReadout);
|
||||
gdi.addCheckbox("Interactive", "Interaktiv inläsning", SportIdentCB, interactiveReadout);
|
||||
|
||||
if (oe->empty() || oe->useRunnerDb())
|
||||
gdi.addCheckbox("Database", "Använd löpardatabasen", SportIdentCB, useDatabase);
|
||||
gdi.addCheckbox("Database", "Använd löpardatabasen", SportIdentCB, useDatabase);
|
||||
|
||||
gdi.addCheckbox("PrintSplits", "Sträcktidsutskrift[check]", SportIdentCB, printSplits);
|
||||
gdi.addCheckbox("PrintSplits", "Sträcktidsutskrift[check]", SportIdentCB, printSplits);
|
||||
|
||||
if (!oe->empty()) {
|
||||
gdi.addCheckbox("StartInfo", "Startbevis", SportIdentCB, printStartInfo, "Skriv ut startbevis för deltagaren");
|
||||
gdi.addCheckbox("StartInfo", "Startbevis", SportIdentCB, printStartInfo, "Skriv ut startbevis för deltagaren");
|
||||
if (mode != ModeEntry)
|
||||
gdi.disableInput("StartInfo");
|
||||
}
|
||||
@ -1653,7 +1653,7 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
gdi.setRestorePoint("SIPageLoaded");
|
||||
|
||||
if (mode == ModeReadOut) {
|
||||
gdi.addButton("Import", "Importera från fil...", SportIdentCB);
|
||||
gdi.addButton("Import", "Importera från fil...", SportIdentCB);
|
||||
|
||||
gdi.setRestorePoint("Help");
|
||||
gdi.addString("", 10, "help:471101");
|
||||
@ -1737,7 +1737,7 @@ void TabSI::insertSICard(gdioutput &gdi, SICard &sic)
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
@ -1765,7 +1765,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
if (mode==ModeAssignCards) {
|
||||
if (!pageLoaded) {
|
||||
CardQueue.push_back(sic);
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
}
|
||||
else assignCard(gdi, sic);
|
||||
return;
|
||||
@ -1773,7 +1773,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
else if (mode==ModeEntry) {
|
||||
if (!pageLoaded) {
|
||||
CardQueue.push_back(sic);
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
}
|
||||
else entryCard(gdi, sic);
|
||||
return;
|
||||
@ -1781,7 +1781,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
if (mode==ModeCheckCards) {
|
||||
if (!pageLoaded) {
|
||||
CardQueue.push_back(sic);
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
gdi.addInfoBox("SIREAD", L"Inläst bricka ställd i kö");
|
||||
}
|
||||
else
|
||||
checkCard(gdi, sic, true);
|
||||
@ -1886,7 +1886,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
processUnmatched(gdi, sic, true);
|
||||
}
|
||||
else
|
||||
gdi.addInfoBox("SIREAD", L"Brickan redan inläst.", 0, SportIdentCB);
|
||||
gdi.addInfoBox("SIREAD", L"Brickan redan inläst.", 0, SportIdentCB);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -1919,7 +1919,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
wchar_t bf[256];
|
||||
|
||||
if (interactiveReadout) {
|
||||
swprintf_s(bf, L"SI X är redan inläst. Ska den läsas in igen?#%d", sic.CardNumber);
|
||||
swprintf_s(bf, L"SI X är redan inläst. Ska den läsas in igen?#%d", sic.CardNumber);
|
||||
|
||||
if (!gdi.ask(bf)) {
|
||||
if (printSplits) {
|
||||
@ -1942,7 +1942,7 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
}
|
||||
|
||||
gdi.dropLine();
|
||||
swprintf_s(bf, L"SI X är redan inläst. Använd interaktiv inläsning om du vill läsa brickan igen.#%d", sic.CardNumber);
|
||||
swprintf_s(bf, L"SI X är redan inläst. Använd interaktiv inläsning om du vill läsa brickan igen.#%d", sic.CardNumber);
|
||||
gdi.addString("", 0, bf).setColor(colorRed);
|
||||
gdi.dropLine();
|
||||
gdi.scrollToBottom();
|
||||
@ -1971,10 +1971,10 @@ void TabSI::insertSICardAux(gdioutput &gdi, SICard &sic)
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, "Skapar saknad klass").setColor(colorGreen);
|
||||
gdi.dropLine();
|
||||
pCourse pc=gEvent->addCourse(lang.tl("Okänd klass"));
|
||||
pCourse pc=gEvent->addCourse(lang.tl("Okänd klass"));
|
||||
for(unsigned i=0;i<sic.nPunch; i++)
|
||||
pc->addControl(sic.Punch[i].Code);
|
||||
gEvent->addClass(lang.tl(L"Okänd klass"), pc->getId())->setType(L"tmp");
|
||||
gEvent->addClass(lang.tl(L"Okänd klass"), pc->getId())->setType(L"tmp");
|
||||
}
|
||||
|
||||
// Assign a class if not already done
|
||||
@ -2006,7 +2006,7 @@ void TabSI::startInteractive(gdioutput &gdi, const SICard &sic, pRunner r, pRunn
|
||||
gdi.fillDown();
|
||||
gdi.dropLine();
|
||||
char bf[256];
|
||||
sprintf_s(bf, 256, "SI X inläst. Brickan är inte knuten till någon löpare (i skogen).#%d", sic.CardNumber);
|
||||
sprintf_s(bf, 256, "SI X inläst. Brickan är inte knuten till någon löpare (i skogen).#%d", sic.CardNumber);
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, bf);
|
||||
@ -2057,7 +2057,7 @@ void TabSI::startInteractive(gdioutput &gdi, const SICard &sic, pRunner r, pRunn
|
||||
gdi.setRestorePoint();
|
||||
|
||||
wchar_t bf[256];
|
||||
swprintf_s(bf, 256, L"SI X inläst. Brickan tillhör Y som saknar klass.#%d#%s",
|
||||
swprintf_s(bf, 256, L"SI X inläst. Brickan tillhör Y som saknar klass.#%d#%s",
|
||||
sic.CardNumber, r->getName().c_str());
|
||||
|
||||
gdi.dropLine();
|
||||
@ -2128,7 +2128,7 @@ bool TabSI::processUnmatched(gdioutput &gdi, const SICard &csic, bool silent)
|
||||
card->setCardNo(csic.CardNumber);
|
||||
|
||||
|
||||
wstring info=lang.tl(L"Okänd bricka ") + itow(sic.CardNumber) + L".";
|
||||
wstring info=lang.tl(L"Okänd bricka ") + itow(sic.CardNumber) + L".";
|
||||
wstring warnings;
|
||||
|
||||
// Write read card to log
|
||||
@ -2149,7 +2149,7 @@ bool TabSI::processUnmatched(gdioutput &gdi, const SICard &csic, bool silent)
|
||||
if (sic.FinishPunch.Code!=-1)
|
||||
card->addPunch(oPunch::PunchFinish, sic.FinishPunch.Time, 0);
|
||||
else
|
||||
warnings+=lang.tl("Målstämpling saknas.");
|
||||
warnings+=lang.tl("Målstämpling saknas.");
|
||||
|
||||
//Update to SQL-source
|
||||
card->synchronize();
|
||||
@ -2189,7 +2189,7 @@ void TabSI::rentCardInfo(gdioutput &gdi, int width)
|
||||
rc.bottom=rc.top+gdi.getLineHeight()+5;
|
||||
|
||||
gdi.addRectangle(rc, colorYellow, true);
|
||||
gdi.addString("", rc.top+2, rc.left+width/2, 1|textCenter, "Vänligen återlämna hyrbrickan.");
|
||||
gdi.addString("", rc.top+2, rc.left+width/2, 1|textCenter, "Vänligen återlämna hyrbrickan.");
|
||||
}
|
||||
|
||||
bool TabSI::processCard(gdioutput &gdi, pRunner runner, const SICard &csic, bool silent)
|
||||
@ -2206,7 +2206,7 @@ bool TabSI::processCard(gdioutput &gdi, pRunner runner, const SICard &csic, bool
|
||||
runner->synchronize();
|
||||
|
||||
if (!runner->getClassId(false))
|
||||
runner->setClassId(gEvent->addClass(lang.tl(L"Okänd klass"))->getId(), true);
|
||||
runner->setClassId(gEvent->addClass(lang.tl(L"Okänd klass"))->getId(), true);
|
||||
|
||||
// Choose course from pool
|
||||
pClass cls = runner->getClassRef(false);
|
||||
@ -2240,7 +2240,7 @@ bool TabSI::processCard(gdioutput &gdi, pRunner runner, const SICard &csic, bool
|
||||
|
||||
wchar_t msg[256];
|
||||
|
||||
swprintf_s(msg, lang.tl(L"Skapade en bana för klassen %s med %d kontroller från brickdata (SI-%d)").c_str(),
|
||||
swprintf_s(msg, lang.tl(L"Skapade en bana för klassen %s med %d kontroller från brickdata (SI-%d)").c_str(),
|
||||
pclass->getName().c_str(), csic.nPunch, csic.CardNumber);
|
||||
|
||||
if (silent)
|
||||
@ -2250,7 +2250,7 @@ bool TabSI::processCard(gdioutput &gdi, pRunner runner, const SICard &csic, bool
|
||||
}
|
||||
else {
|
||||
if (!(pclass && pclass->hasDirectResult())) {
|
||||
const wchar_t *msg=L"Löpare saknar klass eller bana";
|
||||
const wchar_t *msg=L"Löpare saknar klass eller bana";
|
||||
|
||||
if (silent)
|
||||
gdi.addInfoBox("SIINFO", msg, 15000);
|
||||
@ -2311,7 +2311,7 @@ bool TabSI::processCard(gdioutput &gdi, pRunner runner, const SICard &csic, bool
|
||||
}
|
||||
|
||||
if (!hasFinish)
|
||||
warnings+=lang.tl(L"Målstämpling saknas.");
|
||||
warnings+=lang.tl(L"Målstämpling saknas.");
|
||||
|
||||
card->synchronize();
|
||||
runner->addPunches(card, MP);
|
||||
@ -2463,12 +2463,12 @@ void TabSI::processPunchOnly(gdioutput &gdi, const SICard &csic)
|
||||
//gEvent->getRunnerByCard(sic.CardNumber);
|
||||
|
||||
if (r) {
|
||||
wstring str = r->getName() + lang.tl(" stämplade vid ") + ofp->getSimpleString();
|
||||
wstring str = r->getName() + lang.tl(" stämplade vid ") + ofp->getSimpleString();
|
||||
gdi.addStringUT(0, str);
|
||||
gdi.dropLine();
|
||||
}
|
||||
else {
|
||||
wstring str=L"SI " + itow(sic.CardNumber) + lang.tl(" (okänd) stämplade vid ") + ofp->getSimpleString();
|
||||
wstring str=L"SI " + itow(sic.CardNumber) + lang.tl(" (okänd) stämplade vid ") + ofp->getSimpleString();
|
||||
gdi.addStringUT(0, str);
|
||||
gdi.dropLine(0.3);
|
||||
}
|
||||
@ -2568,7 +2568,7 @@ void TabSI::assignCard(gdioutput &gdi, const SICard &sic)
|
||||
return;
|
||||
}
|
||||
if (r->getCardNo()==0 ||
|
||||
gdi.ask(L"Skriv över existerande bricknummer?")) {
|
||||
gdi.ask(L"Skriv över existerande bricknummer?")) {
|
||||
|
||||
r->setCardNo(sic.CardNumber, false);
|
||||
r->getDI().setInt("CardFee", oe->getDI().getInt("CardFee"));
|
||||
@ -2603,7 +2603,7 @@ void TabSI::generateEntryLine(gdioutput &gdi, pRunner r)
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::Clubs)) {
|
||||
gdi.addCombo("Club", 180, 200, 0, L"Klubb:",
|
||||
L"Skriv första bokstaven i klubbens namn och tryck pil-ner för att leta efter klubben")
|
||||
L"Skriv första bokstaven i klubbens namn och tryck pil-ner för att leta efter klubben")
|
||||
.setHandler(&directEntryGUI);
|
||||
oe->fillClubs(gdi, "Club");
|
||||
if (storedInfo.storedClub.empty())
|
||||
@ -2619,7 +2619,7 @@ void TabSI::generateEntryLine(gdioutput &gdi, pRunner r)
|
||||
vector< pair<wstring, size_t> > d;
|
||||
oe->fillClasses(d, oEvent::extraNumMaps, oEvent::filterOnlyDirect);
|
||||
if (d.empty() && oe->getNumClasses() > 0) {
|
||||
gdi.alert(L"Inga klasser tillåter direktanmälan. På sidan klasser kan du ändra denna egenskap.");
|
||||
gdi.alert(L"Inga klasser tillåter direktanmälan. På sidan klasser kan du ändra denna egenskap.");
|
||||
}
|
||||
gdi.addItem("Class", d);
|
||||
}
|
||||
@ -2664,7 +2664,7 @@ void TabSI::generateEntryLine(gdioutput &gdi, pRunner r)
|
||||
|
||||
gdi.addCheckbox("RentCard", "Hyrbricka", SportIdentCB, storedInfo.rentState);
|
||||
if (oe->hasNextStage())
|
||||
gdi.addCheckbox("AllStages", "Anmäl till efterföljande etapper", SportIdentCB, storedInfo.allStages);
|
||||
gdi.addCheckbox("AllStages", "Anmäl till efterföljande etapper", SportIdentCB, storedInfo.allStages);
|
||||
|
||||
if (r!=0) {
|
||||
if (r->getCardNo()>0)
|
||||
@ -2744,7 +2744,7 @@ void TabSI::updateEntryInfo(gdioutput &gdi)
|
||||
else
|
||||
method = lang.tl(L"Faktureras");
|
||||
|
||||
gdi.setText("EntryInfo", lang.tl(L"X: Y. Tryck <Enter> för att spara#" +
|
||||
gdi.setText("EntryInfo", lang.tl(L"X: Y. Tryck <Enter> för att spara#" +
|
||||
method + L"#" + oe->formatCurrency(fee)), true);
|
||||
}
|
||||
else {
|
||||
@ -2836,10 +2836,10 @@ void TabSI::showManualInput(gdioutput &gdi) {
|
||||
gdi.pushX();
|
||||
gdi.dropLine();
|
||||
gdi.addInput("Manual", L"", 20, SportIdentCB, L"Nummerlapp, SI eller Namn:");
|
||||
gdi.addInput("FinishTime", lang.tl("Aktuell tid"), 8, SportIdentCB, L"Måltid:").setFgColor(colorGreyBlue).setExtra(1);
|
||||
gdi.addInput("FinishTime", lang.tl("Aktuell tid"), 8, SportIdentCB, L"Måltid:").setFgColor(colorGreyBlue).setExtra(1);
|
||||
gdi.dropLine(1.2);
|
||||
gdi.addCheckbox("StatusOK", "Godkänd", SportIdentCB, true);
|
||||
gdi.addCheckbox("StatusDNF", "Utgått", SportIdentCB, false);
|
||||
gdi.addCheckbox("StatusOK", "Godkänd", SportIdentCB, true);
|
||||
gdi.addCheckbox("StatusDNF", "Utgått", SportIdentCB, false);
|
||||
gdi.dropLine(-0.3);
|
||||
gdi.addButton("ManualOK", "OK", SportIdentCB).setDefault();
|
||||
gdi.fillDown();
|
||||
@ -2870,7 +2870,7 @@ void TabSI::tieCard(gdioutput &gdi) {
|
||||
return;
|
||||
|
||||
if (r->getCardNo() > 0 && r->getCardNo() != card) {
|
||||
if (!gdi.ask(L"X har redan bricknummer Y. Vill du ändra det?#" + r->getName() + L"#" + itow(r->getCardNo())))
|
||||
if (!gdi.ask(L"X har redan bricknummer Y. Vill du ändra det?#" + r->getName() + L"#" + itow(r->getCardNo())))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2893,7 +2893,7 @@ void TabSI::tieCard(gdioutput &gdi) {
|
||||
gdi.addStringUT(0, L"(" + r->getClub() + L")", 0);
|
||||
|
||||
gdi.addStringUT(1, itos(r->getCardNo()), 0).setColor(colorDarkGreen);
|
||||
gdi.addString("EditAssign", 0, "Ändra", SportIdentCB).setExtra(r->getId());
|
||||
gdi.addString("EditAssign", 0, "Ändra", SportIdentCB).setExtra(r->getId());
|
||||
gdi.dropLine(1.5);
|
||||
gdi.popX();
|
||||
|
||||
@ -2910,11 +2910,11 @@ void TabSI::showAssignCard(gdioutput &gdi, bool showHelp) {
|
||||
gdi.fillDown();
|
||||
if (interactiveReadout) {
|
||||
if (showHelp)
|
||||
gdi.addString("", 10, L"Avmarkera 'X' för att hantera alla bricktildelningar samtidigt.#" + lang.tl("Interaktiv inläsning"));
|
||||
gdi.addString("", 10, L"Avmarkera 'X' för att hantera alla bricktildelningar samtidigt.#" + lang.tl("Interaktiv inläsning"));
|
||||
}
|
||||
else {
|
||||
if (showHelp)
|
||||
gdi.addString("", 10, L"Markera 'X' för att hantera deltagarna en och en.#" + lang.tl("Interaktiv inläsning"));
|
||||
gdi.addString("", 10, L"Markera 'X' för att hantera deltagarna en och en.#" + lang.tl("Interaktiv inläsning"));
|
||||
gEvent->assignCardInteractive(gdi, SportIdentCB);
|
||||
gdi.refresh();
|
||||
return;
|
||||
@ -2936,7 +2936,7 @@ void TabSI::showAssignCard(gdioutput &gdi, bool showHelp) {
|
||||
gdi.addInput("RunnerId", L"", 20, SportIdentCB, L"Nummerlapp, lopp-id eller namn:");
|
||||
gdi.addInput("CardNo", L"", 8, SportIdentCB, L"Bricknr:");
|
||||
gdi.dropLine(1.2);
|
||||
gdi.addCheckbox("AutoTie", "Knyt automatiskt efter inläsning", SportIdentCB, oe->getPropertyInt("AutoTie", 1) != 0);
|
||||
gdi.addCheckbox("AutoTie", "Knyt automatiskt efter inläsning", SportIdentCB, oe->getPropertyInt("AutoTie", 1) != 0);
|
||||
gdi.addCheckbox("RentCardTie", "Hyrd", SportIdentCB, oe->getPropertyInt("RentCard", 0) != 0);
|
||||
|
||||
gdi.dropLine(-0.3);
|
||||
@ -3130,7 +3130,7 @@ void TabSI::printCard(gdioutput &gdi, int cardId, bool forPrinter) const {
|
||||
gdi.addString("", 1, "Bricka X#" + itos(c.CardNumber));
|
||||
|
||||
if (!forPrinter && name.empty())
|
||||
name = lang.tl("Okänd");
|
||||
name = lang.tl("Okänd");
|
||||
|
||||
if (!name.empty()) {
|
||||
if (!clubName.empty())
|
||||
@ -3177,7 +3177,7 @@ void TabSI::printCard(gdioutput &gdi, int cardId, bool forPrinter) const {
|
||||
}
|
||||
if (c.FinishPunch.Code != -1) {
|
||||
int cy = gdi.getCY();
|
||||
gdi.addString("", cy, xp, 0, "Mål");
|
||||
gdi.addString("", cy, xp, 0, "Mål");
|
||||
gdi.addStringUT(cy, xp3, 0, formatTimeHMS(c.FinishPunch.Time % (24*3600)));
|
||||
|
||||
if (start != NOTIME) {
|
||||
@ -3251,7 +3251,7 @@ void TabSI::printProtected(gdioutput &gdi, gdioutput &gdiprint) {
|
||||
}
|
||||
|
||||
void TabSI::createCompetitionFromCards(gdioutput &gdi) {
|
||||
oe->newCompetition(lang.tl(L"Ny tävling"));
|
||||
oe->newCompetition(lang.tl(L"Ny tävling"));
|
||||
gdi.setWindowTitle(L"");
|
||||
map<size_t, int> hashCount;
|
||||
vector< pair<size_t, SICard *> > cards;
|
||||
@ -3442,8 +3442,8 @@ void TabSI::showCheckCardStatus(gdioutput &gdi, const string &cmd) {
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addButton("CCSReport", "Rapport", SportIdentCB);
|
||||
gdi.addButton("CCSClear", "Nollställ", SportIdentCB,
|
||||
"Nollställ minnet; markera alla brickor som icke avbockade");
|
||||
gdi.addButton("CCSClear", "Nollställ", SportIdentCB,
|
||||
"Nollställ minnet; markera alla brickor som icke avbockade");
|
||||
gdi.addButton("CCSPrint", "Skriv ut...", SportIdentCB);
|
||||
|
||||
gdi.popX();
|
||||
@ -3477,7 +3477,7 @@ void TabSI::showCheckCardStatus(gdioutput &gdi, const string &cmd) {
|
||||
oe->getRunners(0, 0, r);
|
||||
stable_sort(r.begin(), r.end(), compareCardNo);
|
||||
gdi.dropLine();
|
||||
string msg = "Brickor markerade som både uthyrda och egna: X#" + itos(count[CNFCheckedRentAndNotRent] + count[CNFRentAndNotRent]);
|
||||
string msg = "Brickor markerade som både uthyrda och egna: X#" + itos(count[CNFCheckedRentAndNotRent] + count[CNFRentAndNotRent]);
|
||||
gdi.addString("", 1, msg).setColor(colorDarkRed);
|
||||
gdi.dropLine(0.5);
|
||||
for (size_t k = 0; k < r.size(); k++) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -118,7 +118,7 @@ int TabSpeaker::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
gdi.restore("settings");
|
||||
gdi.unregisterEvent("DataUpdate");
|
||||
gdi.fillDown();
|
||||
gdi.addString("", boldLarge, "Speakerstöd");
|
||||
gdi.addString("", boldLarge, "Speakerstöd");
|
||||
gdi.addString("", 0, "help:speaker_setup");
|
||||
gdi.dropLine(1);
|
||||
gdi.addCheckbox("ShortNames", "Use initials in names", 0, oe->getPropertyInt("SpeakerShortNames", false) != 0);
|
||||
@ -183,7 +183,7 @@ int TabSpeaker::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
}
|
||||
else if (bu.id == "PunchTable") {
|
||||
gdi.clearPage(false);
|
||||
gdi.addButton("Cancel", "Stäng", tabSpeakerCB);
|
||||
gdi.addButton("Cancel", "Stäng", tabSpeakerCB);
|
||||
gdi.dropLine();
|
||||
gdi.addTable(oe->getPunchesTB(), gdi.getCX(), gdi.getCY());
|
||||
gdi.refresh();
|
||||
@ -196,9 +196,9 @@ int TabSpeaker::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addString("", 0, "Klass:");
|
||||
gdi.addSelection("Class", 200, 200, tabSpeakerCB, L"", L"Välj klass");
|
||||
gdi.addSelection("Class", 200, 200, tabSpeakerCB, L"", L"Välj klass");
|
||||
oe->fillClasses(gdi, "Class", oEvent::extraNone, oEvent::filterNone);
|
||||
gdi.addButton("ClosePri", "Stäng", tabSpeakerCB);
|
||||
gdi.addButton("ClosePri", "Stäng", tabSpeakerCB);
|
||||
gdi.dropLine(2);
|
||||
gdi.popX();
|
||||
gdi.refresh();
|
||||
@ -256,7 +256,7 @@ int TabSpeaker::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
else if (bu.id == "Window") {
|
||||
oe->setupTimeLineEvents(0);
|
||||
|
||||
gdioutput *gdi_new = createExtraWindow(uniqueTag("speaker"), makeDash(L"MeOS - Speakerstöd"), gdi.getWidth() + 64 + gdi.scaleLength(120));
|
||||
gdioutput *gdi_new = createExtraWindow(uniqueTag("speaker"), makeDash(L"MeOS - Speakerstöd"), gdi.getWidth() + 64 + gdi.scaleLength(120));
|
||||
if (gdi_new) {
|
||||
TabSpeaker &tl = dynamic_cast<TabSpeaker &>(*gdi_new->getTabs().get(TSpeakerTab));
|
||||
tl.ownWindow = true;
|
||||
@ -293,9 +293,9 @@ int TabSpeaker::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
|
||||
loadSettings(speakerSettings);
|
||||
if (speakerSettings.empty())
|
||||
throw meosException("Inställningarna är ogiltiga");
|
||||
throw meosException("Inställningarna är ogiltiga");
|
||||
for (size_t k = 1; k < speakerSettings.size(); k++) {
|
||||
gdioutput *gdi_new = createExtraWindow(uniqueTag("speaker"), makeDash(L"MeOS - Speakerstöd"), gdi.getWidth() + 64 + gdi.scaleLength(120));
|
||||
gdioutput *gdi_new = createExtraWindow(uniqueTag("speaker"), makeDash(L"MeOS - Speakerstöd"), gdi.getWidth() + 64 + gdi.scaleLength(120));
|
||||
if (gdi_new) {
|
||||
TabSpeaker &tl = dynamic_cast<TabSpeaker &>(*gdi_new->getTabs().get(TSpeakerTab));
|
||||
tl.ownWindow = true;
|
||||
@ -388,9 +388,9 @@ void TabSpeaker::drawTimeLine(gdioutput &gdi) {
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addSelection("DetailLevel", 160, 100, tabSpeakerCB);
|
||||
gdi.setCX(gdi.getCX() + gdi.getLineHeight()*2);
|
||||
gdi.addItem("DetailLevel", lang.tl("Alla händelser"), oTimeLine::PLow);
|
||||
gdi.addItem("DetailLevel", lang.tl("Viktiga händelser"), oTimeLine::PMedium);
|
||||
gdi.addItem("DetailLevel", lang.tl("Avgörande händelser"), oTimeLine::PHigh);
|
||||
gdi.addItem("DetailLevel", lang.tl("Alla händelser"), oTimeLine::PLow);
|
||||
gdi.addItem("DetailLevel", lang.tl("Viktiga händelser"), oTimeLine::PMedium);
|
||||
gdi.addItem("DetailLevel", lang.tl("Avgörande händelser"), oTimeLine::PHigh);
|
||||
gdi.selectItemByData("DetailLevel", watchLevel);
|
||||
|
||||
gdi.dropLine(0.2);
|
||||
@ -416,7 +416,7 @@ void TabSpeaker::drawTimeLine(gdioutput &gdi) {
|
||||
}
|
||||
}
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 1, L"Bevakar händelser i X#" + cls);
|
||||
gdi.addString("", 1, L"Bevakar händelser i X#" + cls);
|
||||
gdi.dropLine();
|
||||
|
||||
gdi.setRestorePoint("TimeLine");
|
||||
@ -736,11 +736,11 @@ void TabSpeaker::generateControlList(gdioutput &gdi, int classId)
|
||||
|
||||
if (stages.size() > 1) {
|
||||
for (size_t k=0; k<stages.size(); k++) {
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X#" + itos(stages[k].second)), stages[k].first);
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X#" + itos(stages[k].second)), stages[k].first);
|
||||
}
|
||||
if (multiDay) {
|
||||
for (size_t k=0; k<stages.size(); k++) {
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X (total)#" + itos(stages[k].second)), 1000 + stages[k].first);
|
||||
gdi.addItem("Leg", lang.tl("Sträcka X (total)#" + itos(stages[k].second)), 1000 + stages[k].first);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -826,7 +826,7 @@ void TabSpeaker::generateControlList(gdioutput &gdi, int classId)
|
||||
gdi.fillDown();
|
||||
char bf[16];
|
||||
sprintf_s(bf, "ctrl%d", oPunch::PunchFinish);
|
||||
gdi.addButton(cx, cy, bw, bf, "Mål", tabSpeakerCB, "", false, false).setExtra(previousControl);
|
||||
gdi.addButton(cx, cy, bw, bf, "Mål", tabSpeakerCB, "", false, false).setExtra(previousControl);
|
||||
|
||||
if (selectedControl[classId].getControl() == -1) {
|
||||
// Default control
|
||||
@ -945,13 +945,13 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
|
||||
int db = 0;
|
||||
if (classesToWatch.empty()) {
|
||||
gdi.addString("", boldLarge, "Speakerstöd");
|
||||
gdi.addString("", boldLarge, "Speakerstöd");
|
||||
gdi.dropLine();
|
||||
cy=gdi.getCY();
|
||||
cx=gdi.getCX();
|
||||
}
|
||||
else {
|
||||
gdi.addButton(cx+db, cy, bw-2, "Events", "Händelser", tabSpeakerCB, "Löpande information om viktiga händelser i tävlingen", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "Events", "Händelser", tabSpeakerCB, "Löpande information om viktiga händelser i tävlingen", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
@ -961,7 +961,7 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
gdi.addButton(cx+db, cy, bw/5, "ZoomOut", makeDash(L"-"), tabSpeakerCB, L"Zooma ut (Ctrl + '-')", false, false);
|
||||
db += bw/5+2;
|
||||
}
|
||||
gdi.addButton(cx+db, cy, bw-2, "Settings", "Inställningar...", tabSpeakerCB, "Välj vilka klasser och kontroller som bevakas", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "Settings", "Inställningar...", tabSpeakerCB, "Välj vilka klasser och kontroller som bevakas", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
@ -972,13 +972,13 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
} else db += bw;
|
||||
|
||||
gdi.addButton(cx+db, cy, bw-2, "PunchTable", "Stämplingar", tabSpeakerCB, "Visa en tabell över alla stämplingar", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "PunchTable", "Stämplingar", tabSpeakerCB, "Visa en tabell över alla stämplingar", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
} else db += bw;
|
||||
|
||||
gdi.addButton(cx+db, cy, bw-2, "LiveResult", "Liveresultat", tabSpeakerCB, "Visa rullande tider mellan kontroller i helskärmsläge", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "LiveResult", "Liveresultat", tabSpeakerCB, "Visa rullande tider mellan kontroller i helskärmsläge", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
@ -986,14 +986,14 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
|
||||
|
||||
if (!ownWindow) {
|
||||
gdi.addButton(cx+db, cy, bw-2, "Priority", "Prioritering", tabSpeakerCB, "Välj löpare att prioritera bevakning för", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "Priority", "Prioritering", tabSpeakerCB, "Välj löpare att prioritera bevakning för", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
} else db += bw;
|
||||
|
||||
|
||||
gdi.addButton(cx+db, cy, bw-2, "Window", "Nytt fönster", tabSpeakerCB, "", false, false);
|
||||
gdi.addButton(cx+db, cy, bw-2, "Window", "Nytt fönster", tabSpeakerCB, "", false, false);
|
||||
if (++cb>nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight()+4;
|
||||
@ -1003,7 +1003,7 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
if (getExtraWindows().size() == 1) {
|
||||
wstring sf = getSpeakerSettingsFile();
|
||||
if (fileExist(sf.c_str())) {
|
||||
gdi.addButton(cx + db, cy, bw - 2, "LoadWindows", "Återskapa", tabSpeakerCB, "Återskapa tidigare sparade fönster- och speakerinställningar", false, false);
|
||||
gdi.addButton(cx + db, cy, bw - 2, "LoadWindows", "Återskapa", tabSpeakerCB, "Återskapa tidigare sparade fönster- och speakerinställningar", false, false);
|
||||
if (++cb > nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight() + 4;
|
||||
@ -1012,7 +1012,7 @@ bool TabSpeaker::loadPage(gdioutput &gdi)
|
||||
}
|
||||
}
|
||||
else {
|
||||
gdi.addButton(cx + db, cy, bw - 2, "SaveWindows", "Spara", tabSpeakerCB, "Spara fönster- och speakerinställningar på datorn", false, false);
|
||||
gdi.addButton(cx + db, cy, bw - 2, "SaveWindows", "Spara", tabSpeakerCB, "Spara fönster- och speakerinställningar på datorn", false, false);
|
||||
if (++cb > nbtn) {
|
||||
cb = 1, cx = basex, db = 0;
|
||||
cy += gdi.getButtonHeight() + 4;
|
||||
@ -1063,7 +1063,7 @@ void TabSpeaker::manualTimePage(gdioutput &gdi) const
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
gdi.addInput("Control", lastControl, 5, 0, L"Kontroll");
|
||||
gdi.addInput("Runner", L"", 6, 0, L"Löpare");
|
||||
gdi.addInput("Runner", L"", 6, 0, L"Löpare");
|
||||
gdi.addInput("Time", L"", 8, 0, L"Tid");
|
||||
gdi.dropLine();
|
||||
gdi.addButton("StoreTime", "Spara", tabSpeakerCB).setDefault();
|
||||
@ -1084,7 +1084,7 @@ void TabSpeaker::storeManualTime(gdioutput &gdi)
|
||||
int punch=gdi.getTextNo("Control");
|
||||
|
||||
if (punch<=0)
|
||||
throw std::exception("Kontrollnummer måste anges.");
|
||||
throw std::exception("Kontrollnummer måste anges.");
|
||||
|
||||
lastControl=gdi.getText("Control");
|
||||
const wstring &r_str=gdi.getText("Runner");
|
||||
@ -1110,7 +1110,7 @@ void TabSpeaker::storeManualTime(gdioutput &gdi)
|
||||
sino = r->getCardNo();
|
||||
}
|
||||
else
|
||||
Name = lang.tl("Okänd");
|
||||
Name = lang.tl("Okänd");
|
||||
|
||||
if (sino <= 0) {
|
||||
sprintf_s(bf, "Ogiltigt bricknummer.#%d", sino);
|
||||
@ -1120,7 +1120,7 @@ void TabSpeaker::storeManualTime(gdioutput &gdi)
|
||||
oe->addFreePunch(itime, punch, sino, true);
|
||||
|
||||
gdi.restore("manual", false);
|
||||
gdi.addString("", 0, L"Löpare: X, kontroll: Y, kl Z#" + Name + L"#" + oPunch::getType(punch) + L"#" + oe->getAbsTime(itime));
|
||||
gdi.addString("", 0, L"Löpare: X, kontroll: Y, kl Z#" + Name + L"#" + oPunch::getType(punch) + L"#" + oe->getAbsTime(itime));
|
||||
|
||||
manualTimePage(gdi);
|
||||
}
|
||||
@ -1284,7 +1284,7 @@ void TabSpeaker::importSettings(gdioutput &gdi, multimap<string, wstring> &setti
|
||||
settings.find("right") == settings.end() ||
|
||||
settings.find("top") == settings.end() ||
|
||||
settings.find("bottom") == settings.end())
|
||||
throw meosException("Inställningarna är ogiltiga");
|
||||
throw meosException("Inställningarna är ogiltiga");
|
||||
|
||||
rc.left = get(settings, "left");
|
||||
rc.right = get(settings, "right");
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -284,7 +284,7 @@ bool TabTeam::save(gdioutput &gdi, bool dontReloadTeams) {
|
||||
wstring name=gdi.getText("Name");
|
||||
|
||||
if (name.empty()) {
|
||||
gdi.alert("Alla lag måste ha ett namn.");
|
||||
gdi.alert("Alla lag måste ha ett namn.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -365,7 +365,7 @@ bool TabTeam::save(gdioutput &gdi, bool dontReloadTeams) {
|
||||
|
||||
bool readStatusIn = true;
|
||||
if (newClass && t->getInputStatus() != StatusNotCompetiting && t->hasInputData()) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?")) {
|
||||
if (gdi.ask(L"Vill du sätta resultatet från tidigare etapper till <Deltar ej>?")) {
|
||||
t->resetInputData();
|
||||
readStatusIn = false;
|
||||
}
|
||||
@ -468,7 +468,7 @@ bool TabTeam::save(gdioutput &gdi, bool dontReloadTeams) {
|
||||
t->setTeamNoStart(true, sIn);
|
||||
|
||||
if (t->checkValdParSetup()) {
|
||||
gdi.alert("Laguppställningen hade fel, som har rättats");
|
||||
gdi.alert("Laguppställningen hade fel, som har rättats");
|
||||
}
|
||||
|
||||
if (t->getRunner(0))
|
||||
@ -569,8 +569,8 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.restore("DirectEntry", false);
|
||||
gdi.fillDown();
|
||||
gdi.dropLine();
|
||||
gdi.addString("", boldText, "Direktanmälan");
|
||||
gdi.addString("", 0, "Du kan använda en SI-enhet för att läsa in bricknummer.");
|
||||
gdi.addString("", boldText, "Direktanmälan");
|
||||
gdi.addString("", 0, "Du kan använda en SI-enhet för att läsa in bricknummer.");
|
||||
gdi.dropLine(0.2);
|
||||
|
||||
int leg = bi.getExtraInt();
|
||||
@ -619,7 +619,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
pRunner old = oe->getRunnerByCardNo(card, 0, true, true);
|
||||
if (old && r != old) {
|
||||
throw meosException(L"Brickan används av X.#" + old->getName() );
|
||||
throw meosException(L"Brickan används av X.#" + old->getName() );
|
||||
}
|
||||
|
||||
|
||||
@ -665,7 +665,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
else if (bi.id == "Browse") {
|
||||
const wchar_t *target = bi.getExtra();
|
||||
vector< pair<wstring, wstring> > ext;
|
||||
ext.push_back(make_pair(L"Laguppställning", L"*.csv;*.txt"));
|
||||
ext.push_back(make_pair(L"Laguppställning", L"*.csv;*.txt"));
|
||||
wstring fileName = gdi.browseForOpen(ext, L"csv");
|
||||
if (!fileName.empty())
|
||||
gdi.setText(target, fileName);
|
||||
@ -691,7 +691,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.selectItemByData("ForkKey", currentKey);
|
||||
|
||||
gdi.dropLine(0.9);
|
||||
gdi.addButton("SaveKey", "Ändra", TeamCB);
|
||||
gdi.addButton("SaveKey", "Ändra", TeamCB);
|
||||
gdi.refreshFast();
|
||||
}
|
||||
else if (bi.id == "SaveKey") {
|
||||
@ -762,14 +762,14 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.dropLine();
|
||||
gdi.fillDown();
|
||||
|
||||
gdi.addString("", fontMediumPlus, L"Välj löpare för sträcka X#" + pc->getLegNumber(leg));
|
||||
gdi.addString("", fontMediumPlus, L"Välj löpare för sträcka X#" + pc->getLegNumber(leg));
|
||||
gdi.setData("Leg", leg);
|
||||
|
||||
gdi.setRestorePoint("DirectEntry");
|
||||
gdi.addString("", 0, "help:teamwork");
|
||||
gdi.dropLine(0.5);
|
||||
|
||||
gdi.addButton("DirectEntry", "Direktanmälan...", TeamCB).setExtra(leg);
|
||||
gdi.addButton("DirectEntry", "Direktanmälan...", TeamCB).setExtra(leg);
|
||||
set<int> presented;
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
@ -794,7 +794,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
}
|
||||
}
|
||||
showRunners(gdi, "Från laget", rToList, limit, usedR);
|
||||
showRunners(gdi, "Från laget", rToList, limit, usedR);
|
||||
vector<pRunner> clsR;
|
||||
oe->getRunners(0, 0, clsR, true);
|
||||
rToList.clear();
|
||||
@ -814,7 +814,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
rToList.insert( make_pair(clsR[i]->getName(), clsR[i]->getId()));
|
||||
}
|
||||
|
||||
showRunners(gdi, "Från klassen", rToList, limit, usedR);
|
||||
showRunners(gdi, "Från klassen", rToList, limit, usedR);
|
||||
rToList.clear();
|
||||
|
||||
for (size_t i = 0; i < clsR.size(); i++) {
|
||||
@ -826,7 +826,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
continue;
|
||||
rToList.insert( make_pair(clsR[i]->getName(), clsR[i]->getId()));
|
||||
}
|
||||
showRunners(gdi, "Från klubben", rToList, limit, usedR);
|
||||
showRunners(gdi, "Från klubben", rToList, limit, usedR);
|
||||
}
|
||||
|
||||
|
||||
@ -848,7 +848,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
gdi.fillDown();
|
||||
if (!otherR.empty()) {
|
||||
gdi.addString("", 1, "Övriga");
|
||||
gdi.addString("", 1, "Övriga");
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("SelectR", 250, 400, TeamCB);
|
||||
gdi.addButton("SelectRunner", "OK", TeamCB).setExtra(leg);
|
||||
@ -880,7 +880,7 @@ int TabTeam::teamCB(gdioutput &gdi, int type, void *data)
|
||||
wstring name = gdi.getText("Name");
|
||||
pTeam t = oe->getTeam(teamId);
|
||||
if (!name.empty() && t && t->getName() != name) {
|
||||
if (gdi.ask(L"Vill du lägga till laget 'X'?#" + name)) {
|
||||
if (gdi.ask(L"Vill du lägga till laget 'X'?#" + name)) {
|
||||
t = oe->addTeam(name);
|
||||
teamId = t->getId();
|
||||
}
|
||||
@ -1221,7 +1221,7 @@ void TabTeam::loadTeamMembers(gdioutput &gdi, int ClassId, int ClubId, pTeam t)
|
||||
if (pc->getLegRunner(i)==i) {
|
||||
|
||||
gdi.addInput(xp + dx[0], yp, bf, L"", 18, TeamCB);//Name
|
||||
gdi.addButton(xp + dx[1], yp-2, gdi.scaleLength(28), "DR" + itos(i), "<>", TeamCB, "Knyt löpare till sträckan.", false, false); // Change
|
||||
gdi.addButton(xp + dx[1], yp-2, gdi.scaleLength(28), "DR" + itos(i), "<>", TeamCB, "Knyt löpare till sträckan.", false, false); // Change
|
||||
sprintf_s(bf_si, "SI%d", i);
|
||||
hasSI = true;
|
||||
gdi.addInput(xp + dx[2], yp, bf_si, L"", 5, TeamCB).setExtra(i); //Si
|
||||
@ -1302,7 +1302,7 @@ void TabTeam::loadTeamMembers(gdioutput &gdi, int ClassId, int ClubId, pTeam t)
|
||||
if (hasCrs) {
|
||||
gdi.dropLine(0.5);
|
||||
gdi.setRestorePoint("ChangeKey");
|
||||
gdi.addButton("ChangeKey", "Ändra lagets gaffling", TeamCB);
|
||||
gdi.addButton("ChangeKey", "Ändra lagets gaffling", TeamCB);
|
||||
}
|
||||
}
|
||||
gdi.refresh();
|
||||
@ -1340,7 +1340,7 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
|
||||
gdi.registerEvent("SearchRunner", teamSearchCB).setKeyCommand(KC_FIND);
|
||||
gdi.registerEvent("SearchRunnerBack", teamSearchCB).setKeyCommand(KC_FINDBACK);
|
||||
gdi.addInput("SearchText", L"", 17, teamSearchCB, L"", L"Sök på namn, bricka eller startnummer.").isEdit(false).setBgColor(colorLightCyan).ignore(true);
|
||||
gdi.addInput("SearchText", L"", 17, teamSearchCB, L"", L"Sök på namn, bricka eller startnummer.").isEdit(false).setBgColor(colorLightCyan).ignore(true);
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addButton("ShowAll", "Visa alla", TeamCB).isEdit(false);
|
||||
|
||||
@ -1392,7 +1392,7 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addInput("Start", L"", 8, 0, L"Starttid:");
|
||||
gdi.addInput("Finish", L"", 8, 0, L"Måltid:");
|
||||
gdi.addInput("Finish", L"", 8, 0, L"Måltid:");
|
||||
|
||||
const bool timeAdjust = oe->getMeOSFeatures().hasFeature(MeOSFeatures::TimeAdjust);
|
||||
const bool pointAdjust = oe->getMeOSFeatures().hasFeature(MeOSFeatures::PointAdjust);
|
||||
@ -1401,18 +1401,18 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
if (timeAdjust) {
|
||||
gdi.addInput("TimeAdjust", L"", 8, 0, L"Tidstillägg:");
|
||||
gdi.addInput("TimeAdjust", L"", 8, 0, L"Tidstillägg:");
|
||||
}
|
||||
if (pointAdjust) {
|
||||
gdi.addInput("PointAdjust", L"", 8, 0, L"Poängavdrag:");
|
||||
gdi.addInput("PointAdjust", L"", 8, 0, L"Poängavdrag:");
|
||||
}
|
||||
}
|
||||
|
||||
/*if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::TimeAdjust)) {
|
||||
gdi.addInput("TimeAdjust", "", 5, 0, "Tidstillägg:");
|
||||
gdi.addInput("TimeAdjust", "", 5, 0, "Tidstillägg:");
|
||||
}
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::PointAdjust)) {
|
||||
gdi.addInput("PointAdjust", "", 5, 0, "Poängavdrag:");
|
||||
gdi.addInput("PointAdjust", "", 5, 0, "Poängavdrag:");
|
||||
}*/
|
||||
|
||||
gdi.fillDown();
|
||||
@ -1444,7 +1444,7 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
int dx = int(gdi.getLineHeight()*0.7);
|
||||
int ccx = xx + dx;
|
||||
gdi.setCX(ccx);
|
||||
gdi.addString("", 1, "Resultat från tidigare etapper");
|
||||
gdi.addString("", 1, "Resultat från tidigare etapper");
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
|
||||
@ -1457,7 +1457,7 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(3);
|
||||
gdi.addInput("TimeIn", L"", 5, 0, L"Tid:");
|
||||
if (oe->hasRogaining()) {
|
||||
gdi.addInput("PointIn", L"", 5, 0, L"Poäng:");
|
||||
gdi.addInput("PointIn", L"", 5, 0, L"Poäng:");
|
||||
}
|
||||
gdi.dropLine(3);
|
||||
RECT rc;
|
||||
@ -1474,7 +1474,7 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Save", "Spara", TeamCB, "help:save");
|
||||
gdi.disableInput("Save");
|
||||
gdi.addButton("Undo", "Ångra", TeamCB);
|
||||
gdi.addButton("Undo", "Ångra", TeamCB);
|
||||
gdi.disableInput("Undo");
|
||||
|
||||
gdi.popX();
|
||||
@ -1497,8 +1497,8 @@ bool TabTeam::loadPage(gdioutput &gdi)
|
||||
gdi.addString("", 1, "Verktyg");
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("ImportTeams", "Importera laguppställningar", TeamCB);
|
||||
gdi.addButton("AddTeamMembers", "Skapa anonyma lagmedlemmar", TeamCB, "Fyll obesatta sträckor i alla lag med anonyma tillfälliga lagmedlemmar (N.N.)");
|
||||
gdi.addButton("ImportTeams", "Importera laguppställningar", TeamCB);
|
||||
gdi.addButton("AddTeamMembers", "Skapa anonyma lagmedlemmar", TeamCB, "Fyll obesatta sträckor i alla lag med anonyma tillfälliga lagmedlemmar (N.N.)");
|
||||
rc.right = gdi.getCX() + gdi.getLineHeight();
|
||||
gdi.dropLine(1.5);
|
||||
rc.bottom = gdi.getHeight();
|
||||
@ -1523,7 +1523,7 @@ void TabTeam::fillTeamList(gdioutput &gdi) {
|
||||
|
||||
|
||||
const wstring &TabTeam::getSearchString() const {
|
||||
return lang.tl(L"Sök (X)#Ctrl+F");
|
||||
return lang.tl(L"Sök (X)#Ctrl+F");
|
||||
}
|
||||
|
||||
void TabTeam::addToolbar(gdioutput &gdi) const {
|
||||
@ -1531,18 +1531,18 @@ void TabTeam::addToolbar(gdioutput &gdi) const {
|
||||
const int button_w=gdi.scaleLength(130);
|
||||
|
||||
gdi.addButton(2+0*button_w, 2, button_w, "FormMode",
|
||||
"Formulärläge", TeamCB, "", false, true).fixedCorner();
|
||||
"Formulärläge", TeamCB, "", false, true).fixedCorner();
|
||||
gdi.check("FormMode", currentMode==0);
|
||||
|
||||
gdi.addButton(2+1*button_w, 2, button_w, "TableMode",
|
||||
"Tabelläge", TeamCB, "", false, true).fixedCorner();
|
||||
"Tabelläge", TeamCB, "", false, true).fixedCorner();
|
||||
gdi.check("TableMode", currentMode==1);
|
||||
|
||||
}
|
||||
|
||||
void TabTeam::showTeamImport(gdioutput &gdi) {
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, "Importera laguppställningar");
|
||||
gdi.addString("", boldLarge, "Importera laguppställningar");
|
||||
|
||||
gdi.addString("", 10, "help:teamlineup");
|
||||
gdi.dropLine();
|
||||
@ -1552,12 +1552,12 @@ void TabTeam::showTeamImport(gdioutput &gdi) {
|
||||
gdi.fillRight();
|
||||
gdi.addInput("FileName", L"", 40, 0, L"Filnamn:");
|
||||
gdi.dropLine(0.9);
|
||||
gdi.addButton("Browse", "Bläddra", TeamCB).setExtra(L"FileName");
|
||||
gdi.addButton("Browse", "Bläddra", TeamCB).setExtra(L"FileName");
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("OnlyExisting", "Använd befintliga deltagare", 0, false,
|
||||
"Knyt redan anmälda deltagare till laget (identifiera genom namn och/eller bricka)");
|
||||
gdi.addCheckbox("OnlyExisting", "Använd befintliga deltagare", 0, false,
|
||||
"Knyt redan anmälda deltagare till laget (identifiera genom namn och/eller bricka)");
|
||||
gdi.fillRight();
|
||||
gdi.addButton("DoImportTeams", "Importera", TeamCB).setDefault();
|
||||
gdi.addButton("Cancel", "Avbryt", TeamCB).setCancel();
|
||||
@ -1634,8 +1634,8 @@ void TabTeam::doTeamImport(gdioutput &gdi) {
|
||||
gdi.dropLine();
|
||||
}
|
||||
gdi.fillRight();
|
||||
gdi.addButton("ImportTeams", "<< Bakåt", TeamCB);
|
||||
gdi.addButton("SaveTeams", "Spara laguppställningar", TeamCB).setDefault().setExtra(useExisting);
|
||||
gdi.addButton("ImportTeams", "<< Bakåt", TeamCB);
|
||||
gdi.addButton("SaveTeams", "Spara laguppställningar", TeamCB).setDefault().setExtra(useExisting);
|
||||
gdi.addButton("Cancel", "Avbryt", TeamCB).setCancel();
|
||||
gdi.refresh();
|
||||
}
|
||||
@ -1713,7 +1713,7 @@ pRunner TabTeam::findRunner(const wstring &name, int cardNo) const {
|
||||
|
||||
void TabTeam::showAddTeamMembers(gdioutput &gdi) {
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, "Tillsätt tillfälliga anonyma lagmedlemmar");
|
||||
gdi.addString("", boldLarge, "Tillsätt tillfälliga anonyma lagmedlemmar");
|
||||
|
||||
gdi.addString("", 10, "help:anonymous_team");
|
||||
gdi.dropLine();
|
||||
@ -1722,11 +1722,11 @@ void TabTeam::showAddTeamMembers(gdioutput &gdi) {
|
||||
gdi.fillDown();
|
||||
gdi.addInput("Name", lang.tl("N.N."), 24, 0, L"Anonymt namn:");
|
||||
gdi.fillDown();
|
||||
gdi.addCheckbox("OnlyRequired", "Endast på obligatoriska sträckor", 0, true);
|
||||
gdi.addCheckbox("WithFee", "Med anmälningsavgift (lagets klubb)", 0, true);
|
||||
gdi.addCheckbox("OnlyRequired", "Endast på obligatoriska sträckor", 0, true);
|
||||
gdi.addCheckbox("WithFee", "Med anmälningsavgift (lagets klubb)", 0, true);
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addButton("DoAddTeamMembers", "Tillsätt", TeamCB).setDefault();
|
||||
gdi.addButton("DoAddTeamMembers", "Tillsätt", TeamCB).setDefault();
|
||||
gdi.addButton("Cancel", "Avbryt", TeamCB).setCancel();
|
||||
|
||||
gdi.refresh();
|
||||
@ -1825,16 +1825,16 @@ void TabTeam::processChangeRunner(gdioutput &gdi, pTeam t, int leg, pRunner r) {
|
||||
}
|
||||
else if (oldR) {
|
||||
if (r->getTeam()) {
|
||||
ans = gdi.askCancel(L"Vill du att X och Y byter sträcka?#" +
|
||||
ans = gdi.askCancel(L"Vill du att X och Y byter sträcka?#" +
|
||||
r->getName() + L"#" + oldR->getName());
|
||||
}
|
||||
else {
|
||||
ans = gdi.askCancel(L"Vill du att X tar sträckan istället för Y?#" +
|
||||
ans = gdi.askCancel(L"Vill du att X tar sträckan istället för Y?#" +
|
||||
r->getName() + L"#" + oldR->getName());
|
||||
}
|
||||
}
|
||||
else {
|
||||
ans = gdi.askCancel(L"Vill du att X går in i laget?#" + r->getName());
|
||||
ans = gdi.askCancel(L"Vill du att X går in i laget?#" + r->getName());
|
||||
}
|
||||
|
||||
if (ans == gdioutput::AnswerNo)
|
||||
@ -1929,7 +1929,7 @@ bool TabTeam::warnDuplicateCard(gdioutput &gdi, string id, int cno, pRunner r, v
|
||||
InputInfo &cardNo = dynamic_cast<InputInfo &>(gdi.getBaseInfo(id.c_str()));
|
||||
if (warnCardDupl) {
|
||||
cardNo.setBgColor(colorLightRed);
|
||||
gdi.updateToolTip(id, L"Brickan används av X.#" + warnCardDupl->getCompleteIdentification());
|
||||
gdi.updateToolTip(id, L"Brickan används av X.#" + warnCardDupl->getCompleteIdentification());
|
||||
cardNo.refresh();
|
||||
return warnCardDupl->getTeam() == r->getTeam();
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "tabbase.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -776,7 +776,7 @@ bool Table::deleteSelection(gdioutput &gdi) {
|
||||
int r1, r2;
|
||||
getRowRange(r1, r2);
|
||||
if (r1 != -1 && r2 != -1 && r1<=r2) {
|
||||
if (!gdi.ask(L"Vill du radera X rader från tabellen?#" + itow(r2-r1+1)))
|
||||
if (!gdi.ask(L"Vill du radera X rader från tabellen?#" + itow(r2-r1+1)))
|
||||
return false;
|
||||
gdi.setWaitCursor(true);
|
||||
int failed = deleteRows(r1, r2);
|
||||
@ -1979,7 +1979,7 @@ void Table::exportClipboard(gdioutput &gdi)
|
||||
void Table::importClipboard(gdioutput &gdi)
|
||||
{
|
||||
if (!canPaste())
|
||||
throw std::exception("Operationen stöds ej");
|
||||
throw std::exception("Operationen stöds ej");
|
||||
|
||||
wstring str;
|
||||
if (OpenClipboard(gdi.getHWNDMain()) != false) {
|
||||
@ -2041,7 +2041,7 @@ void Table::importClipboard(gdioutput &gdi)
|
||||
tw = max(tw, table[k].size());
|
||||
|
||||
if (tw > columns.size())
|
||||
throw std::exception("Antalet columner i urklippet är större än antalet kolumner i tabellen.");
|
||||
throw std::exception("Antalet columner i urklippet är större än antalet kolumner i tabellen.");
|
||||
|
||||
if (upperRow == -1) {
|
||||
if (!gdi.ask(L"Vill du klistra in X nya rader i tabellen?#"+itow(table.size())))
|
||||
@ -2055,10 +2055,10 @@ void Table::importClipboard(gdioutput &gdi)
|
||||
getRowRange(row1, row2);
|
||||
|
||||
if ( (row1 + table.size()) > sortIndex.size() )
|
||||
throw std::exception("Antalet rader i urklipp får inte plats i selektionen.");
|
||||
throw std::exception("Antalet rader i urklipp får inte plats i selektionen.");
|
||||
|
||||
if ( (col1 + tw) > columns.size() )
|
||||
throw std::exception("Antalet kolumner i urklipp får inte plats i selektionen.");
|
||||
throw std::exception("Antalet kolumner i urklipp får inte plats i selektionen.");
|
||||
|
||||
bool wrongSize = false;
|
||||
|
||||
@ -2149,7 +2149,7 @@ void Table::importClipboard(gdioutput &gdi)
|
||||
int Table::deleteRows(int row1, int row2)
|
||||
{
|
||||
if (!canDelete())
|
||||
throw std::exception("Operationen stöds ej");
|
||||
throw std::exception("Operationen stöds ej");
|
||||
|
||||
int failed = 0;
|
||||
for (size_t k = row1; k<=size_t(row2); k++) {
|
||||
@ -2173,7 +2173,7 @@ int Table::deleteRows(int row1, int row2)
|
||||
|
||||
void Table::insertRow(gdioutput &gdi) {
|
||||
if (!canInsert())
|
||||
throw std::exception("Operationen stöds ej");
|
||||
throw std::exception("Operationen stöds ej");
|
||||
|
||||
TableUpdateInfo tui;
|
||||
tui.doAdd = true;
|
||||
@ -2284,7 +2284,7 @@ void Table::autoSelectColumns() {
|
||||
if (nonEmpty > 1) {
|
||||
columns.clear();
|
||||
wstring id = lang.tl("Id");
|
||||
wstring mod = lang.tl("Ändrad");
|
||||
wstring mod = lang.tl("Ändrad");
|
||||
for (size_t k = 0; k<empty.size(); k++) {
|
||||
if (!empty[k] && wcscmp(Titles[k].name, id.c_str()) != 0 && wcscmp(Titles[k].name, mod.c_str()) != 0)
|
||||
columns.push_back(k);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// TimeStamp.h: interface for the TimeStamp class.
|
||||
// TimeStamp.h: interface for the TimeStamp class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include "gdioutput.h"
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
class AutoCompleteInfo;
|
||||
class gdioutput;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -74,14 +74,14 @@ void AutoTask::autoSave() {
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty()) {
|
||||
gdi.alert(msg);
|
||||
}
|
||||
else
|
||||
gdi.addInfoBox("", L"Tävlingsdata har sparats.", 10);
|
||||
gdi.addInfoBox("", L"Tävlingsdata har sparats.", 10);
|
||||
|
||||
gdi.setWaitCursor(false);
|
||||
|
||||
@ -127,7 +127,7 @@ void AutoTask::interfaceTimeout(const vector<gdioutput *> &windows) {
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
if (!msg.empty()) {
|
||||
gdi.alert(msg);
|
||||
@ -279,7 +279,7 @@ bool AutoTask::synchronizeImpl(const vector<gdioutput *> &windows) {
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -298,7 +298,7 @@ bool AutoTask::synchronizeImpl(const vector<gdioutput *> &windows) {
|
||||
msg = gdi.widen(ex.what());
|
||||
}
|
||||
catch (...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
currentRevision = oe.getRevision();
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -564,7 +564,7 @@ bool csvparser::importOCAD_CSV(oEvent &event, const wstring &file, bool addClass
|
||||
}
|
||||
|
||||
if (wtoi(sp[firstIndex])<30 || wtoi(sp[firstIndex])>1000) {
|
||||
wstring str = L"Ogiltig banfil. Kontroll förväntad på position X, men hittade 'Y'.#"
|
||||
wstring str = L"Ogiltig banfil. Kontroll förväntad på position X, men hittade 'Y'.#"
|
||||
+ itow(firstIndex+1) + L"#" + sp[firstIndex];
|
||||
throw meosException(str.c_str());
|
||||
}
|
||||
@ -625,7 +625,7 @@ bool csvparser::importOCAD_CSV(oEvent &event, const wstring &file, bool addClass
|
||||
if (ctrl >= 30 && ctrl < 1000)
|
||||
pc->addControl(wtoi(sp[k]));
|
||||
else {
|
||||
wstring str = L"Oväntad kontroll 'X' i bana Y.#" + ctrlStr + L"#" + pc->getName();
|
||||
wstring str = L"Oväntad kontroll 'X' i bana Y.#" + ctrlStr + L"#" + pc->getName();
|
||||
throw meosException(str);
|
||||
}
|
||||
}
|
||||
@ -1155,110 +1155,12 @@ bool csvparser::importCards(const oEvent &oe, const wstring &file, vector<SICard
|
||||
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
void csvparser::parse(const wstring &file, list< vector<string> > &data) {
|
||||
data.clear();
|
||||
|
||||
fin.open(file);
|
||||
const size_t bf_size = 4096;
|
||||
char bf[4096];
|
||||
if (!fin.good())
|
||||
throw meosException("Failed to read file");
|
||||
|
||||
bool isUTF8 = false;
|
||||
bool isUnicode = false;
|
||||
bool firstLine = true;
|
||||
wstring wideString;
|
||||
vector<char *> sp;
|
||||
|
||||
while(!fin.eof()) {
|
||||
memset(bf, 0, bf_size);
|
||||
fin.getline(bf, bf_size);
|
||||
if (firstLine) {
|
||||
if (bf[0] == -17 && bf[1] == -69 && bf[2] == -65) {
|
||||
isUTF8 = true;
|
||||
for (int k = 0; k <bf_size-3; k++) {
|
||||
bf[k] = bf[k+3];
|
||||
}
|
||||
}
|
||||
else if (bf[0] == -1 && bf[1] == -2) {
|
||||
isUnicode = true;
|
||||
for (int k = 0; k < bf_size-2; k++) {
|
||||
bf[k] = bf[k+2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isUnicode) {
|
||||
int len = 0;
|
||||
if (bf[len] == 0 && bf[len+1] != 0)
|
||||
len++;
|
||||
wideString.clear();
|
||||
while ((bf[len] != 0 || bf[len+1] != 0) && len < (bf_size -2)) {
|
||||
wchar_t &c = *(wchar_t *)&bf[len];
|
||||
wideString.push_back(c);
|
||||
len+=2;
|
||||
}
|
||||
if (wideString.length() > 0) {
|
||||
int untranslated;
|
||||
WideCharToMultiByte(CP_ACP, 0, wideString.c_str(), wideString.length(), bf, bf_size-2, "?", &untranslated);
|
||||
bf[wideString.length()-1] = 0;
|
||||
}
|
||||
else {
|
||||
bf[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
firstLine = false;
|
||||
split(bf, sp);
|
||||
|
||||
if (!sp.empty()) {
|
||||
data.push_back(vector<string>());
|
||||
data.back().resize(sp.size());
|
||||
for (size_t k = 0; k < sp.size(); k++) {
|
||||
data.back()[k] = sp[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isUTF8) {
|
||||
list< vector<string> > dataCopy;
|
||||
for (list< vector<string> >::iterator it = data.begin(); it != data.end(); ++it) {
|
||||
vector<string> &de = *it;
|
||||
dataCopy.push_back(vector<string>());
|
||||
vector<string> &out = dataCopy.back();
|
||||
|
||||
wchar_t buff[buff_pre_alloc];
|
||||
char outstr[buff_pre_alloc];
|
||||
for (size_t k = 0; k < de.size(); k++) {
|
||||
if (de[k].empty()) {
|
||||
out.push_back("");
|
||||
continue;
|
||||
}
|
||||
int len = de[k].size();
|
||||
len = min(min(len+1, 1024), buff_pre_alloc-10);
|
||||
|
||||
int wlen = MultiByteToWideChar(CP_UTF8, 0, de[k].c_str(), len, buff, buff_pre_alloc);
|
||||
buff[wlen-1] = 0;
|
||||
|
||||
BOOL untranslated = false;
|
||||
WideCharToMultiByte(CP_ACP, 0, buff, wlen, outstr, buff_pre_alloc, "?", &untranslated);
|
||||
outstr[wlen-1] = 0;
|
||||
out.push_back(outstr);
|
||||
}
|
||||
}
|
||||
data.swap(dataCopy);
|
||||
}
|
||||
|
||||
fin.close();
|
||||
}*/
|
||||
|
||||
|
||||
void csvparser::parseUnicode(const wstring &file, list< vector<wstring> > &data) {
|
||||
fin.open(file, ifstream::in | ifstream::binary);
|
||||
fin.seekg(0, ios_base::end);
|
||||
size_t len = int(fin.tellg())-2;
|
||||
if (len == 0)
|
||||
int len = int(fin.tellg())-2;
|
||||
if (len <= 0)
|
||||
return;
|
||||
fin.seekg(2); // BOM
|
||||
assert(len % 2 == 0);
|
||||
@ -1266,7 +1168,7 @@ void csvparser::parseUnicode(const wstring &file, list< vector<wstring> > &data)
|
||||
fin.read((char *)&bf[0], len);
|
||||
vector<wstring> rows;
|
||||
int spp = 0;
|
||||
for (size_t k = 0; k < len / 2; k++) {
|
||||
for (int k = 0; k < len / 2; k++) {
|
||||
if (bf[spp] == '\r')
|
||||
spp++;
|
||||
if (bf[k] == '\n') {
|
||||
@ -1278,7 +1180,7 @@ void csvparser::parseUnicode(const wstring &file, list< vector<wstring> > &data)
|
||||
rows.push_back(r);
|
||||
}
|
||||
}
|
||||
if (size_t(spp + 1) < len / 2) {
|
||||
if (spp + 1 < len / 2) {
|
||||
wstring r = &bf[spp];
|
||||
rows.push_back(r);
|
||||
}
|
||||
@ -1303,7 +1205,7 @@ void csvparser::parse(const wstring &file, list< vector<wstring> > &data) {
|
||||
fin.open(file);
|
||||
|
||||
fin.seekg(0, ios_base::end);
|
||||
auto len = fin.tellg();
|
||||
auto flen = fin.tellg();
|
||||
fin.seekg(0);
|
||||
|
||||
string rbf;
|
||||
@ -1315,7 +1217,7 @@ void csvparser::parse(const wstring &file, list< vector<wstring> > &data) {
|
||||
bool firstLine = true;
|
||||
vector<wchar_t *> sp;
|
||||
vector<wchar_t> wbf_a;
|
||||
wbf_a.resize(size_t(len));
|
||||
wbf_a.resize(size_t(flen)+1);
|
||||
wchar_t *wbf = &wbf_a[0];
|
||||
wstring w;
|
||||
while(std::getline(fin, rbf)) {
|
||||
@ -1358,6 +1260,43 @@ void csvparser::parse(const wstring &file, list< vector<wstring> > &data) {
|
||||
fin.close();
|
||||
}
|
||||
|
||||
void csvparser::convertUTF(const wstring &file) {
|
||||
ifstream fin;
|
||||
fin.open(file);
|
||||
string rbf;
|
||||
|
||||
if (!fin.good())
|
||||
throw meosException("Failed to read file");
|
||||
|
||||
bool isUTF8 = false;
|
||||
bool firstLine = true;
|
||||
wstring w;
|
||||
vector<string> out;
|
||||
while (std::getline(fin, rbf)) {
|
||||
const char *bf = rbf.c_str();
|
||||
if (firstLine) {
|
||||
if (rbf.length() > 3 && rbf[0] == -17 && rbf[1] == -69 && rbf[2] == -65) {
|
||||
isUTF8 = true;
|
||||
bf += 3;
|
||||
return; // Done
|
||||
}
|
||||
}
|
||||
w = gdi_main->recodeToWide(bf);
|
||||
out.push_back(gdi_main->toUTF8(w));
|
||||
}
|
||||
|
||||
fin.close();
|
||||
_wrename(file.c_str(), (file + L"_").c_str());
|
||||
|
||||
ofstream fout;
|
||||
fout.open(file);
|
||||
fout.put(-17);
|
||||
fout.put(-69);
|
||||
fout.put(-65);
|
||||
for (string &line : out)
|
||||
fout << line << endl;
|
||||
}
|
||||
|
||||
void csvparser::importTeamLineup(const wstring &file,
|
||||
const map<wstring, int> &classNameToNumber,
|
||||
vector<TeamLineup> &teams) {
|
||||
@ -1372,13 +1311,13 @@ void csvparser::importTeamLineup(const wstring &file,
|
||||
if (!line.empty()) {
|
||||
if (membersToRead == 0) {
|
||||
if (line.size() < 2 || line.size() > 3)
|
||||
throw meosException(L"Ogiltigt lag på rad X.#" + itow(lineNo) + L": " + line[0]);
|
||||
throw meosException(L"Ogiltigt lag på rad X.#" + itow(lineNo) + L": " + line[0]);
|
||||
const wstring cls = trim(line[0]);
|
||||
map<wstring, int>::const_iterator res = classNameToNumber.find(cls);
|
||||
if (res == classNameToNumber.end())
|
||||
throw meosException(L"Okänd klass på rad X.#" + itow(lineNo) + L": " + cls);
|
||||
throw meosException(L"Okänd klass på rad X.#" + itow(lineNo) + L": " + cls);
|
||||
if (res->second <= 1)
|
||||
throw meosException(L"Klassen X är individuell.#" + cls);
|
||||
throw meosException(L"Klassen X är individuell.#" + cls);
|
||||
|
||||
membersToRead = res->second;
|
||||
teams.push_back(TeamLineup());
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -107,7 +107,9 @@ protected:
|
||||
wstring &processedTime, wstring &date);
|
||||
|
||||
public:
|
||||
//void parse(const wstring &file, list< vector<string> > &dataOutput);
|
||||
|
||||
static void convertUTF(const wstring &file);
|
||||
|
||||
void parse(const wstring &file, list< vector<wstring> > &dataOutput);
|
||||
|
||||
void importTeamLineup(const wstring &file,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -182,13 +182,13 @@ void Download::downloadFile(const wstring &url, const wstring &file, const vecto
|
||||
sprintf_s(bf, "HTTP Error 401: The requested resource requires user authentication.");
|
||||
break;
|
||||
case HTTP_STATUS_FORBIDDEN:
|
||||
sprintf_s(bf, "HTTP Error 403: Åtkomst nekad (access is denied).");
|
||||
sprintf_s(bf, "HTTP Error 403: Åtkomst nekad (access is denied).");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_FOUND:
|
||||
sprintf_s(bf, "HTTP Error 404: Resursen kunde ej hittas (not found).");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_SUPPORTED:
|
||||
sprintf_s(bf, "HTTP Error 501: Förfrågan stöds ej (not supported).");
|
||||
sprintf_s(bf, "HTTP Error 501: Förfrågan stöds ej (not supported).");
|
||||
break;
|
||||
case HTTP_STATUS_SERVER_ERROR:
|
||||
sprintf_s(bf, "HTTP Error 500: Internt serverfel (server error).");
|
||||
@ -310,7 +310,7 @@ void Download::postFile(const wstring &url, const wstring &file, const wstring &
|
||||
|
||||
wstring error = errorCode != 0 ? getErrorMessage(errorCode) : L"";
|
||||
if (error.empty())
|
||||
error = L"Ett okänt fel inträffade.";
|
||||
error = L"Ett okänt fel inträffade.";
|
||||
throw meosException(error);
|
||||
}
|
||||
}
|
||||
@ -425,13 +425,13 @@ bool Download::httpSendReqEx(HINTERNET hConnect, const wstring &dest,
|
||||
sprintf_s(bf, "HTTP Error 401: The requested resource requires user authentication.");
|
||||
break;
|
||||
case HTTP_STATUS_FORBIDDEN:
|
||||
sprintf_s(bf, "HTTP Error 403: Åtkomst nekad (access is denied).");
|
||||
sprintf_s(bf, "HTTP Error 403: Åtkomst nekad (access is denied).");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_FOUND:
|
||||
sprintf_s(bf, "HTTP Error 404: Resursen kunde ej hittas (not found).");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_SUPPORTED:
|
||||
sprintf_s(bf, "HTTP Error 501: Förfrågan stöds ej (not supported).");
|
||||
sprintf_s(bf, "HTTP Error 501: Förfrågan stöds ej (not supported).");
|
||||
break;
|
||||
case HTTP_STATUS_SERVER_ERROR:
|
||||
sprintf_s(bf, "HTTP Error 500: Internt serverfel (server error).");
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// Download.h: interface for the Download class.
|
||||
// Download.h: interface for the Download class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2012 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -174,7 +174,7 @@ void gdioutput::constructor(double _scale)
|
||||
void gdioutput::setFont(int size, const wstring &font)
|
||||
{
|
||||
//setEncoding(enc);
|
||||
double s = 1+size*sqrt(double(size))*0.2;
|
||||
double s = 1 + double(size)*0.25;// 1 + size * sqrt(double(size))*0.2;
|
||||
initCommon(s, font);
|
||||
}
|
||||
|
||||
@ -759,7 +759,7 @@ void CALLBACK gdiTimerProc(HWND hWnd, UINT a, UINT_PTR ptr, DWORD b) {
|
||||
catch(std::exception &ex) {
|
||||
string2Wide(ex.what(), msg);
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Unexpected error";
|
||||
@ -1960,10 +1960,10 @@ LRESULT gdioutput::ProcessMsg(UINT iMessage, LPARAM lParam, WPARAM wParam)
|
||||
catch(std::exception &ex) {
|
||||
msg=widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg=L"Ett okänt fel inträffade.";
|
||||
msg=L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg=L"Ett okänt fel inträffade.";
|
||||
msg=L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty()) {
|
||||
@ -2170,10 +2170,10 @@ void gdioutput::keyCommand(KeyCommandCode code) {
|
||||
catch(std::exception &ex) {
|
||||
msg = widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
@ -2704,10 +2704,10 @@ void gdioutput::enter()
|
||||
catch(std::exception &ex) {
|
||||
msg = widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
@ -2764,10 +2764,10 @@ bool gdioutput::upDown(int direction)
|
||||
catch(std::exception &ex) {
|
||||
msg = widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
@ -2806,10 +2806,10 @@ void gdioutput::escape()
|
||||
catch(std::exception &ex) {
|
||||
msg = widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
@ -5548,9 +5548,9 @@ void gdioutput::tableCB(ButtonInfo &bu, Table *t)
|
||||
|
||||
restore("tblRestore");
|
||||
int ybase = Tables.back().yp;
|
||||
addString("", ybase, 20, boldLarge, "Välj kolumner");
|
||||
addString("", ybase, 20, boldLarge, "Välj kolumner");
|
||||
ybase += scaleLength(30);
|
||||
addString("", ybase, 20, 0, L"Välj kolumner för tabellen X.#"+ t->getTableName());
|
||||
addString("", ybase, 20, 0, L"Välj kolumner för tabellen X.#"+ t->getTableName());
|
||||
ybase += getLineHeight()*2;
|
||||
|
||||
addListBox(20, ybase, "tblColSel", 180, 450, 0, L"", L"", true);
|
||||
@ -5565,9 +5565,9 @@ void gdioutput::tableCB(ButtonInfo &bu, Table *t)
|
||||
}
|
||||
setSelection("tblColSel", sel);
|
||||
int xp = scaleLength(220);
|
||||
addButton(xp, ybase+btnHeight*0, "tblAll", "Välj allt", gdiTableCB);
|
||||
addButton(xp, ybase+btnHeight*1, "tblNone", "Välj inget", gdiTableCB);
|
||||
addButton(xp, ybase+btnHeight*2, "tblAuto", "Välj automatiskt", gdiTableCB).setExtra(t->getTableId());
|
||||
addButton(xp, ybase+btnHeight*0, "tblAll", "Välj allt", gdiTableCB);
|
||||
addButton(xp, ybase+btnHeight*1, "tblNone", "Välj inget", gdiTableCB);
|
||||
addButton(xp, ybase+btnHeight*2, "tblAuto", "Välj automatiskt", gdiTableCB).setExtra(t->getTableId());
|
||||
|
||||
addButton(xp, ybase+btnHeight*4, "tblOK", "OK", gdiTableCB).setExtra(t->getTableId());
|
||||
addButton(xp, ybase+btnHeight*5, "tblCancel", "Avbryt", gdiTableCB);
|
||||
@ -5654,17 +5654,17 @@ void gdioutput::enableTables()
|
||||
string tname = string("table") + itos(t->canDelete()) + itos(t->canInsert()) + itos(t->canPaste());
|
||||
if (!toolbar->isLoaded(tname)) {
|
||||
toolbar->reset();
|
||||
toolbar->addButton("tblColumns", 1, 2, "Välj vilka kolumner du vill visa");
|
||||
toolbar->addButton("tblColumns", 1, 2, "Välj vilka kolumner du vill visa");
|
||||
toolbar->addButton("tblPrint", 0, STD_PRINT, "Skriv ut tabellen (X)#Ctrl+P");
|
||||
toolbar->addButton("tblUpdate", 1, 0, "Uppdatera alla värden i tabellen (X)#F5");
|
||||
toolbar->addButton("tblReset", 1, 4, "Återställ tabeldesignen och visa allt");
|
||||
toolbar->addButton("tblUpdate", 1, 0, "Uppdatera alla värden i tabellen (X)#F5");
|
||||
toolbar->addButton("tblReset", 1, 4, "Återställ tabeldesignen och visa allt");
|
||||
toolbar->addButton("tblCopy", 0, STD_COPY, "Kopiera selektionen till urklipp (X)#Ctrl+C");
|
||||
if (t->canPaste())
|
||||
toolbar->addButton("tblPaste", 0, STD_PASTE, "Klistra in data från urklipp (X)#Ctrl+V");
|
||||
toolbar->addButton("tblPaste", 0, STD_PASTE, "Klistra in data från urklipp (X)#Ctrl+V");
|
||||
if (t->canDelete())
|
||||
toolbar->addButton("tblRemove", 1, 1, "Ta bort valda rader från tabellen (X)#Del");
|
||||
toolbar->addButton("tblRemove", 1, 1, "Ta bort valda rader från tabellen (X)#Del");
|
||||
if (t->canInsert())
|
||||
toolbar->addButton("tblInsert", 1, 3, "Lägg till en ny rad i tabellen (X)#Ctrl+I");
|
||||
toolbar->addButton("tblInsert", 1, 3, "Lägg till en ny rad i tabellen (X)#Ctrl+I");
|
||||
toolbar->createToolbar(tname, L"Tabellverktyg");
|
||||
}
|
||||
else {
|
||||
@ -5695,10 +5695,10 @@ void gdioutput::processToolbarMessage(const string &id, void *data) {
|
||||
catch(std::exception &ex) {
|
||||
msg = widen(ex.what());
|
||||
if (msg.empty())
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
catch(...) {
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
msg = L"Ett okänt fel inträffade.";
|
||||
}
|
||||
|
||||
if (!msg.empty())
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "image.h"
|
||||
#include "png/png.h"
|
||||
#include <vector>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -38,7 +38,7 @@ void ImportFormats::getImportFormats(vector< pair<string, size_t> > &formats) {
|
||||
}
|
||||
|
||||
int ImportFormats::getDefault(oEvent &oe) {
|
||||
return oe.getPropertyString("Language", "English") == "Français" ? FrenchFederationMapping : Default;
|
||||
return oe.getPropertyString("Language", "English") == "Français" ? FrenchFederationMapping : Default;
|
||||
}
|
||||
*/
|
||||
void ImportFormats::getExportFormats(vector< pair<wstring, size_t> > &types, bool exportFilter) {
|
||||
@ -85,7 +85,7 @@ void ImportFormats::getOECSVLanguage(vector< pair<wstring, size_t> > &typeLangua
|
||||
typeLanguages.push_back(make_pair(L"Svenska", 2));
|
||||
typeLanguages.push_back(make_pair(L"Deutsch", 3));
|
||||
typeLanguages.push_back(make_pair(L"Dansk", 4));
|
||||
typeLanguages.push_back(make_pair(L"Français", 5));
|
||||
typeLanguages.push_back(make_pair(L"Français", 5));
|
||||
typeLanguages.push_back(make_pair(L"Russian", 6));
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ int ImportFormats::getDefaultCSVLanguage(oEvent &oe) {
|
||||
defaultLanguageType = 3;
|
||||
else if (currentLanguage == "Dansk")
|
||||
defaultLanguageType = 4;
|
||||
else if (currentLanguage == "Français")
|
||||
else if (currentLanguage == "Français")
|
||||
defaultLanguageType = 5;
|
||||
else if (currentLanguage == "Russian(ISO 8859 - 5)")
|
||||
defaultLanguageType = 6;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2017 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -50,7 +50,7 @@ void IOF30Interface::readCourseData(gdioutput &gdi, const xmlobject &xo, bool up
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
courseCount = 0;
|
||||
failed = 0;
|
||||
xmlList xl;
|
||||
@ -70,7 +70,7 @@ void IOF30Interface::readCourseData(gdioutput &gdi, const xmlobject &xo, bool up
|
||||
}
|
||||
}
|
||||
if (ix == -1)
|
||||
throw meosException("Filen innehåller flera uppsättningar banor, men ingen har samma etappnummer som denna etapp (X).#" + itos(nr));
|
||||
throw meosException("Filen innehåller flera uppsättningar banor, men ingen har samma etappnummer som denna etapp (X).#" + itos(nr));
|
||||
else
|
||||
xRaceCourses = xl[ix];
|
||||
}
|
||||
@ -91,7 +91,7 @@ void IOF30Interface::readCourseData(gdioutput &gdi, const xmlobject &xo, bool up
|
||||
if (pc) {
|
||||
courseCount++;
|
||||
if (courses.count(pc->getName()))
|
||||
gdi.addString("", 0, L"Varning: Banan 'X' förekommer flera gånger#" + pc->getName());
|
||||
gdi.addString("", 0, L"Varning: Banan 'X' förekommer flera gånger#" + pc->getName());
|
||||
|
||||
courses[pc->getName()] = pc;
|
||||
|
||||
@ -460,7 +460,7 @@ void IOF30Interface::assignTeamCourse(gdioutput &gdi, oTeam &team, xmlList &xAss
|
||||
}
|
||||
}
|
||||
else
|
||||
gdi.addString("", 0, L"Bantilldelning för 'X' hänvisar till en sträcka som inte finns#" + team.getClass(false)).setColor(colorRed);
|
||||
gdi.addString("", 0, L"Bantilldelning för 'X' hänvisar till en sträcka som inte finns#" + team.getClass(false)).setColor(colorRed);
|
||||
}
|
||||
else {
|
||||
wstring name;
|
||||
@ -683,7 +683,7 @@ void IOF30Interface::readCompetitorList(gdioutput &gdi, const xmlobject &xo, int
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
xmlList xl;
|
||||
xo.getObjects(xl);
|
||||
@ -705,7 +705,7 @@ void IOF30Interface::readClubList(gdioutput &gdi, const xmlobject &xo, int &club
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
xmlList xl;
|
||||
xo.getObjects(xl);
|
||||
@ -741,7 +741,7 @@ void IOF30Interface::readEntryList(gdioutput &gdi, xmlobject &xo, bool removeNon
|
||||
entRemoved = 0;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
xmlobject xEvent = xo.getObject("Event");
|
||||
map<int, vector<LegInfo> > teamClassConfig;
|
||||
@ -969,7 +969,7 @@ void IOF30Interface::readStartList(gdioutput &gdi, xmlobject &xo, int &entRead,
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
map<int, vector<LegInfo> > teamClassConfig;
|
||||
|
||||
@ -1075,7 +1075,7 @@ void IOF30Interface::readClassList(gdioutput &gdi, xmlobject &xo, int &entRead,
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
map<int, vector<LegInfo> > teamClassConfig;
|
||||
|
||||
@ -1113,7 +1113,7 @@ void IOF30Interface::readEventList(gdioutput &gdi, xmlobject &xo) {
|
||||
string ver;
|
||||
xo.getObjectString("iofVersion", ver);
|
||||
if (!ver.empty() && ver > "3.0")
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
gdi.addString("", 0, "Varning, okänd XML-version X#" + ver);
|
||||
|
||||
xmlList xl;
|
||||
xo.getObjects(xl);
|
||||
@ -3388,9 +3388,9 @@ bool IOF30Interface::readControl(const xmlobject &xControl) {
|
||||
if (num == 0 && finish.length()>0)
|
||||
num = int(finish[finish.length()-1])-'0';
|
||||
if (num > 0 && num<10)
|
||||
finish = lang.tl(L"Mål ") + itow(num);
|
||||
finish = lang.tl(L"Mål ") + itow(num);
|
||||
else
|
||||
finish = lang.tl(L"Mål");
|
||||
finish = lang.tl(L"Mål");
|
||||
pc = oe.getControl(getFinishIndex(num), true);
|
||||
pc->setNumbers(L"");
|
||||
pc->setName(finish);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "stdafx.h"
|
||||
@ -100,8 +100,8 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
|
||||
gdi.addButton("EditList", "Egenskaper", editListCB);
|
||||
gdi.setCX(gdi.getCX() + gdi.scaleLength(32));
|
||||
gdi.addButton("OpenFile", "Öppna fil", editListCB);
|
||||
gdi.addButton("OpenInside", "Öppna från aktuell tävling", editListCB);
|
||||
gdi.addButton("OpenFile", "Öppna fil", editListCB);
|
||||
gdi.addButton("OpenInside", "Öppna från aktuell tävling", editListCB);
|
||||
|
||||
if (savedFileName.empty())
|
||||
gdi.addButton("SaveFile", "Spara som fil", editListCB);
|
||||
@ -110,11 +110,11 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
gdi.addButton("SaveFileCopy", "Spara som...", editListCB);
|
||||
}
|
||||
|
||||
gdi.addButton("SaveInside", "Spara i aktuell tävling", editListCB);
|
||||
gdi.addButton("SaveInside", "Spara i aktuell tävling", editListCB);
|
||||
gdi.addButton("NewList", "Ny lista", editListCB);
|
||||
gdi.addButton("RemoveInside", "Radera", editListCB, "Radera listan från aktuell tävling");
|
||||
gdi.addButton("RemoveInside", "Radera", editListCB, "Radera listan från aktuell tävling");
|
||||
gdi.setInputStatus("RemoveInside", currentIndex != -1);
|
||||
gdi.addButton("Close", "Stäng", editListCB);
|
||||
gdi.addButton("Close", "Stäng", editListCB);
|
||||
|
||||
gdi.dropLine(2);
|
||||
|
||||
@ -160,7 +160,7 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
gdi.dropLine(buttonDrop);
|
||||
}
|
||||
gdi.fillDown();
|
||||
gdi.addButton("AddLine0", "Lägg till rad", editListCB);
|
||||
gdi.addButton("AddLine0", "Lägg till rad", editListCB);
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 1, "Underrubrik");
|
||||
@ -174,7 +174,7 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
gdi.dropLine(buttonDrop);
|
||||
}
|
||||
gdi.fillDown();
|
||||
gdi.addButton("AddLine1", "Lägg till rad", editListCB);
|
||||
gdi.addButton("AddLine1", "Lägg till rad", editListCB);
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 1, "Huvudlista");
|
||||
@ -188,7 +188,7 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
gdi.dropLine(buttonDrop);
|
||||
}
|
||||
gdi.fillDown();
|
||||
gdi.addButton("AddLine2", "Lägg till rad", editListCB);
|
||||
gdi.addButton("AddLine2", "Lägg till rad", editListCB);
|
||||
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 1, "Underlista");
|
||||
@ -202,7 +202,7 @@ void ListEditor::show(gdioutput &gdi) {
|
||||
gdi.dropLine(buttonDrop);
|
||||
}
|
||||
gdi.fillDown();
|
||||
gdi.addButton("AddLine3", "Lägg till rad", editListCB);
|
||||
gdi.addButton("AddLine3", "Lägg till rad", editListCB);
|
||||
|
||||
gdi.setRestorePoint("EditList");
|
||||
|
||||
@ -256,7 +256,7 @@ void ListEditor::showLine(gdioutput &gdi, const vector<MetaListPost> &line, int
|
||||
addButton(gdi, line[k], gdi.getCX(), gdi.getCY(), ix, k);
|
||||
}
|
||||
|
||||
gdi.addButton("AddPost" + itos(ix), "Lägg till ny", editListCB);
|
||||
gdi.addButton("AddPost" + itos(ix), "Lägg till ny", editListCB);
|
||||
}
|
||||
|
||||
ButtonInfo &ListEditor::addButton(gdioutput &gdi, const MetaListPost &mlp, int x, int y, int lineIx, int ix) const {
|
||||
@ -414,7 +414,7 @@ int ListEditor::editList(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
wstring str = gdi.getText("Text");
|
||||
if (ptype != lString) {
|
||||
if (!str.empty() && str.find_first_of('X') == string::npos && str[0]!='@') {
|
||||
throw meosException("Texten ska innehålla tecknet X, som byts ut mot tävlingsspecifik data");
|
||||
throw meosException("Texten ska innehålla tecknet X, som byts ut mot tävlingsspecifik data");
|
||||
}
|
||||
}
|
||||
|
||||
@ -440,12 +440,12 @@ int ListEditor::editList(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
if (newType == lResultModuleNumber || newType == lResultModuleTime ||
|
||||
newType == lResultModuleNumberTeam || newType == lResultModuleTimeTeam) {
|
||||
if (leg < 0 || leg > 1000)
|
||||
throw meosException("X är inget giltigt index#" + itos(leg));
|
||||
throw meosException("X är inget giltigt index#" + itos(leg));
|
||||
mlp.setLeg(leg);
|
||||
}
|
||||
else {
|
||||
if (leg < 1 || leg > 1000)
|
||||
throw meosException("X är inget giltigt sträcknummer#" + itos(leg));
|
||||
throw meosException("X är inget giltigt sträcknummer#" + itos(leg));
|
||||
mlp.setLeg(leg - 1);
|
||||
}
|
||||
}
|
||||
@ -623,13 +623,13 @@ int ListEditor::editList(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
reverse(lists.begin(), lists.end());
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("OpenList", 250, 400, editListCB, L"Välj lista:");
|
||||
gdi.addSelection("OpenList", 250, 400, editListCB, L"Välj lista:");
|
||||
gdi.addItem("OpenList", lists);
|
||||
gdi.selectFirstItem("OpenList");
|
||||
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addButton("DoOpen", "Öppna", editListCB);
|
||||
gdi.addButton("DoOpen", "Öppna", editListCB);
|
||||
gdi.addButton("DoOpenCopy", "Open a Copy", editListCB);
|
||||
enableOpen(gdi);
|
||||
|
||||
@ -687,7 +687,7 @@ int ListEditor::editList(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
if (lastSaved == SavedInside)
|
||||
lastSaved = NotSaved;
|
||||
|
||||
gdi.alert("Listan togs bort från tävlingen.");
|
||||
gdi.alert("Listan togs bort från tävlingen.");
|
||||
makeDirty(gdi, MakeDirty, NoTouch);
|
||||
gdi.setInputStatus("RemoveInside", false);
|
||||
}
|
||||
@ -816,8 +816,8 @@ void ListEditor::editListPost(gdioutput &gdi, const MetaListPost &mlp, int id) {
|
||||
gdi.addString("", boldLarge, "Listpost").setColor(colorDarkGrey);
|
||||
gdi.setCX(gdi.getCX() + gdi.scaleLength(20));
|
||||
|
||||
gdi.addButton("MoveLeft", "<< Flytta vänster", editListCB);
|
||||
gdi.addButton("MoveRight", "Flytta höger >>", editListCB);
|
||||
gdi.addButton("MoveLeft", "<< Flytta vänster", editListCB);
|
||||
gdi.addButton("MoveRight", "Flytta höger >>", editListCB);
|
||||
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
@ -846,7 +846,7 @@ void ListEditor::editListPost(gdioutput &gdi, const MetaListPost &mlp, int id) {
|
||||
gdi.addSelection("Type", 290, 500, editListCB, L"Typ:");
|
||||
gdi.addItem("Type", types);
|
||||
gdi.selectItemByData("Type", currentType);
|
||||
gdi.addInput("Text", mlp.getText(), 16, 0, L"Egen text:", L"Använd symbolen X där MeOS ska fylla i typens data.");
|
||||
gdi.addInput("Text", mlp.getText(), 16, 0, L"Egen text:", L"Använd symbolen X där MeOS ska fylla i typens data.");
|
||||
int boxX = gdi.getCX();
|
||||
gdi.popX();
|
||||
gdi.fillRight();
|
||||
@ -895,7 +895,7 @@ void ListEditor::editListPost(gdioutput &gdi, const MetaListPost &mlp, int id) {
|
||||
gdi.dropLine(2);
|
||||
if (ix>0) {
|
||||
gdi.popX();
|
||||
gdi.addCheckbox("MergeText", "Slå ihop text med föregående", 0, mlp.isMergePrevious());
|
||||
gdi.addCheckbox("MergeText", "Slå ihop text med föregående", 0, mlp.isMergePrevious());
|
||||
gdi.dropLine(2);
|
||||
}
|
||||
int maxY = gdi.getCY();
|
||||
@ -922,15 +922,15 @@ void ListEditor::editListPost(gdioutput &gdi, const MetaListPost &mlp, int id) {
|
||||
gdi.dropLine(3);
|
||||
|
||||
gdi.addSelection("TextAdjust", 150, 100, 0, L"Textjustering:");
|
||||
gdi.addItem("TextAdjust", lang.tl("Vänster"), 0);
|
||||
gdi.addItem("TextAdjust", lang.tl("Höger"), textRight);
|
||||
gdi.addItem("TextAdjust", lang.tl("Vänster"), 0);
|
||||
gdi.addItem("TextAdjust", lang.tl("Höger"), textRight);
|
||||
gdi.addItem("TextAdjust", lang.tl("Centrera"), textCenter);
|
||||
gdi.selectItemByData("TextAdjust", mlp.getTextAdjustNum());
|
||||
|
||||
//gdi.popX();
|
||||
//gdi.dropLine(2);
|
||||
gdi.dropLine();
|
||||
gdi.addButton("Color", "Färg...", editListCB).setExtra(mlp.getColorValue());
|
||||
gdi.addButton("Color", "Färg...", editListCB).setExtra(mlp.getColorValue());
|
||||
|
||||
|
||||
maxX = max(maxX, gdi.getCX());
|
||||
@ -970,7 +970,7 @@ const wchar_t *ListEditor::getIndexDescription(EPostType type) {
|
||||
else if (type == lResultModuleNumber || type == lResultModuleNumberTeam)
|
||||
return L"Index in X[index]#OutputNumbers";
|
||||
else
|
||||
return L"Applicera för specifik sträcka:";
|
||||
return L"Applicera för specifik sträcka:";
|
||||
}
|
||||
|
||||
void ListEditor::editListProp(gdioutput &gdi, bool newList) {
|
||||
@ -1022,7 +1022,7 @@ void ListEditor::editListProp(gdioutput &gdi, bool newList) {
|
||||
gdi.autoGrow("BaseType");
|
||||
|
||||
list.getResultModule(*oe, types, currentType);
|
||||
gdi.addSelection("ResultType", 150, 400, editListCB, L"Resultatuträkning:");
|
||||
gdi.addSelection("ResultType", 150, 400, editListCB, L"Resultatuträkning:");
|
||||
gdi.addItem("ResultType", types);
|
||||
gdi.autoGrow("ResultType");
|
||||
gdi.selectItemByData("ResultType", currentType);
|
||||
@ -1035,7 +1035,7 @@ void ListEditor::editListProp(gdioutput &gdi, bool newList) {
|
||||
gdi.selectItemByData("SortOrder", currentType);
|
||||
|
||||
list.getSubType(types, currentType);
|
||||
gdi.addSelection("SubType", 150, 400, editListCB, L"Sekundär typ:");
|
||||
gdi.addSelection("SubType", 150, 400, editListCB, L"Sekundär typ:");
|
||||
gdi.addItem("SubType", types);
|
||||
gdi.selectItemByData("SubType", currentType);
|
||||
oListInfo::EBaseType subType = oListInfo::EBaseType(currentType);
|
||||
@ -1117,9 +1117,9 @@ void ListEditor::editListProp(gdioutput &gdi, bool newList) {
|
||||
gdi.setCX(gdi.getCX()+20);
|
||||
int f = list.getFontFaceFactor(k);
|
||||
wstring ff = f == 0 ? L"100 %" : itow(f) + L" %";
|
||||
gdi.addInput("FontFactor" + itos(k), ff, 4, 0, L"Skalfaktor", L"Relativ skalfaktor för typsnittets storlek i procent");
|
||||
gdi.addInput("FontFactor" + itos(k), ff, 4, 0, L"Skalfaktor", L"Relativ skalfaktor för typsnittets storlek i procent");
|
||||
f = list.getExtraSpace(k);
|
||||
gdi.addInput("ExtraSpace" + itos(k), itow(f), 4, 0, L"Avstånd", L"Extra avstånd ovanför textblock");
|
||||
gdi.addInput("ExtraSpace" + itos(k), itow(f), 4, 0, L"Avstånd", L"Extra avstånd ovanför textblock");
|
||||
if (k == 1) {
|
||||
gdi.dropLine(3);
|
||||
gdi.popX();
|
||||
@ -1184,7 +1184,7 @@ void ListEditor::makeDirty(gdioutput &gdi, DirtyFlag inside, DirtyFlag outside)
|
||||
|
||||
bool ListEditor::checkSave(gdioutput &gdi) {
|
||||
if (dirtyInt || dirtyExt) {
|
||||
gdioutput::AskAnswer answer = gdi.askCancel(L"Vill du spara ändringar?");
|
||||
gdioutput::AskAnswer answer = gdi.askCancel(L"Vill du spara ändringar?");
|
||||
if (answer == gdioutput::AnswerCancel)
|
||||
return false;
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/********************i****************************************************
|
||||
/********************i****************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "oListInfo.h"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include <map>
|
||||
|
||||
@ -66,6 +66,7 @@
|
||||
#include "restserver.h"
|
||||
#include "autocomplete.h"
|
||||
#include "image.h"
|
||||
#include "csvparser.h"
|
||||
|
||||
int defaultCodePage = 1252;
|
||||
|
||||
@ -214,7 +215,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
ShowWindow(hSplash, SW_SHOW);
|
||||
UpdateWindow(hSplash);
|
||||
}
|
||||
|
||||
DWORD splashStart = GetTickCount();
|
||||
|
||||
for (int k = 0; k < 100; k++) {
|
||||
@ -234,6 +234,17 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
StringCache::getInstance().init();
|
||||
|
||||
GetCurrentDirectory(MAX_PATH, programPath);
|
||||
bool utfRecode = false;
|
||||
if (utfRecode) {
|
||||
vector<wstring> dyn;
|
||||
|
||||
expandDirectory(L".", L"*.cpp", dyn);
|
||||
expandDirectory(L".", L"*.h", dyn);
|
||||
expandDirectory(L"./meosdb", L"*.cpp", dyn);
|
||||
expandDirectory(L"./meosdb", L"*.h", dyn);
|
||||
for (auto &f : dyn)
|
||||
csvparser::convertUTF(f);
|
||||
}
|
||||
|
||||
GetModuleFileName(NULL, exePath, MAX_PATH);
|
||||
int lastDiv = -1;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#if !defined(AFX_MEOS_H__7F8E5F23_ADD4_45AB_9626_7378FEA38D49__INCLUDED_)
|
||||
#if !defined(AFX_MEOS_H__7F8E5F23_ADD4_45AB_9626_7378FEA38D49__INCLUDED_)
|
||||
#define AFX_MEOS_H__7F8E5F23_ADD4_45AB_9626_7378FEA38D49__INCLUDED_
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -1132,70 +1132,70 @@ int toLowerStripped(wchar_t c) {
|
||||
for (int i = 0; i < 65536; i++)
|
||||
map[i] = i;
|
||||
|
||||
setChar(map, L'Å', L'å');
|
||||
setChar(map, L'Ä', L'ä');
|
||||
setChar(map, L'Ö', L'ö');
|
||||
setChar(map, L'Å', L'å');
|
||||
setChar(map, L'Ä', L'ä');
|
||||
setChar(map, L'Ö', L'ö');
|
||||
|
||||
setChar(map, L'É', L'e');
|
||||
setChar(map, L'é', L'e');
|
||||
setChar(map, L'è', L'e');
|
||||
setChar(map, L'È', L'e');
|
||||
setChar(map, L'ë', L'e');
|
||||
setChar(map, L'Ë', L'e');
|
||||
setChar(map, L'ê', L'e');
|
||||
setChar(map, L'Ê', L'e');
|
||||
setChar(map, L'É', L'e');
|
||||
setChar(map, L'é', L'e');
|
||||
setChar(map, L'è', L'e');
|
||||
setChar(map, L'È', L'e');
|
||||
setChar(map, L'ë', L'e');
|
||||
setChar(map, L'Ë', L'e');
|
||||
setChar(map, L'ê', L'e');
|
||||
setChar(map, L'Ê', L'e');
|
||||
|
||||
setChar(map, L'û', L'u');
|
||||
setChar(map, L'Û', L'u');
|
||||
setChar(map, L'ü', L'u');
|
||||
setChar(map, L'Ü', L'u');
|
||||
setChar(map, L'ú', L'u');
|
||||
setChar(map, L'Ú', L'u');
|
||||
setChar(map, L'ù', L'u');
|
||||
setChar(map, L'Ù', L'u');
|
||||
setChar(map, L'û', L'u');
|
||||
setChar(map, L'Û', L'u');
|
||||
setChar(map, L'ü', L'u');
|
||||
setChar(map, L'Ü', L'u');
|
||||
setChar(map, L'ú', L'u');
|
||||
setChar(map, L'Ú', L'u');
|
||||
setChar(map, L'ù', L'u');
|
||||
setChar(map, L'Ù', L'u');
|
||||
|
||||
setChar(map, L'ñ', L'n');
|
||||
setChar(map, L'Ñ', L'n');
|
||||
setChar(map, L'ñ', L'n');
|
||||
setChar(map, L'Ñ', L'n');
|
||||
|
||||
setChar(map, L'á', L'a');
|
||||
setChar(map, L'Á', L'a');
|
||||
setChar(map, L'à', L'a');
|
||||
setChar(map, L'À', L'a');
|
||||
setChar(map, L'â', L'a');
|
||||
setChar(map, L'Â', L'a');
|
||||
setChar(map, L'ã', L'a');
|
||||
setChar(map, L'Ã', L'a');
|
||||
setChar(map, L'á', L'a');
|
||||
setChar(map, L'Á', L'a');
|
||||
setChar(map, L'à', L'a');
|
||||
setChar(map, L'À', L'a');
|
||||
setChar(map, L'â', L'a');
|
||||
setChar(map, L'Â', L'a');
|
||||
setChar(map, L'ã', L'a');
|
||||
setChar(map, L'Ã', L'a');
|
||||
|
||||
setChar(map, L'ï', L'i');
|
||||
setChar(map, L'Ï', L'i');
|
||||
setChar(map, L'î', L'i');
|
||||
setChar(map, L'Î', L'i');
|
||||
setChar(map, L'í', L'i');
|
||||
setChar(map, L'Í', L'i');
|
||||
setChar(map, L'ì', L'i');
|
||||
setChar(map, L'Ì', L'i');
|
||||
setChar(map, L'ï', L'i');
|
||||
setChar(map, L'Ï', L'i');
|
||||
setChar(map, L'î', L'i');
|
||||
setChar(map, L'Î', L'i');
|
||||
setChar(map, L'í', L'i');
|
||||
setChar(map, L'Í', L'i');
|
||||
setChar(map, L'ì', L'i');
|
||||
setChar(map, L'Ì', L'i');
|
||||
|
||||
setChar(map, L'ó', L'o');
|
||||
setChar(map, L'Ó', L'o');
|
||||
setChar(map, L'ò', L'o');
|
||||
setChar(map, L'Ò', L'o');
|
||||
setChar(map, L'õ', L'o');
|
||||
setChar(map, L'Õ', L'o');
|
||||
setChar(map, L'ô', L'o');
|
||||
setChar(map, L'Ô', L'o');
|
||||
setChar(map, L'ó', L'o');
|
||||
setChar(map, L'Ó', L'o');
|
||||
setChar(map, L'ò', L'o');
|
||||
setChar(map, L'Ò', L'o');
|
||||
setChar(map, L'õ', L'o');
|
||||
setChar(map, L'Õ', L'o');
|
||||
setChar(map, L'ô', L'o');
|
||||
setChar(map, L'Ô', L'o');
|
||||
|
||||
setChar(map, L'ý', L'y');
|
||||
setChar(map, L'Ý', L'Y');
|
||||
setChar(map, L'ÿ', L'y');
|
||||
setChar(map, L'ý', L'y');
|
||||
setChar(map, L'Ý', L'Y');
|
||||
setChar(map, L'ÿ', L'y');
|
||||
|
||||
setChar(map, L'Æ', L'ä');
|
||||
setChar(map, L'æ', L'ä');
|
||||
setChar(map, L'Æ', L'ä');
|
||||
setChar(map, L'æ', L'ä');
|
||||
|
||||
setChar(map, L'Ø', L'ö');
|
||||
setChar(map, L'ø', L'ö');
|
||||
setChar(map, L'Ø', L'ö');
|
||||
setChar(map, L'ø', L'ö');
|
||||
|
||||
setChar(map, L'Ç', L'c');
|
||||
setChar(map, L'ç', L'c');
|
||||
setChar(map, L'Ç', L'c');
|
||||
setChar(map, L'ç', L'c');
|
||||
}
|
||||
int a = map[c];
|
||||
return a;
|
||||
@ -1395,7 +1395,7 @@ static void decomposeClassName(const wstring &name, vector<wstring> &dec) {
|
||||
sort(dec.begin(), dec.end());
|
||||
}
|
||||
|
||||
/** Matches H21 L with H21 Lång and H21L
|
||||
/** Matches H21 L with H21 Lång and H21L
|
||||
but not Violet with Violet Court, which is obviously wrong.
|
||||
*/
|
||||
bool compareClassName(const wstring &a, const wstring &b)
|
||||
@ -1782,23 +1782,23 @@ wstring makeValidFileName(const wstring &input, bool strict) {
|
||||
|
||||
if (b >= 'a' && b <= 'z')
|
||||
b = b;
|
||||
else if ( b == L'ö')
|
||||
else if ( b == L'ö')
|
||||
b = 'o';
|
||||
else if (b == L'ä' || b == L'å' || b== L'à' || b == L'á' || b == L'â' || b == L'ã' || b == L'æ')
|
||||
else if (b == L'ä' || b == L'å' || b== L'à' || b == L'á' || b == L'â' || b == L'ã' || b == L'æ')
|
||||
b = 'a';
|
||||
else if (b == L'ç')
|
||||
else if (b == L'ç')
|
||||
b = 'c';
|
||||
else if (b == L'è' || b == L'é' || b == L'ê' || b == L'ë')
|
||||
else if (b == L'è' || b == L'é' || b == L'ê' || b == L'ë')
|
||||
b = 'e';
|
||||
else if (b == L'ð')
|
||||
else if (b == L'ð')
|
||||
b = 't';
|
||||
else if (b == L'ï' || b == L'ì' || b == L'ï' || b == L'î' || b == L'í')
|
||||
else if (b == L'ï' || b == L'ì' || b == L'ï' || b == L'î' || b == L'í')
|
||||
b = 'i';
|
||||
else if (b == L'ò' || b == L'ó' || b == L'ô' || b == L'õ' || b == L'ø')
|
||||
else if (b == L'ò' || b == L'ó' || b == L'ô' || b == L'õ' || b == L'ø')
|
||||
b = 'o';
|
||||
else if (b == L'ù' || b == L'ú' || b == L'û' || b == L'ü')
|
||||
else if (b == L'ù' || b == L'ú' || b == L'û' || b == L'ü')
|
||||
b = 'u';
|
||||
else if (b == L'ý')
|
||||
else if (b == L'ý')
|
||||
b = 'y';
|
||||
else
|
||||
b = '-';
|
||||
@ -2191,7 +2191,7 @@ void checkWriteAccess(const wstring &file) {
|
||||
wchar_t absPath[260];
|
||||
_wfullpath(absPath, file.c_str(), 260);
|
||||
|
||||
throw meosException(wstring(L"Du saknar behörighet att skriva till 'X'.#") + absPath);
|
||||
throw meosException(wstring(L"Du saknar behörighet att skriva till 'X'.#") + absPath);
|
||||
}
|
||||
CloseHandle(h);
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -160,7 +160,7 @@ wstring getMeosFullVersion();
|
||||
wstring getMajorVersion();
|
||||
wstring getMeosCompectVersion();
|
||||
|
||||
void getSupporters(vector<wstring> &supp);
|
||||
void getSupporters(vector<wstring> &supp, vector<wstring> developSupp);
|
||||
|
||||
int countWords(const wchar_t *p);
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -27,7 +27,6 @@
|
||||
#include <cassert>
|
||||
#include <typeinfo>
|
||||
|
||||
|
||||
#include "MeosSQL.h"
|
||||
|
||||
#include "../oRunner.h"
|
||||
@ -122,14 +121,15 @@ string C_START_noid(string name)
|
||||
|
||||
string C_END()
|
||||
{
|
||||
return " Modified TIMESTAMP, Counter INT UNSIGNED NOT NULL DEFAULT 0, "
|
||||
return " Modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
||||
"Counter INT UNSIGNED NOT NULL DEFAULT 0, "
|
||||
"INDEX(Counter), INDEX(Modified), Removed BOOL NOT NULL DEFAULT 0) "
|
||||
"ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci";
|
||||
}
|
||||
|
||||
string C_END_noindex()
|
||||
{
|
||||
return " Modified TIMESTAMP) "
|
||||
return " Modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) "
|
||||
"ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci";
|
||||
}
|
||||
|
||||
@ -175,7 +175,7 @@ bool MeosSQL::listCompetitions(oEvent *oe, bool keepConnection) {
|
||||
string serverInfo = con.server_info();
|
||||
|
||||
if (serverInfo < "5.0.3") {
|
||||
errorMessage = "Minst MySQL X krävs. Du använder version Y.#5.0.3#" + serverInfo;
|
||||
errorMessage = "Minst MySQL X krävs. Du använder version Y.#5.0.3#" + serverInfo;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -419,9 +419,9 @@ bool MeosSQL::openDB(oEvent *oe)
|
||||
try{
|
||||
con.select_db("MeOSMain");
|
||||
}
|
||||
catch (const mysqlpp::Exception& er){
|
||||
alert(string(er.what()) + " MySQL Error. Select MeosMain");
|
||||
catch (const mysqlpp::Exception& er) {
|
||||
setDefaultDB();
|
||||
alert(string(er.what()) + " MySQL Error. Select MeosMain");
|
||||
return 0;
|
||||
}
|
||||
monitorId=0;
|
||||
@ -718,8 +718,8 @@ OpFailStatus MeosSQL::SyncUpdate(oEvent *oe)
|
||||
//syncUpdate(queryset, "oEvent", oe, true);
|
||||
}
|
||||
catch (const mysqlpp::Exception& er){
|
||||
alert(string(er.what())+" [UPDATING oEvent]");
|
||||
setDefaultDB();
|
||||
alert(string(er.what()) + " [UPDATING oEvent]");
|
||||
return opStatusFail;
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2012 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#pragma warning( disable : 4251)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// dllmain.cpp : Defines the entry point for the DLL application.
|
||||
// dllmain.cpp : Defines the entry point for the DLL application.
|
||||
#include "stdafx.h"
|
||||
|
||||
BOOL APIENTRY DllMain( HMODULE hModule,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// The following ifdef block is the standard way of creating macros which make exporting
|
||||
// The following ifdef block is the standard way of creating macros which make exporting
|
||||
// from a DLL simpler. All files within this DLL are compiled with the MEOSDB_EXPORTS
|
||||
// symbol defined on the command line. this symbol should not be defined on any project
|
||||
// that uses this DLL. This way any other project whose source files include this file see
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
@ -17,7 +17,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// meosdb.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
const string _NoClub="Klubblös";
|
||||
const string _NoClub="Klubblös";
|
||||
const string _EmptyString="";
|
||||
const string _VacantName="Vakant";
|
||||
const string _UnkownName="N.N.";
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "meos_util.h"
|
||||
|
||||
@ -133,6 +133,9 @@
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\Release/meos.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<Manifest>
|
||||
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
@ -189,6 +192,9 @@
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\Debug/meos.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<Manifest>
|
||||
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='test|Win32'">
|
||||
<Midl>
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
//V33: abcde
|
||||
//V35: abcdef
|
||||
int getMeosBuild() {
|
||||
string revision("$Rev: 686 $");
|
||||
string revision("$Rev: 706 $");
|
||||
return 174 + atoi(revision.substr(5, string::npos).c_str());
|
||||
}
|
||||
|
||||
@ -41,12 +41,12 @@ int getMeosBuild() {
|
||||
//V33: abcdefghij
|
||||
//V34: abcdfge
|
||||
wstring getMeosDate() {
|
||||
wstring date(L"$Date: 2018-04-17 21:45:35 +0200 (ti, 17 apr 2018) $");
|
||||
wstring date(L"$Date: 2018-05-20 12:07:24 +0200 (sö, 20 maj 2018) $");
|
||||
return date.substr(7,10);
|
||||
}
|
||||
|
||||
wstring getBuildType() {
|
||||
return L""; // No parantheses (...)
|
||||
return L"U1"; // No parantheses (...)
|
||||
}
|
||||
|
||||
wstring getMajorVersion() {
|
||||
@ -70,124 +70,128 @@ wstring getMeosCompectVersion() {
|
||||
return getMajorVersion() + L"." + itow(getMeosBuild()) + L" (" + getBuildType() + L")";
|
||||
}
|
||||
|
||||
void getSupporters(vector<wstring> &supp)
|
||||
void getSupporters(vector<wstring> &supp, vector<wstring> developSupp)
|
||||
{
|
||||
supp.push_back(L"Centrum OK");
|
||||
supp.push_back(L"Ove Persson, Piteå IF");
|
||||
supp.push_back(L"OK Rodhen");
|
||||
supp.push_back(L"Täby Extreme Challenge");
|
||||
supp.push_back(L"Thomas Engberg, VK Uvarna");
|
||||
supp.push_back(L"Eilert Edin, Sidensjö IK");
|
||||
supp.push_back(L"Göran Nordh, Trollhättans SK");
|
||||
supp.push_back(L"Roger Gustavsson, OK Tisaren");
|
||||
supp.push_back(L"Sundsvalls OK");
|
||||
supp.push_back(L"OK Gipens OL-skytte");
|
||||
supp.push_back(L"Helsingborgs SOK");
|
||||
supp.push_back(L"OK Gipens OL-skytte");
|
||||
supp.push_back(L"Rune Thurén, Vallentuna-Össeby OL");
|
||||
supp.push_back(L"Roland Persson, Kalmar OK");
|
||||
supp.push_back(L"Robert Jessen, Främmestads IK");
|
||||
supp.push_back(L"Anders Platt, Järla Orientering");
|
||||
supp.push_back(L"Almby IK, Örebro");
|
||||
supp.push_back(L"Peter Rydesäter, Rehns BK");
|
||||
supp.push_back(L"IK Hakarpspojkarna");
|
||||
supp.push_back(L"Rydboholms SK");
|
||||
supp.push_back(L"IFK Kiruna");
|
||||
supp.push_back(L"Peter Andersson, Söders SOL");
|
||||
supp.push_back(L"Björkfors GoIF");
|
||||
supp.push_back(L"OK Ziemelkurzeme");
|
||||
supp.push_back(L"Big Foot Orienteers");
|
||||
supp.push_back(L"FIF Hillerød");
|
||||
supp.push_back(L"Anne Udd");
|
||||
supp.push_back(L"OK Orinto");
|
||||
supp.push_back(L"SOK Träff");
|
||||
supp.push_back(L"Gamleby OK");
|
||||
supp.push_back(L"Vänersborgs SK");
|
||||
supp.push_back(L"Henrik Ortman, Västerås SOK");
|
||||
supp.push_back(L"Leif Olofsson, Sjuntorp");
|
||||
supp.push_back(L"Vallentuna/Össeby OL");
|
||||
supp.push_back(L"Oskarström OK");
|
||||
supp.push_back(L"Skogslöparna");
|
||||
supp.push_back(L"OK Milan");
|
||||
supp.push_back(L"Tjalve IF");
|
||||
supp.push_back(L"OK Skärmen");
|
||||
supp.push_back(L"Østkredsen");
|
||||
supp.push_back(L"OK Roskilde");
|
||||
supp.push_back(L"Holbæk Orienteringsklub");
|
||||
supp.push_back(L"Bodens BK");
|
||||
supp.push_back(L"OK Tyr, Karlstad");
|
||||
supp.push_back(L"Göteborg-Majorna OK");
|
||||
supp.push_back(L"OK Järnbärarna, Kopparberg");
|
||||
supp.push_back(L"FK Åsen");
|
||||
supp.push_back(L"Ballerup OK");
|
||||
supp.push_back(L"Olivier Benevello, Valbonne SAO");
|
||||
supp.push_back(L"Tommy Wåhlin, OK Enen");
|
||||
supp.push_back(L"Hjobygdens OK");
|
||||
supp.push_back(L"Tisvilde Hegn OK");
|
||||
supp.push_back(L"Lindebygdens OK");
|
||||
supp.push_back(L"OK Flundrehof");
|
||||
supp.push_back(L"Vittjärvs IK");
|
||||
supp.push_back(L"Annebergs GIF");
|
||||
supp.push_back(L"Lars-Eric Gahlin, Östersunds OK");
|
||||
supp.push_back(L"Sundsvalls OK:s Veteraner");
|
||||
supp.push_back(L"OK Skogshjortarna");
|
||||
supp.push_back(L"Kinnaströms SK");
|
||||
supp.push_back(L"OK Pan Århus");
|
||||
supp.push_back(L"Jan Ernberg, Täby OK");
|
||||
supp.push_back(L"Stjärnorps SK");
|
||||
supp.push_back(L"Mölndal Outdoor IF");
|
||||
supp.push_back(L"Roland Elg, Fjärås AIK");
|
||||
supp.push_back(L"Tenhults SOK");
|
||||
supp.push_back(L"Järfälla OK");
|
||||
supp.push_back(L"Lars Jonasson");
|
||||
supp.push_back(L"Anders Larsson, OK Nackhe");
|
||||
supp.push_back(L"Hans Wilhelmsson");
|
||||
supp.push_back(L"Patrice Lavallee, Noyon Course d'Orientation");
|
||||
supp.push_back(L"IFK Linköpings OS");
|
||||
supp.push_back(L"Lars Ove Karlsson, Västerås SOK");
|
||||
supp.push_back(L"OK Djerf");
|
||||
supp.push_back(L"OK Vivill");
|
||||
supp.push_back(L"IFK Mora OK");
|
||||
supp.push_back(L"Sonny Andersson, Huskvarna");
|
||||
supp.push_back(L"Hässleholms OK Skolorientering");
|
||||
supp.push_back(L"IBM-klubben Orientering");
|
||||
supp.push_back(L"OK Øst, Birkerød");
|
||||
supp.push_back(L"OK Klemmingen");
|
||||
supp.push_back(L"Hans Johansson");
|
||||
supp.push_back(L"KOB Kysak");
|
||||
supp.push_back(L"Per Ivarsson, Trollhättans SOK");
|
||||
supp.push_back(L"Sergio Yañez, ABC TRAIL");
|
||||
supp.push_back(L"Western Race Services");
|
||||
supp.push_back(L"IK Gandvik, Skara");
|
||||
supp.push_back(L"IK Stern");
|
||||
supp.push_back(L"OK Roslagen");
|
||||
supp.push_back(L"TSV Malente");
|
||||
supp.push_back(L"Emmaboda Verda OK");
|
||||
supp.push_back(L"KOB ATU Košice");
|
||||
supp.push_back(L"Gävle OK");
|
||||
supp.push_back(L"Kenneth Gattmalm, Jönköpings OK");
|
||||
supp.push_back(L"Søllerød OK");
|
||||
supp.push_back(L"O-travel");
|
||||
supp.push_back(L"Bengt Bengtsson");
|
||||
supp.push_back(L"OK Landehof");
|
||||
supp.push_back(L"OK Orinto");
|
||||
supp.push_back(L"Bredaryds SOK");
|
||||
supp.push_back(L"Thore Nilsson, Uddevalla OK");
|
||||
supp.push_back(L"Timrå SOK");
|
||||
supp.push_back(L"Åke Larsson, OK Hedströmmen");
|
||||
supp.push_back(L"Avesta OK");
|
||||
supp.push_back(L"Motionsorientering Göteborg");
|
||||
supp.push_back(L"OK Måsen");
|
||||
supp.push_back(L"IF Thor");
|
||||
supp.push_back(L"SOS Jindřichův Hradec");
|
||||
supp.push_back(L"Mats Holmberg, OK Gränsen");
|
||||
supp.push_back(L"Christoffer Ohlsson, Uddevalla OK");
|
||||
supp.push_back(L"O-Ringen AB");
|
||||
supp.push_back(L"Hans Carlstedt, Sävedalens AIK");
|
||||
supp.push_back(L"Attunda OK");
|
||||
supp.push_back(L"Siguldas Takas, Latvia");
|
||||
supp.push_back(L"Eric Teutsch, Ottawa Orienteering Club, Canada");
|
||||
supp.push_back(L"Silkeborg OK, Denmark");
|
||||
supp.push_back(L"Erik Ivarsson Sandberg");
|
||||
supp.push_back(L"Stenungsunds OK");
|
||||
supp.emplace_back(L"Centrum OK");
|
||||
supp.emplace_back(L"Ove Persson, Piteå IF");
|
||||
supp.emplace_back(L"OK Rodhen");
|
||||
supp.emplace_back(L"Täby Extreme Challenge");
|
||||
supp.emplace_back(L"Thomas Engberg, VK Uvarna");
|
||||
supp.emplace_back(L"Eilert Edin, Sidensjö IK");
|
||||
supp.emplace_back(L"Göran Nordh, Trollhättans SK");
|
||||
supp.emplace_back(L"Roger Gustavsson, OK Tisaren");
|
||||
supp.emplace_back(L"Sundsvalls OK");
|
||||
supp.emplace_back(L"OK Gipens OL-skytte");
|
||||
supp.emplace_back(L"Helsingborgs SOK");
|
||||
supp.emplace_back(L"OK Gipens OL-skytte");
|
||||
supp.emplace_back(L"Rune Thurén, Vallentuna-Össeby OL");
|
||||
supp.emplace_back(L"Roland Persson, Kalmar OK");
|
||||
supp.emplace_back(L"Robert Jessen, Främmestads IK");
|
||||
supp.emplace_back(L"Anders Platt, Järla Orientering");
|
||||
supp.emplace_back(L"Almby IK, Örebro");
|
||||
supp.emplace_back(L"Peter Rydesäter, Rehns BK");
|
||||
supp.emplace_back(L"IK Hakarpspojkarna");
|
||||
supp.emplace_back(L"Rydboholms SK");
|
||||
supp.emplace_back(L"IFK Kiruna");
|
||||
supp.emplace_back(L"Peter Andersson, Söders SOL");
|
||||
supp.emplace_back(L"Björkfors GoIF");
|
||||
supp.emplace_back(L"OK Ziemelkurzeme");
|
||||
supp.emplace_back(L"Big Foot Orienteers");
|
||||
supp.emplace_back(L"FIF Hillerød");
|
||||
supp.emplace_back(L"Anne Udd");
|
||||
supp.emplace_back(L"OK Orinto");
|
||||
supp.emplace_back(L"SOK Träff");
|
||||
supp.emplace_back(L"Gamleby OK");
|
||||
supp.emplace_back(L"Vänersborgs SK");
|
||||
supp.emplace_back(L"Henrik Ortman, Västerås SOK");
|
||||
supp.emplace_back(L"Leif Olofsson, Sjuntorp");
|
||||
supp.emplace_back(L"Vallentuna/Össeby OL");
|
||||
supp.emplace_back(L"Oskarström OK");
|
||||
supp.emplace_back(L"Skogslöparna");
|
||||
supp.emplace_back(L"OK Milan");
|
||||
supp.emplace_back(L"Tjalve IF");
|
||||
supp.emplace_back(L"OK Skärmen");
|
||||
supp.emplace_back(L"Østkredsen");
|
||||
supp.emplace_back(L"OK Roskilde");
|
||||
supp.emplace_back(L"Holbæk Orienteringsklub");
|
||||
supp.emplace_back(L"Bodens BK");
|
||||
supp.emplace_back(L"OK Tyr, Karlstad");
|
||||
supp.emplace_back(L"Göteborg-Majorna OK");
|
||||
supp.emplace_back(L"OK Järnbärarna, Kopparberg");
|
||||
supp.emplace_back(L"FK Åsen");
|
||||
supp.emplace_back(L"Ballerup OK");
|
||||
supp.emplace_back(L"Olivier Benevello, Valbonne SAO");
|
||||
supp.emplace_back(L"Tommy Wåhlin, OK Enen");
|
||||
supp.emplace_back(L"Hjobygdens OK");
|
||||
supp.emplace_back(L"Tisvilde Hegn OK");
|
||||
supp.emplace_back(L"Lindebygdens OK");
|
||||
supp.emplace_back(L"OK Flundrehof");
|
||||
supp.emplace_back(L"Vittjärvs IK");
|
||||
supp.emplace_back(L"Annebergs GIF");
|
||||
supp.emplace_back(L"Lars-Eric Gahlin, Östersunds OK");
|
||||
supp.emplace_back(L"Sundsvalls OK:s Veteraner");
|
||||
supp.emplace_back(L"OK Skogshjortarna");
|
||||
supp.emplace_back(L"Kinnaströms SK");
|
||||
supp.emplace_back(L"OK Pan Århus");
|
||||
supp.emplace_back(L"Jan Ernberg, Täby OK");
|
||||
supp.emplace_back(L"Stjärnorps SK");
|
||||
supp.emplace_back(L"Mölndal Outdoor IF");
|
||||
supp.emplace_back(L"Roland Elg, Fjärås AIK");
|
||||
supp.emplace_back(L"Tenhults SOK");
|
||||
supp.emplace_back(L"Järfälla OK");
|
||||
supp.emplace_back(L"Lars Jonasson");
|
||||
supp.emplace_back(L"Anders Larsson, OK Nackhe");
|
||||
supp.emplace_back(L"Hans Wilhelmsson");
|
||||
supp.emplace_back(L"Patrice Lavallee, Noyon Course d'Orientation");
|
||||
supp.emplace_back(L"IFK Linköpings OS");
|
||||
supp.emplace_back(L"Lars Ove Karlsson, Västerås SOK");
|
||||
supp.emplace_back(L"OK Djerf");
|
||||
supp.emplace_back(L"OK Vivill");
|
||||
supp.emplace_back(L"IFK Mora OK");
|
||||
supp.emplace_back(L"Sonny Andersson, Huskvarna");
|
||||
supp.emplace_back(L"Hässleholms OK Skolorientering");
|
||||
supp.emplace_back(L"IBM-klubben Orientering");
|
||||
supp.emplace_back(L"OK Øst, Birkerød");
|
||||
supp.emplace_back(L"OK Klemmingen");
|
||||
supp.emplace_back(L"Hans Johansson");
|
||||
supp.emplace_back(L"KOB Kysak");
|
||||
supp.emplace_back(L"Per Ivarsson, Trollhättans SOK");
|
||||
supp.emplace_back(L"Sergio Yañez, ABC TRAIL");
|
||||
supp.emplace_back(L"Western Race Services");
|
||||
supp.emplace_back(L"IK Gandvik, Skara");
|
||||
supp.emplace_back(L"IK Stern");
|
||||
supp.emplace_back(L"OK Roslagen");
|
||||
supp.emplace_back(L"TSV Malente");
|
||||
supp.emplace_back(L"Emmaboda Verda OK");
|
||||
supp.emplace_back(L"KOB ATU Košice");
|
||||
supp.emplace_back(L"Gävle OK");
|
||||
supp.emplace_back(L"Kenneth Gattmalm, Jönköpings OK");
|
||||
supp.emplace_back(L"Søllerød OK");
|
||||
supp.emplace_back(L"O-travel");
|
||||
supp.emplace_back(L"Bengt Bengtsson");
|
||||
supp.emplace_back(L"OK Landehof");
|
||||
supp.emplace_back(L"OK Orinto");
|
||||
supp.emplace_back(L"Bredaryds SOK");
|
||||
supp.emplace_back(L"Thore Nilsson, Uddevalla OK");
|
||||
supp.emplace_back(L"Timrå SOK");
|
||||
supp.emplace_back(L"Åke Larsson, OK Hedströmmen");
|
||||
supp.emplace_back(L"Avesta OK");
|
||||
supp.emplace_back(L"Motionsorientering Göteborg");
|
||||
supp.emplace_back(L"OK Måsen");
|
||||
supp.emplace_back(L"IF Thor");
|
||||
supp.emplace_back(L"SOS Jindřichův Hradec");
|
||||
supp.emplace_back(L"Mats Holmberg, OK Gränsen");
|
||||
supp.emplace_back(L"Christoffer Ohlsson, Uddevalla OK");
|
||||
supp.emplace_back(L"O-Ringen AB");
|
||||
supp.emplace_back(L"Hans Carlstedt, Sävedalens AIK");
|
||||
supp.emplace_back(L"Attunda OK");
|
||||
supp.emplace_back(L"Siguldas Takas, Latvia");
|
||||
supp.emplace_back(L"Eric Teutsch, Ottawa Orienteering Club, Canada");
|
||||
supp.emplace_back(L"Silkeborg OK, Denmark");
|
||||
supp.emplace_back(L"Erik Ivarsson Sandberg");
|
||||
supp.emplace_back(L"Stenungsunds OK");
|
||||
supp.emplace_back(L"OK Leipzig");
|
||||
supp.emplace_back(L"Degerfors OK");
|
||||
supp.emplace_back(L"OK Tjärnen");
|
||||
//reverse(supp.begin(), supp.end());
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -2254,7 +2254,7 @@ void MetaListContainer::getMergeCandidates(int toMerge, vector< pair<wstring, si
|
||||
continue;
|
||||
|
||||
if (it->second.previousList == 0) {
|
||||
wstring desc = L"Före X#" + it->second.getName();
|
||||
wstring desc = L"Före X#" + it->second.getName();
|
||||
param.push_back(make_pair(lang.tl(desc), MAXLISTPARAMID + it->first));
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
#include "stdafx.h"
|
||||
@ -83,8 +83,8 @@ void MethodEditor::show(gdioutput &gdi) {
|
||||
gdi.dropLine(0.5);
|
||||
gdi.fillRight();
|
||||
|
||||
gdi.addButton("OpenFile", "Importera från fil", methodCB);
|
||||
gdi.addButton("OpenInside", "Öppna", methodCB);
|
||||
gdi.addButton("OpenFile", "Importera från fil", methodCB);
|
||||
gdi.addButton("OpenInside", "Öppna", methodCB);
|
||||
|
||||
if (currentResult) {
|
||||
gdi.addButton("SaveFile", "Exportera till fil...", methodCB);
|
||||
@ -95,7 +95,7 @@ void MethodEditor::show(gdioutput &gdi) {
|
||||
}
|
||||
|
||||
gdi.addButton("NewRules", "New Result Module", methodCB);
|
||||
gdi.addButton("Close", "Stäng", methodCB);
|
||||
gdi.addButton("Close", "Stäng", methodCB);
|
||||
|
||||
#ifdef _DEBUG
|
||||
gdi.addButton("WriteDoc", "#WriteDoc", methodCB);
|
||||
@ -123,7 +123,7 @@ void MethodEditor::show(gdioutput &gdi) {
|
||||
wstring lists = oe->getListContainer().getList(listIx.front()).getListName();
|
||||
if (listIx.size() > 1)
|
||||
lists += L", ...";
|
||||
gdi.addString("", 0, L"Resultatmodulen används i X.#" + lists);
|
||||
gdi.addString("", 0, L"Resultatmodulen används i X.#" + lists);
|
||||
}
|
||||
|
||||
wstring desc = currentResult->getDescription();
|
||||
@ -300,7 +300,7 @@ int MethodEditor::methodCb(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
continue;
|
||||
|
||||
if (utag == DynamicResult::undecorateTag(mtag)) {
|
||||
doUpdate = gdi.ask(L"Vill du uppdatera resultatlistorna i den öppande tävlingen?");
|
||||
doUpdate = gdi.ask(L"Vill du uppdatera resultatlistorna i den öppande tävlingen?");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -388,13 +388,13 @@ int MethodEditor::methodCb(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
}
|
||||
sort(lists.begin(), lists.end());
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("OpenList", 350, 400, methodCB, L"Choose result module:", L"Rader markerade med (*) kommer från en lista i tävlingen.");
|
||||
gdi.addSelection("OpenList", 350, 400, methodCB, L"Choose result module:", L"Rader markerade med (*) kommer från en lista i tävlingen.");
|
||||
gdi.addItem("OpenList", lists);
|
||||
gdi.autoGrow("OpenList");
|
||||
gdi.selectFirstItem("OpenList");
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addButton("DoOpen", "Öppna", methodCB);
|
||||
gdi.addButton("DoOpen", "Öppna", methodCB);
|
||||
gdi.addButton("DoOpenCopy", "Open a Copy", methodCB);
|
||||
|
||||
if (!lists.empty()) {
|
||||
@ -511,7 +511,7 @@ int MethodEditor::methodCb(gdioutput &gdi, int type, BaseInfo &data) {
|
||||
}
|
||||
gdi.fillDown();
|
||||
if (tr.size() + rr.size() == 0) {
|
||||
gdi.addString("", 1, "Tävlingen innehåller inga resultat").setColor(colorRed);
|
||||
gdi.addString("", 1, "Tävlingen innehåller inga resultat").setColor(colorRed);
|
||||
}
|
||||
else
|
||||
gdi.addString("", 1, "Applying rules to the current competition");
|
||||
@ -874,7 +874,7 @@ void MethodEditor::makeDirty(gdioutput &gdi, DirtyFlag inside) {
|
||||
|
||||
bool MethodEditor::checkSave(gdioutput &gdi) {
|
||||
if (dirtyInt) {
|
||||
gdioutput::AskAnswer answer = gdi.askCancel(L"Vill du spara ändringar?");
|
||||
gdioutput::AskAnswer answer = gdi.askCancel(L"Vill du spara ändringar?");
|
||||
if (answer == gdioutput::AnswerCancel)
|
||||
return false;
|
||||
|
||||
@ -1063,6 +1063,6 @@ void MethodEditor::debug(gdioutput &gdi_in, int id, bool isTeam) {
|
||||
currentResult->debugDumpVariables(gdi, false);
|
||||
}
|
||||
|
||||
gdi.addButton("CloseWindow", "Stäng", methodCB);
|
||||
gdi.addButton("CloseWindow", "Stäng", methodCB);
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -18,7 +18,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
/************************************************************************
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2018 Melin Software HB
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Melin Software HB - software@melin.nu - www.melin.nu
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -109,7 +109,7 @@ void MySQLReconnect::process(gdioutput &gdi, oEvent *oe, AutoSyncType ast)
|
||||
interval = 10;
|
||||
}
|
||||
else {
|
||||
gdi.addInfoBox("", L"Återansluten mot databasen, tävlingen synkroniserad.", 10000);
|
||||
gdi.addInfoBox("", L"Återansluten mot databasen, tävlingen synkroniserad.", 10000);
|
||||
timeReconnect = getLocalTime();
|
||||
gdi.setDBErrorState(false);
|
||||
gdi.setWindowTitle(oe->getTitleName());
|
||||
@ -147,14 +147,14 @@ void MySQLReconnect::status(gdioutput &gdi) {
|
||||
if (interval>0){
|
||||
gdi.addStringUT(1, timeError + L": " + lang.tl("DATABASE ERROR")).setColor(colorDarkRed);
|
||||
gdi.fillRight();
|
||||
gdi.addString("", 0, "Nästa försök:");
|
||||
gdi.addString("", 0, "Nästa försök:");
|
||||
gdi.addTimer(gdi.getCY(), gdi.getCX()+10, timerCanBeNegative, (GetTickCount()-timeout)/1000);
|
||||
}
|
||||
else {
|
||||
gdi.addStringUT(0, timeError + L": " + lang.tl("DATABASE ERROR")).setColor(colorDarkGrey);
|
||||
gdi.fillRight();
|
||||
gdi.addStringUT(0, timeReconnect + L":");
|
||||
gdi.addString("", 1, "Återansluten mot databasen, tävlingen synkroniserad.").setColor(colorDarkGreen);
|
||||
gdi.addString("", 1, "Återansluten mot databasen, tävlingen synkroniserad.").setColor(colorDarkGreen);
|
||||
gdi.dropLine();
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user