MeOS version 3.5.860
This commit is contained in:
parent
5327deebbb
commit
b53348f17f
@ -987,20 +987,46 @@ void PunchMachine::process(gdioutput &gdi, oEvent *oe, AutoSyncType ast)
|
||||
{
|
||||
#ifndef MEOSDB
|
||||
SICard sic(ConvertedTimeStatus::Hour24);
|
||||
oe->generateTestCard(sic);
|
||||
SportIdent &si = TabSI::getSI(gdi);
|
||||
if (!sic.empty()) {
|
||||
if (!radio) si.addCard(sic);
|
||||
}
|
||||
else gdi.addInfoBox("", L"Failed to generate card.", interval*2);
|
||||
|
||||
if (radio && !sic.empty()) {
|
||||
pRunner r=oe->getRunnerByCardNo(sic.CardNumber, 0, false);
|
||||
if (r && r->getCardNo()) {
|
||||
sic.CardNumber=r->getCardNo();
|
||||
sic.punchOnly=true;
|
||||
sic.nPunch=1;
|
||||
sic.Punch[0].Code=radio;
|
||||
if (radio == 0) {
|
||||
oe->generateTestCard(sic);
|
||||
if (!sic.empty()) {
|
||||
if (!radio) si.addCard(sic);
|
||||
}
|
||||
else gdi.addInfoBox("", L"Failed to generate card.", interval * 2);
|
||||
}
|
||||
else {
|
||||
SICard sic(ConvertedTimeStatus::Hour24);
|
||||
vector<pRunner> rr;
|
||||
oe->getRunners(0, 0, rr);
|
||||
vector<pRunner> cCand;
|
||||
vector<pFreePunch> pp;
|
||||
for (auto r : rr) {
|
||||
if (r->getStatus() == StatusUnknown && r->startTimeAvailable()) {
|
||||
auto pc = r->getCourse(false);
|
||||
if (radio < 10 || pc->hasControlCode(radio)) {
|
||||
pp.clear();
|
||||
oe->getPunchesForRunner(r->getId(), pp);
|
||||
bool hit = false;
|
||||
for (auto p : pp) {
|
||||
if (p->getTypeCode() == radio)
|
||||
hit = true;
|
||||
}
|
||||
if (!hit)
|
||||
cCand.push_back(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cCand.size() > 0) {
|
||||
int ix = rand() % cCand.size();
|
||||
pRunner r = cCand[ix];
|
||||
sic.convertedTime = ConvertedTimeStatus::Done;
|
||||
sic.CardNumber = r->getCardNo();
|
||||
sic.punchOnly = true;
|
||||
sic.nPunch = 1;
|
||||
sic.Punch[0].Code = radio;
|
||||
sic.Punch[0].Time = 600 + rand() % 1200 + r->getStartTime();
|
||||
si.addCard(sic);
|
||||
}
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ int TabClass::multiCB(gdioutput &gdi, int type, void *data)
|
||||
wstring st=gdi.getText("StartTime");
|
||||
|
||||
int nst = oe->convertAbsoluteTime(st);
|
||||
if (warnDrawStartTime(gdi, nst)) {
|
||||
if (nst >= 0 && warnDrawStartTime(gdi, nst, true)) {
|
||||
nst = 3600;
|
||||
st = oe->getAbsTime(nst);
|
||||
}
|
||||
@ -876,9 +876,11 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
else
|
||||
specs[ci.classId].push_back(cds);
|
||||
|
||||
maxST = max(cds.firstStart + drawInfo.nFields * drawInfo.baseInterval * ci.interval, maxST);
|
||||
}
|
||||
|
||||
if (warnDrawStartTime(gdi, maxST))
|
||||
if (warnDrawStartTime(gdi, maxST, false))
|
||||
return 0;
|
||||
|
||||
for (map<int, vector<ClassDrawSpecification> >::iterator it = specs.begin();
|
||||
@ -1409,7 +1411,7 @@ int TabClass::classCB(gdioutput &gdi, int type, void *data)
|
||||
else if (bi.id=="DoDrawBefore")
|
||||
dtype = oEvent::remainingBefore;
|
||||
else {
|
||||
if (warnDrawStartTime(gdi, t))
|
||||
if (warnDrawStartTime(gdi, t, false))
|
||||
return 0;
|
||||
}
|
||||
//bool pairwise = false;
|
||||
@ -4181,11 +4183,14 @@ void TabClass::setLockForkingState(gdioutput &gdi, bool poolState, bool lockStat
|
||||
|
||||
bool TabClass::warnDrawStartTime(gdioutput &gdi, const wstring &firstStart) {
|
||||
int st = oe->getRelativeTime(firstStart);
|
||||
return warnDrawStartTime(gdi, st);
|
||||
return warnDrawStartTime(gdi, st, false);
|
||||
}
|
||||
|
||||
bool TabClass::warnDrawStartTime(gdioutput &gdi, int time) {
|
||||
if (!hasWarnedStartTime && time > 3600 * 8 && !oe->useLongTimes()) {
|
||||
bool TabClass::warnDrawStartTime(gdioutput &gdi, int time, bool absTime) {
|
||||
if (absTime)
|
||||
time = oe->getRelativeTime(formatTimeHMS(time));
|
||||
|
||||
if (!hasWarnedStartTime && (time > 3600 * 11 && !oe->useLongTimes())) {
|
||||
bool res = gdi.ask(L"warn:latestarttime#" + itow(time/3600));
|
||||
if (res)
|
||||
hasWarnedStartTime = true;
|
||||
|
||||
@ -82,7 +82,7 @@ class TabClass :
|
||||
|
||||
void pursuitDialog(gdioutput &gdi);
|
||||
|
||||
bool warnDrawStartTime(gdioutput &gdi, int time);
|
||||
bool warnDrawStartTime(gdioutput &gdi, int time, bool absTime);
|
||||
bool warnDrawStartTime(gdioutput &gdi, const wstring &firstStart);
|
||||
|
||||
void static clearPage(gdioutput &gdi, bool autoRefresh);
|
||||
|
||||
@ -1710,6 +1710,13 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
else if (bi.id=="DoFreeImport") {
|
||||
fi.addEntries(oe, entries);
|
||||
entryText.clear();
|
||||
|
||||
// Update qualification/final
|
||||
vector<pClass> cls;
|
||||
oe->getClasses(cls, false);
|
||||
for (pClass c : cls) {
|
||||
c->updateFinalClasses(0, false);
|
||||
}
|
||||
loadPage(gdi);
|
||||
}
|
||||
else if (bi.id=="Startlist") {
|
||||
@ -2377,7 +2384,8 @@ void TabCompetition::loadAboutPage(gdioutput &gdi) const
|
||||
"\n\nDanish Translation by Michael Leth Jess and Chris Bagge"
|
||||
"\n\nRussian Translation by Paul A. Kazakov and Albert Salihov"
|
||||
"\n\nOriginal French Translation by Jerome Monclard"
|
||||
"\n\nAdaption to French conditions and extended translation by Pierre Gaufillet");
|
||||
"\n\nAdaption to French conditions and extended translation by Pierre Gaufillet"
|
||||
"\n\nCzech Translation by Marek Kustka");
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 0, "Det här programmet levereras utan någon som helst garanti. Programmet är ");
|
||||
@ -2514,7 +2522,7 @@ bool TabCompetition::loadPage(gdioutput &gdi)
|
||||
gdi.dropLine(1.2);
|
||||
gdi.addCheckbox("LongTimes", "Aktivera stöd för tider över 24 timmar", CompetitionCB, oe->useLongTimes());
|
||||
|
||||
if (oe->isClient()) {
|
||||
if (false && oe->isClient()) {
|
||||
gdi.popX();
|
||||
gdi.disableInput("ZeroTime");
|
||||
gdi.disableInput("LongTimes");
|
||||
@ -3502,6 +3510,12 @@ TabCompetition::FlowOperation TabCompetition::saveEntries(gdioutput &gdi, bool r
|
||||
}
|
||||
}
|
||||
|
||||
// Update qualification/final
|
||||
vector<pClass> cls;
|
||||
oe->getClasses(cls, false);
|
||||
for (pClass c : cls) {
|
||||
c->updateFinalClasses(0, false);
|
||||
}
|
||||
return FlowContinue;
|
||||
}
|
||||
|
||||
|
||||
@ -1124,7 +1124,7 @@ wstring TabCourse::encodeCourse(const wstring &in, bool firstStart, bool lastFin
|
||||
out.reserve(in.length() * 2);
|
||||
wstring bf;
|
||||
for (size_t i = 0; i < newC.size(); ++i) {
|
||||
if (i == 0) {
|
||||
if (i == 0 && (newC.size() > 1 || firstStart)) {
|
||||
out += lang.tl("Start");
|
||||
if (firstStart)
|
||||
out += L"(" + itow(newC[i]) + L")";
|
||||
@ -1141,6 +1141,9 @@ wstring TabCourse::encodeCourse(const wstring &in, bool firstStart, bool lastFin
|
||||
out += dash;
|
||||
|
||||
if (i+1 == newC.size()) {
|
||||
if (i == 0) {
|
||||
out = lang.tl("Start") + dash;
|
||||
}
|
||||
if (lastFinish)
|
||||
out += lang.tl("Mål") + L"(" + itow(newC[i]) + L")";
|
||||
else
|
||||
|
||||
@ -111,9 +111,6 @@ void TabSI::logCard(gdioutput &gdi, const SICard &card)
|
||||
extern SportIdent *gSI;
|
||||
extern pEvent gEvent;
|
||||
|
||||
void LoadRunnerPage(gdioutput &gdi);
|
||||
|
||||
|
||||
int SportIdentCB(gdioutput *gdi, int type, void *data) {
|
||||
TabSI &tsi = dynamic_cast<TabSI &>(*gdi->getTabs().get(TSITab));
|
||||
|
||||
@ -1580,17 +1577,6 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
|
||||
gdi.addInput("C" + itos(i+1), itow(c), 3, 0, L"#C" + itow(i+1));
|
||||
}
|
||||
/*
|
||||
gdi.addInput("C1", "33", 5, 0, "#C1");
|
||||
gdi.addInput("C2", "34", 5, 0, "#C2");
|
||||
gdi.addInput("C3", "45", 5, 0, "#C3");
|
||||
gdi.addInput("C4", "50", 5, 0, "#C4");
|
||||
gdi.addInput("C5", "61", 5, 0, "#C5");
|
||||
gdi.addInput("C6", "62", 5, 0, "#C6");
|
||||
gdi.addInput("C7", "67", 5, 0, "#C7");
|
||||
|
||||
gdi.addInput("C8", "100", 5, 0, "#C8");
|
||||
*/
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addButton("Save", "Bricka", SportIdentCB);
|
||||
@ -1666,7 +1652,7 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
gdi.dropLine(2);
|
||||
gdi.setRestorePoint("SIPageLoaded");
|
||||
|
||||
if (mode==ModeReadOut) {
|
||||
if (mode == ModeReadOut) {
|
||||
gdi.addButton("Import", "Importera från fil...", SportIdentCB);
|
||||
|
||||
gdi.setRestorePoint("Help");
|
||||
@ -1677,7 +1663,7 @@ bool TabSI::loadPage(gdioutput &gdi) {
|
||||
|
||||
gdi.dropLine();
|
||||
}
|
||||
else if (mode==ModeAssignCards) {
|
||||
else if (mode == ModeAssignCards) {
|
||||
gdi.dropLine(1);
|
||||
showAssignCard(gdi, true);
|
||||
}
|
||||
@ -3867,6 +3853,19 @@ void TabSI::handleAutoComplete(gdioutput &gdi, AutoCompleteInfo &info) {
|
||||
directEntryGUI.updateFees(gdi, cls, getThisYear() - year);
|
||||
}
|
||||
}
|
||||
if (r) {
|
||||
if (gdi.hasField("Club") && r->dbe().clubNo) {
|
||||
if (gdi.getText("Club").empty()) {
|
||||
auto pclub = oe->getRunnerDatabase().getClub(r->dbe().clubNo);
|
||||
if (pclub)
|
||||
gdi.setText("Club", pclub->getName());
|
||||
}
|
||||
}
|
||||
if (gdi.hasField("CardNo") && r->dbe().cardNo) {
|
||||
if (gdi.getText("CardNo").empty())
|
||||
gdi.setText("CardNo", r->dbe().cardNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
gdi.clearAutoComplete("");
|
||||
|
||||
@ -31,15 +31,16 @@ class csvparser;
|
||||
struct AutoCompleteRecord;
|
||||
|
||||
class TabSI : public TabBase, AutoCompleteHandler {
|
||||
public:
|
||||
enum SIMode {
|
||||
public:
|
||||
enum SIMode {
|
||||
ModeReadOut,
|
||||
ModeAssignCards,
|
||||
ModeCheckCards,
|
||||
ModeEntry,
|
||||
ModeCardData
|
||||
};
|
||||
|
||||
|
||||
void setMode(SIMode m) { mode = m; }
|
||||
private:
|
||||
/** Try to automatcally assign a class to runner (if none is given)
|
||||
Return true if runner has a class on exist */
|
||||
|
||||
@ -1 +0,0 @@
|
||||
encoding = EASTEUROPE
|
||||
@ -1 +0,0 @@
|
||||
encoding = HEBREW
|
||||
2316
code/czech.lng
Normal file
2316
code/czech.lng
Normal file
File diff suppressed because it is too large
Load Diff
182
code/danish.lng
182
code/danish.lng
@ -16,6 +16,39 @@
|
||||
[Radera] = [Slet]
|
||||
[Uppdaterad anmälan] = [Opdateret tilmelding]
|
||||
[VARNING] ingen/okänd = [ADVARSEL] ingen/ukendt
|
||||
ÅÅÅÅ-MM-DD = ÅÅÅÅ-MM-DD
|
||||
Åldersfilter = Aldersfilter
|
||||
Åldersgräns äldre = Aldersgrænse ældre
|
||||
Åldersgräns ungdom = Aldersgrænse ungdom
|
||||
Åldersgränser, reducerad anmälningsavgift = Aldersgrænser, reduceret løbsafgift
|
||||
Ångra = Fortryd
|
||||
Återansluten mot databasen, tävlingen synkroniserad = Gentilsluttet til databasen, løbet synkroniseret
|
||||
Återbud = Slet tilmelding
|
||||
Återbud[status] = Afbud
|
||||
Återgå = Gå tilbage
|
||||
Återskapa = Gendan
|
||||
Återskapa tidigare sparade fönster- och speakerinställningar = Gendan vidues- og speakerindstillinger.
|
||||
Återställ / uppdatera klasstillhörighet = Gendan / opdater klassetilhørsforhold
|
||||
Återställ <Ej Start> till <Status Okänd> = Tilbagefør <Ej Startet> till <Status ukendt>
|
||||
Återställ = Fortryd
|
||||
Återställ löpare <Ej Start> med registrering till <Status Okänd> = Gendan løber med status <Ikke startet> til <Status ukendt>
|
||||
Återställ säkerhetskopia = Gendan fra sikkerhedskopi
|
||||
Återställ tabeldesignen och visa allt = Gendan tabeldesign og vis alt
|
||||
övriga = øvrige
|
||||
är först i mål med tiden X = er først i mål med tiden X
|
||||
är först vid växeln med tiden X = er først ved skiftet med tiden X
|
||||
är först vid X med tiden Y = er først ved X med tiden Y
|
||||
är inte godkänd = er diskvalificeret
|
||||
är nu på delad X plats med tiden Y = er nu på delt X plads med tiden Y
|
||||
är nu på X plats med tiden Y = er nu på X plads med tiden Y
|
||||
är X efter = er X efter
|
||||
är X efter Y = er X efter Y
|
||||
är X efter; har tagit in Y = er X efter; har indhentet Y
|
||||
är X efter; har tappat Y = er X efter; har tabt Y
|
||||
är X före Y = er X foran Y
|
||||
återställd = gendannet
|
||||
åtta = otte
|
||||
åttonde = ottende
|
||||
Ökande = Stigende
|
||||
Öppen = Åben
|
||||
Öppen klass = Åben klasse
|
||||
@ -56,39 +89,6 @@
|
||||
Ändra X = Ændr X
|
||||
Ändrad = Ændret
|
||||
Ändrade avgift för X deltagare = Ændret afgift for X deltager(e)
|
||||
är först i mål med tiden X = er først i mål med tiden X
|
||||
är först vid växeln med tiden X = er først ved skiftet med tiden X
|
||||
är först vid X med tiden Y = er først ved X med tiden Y
|
||||
är inte godkänd = er diskvalificeret
|
||||
är nu på delad X plats med tiden Y = er nu på delt X plads med tiden Y
|
||||
är nu på X plats med tiden Y = er nu på X plads med tiden Y
|
||||
är X efter = er X efter
|
||||
är X efter Y = er X efter Y
|
||||
är X efter; har tagit in Y = er X efter; har indhentet Y
|
||||
är X efter; har tappat Y = er X efter; har tabt Y
|
||||
är X före Y = er X foran Y
|
||||
återställd = gendannet
|
||||
åtta = otte
|
||||
åttonde = ottende
|
||||
övriga = øvrige
|
||||
ÅÅÅÅ-MM-DD = ÅÅÅÅ-MM-DD
|
||||
Åldersfilter = Aldersfilter
|
||||
Åldersgräns äldre = Aldersgrænse ældre
|
||||
Åldersgräns ungdom = Aldersgrænse ungdom
|
||||
Åldersgränser, reducerad anmälningsavgift = Aldersgrænser, reduceret løbsafgift
|
||||
Ångra = Fortryd
|
||||
Återansluten mot databasen, tävlingen synkroniserad = Gentilsluttet til databasen, løbet synkroniseret
|
||||
Återbud = Slet tilmelding
|
||||
Återbud[status] = Afbud
|
||||
Återgå = Gå tilbage
|
||||
Återskapa = Gendan
|
||||
Återskapa tidigare sparade fönster- och speakerinställningar = Gendan vidues- og speakerindstillinger.
|
||||
Återställ / uppdatera klasstillhörighet = Gendan / opdater klassetilhørsforhold
|
||||
Återställ <Ej Start> till <Status Okänd> = Tilbagefør <Ej Startet> till <Status ukendt>
|
||||
Återställ = Fortryd
|
||||
Återställ löpare <Ej Start> med registrering till <Status Okänd> = Gendan løber med status <Ikke startet> til <Status ukendt>
|
||||
Återställ säkerhetskopia = Gendan fra sikkerhedskopi
|
||||
Återställ tabeldesignen och visa allt = Gendan tabeldesign og vis alt
|
||||
Accepterade elektroniska fakturor = Godkendte elektroniske fakturaer
|
||||
Adress = Adresse
|
||||
Adress och kontakt = Adresse og kontakt
|
||||
@ -527,11 +527,10 @@ Extra avstånd ovanför textblock = Ekstra plads over tekstblok
|
||||
Extra stämplingar = Ekstra stemplinger
|
||||
Extralöparstafett = Ekstraløberstafet
|
||||
Extraplatser = Ekstra pladser
|
||||
Färg = Farve
|
||||
Födelseår = Fødselsår
|
||||
Följande deltagare överfördes ej = Følgende deltagere blev ikke overført
|
||||
Följande deltagare är anmälda till nästa etapp men inte denna = Følgende deltagere er tilmeldt næste etape, men ikke denne
|
||||
Följande deltagare är nyanmälda = Følgende deltagere er nytilmeldte
|
||||
Följande deltagare överfördes ej = Følgende deltagere blev ikke overført
|
||||
Följande deltagare deltar ej = Følgende deltagere deltager ikke
|
||||
Följande deltagare har bytt klass (inget totalresultat) = Følgende deltagere har skiftet klasse (intet samlet resultat)
|
||||
Följande deltagare har bytt klass = Følgende deltagere har skiftet klasse
|
||||
@ -567,6 +566,7 @@ Förväntad andel efteranmälda = Forventet andel eftertilmeldte
|
||||
Förväntat antal besökare: X = Forventet antal deltagere: X
|
||||
Förvarning på (SI-kod): alla stämplingar = Forvarsel (SI kode): alle stemplinger
|
||||
Förvarningsröst = Forvarselsstemme
|
||||
Färg = Farve
|
||||
Failed to generate card = FEJL: Kunne ikke indlæse
|
||||
Failed to open 'X' for reading = FEJL: Kunne ikke læse 'X'
|
||||
Failed to read file = Kunne ikke læse fil
|
||||
@ -680,6 +680,8 @@ Grund avg. = Grundafg.
|
||||
Grundavgift = Grundafgift
|
||||
Grundinställningar = Grundindstillinger
|
||||
Gruppera = Grupper
|
||||
Hög avgift = Forhøjet afgift
|
||||
Höger = Højre
|
||||
Hämta (efter)anmälningar från Eventor = Hent (efter)tilmeldinger fra Eventor
|
||||
Hämta data från Eventor = Hent data fra Eventor
|
||||
Hämta efteranmälningar = Hent eftertilmeldinger
|
||||
@ -697,8 +699,6 @@ Hämtar löpardatabasen = Henter løberdatabasen
|
||||
Hämtar tävling = Henter løb
|
||||
Händelser - tidslinje = Begivenheder - tidslinje
|
||||
Händelser = Begivenheder
|
||||
Hög avgift = Forhøjet afgift
|
||||
Höger = Højre
|
||||
handskakning = handshaking
|
||||
Hantera brickor = Håndter brikker
|
||||
Hantera deltagare som bytt klass = Håndtering af deltagere der har skiftet klasse
|
||||
@ -856,6 +856,7 @@ Informationsserver = Informationsserver
|
||||
Inga = Ingen
|
||||
Inga bommar registrerade =
|
||||
Inga deltagare = Ingen deltagere
|
||||
Inga klasser tillåter direktanmälan. På sidan klasser kan du ändra denna egenskap. = Ingen klasser tillader tilmeldong på stævneplads.\n\nDu kan ændre dette på siden klasser.
|
||||
Inga vakanser tillgängliga. Vakanser skapas vanligen vid lottning = Ingen vakante. Vakante pladser oprettes normalt ved lodtrækning
|
||||
Ingen / okänd = Ingen / ukendt
|
||||
Ingen = Ingen
|
||||
@ -908,19 +909,19 @@ IOF Startlista, version 3.0 (xml) = IOF Startliste, version 3.0 (xml)
|
||||
IP-adress eller namn på en MySQL-server = IP addresse eller navn på en MySQL server
|
||||
Italic = Kursiv
|
||||
ItalicMediumPlus = Kursiv, større
|
||||
Ja = Ja
|
||||
Jämna klasser (placering) = Udjævn klasser (placering)
|
||||
Jämna klasser (ranking) = Udjævn klasser (ranking)
|
||||
Jämna klasser (tid) = Udjævn klasser (tid)
|
||||
Ja = Ja
|
||||
Jag sköter lottning själv = Jeg foretager lodtrækning manuelt
|
||||
Jaktstart = Jagtstart
|
||||
Justera blockvis = Blokvis justering
|
||||
Justera mot = Juster i forhold til
|
||||
Justera visningsinställningar = Juster visningsindstilninger
|
||||
Källa = Kilde(fra)
|
||||
Källkatalog = Mappe at hente fra
|
||||
Kön = Køn
|
||||
Kör kontroll inför tävlingen = Foretag kontrol før løbet
|
||||
Källa = Kilde(fra)
|
||||
Källkatalog = Mappe at hente fra
|
||||
Kalkylblad/csv = Regneark/csv
|
||||
kartor = kort
|
||||
klar = færdig
|
||||
@ -986,8 +987,8 @@ Kontant = Kontant
|
||||
Kontant betalning = Kontant betaling
|
||||
Konto = Konto
|
||||
Kontroll %s = Post %s
|
||||
kontroll = post
|
||||
Kontroll = Post
|
||||
kontroll = post
|
||||
Kontroll inför tävlingen = Kontrol før løbet
|
||||
kontroll X (Y) = post X (Y)
|
||||
Kontroll X = Post X
|
||||
@ -1017,30 +1018,6 @@ Kval-Final-Schema = Kval-Finale-Skema
|
||||
Kvar-i-skogen = Løbere i skoven
|
||||
Kvinna = Kvinde
|
||||
Kvinnor = Kvinder
|
||||
Lägg till = Tilføj
|
||||
Lägg till alla = Tilføj alle
|
||||
Lägg till en ny rad i tabellen (X) = Tilføj række i tabellen (X)
|
||||
Lägg till klasser = Tilføj klasser
|
||||
Lägg till ny = Tilføj ny
|
||||
Lägg till ny etapp = Tilføj ny etape
|
||||
Lägg till rad = Tilføj række
|
||||
Lägg till stämpling = Tilføj stempling
|
||||
Lägger till klubbar = Tilføjer klubber
|
||||
Lägger till löpare = Tilføjer løbere
|
||||
Längd (m) = Længde (m)
|
||||
Längd = Længde
|
||||
Längsta svarstid: X ms = Længste svarstid: X ms
|
||||
Längsta tid i sekunder att vänta med utskrift = Det længste, i sekunder, der ventes med udskrift
|
||||
Länk till resultatlistan = Link til resultatlisten
|
||||
Länk till startlistan = Link til startlisten
|
||||
Läs brickor = Læs brikker
|
||||
Läser klubbar = Læser klubber
|
||||
Läser löpare = Læser løbere
|
||||
Långt namn = Langt navn
|
||||
Lås gafflingar = Lås gafflinger
|
||||
Lås startlista = Lås startliste
|
||||
Låt de bästa start först = Lad de bedste starte først
|
||||
Låt klassen ha mer än en bana eller sträcka = Lad klassen have mere end en bane eller en tur
|
||||
Löpande = Løbende
|
||||
Löpande information om viktiga händelser i tävlingen = Løbende information om vigtige begivenheder i løbet
|
||||
Löparbricka %d = Løberbrik %d
|
||||
@ -1063,6 +1040,30 @@ Löpare: X, kontroll: Y, kl Z = Løber: X, post: Y, kl: Z
|
||||
Löparen hittades inte = Løber ikke fundet
|
||||
Löptid = Løbstid
|
||||
Lösenord = Password
|
||||
Lägg till = Tilføj
|
||||
Lägg till alla = Tilføj alle
|
||||
Lägg till en ny rad i tabellen (X) = Tilføj række i tabellen (X)
|
||||
Lägg till klasser = Tilføj klasser
|
||||
Lägg till ny = Tilføj ny
|
||||
Lägg till ny etapp = Tilføj ny etape
|
||||
Lägg till rad = Tilføj række
|
||||
Lägg till stämpling = Tilføj stempling
|
||||
Lägger till klubbar = Tilføjer klubber
|
||||
Lägger till löpare = Tilføjer løbere
|
||||
Längd (m) = Længde (m)
|
||||
Längd = Længde
|
||||
Längsta svarstid: X ms = Længste svarstid: X ms
|
||||
Längsta tid i sekunder att vänta med utskrift = Det længste, i sekunder, der ventes med udskrift
|
||||
Långt namn = Langt navn
|
||||
Länk till resultatlistan = Link til resultatlisten
|
||||
Länk till startlistan = Link til startlisten
|
||||
Läs brickor = Læs brikker
|
||||
Lås gafflingar = Lås gafflinger
|
||||
Lås startlista = Lås startliste
|
||||
Läser klubbar = Læser klubber
|
||||
Läser löpare = Læser løbere
|
||||
Låt de bästa start först = Lad de bedste starte først
|
||||
Låt klassen ha mer än en bana eller sträcka = Lad klassen have mere end en bane eller en tur
|
||||
Ladda upp öppnad tävling på server = Upload åbnet løb til server
|
||||
Lag %d = Hold %d
|
||||
Lag + sträcka = Hold + tur
|
||||
@ -1138,7 +1139,6 @@ Lottar: X = Trækker lod: X
|
||||
Lottning = Lodtrækning
|
||||
Lyssna = Lyt
|
||||
Lyssnar på X = Lytter på X
|
||||
Män = Mænd
|
||||
mål = mål
|
||||
Mål = Mål
|
||||
målet (X) = målet (X)
|
||||
@ -1148,6 +1148,7 @@ Målstämpling saknas = Manglende målstempling
|
||||
Måltid = Måltid
|
||||
Måltid saknas = Måltid mangler
|
||||
Måltid: X = Måltid: X
|
||||
Män = Mænd
|
||||
Man = Mand
|
||||
Manual point reductions and adjustments = Manuel pointreduktion og justering
|
||||
Manual time penalties and adjustments = Manuelle tidsstraf og justeringer
|
||||
@ -1186,12 +1187,12 @@ MediumPlus = Noget større tekst
|
||||
Medlöpare = Medløber
|
||||
Mellantider visas för namngivna kontroller = Mellemtider vises for navngivne poster
|
||||
MeOS = MeOS
|
||||
MeOS – Funktioner = MeOS – Funktioner
|
||||
MeOS – Resultatkiosk = MeOS – Resultatformidling
|
||||
MeOS Features = MeOS Specialfunktioner
|
||||
MeOS Funktioner = MeOS Funktioner
|
||||
MeOS Informationsserver REST-API = MeOS Informationsserver REST-API
|
||||
MeOS lokala datakatalog är = MeOS lokale datamappe er
|
||||
MeOS – Funktioner = MeOS – Funktioner
|
||||
MeOS – Resultatkiosk = MeOS – Resultatformidling
|
||||
MeOS Three Days Race X = MeOS Tredages Løb X
|
||||
MeOS Timing = MeOS Timing
|
||||
Metod = Metode
|
||||
@ -1371,6 +1372,7 @@ prefsAutoTie = Knyt automatisk Si brik til løber
|
||||
prefsCardFee = Forvalgt Si brik leje
|
||||
prefsclasslimit = Begräns antal viste resultater per klasse
|
||||
prefsClient = Klientnavn i netværket
|
||||
prefsCodePage = Tegnsæt for 8-bits text vid im- og export
|
||||
prefsControlFrom = Senest brugte <fra> post
|
||||
prefsControlTo = Senest brugte <til> post
|
||||
prefsCurrencyFactor = Valutakurs
|
||||
@ -1430,8 +1432,8 @@ Prel. bomtid = Forel. tidstab
|
||||
Prel. placering = Forel. placering
|
||||
Prepare start lists = Forbered startliste
|
||||
Press Enter to continue = Tast <Enter> for at fortsætte
|
||||
Print card data = Udskriv brikdata
|
||||
Print Card Data = Udskriv brikdata
|
||||
Print card data = Udskriv brikdata
|
||||
Printing failed (X: Y) Z = Utskrivning fejlede (X: Y) Z
|
||||
Prioritering = Prioritering
|
||||
Prisutdelningslista = Prisuddelingsliste
|
||||
@ -1496,8 +1498,8 @@ Reserverade = Reserveret
|
||||
RestService = RestService
|
||||
Result at a control = Resultat ved post
|
||||
Result Calculation = Resultatberegning
|
||||
Result Module – X = Resultatmodul – X
|
||||
Result module identifier = Resultatmodul ID
|
||||
Result Module – X = Resultatmodul – X
|
||||
Result Modules = Resultatmoduler
|
||||
Result on leg = Result for stræk
|
||||
Result score calculation for runner = Resultatberegning for løber
|
||||
@ -1628,18 +1630,18 @@ RunnerTotalTimeAfter = Løbers totaltid efter
|
||||
RunnerTotalTimeStatus = Løbers totaltid / status
|
||||
RunnerUMMasterPoint = Uppsala möte, mesterskabspoints
|
||||
Running time for each team member = Løbstid for hvert holdmedlem
|
||||
Säkerhetskopiera = Lav sikkerhedskopi
|
||||
Säkerhetskopierar om = Laver sikkerhedskopi om
|
||||
Säkerhetskopiering = Interval Backup
|
||||
Sätt okända löpare utan registrering till <Ej Start> = Sæt ukendte løbere uden registrering til <Ikke startet>
|
||||
Sätt som oparad = Sæt som uparret
|
||||
Sätter reptid (X) och omstartstid (Y) för = Sætter sidste skiftetid (X) og omstarttid (Y) for
|
||||
Sök (X) = Søg (X)
|
||||
Sök = Søg
|
||||
Sök deltagare = Søg deltagere
|
||||
Sök och starta automatiskt = Søg og start automatisk
|
||||
Sök på namn, bricka eller startnummer = Søg efter et navn, en brik eller et startnummer
|
||||
Söker efter SI-enheter = Søger efter SI-enheder
|
||||
Säkerhetskopiera = Lav sikkerhedskopi
|
||||
Säkerhetskopierar om = Laver sikkerhedskopi om
|
||||
Säkerhetskopiering = Interval Backup
|
||||
Sätt okända löpare utan registrering till <Ej Start> = Sæt ukendte løbere uden registrering til <Ikke startet>
|
||||
Sätt som oparad = Sæt som uparret
|
||||
Sätter reptid (X) och omstartstid (Y) för = Sætter sidste skiftetid (X) og omstarttid (Y) for
|
||||
Saknad starttid = Manglende starttid
|
||||
saknas = mangler
|
||||
Samlade poäng = Samlet antal point
|
||||
@ -1783,6 +1785,10 @@ Speakerstöd = Speaker funktion
|
||||
SportIdent = SPORTident
|
||||
Språk = Sprog
|
||||
SRR Dongle = SRR Dongle
|
||||
Större = Større
|
||||
Störst = Meget stor
|
||||
Största gruppen med samma inledning har X platser = Største gruppe med samme indledning har X pladser
|
||||
Största intervall i klass = Største interval i klasse
|
||||
Stämpelkod = Stempelkode
|
||||
Stämpelkod(er) = Stempelkode(r)
|
||||
Stämpelkoder = Stempelkoder
|
||||
@ -1800,10 +1806,6 @@ Stämplingstest = Stemplingstest
|
||||
Stämplingstid = Stemplingstid
|
||||
Stäng = Luk
|
||||
Stäng tävlingen = Luk løbet
|
||||
Större = Større
|
||||
Störst = Meget stor
|
||||
Största gruppen med samma inledning har X platser = Største gruppe med samme indledning har X pladser
|
||||
Största intervall i klass = Største interval i klasse
|
||||
Stad = By
|
||||
Stafett - sammanställning = Stafet - sammenfatning
|
||||
Stafett - sträcka = Stafet - tur
|
||||
@ -1884,8 +1886,8 @@ Str. X = Tur X
|
||||
Sträcka %d = Tur %d
|
||||
Sträcka = Tur
|
||||
Sträcka att lotta = Ture til lodtrækning
|
||||
sträcka X = tur X
|
||||
Sträcka X = Tur X
|
||||
sträcka X = tur X
|
||||
Sträckans banor = Strækkets baner
|
||||
Sträcktider (WinSplits) = Stræktider (WinSplits)
|
||||
Sträcktider / WinSplits = Stræktider / WinSplits
|
||||
@ -1910,13 +1912,8 @@ Support time from control = Understøt tid fra post
|
||||
Support time to control = Understøt tid til post
|
||||
Symboler = Symboler
|
||||
Synkronisera med Eventor = Synkroniser med Eventor
|
||||
Ta bort / slå ihop = Fjern / slå sammen
|
||||
Ta bort = Fjern
|
||||
Ta bort eventuella avanmälda deltagare = Fjern evt. afmeldte deltagere
|
||||
Ta bort listposten = Fjern listeposten
|
||||
Ta bort markerad = Fjern valgte
|
||||
Ta bort stämpling = Fjern stempling
|
||||
Ta bort valda rader från tabellen (X) = Fjern valgte rækker fra tabellen (X)
|
||||
Töm = Clear
|
||||
Töm databasen = Ryd database
|
||||
Tävling = Løb
|
||||
Tävling från Eventor = Løb fra Eventor
|
||||
Tävling med lag = Løb med hold
|
||||
@ -1933,8 +1930,13 @@ Tävlingsnamn = Løbsnavn
|
||||
Tävlingsrapport = Løbsrapport
|
||||
Tävlingsregler = Løbsreglement
|
||||
Tävlingsstatistik = Løbsstatistik
|
||||
Töm = Clear
|
||||
Töm databasen = Ryd database
|
||||
Ta bort / slå ihop = Fjern / slå sammen
|
||||
Ta bort = Fjern
|
||||
Ta bort eventuella avanmälda deltagare = Fjern evt. afmeldte deltagere
|
||||
Ta bort listposten = Fjern listeposten
|
||||
Ta bort markerad = Fjern valgte
|
||||
Ta bort stämpling = Fjern stempling
|
||||
Ta bort valda rader från tabellen (X) = Fjern valgte rækker fra tabellen (X)
|
||||
Tabell = Tabel
|
||||
Tabelläge = Tabelindstilling
|
||||
Tabellverktyg = Tabelværktøj
|
||||
|
||||
@ -2315,3 +2315,9 @@ Ingen nummerlapp = No bib
|
||||
Rogaining results for a team, where each team member collects points individually = Rogaining results for a team, where each team member collects points individually
|
||||
prefsCodePage = Code table for 8 bit text on import/export.
|
||||
Inga klasser tillåter direktanmälan. På sidan klasser kan du ändra denna egenskap. = No class is marked to allow quick entry.\n\nOn the page Classes you can change this property.
|
||||
Database is used and cannot be deleted = Database is used and cannot be deleted
|
||||
Classes together = Classes together
|
||||
Finish order = Finish order
|
||||
First to finish = First to finish
|
||||
Individual result by finish time = Individual result by finish time
|
||||
Endast tidtagning = Only timing
|
||||
|
||||
@ -2389,6 +2389,11 @@ LRESULT gdioutput::ProcessMsgWrp(UINT iMessage, LPARAM lParam, WPARAM wParam)
|
||||
}
|
||||
}
|
||||
else if (iMessage==WM_LBUTTONDOWN) {
|
||||
if (autoCompleteInfo) {
|
||||
autoCompleteInfo.reset();
|
||||
return 0;
|
||||
}
|
||||
|
||||
list<InfoBox>::iterator it=IBox.begin();
|
||||
|
||||
POINT pt;
|
||||
@ -6920,9 +6925,17 @@ AutoCompleteInfo &gdioutput::addAutoComplete(const string &key) {
|
||||
POINT pt;
|
||||
int height = scaleLength(200);
|
||||
pt.x = rc.right;
|
||||
pt.y = min(rc.top, rcMain.bottom-height);
|
||||
//pt.y = min(rc.top, rcMain.bottom-height);
|
||||
pt.y = rc.bottom;
|
||||
if (pt.y + height > rcMain.bottom)
|
||||
pt.y = rc.top - height;
|
||||
|
||||
ScreenToClient(hWndTarget, &pt);
|
||||
// TODO Place window
|
||||
if (pt.y < 0) { //Fallback
|
||||
pt.x = rc.right;
|
||||
pt.y = min(rc.top, rcMain.bottom - height);
|
||||
ScreenToClient(hWndTarget, &pt);
|
||||
}
|
||||
|
||||
if (autoCompleteInfo && autoCompleteInfo->matchKey(key)) {
|
||||
return *autoCompleteInfo;
|
||||
|
||||
@ -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
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -287,17 +287,18 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
lang.get().addLangResource(L"Svenska", L"103");
|
||||
lang.get().addLangResource(L"Deutsch", L"105");
|
||||
lang.get().addLangResource(L"Dansk", L"106");
|
||||
lang.get().addLangResource(L"Français", L"110");
|
||||
lang.get().addLangResource(L"Český", L"108");
|
||||
lang.get().addLangResource(L"Français", L"110");
|
||||
lang.get().addLangResource(L"Russian", L"107");
|
||||
|
||||
if (fileExist(L"extra.lng")) {
|
||||
lang.get().addLangResource(L"Extraspråk", L"extra.lng");
|
||||
lang.get().addLangResource(L"Extraspråk", L"extra.lng");
|
||||
}
|
||||
else {
|
||||
wchar_t lpath[260];
|
||||
getUserFile(lpath, L"extra.lng");
|
||||
if (fileExist(lpath))
|
||||
lang.get().addLangResource(L"Extraspråk", lpath);
|
||||
lang.get().addLangResource(L"Extraspråk", lpath);
|
||||
}
|
||||
|
||||
wstring defLang = gEvent->getPropertyString("Language", L"Svenska");
|
||||
@ -1020,7 +1021,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
case WM_CREATE:
|
||||
|
||||
tabList->push_back(TabObject(gdi_main->getTabs().get(TCmpTab), "Tävling"));
|
||||
tabList->push_back(TabObject(gdi_main->getTabs().get(TCmpTab), "Tävling"));
|
||||
tabList->push_back(TabObject(gdi_main->getTabs().get(TRunnerTab), "Deltagare"));
|
||||
tabList->push_back(TabObject(gdi_main->getTabs().get(TTeamTab), "Lag(flera)"));
|
||||
tabList->push_back(TabObject(gdi_main->getTabs().get(TListTab), "Listor"));
|
||||
@ -1174,7 +1175,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
}
|
||||
case WM_USER+1:
|
||||
MessageBox(hWnd, lang.tl(L"Kommunikationen med en SI-enhet avbröts.").c_str(), L"SportIdent", MB_OK);
|
||||
MessageBox(hWnd, lang.tl(L"Kommunikationen med en SI-enhet avbröts.").c_str(), L"SportIdent", MB_OK);
|
||||
break;
|
||||
|
||||
case WM_USER + 3:
|
||||
@ -1209,7 +1210,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
if (!gEvent || gEvent->empty() || gdi_main->ask(L"Vill du verkligen stänga MeOS?"))
|
||||
if (!gEvent || gEvent->empty() || gdi_main->ask(L"Vill du verkligen stänga MeOS?"))
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
|
||||
@ -1227,20 +1228,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
gEvent->save();
|
||||
}
|
||||
catch (meosException &ex) {
|
||||
MessageBox(hWnd, lang.tl(ex.wwhat()).c_str(), L"Fel när tävlingen skulle sparas", MB_OK);
|
||||
MessageBox(hWnd, lang.tl(ex.wwhat()).c_str(), L"Fel när tävlingen skulle sparas", MB_OK);
|
||||
}
|
||||
catch(std::exception &ex) {
|
||||
MessageBox(hWnd, lang.tl(ex.what()).c_str(), L"Fel när tävlingen skulle sparas", MB_OK);
|
||||
MessageBox(hWnd, lang.tl(ex.what()).c_str(), L"Fel när tävlingen skulle sparas", MB_OK);
|
||||
}
|
||||
|
||||
try {
|
||||
gEvent->saveRunnerDatabase(L"database", true);
|
||||
}
|
||||
catch (meosException &ex) {
|
||||
MessageBox(hWnd, lang.tl(ex.wwhat()).c_str(), L"Fel när löpardatabas skulle sparas", MB_OK);
|
||||
MessageBox(hWnd, lang.tl(ex.wwhat()).c_str(), L"Fel när löpardatabas skulle sparas", MB_OK);
|
||||
}
|
||||
catch(std::exception &ex) {
|
||||
MessageBox(hWnd, lang.tl(ex.what()).c_str(), L"Fel när löpardatabas skulle sparas", MB_OK);
|
||||
MessageBox(hWnd, lang.tl(ex.what()).c_str(), L"Fel när löpardatabas skulle sparas", MB_OK);
|
||||
}
|
||||
|
||||
if (gEvent)
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
#include "../progress.h"
|
||||
#include "../metalist.h"
|
||||
#include "../MeOSFeatures.h"
|
||||
#include "../meosexception.h"
|
||||
|
||||
using namespace mysqlpp;
|
||||
|
||||
@ -3493,7 +3494,7 @@ bool MeosSQL::checkConnection(oEvent *oe)
|
||||
monitorId=static_cast<int>(res.insert_id);
|
||||
}
|
||||
catch (const mysqlpp::Exception& er){
|
||||
oe->connectedClients.push_back(er.what());
|
||||
oe->connectedClients.push_back(L"Error: " + fromUTF(er.what()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3505,7 +3506,7 @@ bool MeosSQL::checkConnection(oEvent *oe)
|
||||
query.execute();
|
||||
}
|
||||
catch (const mysqlpp::Exception& er){
|
||||
oe->connectedClients.push_back(er.what());
|
||||
oe->connectedClients.push_back(L"Error: " + fromUTF(er.what()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3521,7 +3522,7 @@ bool MeosSQL::checkConnection(oEvent *oe)
|
||||
if (res) {
|
||||
for (int i=0; i<res.num_rows(); i++) {
|
||||
Row row=res.at(i);
|
||||
oe->connectedClients.push_back(string(row["Client"]));
|
||||
oe->connectedClients.push_back(fromUTF(string(row["Client"])));
|
||||
|
||||
if (int(row["Id"])==monitorId)
|
||||
callback=true;
|
||||
@ -3529,7 +3530,7 @@ bool MeosSQL::checkConnection(oEvent *oe)
|
||||
}
|
||||
}
|
||||
catch (const mysqlpp::Exception& er){
|
||||
oe->connectedClients.push_back(er.what());
|
||||
oe->connectedClients.push_back(L"Error: " + fromUTF(er.what()));
|
||||
return false;
|
||||
}
|
||||
return callback;
|
||||
@ -3554,16 +3555,14 @@ void MeosSQL::setDefaultDB()
|
||||
|
||||
bool MeosSQL::dropDatabase(oEvent *oe)
|
||||
{
|
||||
// Check if other cients are connected.
|
||||
// Check if other clients are connected.
|
||||
if ( !checkConnection(oe) ) {
|
||||
if (!oe->connectedClients.empty())
|
||||
alert(oe->connectedClients[0]);
|
||||
|
||||
return false;
|
||||
throw meosException("Database is used and cannot be deleted.");
|
||||
}
|
||||
|
||||
if (oe->connectedClients.size()!=1) {
|
||||
alert("Database is used and cannot be deleted");
|
||||
throw meosException("Database is used and cannot be deleted.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -12,8 +12,7 @@ IDR_3002 300 DISCARDABLE "english.lng"
|
||||
IDR_3003 300 DISCARDABLE "german.lng"
|
||||
IDR_3004 300 DISCARDABLE "danish.lng"
|
||||
IDR_3005 300 DISCARDABLE "russian.lng"
|
||||
IDR_3006 300 DISCARDABLE "cp1250.lng"
|
||||
IDR_3007 300 DISCARDABLE "cp1255.lng"
|
||||
IDR_3006 300 DISCARDABLE "czech.lng"
|
||||
IDR_3008 300 DISCARDABLE "french.lng"
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -27,9 +27,9 @@
|
||||
//V2: ABCDEFGHIHJKMN
|
||||
//V31: a
|
||||
//V33: abcde
|
||||
//V35: abcde
|
||||
//V35: abcdef
|
||||
int getMeosBuild() {
|
||||
string revision("$Rev: 669 $");
|
||||
string revision("$Rev: 686 $");
|
||||
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-03-25 07:29:55 +0200 (sö, 25 mar 2018) $");
|
||||
wstring date(L"$Date: 2018-04-17 21:45:35 +0200 (ti, 17 apr 2018) $");
|
||||
return date.substr(7,10);
|
||||
}
|
||||
|
||||
wstring getBuildType() {
|
||||
return L"RC2"; // No parantheses (...)
|
||||
return L""; // No parantheses (...)
|
||||
}
|
||||
|
||||
wstring getMajorVersion() {
|
||||
@ -188,4 +188,6 @@ void getSupporters(vector<wstring> &supp)
|
||||
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");
|
||||
}
|
||||
|
||||
@ -4006,17 +4006,20 @@ void oClass::drawSeeded(ClassSeedMethod seed, int leg, int firstStart,
|
||||
}
|
||||
|
||||
if (noClubNb) {
|
||||
set<int> pushed_back;
|
||||
for (size_t k = 1; k < startOrder.size(); k++) {
|
||||
int idMe = startOrder[k]->getClubId();
|
||||
if (idMe != 0 && idMe == startOrder[k-1]->getClubId()) {
|
||||
// Make sure the runner with worst ranking is moved back. (Swedish SM rules)
|
||||
if (startOrder[k-1]->getRanking() > startOrder[k]->getRanking())
|
||||
bool skipRank = pushed_back.count(startOrder[k - 1]->getId()) != 0;
|
||||
if (!skipRank && startOrder[k-1]->getRanking() > startOrder[k]->getRanking())
|
||||
swap(startOrder[k-1], startOrder[k]);
|
||||
|
||||
pushed_back.insert(startOrder[k]->getId());
|
||||
vector<pair<int, pRunner> > rqueue;
|
||||
rqueue.push_back(make_pair(k, startOrder[k]));
|
||||
for (size_t j = k + 1; j < startOrder.size(); j++) {
|
||||
if (idMe != startOrder[j]->getClubId()) {
|
||||
pushed_back.insert(startOrder[j]->getId());
|
||||
swap(startOrder[j], startOrder[k]); // k-1 now has a non-club nb behind
|
||||
rqueue.push_back(make_pair(j, pRunner(0)));
|
||||
// Shift the queue
|
||||
|
||||
@ -1377,6 +1377,14 @@ bool oCourse::hasControl(const oControl *ctrl) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool oCourse::hasControlCode(int code) const {
|
||||
for (int i = 0; i < nControls; i++) {
|
||||
if (Controls[i]->hasNumber(code))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void oCourse::getClasses(vector<pClass> &usageClass) const {
|
||||
vector<pClass> cls;
|
||||
oe->getClasses(cls, false);
|
||||
|
||||
@ -103,6 +103,7 @@ public:
|
||||
wstring getRadioName(int courseControlId) const;
|
||||
|
||||
bool hasControl(const oControl *ctrl) const;
|
||||
bool hasControlCode(int code) const;
|
||||
|
||||
/// Returns course specific id for specified control (taking duplicats of the control into account)
|
||||
int getCourseControlId(int controlIx) const;
|
||||
|
||||
@ -4825,7 +4825,7 @@ void oEvent::analyzeClassResultStatus() const
|
||||
void oEvent::generateTestCard(SICard &sic) const
|
||||
{
|
||||
sic.clear(0);
|
||||
sic.convertedTime == ConvertedTimeStatus::Hour24;
|
||||
sic.convertedTime = ConvertedTimeStatus::Hour24;
|
||||
|
||||
if (Runners.empty())
|
||||
return;
|
||||
|
||||
@ -393,7 +393,7 @@ protected:
|
||||
void storeChangeStatus(bool onlyChangable=true);
|
||||
|
||||
wstring clientName;
|
||||
vector<string> connectedClients;
|
||||
vector<wstring> connectedClients;
|
||||
DWORD clientCheckSum() const; //Calculate a check sum for current clients
|
||||
DWORD currentClientCS; //The current, stored check sum.
|
||||
|
||||
|
||||
@ -836,7 +836,7 @@ void oEvent::drawList(const vector<ClassDrawSpecification> &spec,
|
||||
|
||||
int minStartNo = Runners.size();
|
||||
for(unsigned k=0;k<stimes.size(); k++) {
|
||||
runners[k]->setStartTime(stimes[k], true, false);
|
||||
runners[k]->setStartTime(stimes[k], true, false, false);
|
||||
minStartNo = min(minStartNo, runners[k]->getStartNo());
|
||||
}
|
||||
|
||||
@ -1113,12 +1113,14 @@ void oEvent::drawListClumped(int ClassID, int FirstStart, int Interval, int Vaca
|
||||
|
||||
k=0;
|
||||
|
||||
for (it=Runners.begin(); it != Runners.end(); ++it)
|
||||
if (it->Class && it->Class->Id==ClassID){
|
||||
it->setStartTime(stimes[k++], true, false);
|
||||
it->StartNo=k;
|
||||
for (it = Runners.begin(); it != Runners.end(); ++it) {
|
||||
if (it->Class && it->Class->Id == ClassID) {
|
||||
it->setStartTime(stimes[k++], true, false, false);
|
||||
it->StartNo = k;
|
||||
it->synchronize();
|
||||
}
|
||||
}
|
||||
reCalculateLeaderTimes(ClassID);
|
||||
|
||||
delete[] stimes;
|
||||
}
|
||||
@ -1426,15 +1428,15 @@ void oEvent::drawPersuitList(int classId, int firstTime, int restartTime,
|
||||
|
||||
if ((times[k].first - delta) < maxTime && breakIndex == -1) {
|
||||
if (!reverse)
|
||||
r->setStartTime(firstTime + times[k].first - delta, true, false);
|
||||
r->setStartTime(firstTime + times[k].first - delta, true, false, false);
|
||||
else
|
||||
r->setStartTime(firstTime - times[k].first + reverseDelta, true, false);
|
||||
r->setStartTime(firstTime - times[k].first + reverseDelta, true, false, false);
|
||||
}
|
||||
else if (!reverse) {
|
||||
if (breakIndex == -1)
|
||||
breakIndex = k;
|
||||
|
||||
r->setStartTime(restartTime + ((k - breakIndex)/pairSize) * interval, true, false);
|
||||
r->setStartTime(restartTime + ((k - breakIndex)/pairSize) * interval, true, false, false);
|
||||
}
|
||||
else {
|
||||
if (breakIndex == -1) {
|
||||
@ -1442,8 +1444,9 @@ void oEvent::drawPersuitList(int classId, int firstTime, int restartTime,
|
||||
odd = times.size() % 2;
|
||||
}
|
||||
|
||||
r->setStartTime(restartTime + ((breakIndex - k + odd)/pairSize) * interval, true, false);
|
||||
r->setStartTime(restartTime + ((breakIndex - k + odd)/pairSize) * interval, true, false, false);
|
||||
}
|
||||
r->synchronize(true);
|
||||
}
|
||||
reCalculateLeaderTimes(classId);
|
||||
}
|
||||
|
||||
@ -468,38 +468,50 @@ pFreePunch oEvent::addFreePunch(int time, int type, int card, bool updateStartFi
|
||||
|
||||
fp->updateChanged();
|
||||
fp->synchronize();
|
||||
pRunner tr = fp->getTiedRunner();
|
||||
|
||||
// Update start/finish time
|
||||
if (updateStartFinish && type == oPunch::PunchStart || type == oPunch::PunchFinish) {
|
||||
pRunner tr = fp->getTiedRunner();
|
||||
if (tr && tr->getStatus() == StatusUnknown && time > 0) {
|
||||
tr->synchronize();
|
||||
if (type == oPunch::PunchStart) {
|
||||
if (tr->getClassRef(false) && !tr->getClassRef(true)->ignoreStartPunch())
|
||||
tr->setStartTime(time, true, false);
|
||||
}
|
||||
else
|
||||
tr->setFinishTime(time);
|
||||
|
||||
// Direct result
|
||||
if (type == oPunch::PunchFinish && tr->getClassRef(false) && tr->getClassRef(true)->hasDirectResult()) {
|
||||
if (tr->getCourse(false) == 0 && tr->getCard() == 0) {
|
||||
tr->setStatus(StatusOK, true, false, true);
|
||||
}
|
||||
else if (tr->getCourse(false) != 0 && tr->getCard() == 0) {
|
||||
pCard card = allocateCard(tr);
|
||||
card->setupFromRadioPunches(*tr);
|
||||
vector<int> mp;
|
||||
card->synchronize();
|
||||
tr->addPunches(card, mp);
|
||||
}
|
||||
if (tr != nullptr) {
|
||||
// Update start/finish time
|
||||
if (updateStartFinish) {
|
||||
int startType = oPunch::PunchStart;
|
||||
int finishType = oPunch::PunchFinish;
|
||||
pCourse pCrs = tr->getCourse(false);
|
||||
if (pCrs) {
|
||||
startType = pCrs->getStartPunchType();
|
||||
finishType = pCrs->getFinishPunchType();
|
||||
}
|
||||
|
||||
tr->synchronize(true);
|
||||
if (type == startType || type == finishType) {
|
||||
if (tr->getStatus() == StatusUnknown && time > 0) {
|
||||
tr->synchronize();
|
||||
if (type == startType) {
|
||||
if (tr->getClassRef(false) && !tr->getClassRef(true)->ignoreStartPunch())
|
||||
tr->setStartTime(time, true, false);
|
||||
}
|
||||
else
|
||||
tr->setFinishTime(time);
|
||||
|
||||
// Direct result
|
||||
if (type == finishType && tr->getClassRef(false) && tr->getClassRef(true)->hasDirectResult()) {
|
||||
if (tr->getCourse(false) == 0 && tr->getCard() == 0) {
|
||||
tr->setStatus(StatusOK, true, false, true);
|
||||
}
|
||||
else if (tr->getCourse(false) != 0 && tr->getCard() == 0) {
|
||||
pCard card = allocateCard(tr);
|
||||
card->setupFromRadioPunches(*tr);
|
||||
vector<int> mp;
|
||||
card->synchronize();
|
||||
tr->addPunches(card, mp);
|
||||
}
|
||||
}
|
||||
|
||||
tr->synchronize(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fp->getTiedRunner())
|
||||
|
||||
pushDirectChange();
|
||||
}
|
||||
return fp;
|
||||
}
|
||||
|
||||
|
||||
@ -2317,3 +2317,9 @@ Ingen nummerlapp = Ingen nummerlapp
|
||||
Rogaining results for a team, where each team member collects points individually = Rogainingresultat för ett lag där varje lagmedlem samlar poäng individuellt
|
||||
prefsCodePage = Kodtabell för 8-bitars text vid import/export
|
||||
Inga klasser tillåter direktanmälan. På sidan klasser kan du ändra denna egenskap. = Inga klasser tillåter direktanmälan.\n\nPå sidan klasser kan du ändra denna egenskap.
|
||||
Database is used and cannot be deleted = Databasen används och kan inte tas bort
|
||||
Classes together = Klasser gemensamt
|
||||
Finish order = Målgångsordning
|
||||
First to finish = Först i mål
|
||||
Individual result by finish time = Individuella resultat efter måltid
|
||||
Endast tidtagning = Endast tidtagning
|
||||
|
||||
@ -135,9 +135,12 @@ void TestMeOS::runProtected(bool protect) const {
|
||||
oe_main->setProperty("FirstTime", 0);
|
||||
oe_main->setProperty("TestPath", tp);
|
||||
oe_main->getPropertyInt("UseEventor", 1);
|
||||
|
||||
TabSI *tsi = dynamic_cast<TabSI*>(gdi_main->getTabs().get(TabType::TSITab));
|
||||
tsi->setMode(TabSI::ModeReadOut);
|
||||
//string pmOrig = oe_main->getPropertyString("PayModes", "");
|
||||
//oe_main->setProperty("PayModes", "");
|
||||
|
||||
OutputDebugString((L"Running test" + gdi_main->widen(test) + L"\n").c_str());
|
||||
try {
|
||||
status = RUNNING;
|
||||
run();
|
||||
@ -153,6 +156,7 @@ void TestMeOS::runProtected(bool protect) const {
|
||||
gdi_main->isTestMode = false;
|
||||
}
|
||||
catch (const meosAssertionFailure & ex) {
|
||||
OutputDebugString(L"Test FAILED (assert)\n");
|
||||
status = FAILED;
|
||||
oe_main->useDefaultProperties(false);
|
||||
gdi_main->clearDialogAnswers(false);
|
||||
@ -166,6 +170,8 @@ void TestMeOS::runProtected(bool protect) const {
|
||||
}
|
||||
catch (const std::exception &ex) {
|
||||
status = FAILED;
|
||||
OutputDebugString(L"Test FAILED (std)\n");
|
||||
|
||||
oe_main->useDefaultProperties(false);
|
||||
gdi_main->clearDialogAnswers(false);
|
||||
gdi_main->dbRegisterSubCommand(0, "");
|
||||
@ -177,6 +183,8 @@ void TestMeOS::runProtected(bool protect) const {
|
||||
throw;
|
||||
}
|
||||
catch (...) {
|
||||
OutputDebugString(L"Test FAILED (...)\n");
|
||||
|
||||
status = FAILED;
|
||||
oe_main->useDefaultProperties(false);
|
||||
gdi_main->clearDialogAnswers(false);
|
||||
@ -195,7 +203,7 @@ void TestMeOS::runProtected(bool protect) const {
|
||||
for (size_t k = 0; k < tmpFiles.size(); k++)
|
||||
removeTempFile(tmpFiles[k]);
|
||||
tmpFiles.clear();
|
||||
|
||||
OutputDebugString(L"Test PASSED\n");
|
||||
if (protect) {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user