MeOS version 3.8.1306
This commit is contained in:
parent
207af5f771
commit
efa06c00c8
@ -1436,6 +1436,8 @@ void SportIdent::getSI9DataExt(HANDLE hComm)
|
||||
double voltage = 1.9 + (battVoltageRow * 0.09);
|
||||
miliVolt = int(1000 * voltage);
|
||||
|
||||
if (miliVolt > 5000)
|
||||
miliVolt = 900; // Not allowed
|
||||
/*char xx[30];
|
||||
sprintf_s(xx, "V = %f\n\n", voltage);
|
||||
OutputDebugStringA(xx);*/
|
||||
|
||||
@ -586,7 +586,7 @@ bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast)
|
||||
|
||||
if (sm.size() > 0) {
|
||||
gdi.dropLine();
|
||||
gdi.addString("", fontMediumPlus, "Sparade automater").setColor(colorDarkBlue);
|
||||
gdi.addStringUT(fontMediumPlus, lang.tl(L"Sparade automater", true)).setColor(colorDarkBlue);
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
|
||||
@ -610,7 +610,7 @@ bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast)
|
||||
}
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", fontMediumPlus, "Tillgängliga automater").setColor(colorDarkBlue);
|
||||
gdi.addStringUT(fontMediumPlus, lang.tl(L"Tillgängliga automater", true)).setColor(colorDarkBlue);
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("Result", AutoMachine::getDescription(Machines::mPrintResultsMachine), AutomaticCB, "tooltip:resultprint");
|
||||
@ -631,7 +631,7 @@ bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast)
|
||||
gdi.popX();
|
||||
|
||||
if (!machines.empty()) {
|
||||
gdi.addString("", fontMediumPlus, "Startade automater").setColor(colorDarkBlue);
|
||||
gdi.addStringUT(fontMediumPlus, lang.tl(L"Startade automater", true)).setColor(colorDarkBlue);
|
||||
list<AutoMachine *>::iterator it;
|
||||
|
||||
int baseX = gdi.getCX();
|
||||
|
||||
@ -1762,11 +1762,14 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
if (save.empty())
|
||||
throw meosException("Filnamn kan inte vara tomt");
|
||||
|
||||
oe->setProperty("ExpStaFilename", save);
|
||||
bool individual = !gdi.hasWidget("ExportTeam") || gdi.isChecked("ExportTeam");
|
||||
|
||||
bool includeStage = true;
|
||||
if (gdi.hasWidget("IncludeRaceNumber"))
|
||||
if (gdi.hasWidget("IncludeRaceNumber")) {
|
||||
includeStage = gdi.isChecked("IncludeRaceNumber");
|
||||
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||
}
|
||||
|
||||
gdi.getSelection("ClassNewEntries", allTransfer);
|
||||
ImportFormats::ExportFormats filterIndex = ImportFormats::setExportFormat(*oe, gdi.getSelectedItem("Type").first);
|
||||
@ -1806,7 +1809,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
if (save.empty())
|
||||
throw meosException("Filnamn kan inte vara tomt");
|
||||
|
||||
//bool individual = !gdi.hasWidget("ExportTeam") || gdi.isChecked("ExportTeam");
|
||||
oe->setProperty("ExpResFilename", save);
|
||||
gdi.getSelection("ClassNewEntries", allTransfer);
|
||||
|
||||
checkReadyForResultExport(gdi, allTransfer);
|
||||
@ -1816,9 +1819,15 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
bool includeSplits = gdi.isChecked("ExportSplitTimes");
|
||||
|
||||
bool unroll = gdi.isChecked("UnrollLoops"); // If not applicable, field does not exist.
|
||||
if (gdi.hasWidget("UnrollLoops")) {
|
||||
oe->setProperty("ExpUnroll", unroll);
|
||||
}
|
||||
|
||||
bool includeStage = true;
|
||||
if (gdi.hasWidget("IncludeRaceNumber"))
|
||||
if (gdi.hasWidget("IncludeRaceNumber")) {
|
||||
includeStage = gdi.isChecked("IncludeRaceNumber");
|
||||
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||
}
|
||||
|
||||
gdi.setWaitCursor(true);
|
||||
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
||||
@ -1827,13 +1836,14 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
oe->getClassConfigurationInfo(cnf);
|
||||
bool useUTC = oe->getDCI().getInt("UTC") != 0;
|
||||
|
||||
if (!cnf.hasTeamClass()) {
|
||||
if (!gdi.hasWidget("LegType")) {
|
||||
oe->exportIOFSplits(ver, save.c_str(), true, useUTC,
|
||||
allTransfer, -1, false, unroll, includeStage, false);
|
||||
}
|
||||
else {
|
||||
ListBoxInfo leglbi;
|
||||
gdi.getSelectedItem("LegType", leglbi);
|
||||
oe->setProperty("ExpTypeIOF", leglbi.data);
|
||||
wstring file = save;
|
||||
if (leglbi.data == 2) {
|
||||
wstring fileBase;
|
||||
@ -3791,18 +3801,22 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
if (oe->hasTeam()) {
|
||||
gdi.addCheckbox("ExportTeam", "Exportera individuella lopp istället för lag", 0, false);
|
||||
}
|
||||
if (oe->hasMultiRunner() || oe->getStageNumber() > 0)
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0, true);
|
||||
|
||||
if (oe->hasMultiRunner() || oe->getStageNumber() > 0)
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", nullptr,
|
||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||
|
||||
wstring fn = oe->getPropertyString("ExpStaFilename", L"");
|
||||
gdi.addInput("Filename", fn,
|
||||
48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveStartlist");
|
||||
setExportOptionsStatus(gdi, format);
|
||||
|
||||
gdi.addInput("Filename", L"", 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveStartlist");
|
||||
gdi.fillRight();
|
||||
gdi.dropLine();
|
||||
gdi.addButton("BrowseExport", "Bläddra...", CompetitionCB);
|
||||
gdi.addButton("DoSaveStartlist", "Exportera", CompetitionCB).setDefault();
|
||||
gdi.addButton("Cancel", "Avbryt", CompetitionCB).setCancel();
|
||||
gdi.disableInput("DoSaveStartlist");
|
||||
gdi.setInputStatus("DoSaveStartlist", !fn.empty());
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
@ -3826,14 +3840,14 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
gdi.pushX();
|
||||
gdi.addSelection("Type", 250, 200, CompetitionCB, L"Exporttyp:");
|
||||
|
||||
vector< pair<wstring, size_t> > types;
|
||||
vector<pair<wstring, size_t>> types;
|
||||
ImportFormats::getExportFormats(types, true);
|
||||
|
||||
gdi.addItem("Type", types);
|
||||
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
||||
gdi.selectItemByData("Type", format);
|
||||
|
||||
vector< pair<wstring, size_t> > typeLanguages;
|
||||
vector<pair<wstring, size_t>> typeLanguages;
|
||||
ImportFormats::getOECSVLanguage(typeLanguages);
|
||||
|
||||
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
||||
@ -3846,16 +3860,19 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
ClassConfigInfo cnf;
|
||||
oe->getClassConfigurationInfo(cnf);
|
||||
|
||||
if (oe->hasTeam()) {
|
||||
if (cnf.hasTeamClass() || cnf.hasQualificationFinal()) {
|
||||
gdi.addSelection("LegType", 300, 100, 0, L"Exportval, IOF-XML");
|
||||
gdi.addItem("LegType", lang.tl("Totalresultat"), 1);
|
||||
gdi.addItem("LegType", lang.tl("Alla lopp som individuella"), 3);
|
||||
gdi.addItem("LegType", lang.tl("Alla sträckor/lopp i separata filer"), 2);
|
||||
int legMax = cnf.getNumLegsTotal();
|
||||
for (int k = 0; k<legMax; k++) {
|
||||
gdi.addItem("LegType", lang.tl("Sträcka X#" + itos(k+1)), k+10);
|
||||
if (cnf.hasTeamClass()) {
|
||||
gdi.addItem("LegType", lang.tl("Alla sträckor/lopp i separata filer"), 2);
|
||||
int legMax = cnf.getNumLegsTotal();
|
||||
for (int k = 0; k < legMax; k++) {
|
||||
gdi.addItem("LegType", lang.tl("Sträcka X#" + itos(k + 1)), k + 10);
|
||||
}
|
||||
}
|
||||
gdi.selectFirstItem("LegType");
|
||||
if (!gdi.selectItemByData("LegType", oe->getPropertyInt("ExpTypeIOF", 1)))
|
||||
gdi.selectFirstItem("LegType");
|
||||
}
|
||||
|
||||
bool hasLoops = false;
|
||||
@ -3866,20 +3883,23 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
hasLoops = true;
|
||||
}
|
||||
if (hasLoops)
|
||||
gdi.addCheckbox("UnrollLoops", "Unroll split times for loop courses", 0, true);
|
||||
gdi.addCheckbox("UnrollLoops", "Unroll split times for loop courses", 0, oe->getPropertyInt("ExpUnroll", true) != 0);
|
||||
|
||||
if (oe->hasMultiRunner() || oe->getStageNumber() > 0)
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0, true);
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0,
|
||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||
|
||||
wstring fn = oe->getPropertyString("ExpResFilename", L"");
|
||||
gdi.addInput("Filename", fn, 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveSplits");
|
||||
setExportOptionsStatus(gdi, format);
|
||||
gdi.addInput("Filename", L"", 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveSplits");
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.dropLine();
|
||||
gdi.addButton("BrowseExportResult", "Bläddra...", CompetitionCB);
|
||||
gdi.addButton("DoSaveSplits", "Exportera", CompetitionCB).setDefault();
|
||||
gdi.addButton("Cancel", "Avbryt", CompetitionCB).setCancel();
|
||||
|
||||
gdi.disableInput("DoSaveSplits");
|
||||
gdi.setInputStatus("DoSaveSplits", !fn.empty());
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
@ -3902,6 +3922,18 @@ void TabCompetition::setExportOptionsStatus(gdioutput &gdi, int format) const {
|
||||
}
|
||||
|
||||
gdi.setInputStatus("LanguageType", format == ImportFormats::OE);
|
||||
|
||||
if (gdi.hasWidget("Filename")) {
|
||||
wstring fn = gdi.getText("Filename");
|
||||
if (!fn.empty()) {
|
||||
size_t ldot = fn.find_last_of(L".");
|
||||
if (ldot != wstring::npos && ldot > fn.length() - 8 && ldot < fn.length() - 2) {
|
||||
fn = fn.substr(0, ldot+1);
|
||||
fn += ImportFormats::getExtension(ImportFormats::ExportFormats(format));
|
||||
gdi.setText("Filename", fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TabCompetition::clearCompetitionData() {
|
||||
|
||||
@ -213,7 +213,7 @@ void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
||||
gdi.enableEditControls(false);
|
||||
}
|
||||
gdi.refreshFast();
|
||||
gdi.setInputStatus("DrawCourse", pc != 0);
|
||||
gdi.setInputStatus("DrawCourse", pc != 0, true);
|
||||
}
|
||||
|
||||
int CourseCB(gdioutput *gdi, int type, void *data) {
|
||||
@ -764,8 +764,11 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.addButton("ExportCourses", "Exportera...", CourseCB);
|
||||
gdi.popX();
|
||||
gdi.dropLine(2.5);
|
||||
gdi.addButton("DrawCourse", "Lotta starttider..", CourseCB);
|
||||
gdi.disableInput("DrawCourse");
|
||||
|
||||
if (oe->getMeOSFeatures().hasFeature(MeOSFeatures::DrawStartList)) {
|
||||
gdi.addButton("DrawCourse", "Lotta starttider..", CourseCB);
|
||||
gdi.disableInput("DrawCourse");
|
||||
}
|
||||
gdi.newColumn();
|
||||
gdi.fillDown();
|
||||
|
||||
|
||||
@ -75,6 +75,10 @@ bool ClassConfigInfo::hasTeamClass() const {
|
||||
return !relay.empty() || !patrol.empty() || !raceNRes.empty();
|
||||
}
|
||||
|
||||
bool ClassConfigInfo::hasQualificationFinal() const {
|
||||
return !knockout.empty();
|
||||
}
|
||||
|
||||
void ClassConfigInfo::getPatrol(set<int> &sel) const {
|
||||
sel.insert(patrol.begin(), patrol.end());
|
||||
}
|
||||
@ -141,7 +145,7 @@ void oEvent::getClassConfigurationInfo(ClassConfigInfo &cnf) const
|
||||
if (Courses.empty() || (it->getCourse(false) == nullptr && it->getCourse(0,0, false) == nullptr) ||
|
||||
(it->getCourse(false) && it->getCourse(false)->getNumControls() == 0)) {
|
||||
|
||||
if (!it->isQualificationFinalBaseClass()) {
|
||||
if (!it->isQualificationFinalBaseClass() && !it->isQualificationFinalClass()) {
|
||||
// No course.
|
||||
if (runnerPerClass.empty()) {
|
||||
for (auto &r : Runners) {
|
||||
|
||||
@ -80,6 +80,7 @@ public:
|
||||
void getRogainingTeam(set<int> &sel) const;
|
||||
|
||||
bool hasTeamClass() const;
|
||||
bool hasQualificationFinal() const;
|
||||
|
||||
void getRaceNStart(int race, set<int> &sel) const;
|
||||
void getLegNStart(int leg, set<int> &sel) const;
|
||||
|
||||
2170
code/czech.lng
2170
code/czech.lng
File diff suppressed because it is too large
Load Diff
@ -433,7 +433,7 @@ Ingen bana = No course
|
||||
Ingen deltagare matchar sökkriteriet = No competitor match the search criteria
|
||||
Ingen klass = No class
|
||||
Ingen klass vald = No class selected
|
||||
Ingen löpare saknar bricka = All runners has a card
|
||||
Ingen löpare saknar bricka = All runners have a card
|
||||
Ingen matchar 'X' = No match for 'X'
|
||||
Ingen rogaining = No rogaining
|
||||
Inkommande = Incoming
|
||||
@ -680,7 +680,7 @@ Nästa etapp = Next stage
|
||||
Nästa försök = Next try
|
||||
OE Semikolonseparerad (csv) = OE Semicolon separated (csv)
|
||||
OK = OK
|
||||
Ogiltig banfil. Kontroll förväntad på position X, men hittade 'Y' = Invalid course file. Expected a control number at position X, but found 'Y'
|
||||
Ogiltig banfil. Kontroll förväntad på position X, men hittade 'Y' = Invalid course file. Expected a control number at position X, but found 'Y'
|
||||
Ogiltig föregående/efterföljande etapp = Invalid previous/next stage
|
||||
Ogiltig första starttid. Måste vara efter nolltid = Invalid first start time. Must be after zero time
|
||||
Ogiltig omstartstid = Invalid restart time
|
||||
@ -881,7 +881,7 @@ Skippar lottning = Skip drawing start order
|
||||
Skript = Script
|
||||
Skript att köra efter export = Script to run after export
|
||||
Skriv endast ut ändade sidor = Only print modified pages
|
||||
Skriv första bokstaven i klubbens namn och tryck pil-ner för att leta efter klubben = Type the first letters of the club name and press down arrow to find the club.
|
||||
Skriv första bokstaven i klubbens namn och tryck pil-ner för att leta efter klubben = Type the first letters of the club's name and press down arrow to find the club.
|
||||
Skriv första starttid på formen HH:MM:SS = Write the first start time as HH:MM:SS
|
||||
Skriv ut = Print
|
||||
Skriv ut alla = Print all
|
||||
@ -1001,7 +1001,7 @@ Stämpelkoder = Punching codes
|
||||
Stämplar om = Punching in
|
||||
Stämplingar = Punches
|
||||
Stämplingar saknas: X = Missing punches: X
|
||||
Stämplingsautomat = Punch machine
|
||||
Stämplingsautomat = Control punch service
|
||||
Stämplingsintervall (MM:SS) = Punch interval (MM:SS)
|
||||
Stämplingstest = Punching Test
|
||||
Stämplingstest [!] = Punch Test [!]
|
||||
@ -1298,7 +1298,7 @@ går upp i delad ledning med tiden X = takes a shared lead with the time X
|
||||
handskakning = hand shaking
|
||||
har startat = has started
|
||||
help:10000 = A service in MeOS is a small program that automatically does something every now and then or when the competition data is changed.
|
||||
help:12138 = Select a class to merge with the this class. If start times are drawn you might want to draw again, since the runners keep their start times.
|
||||
help:12138 = Select a class to merge with this class. If start times are drawn you might want to draw again, since the runners keep their start times.
|
||||
help:12290 = The competition is created by another version of MeOS and cannot be opened from a server. You can however import the competition from file.
|
||||
help:12352 = This operation removes the club you have chosen (%s, id=%d) and moves all runners of that club to the new club you choose below. The operation cannot be undone.
|
||||
help:12662 = Add controls by adding a sequence of control numbers (control id numbers). You need not specify the finish. Example: 31, 50, 36, 50, 37, 100.
|
||||
@ -1306,10 +1306,10 @@ help:14070 = The TCP port is used for receiving punches over TCP from other syst
|
||||
help:14343 = A list with read card is shown. To tie a runner to another card, double click the card or runner you wish to move.
|
||||
help:146122 = You can extend MeOS knowledge of runners, clubs and classes by searching databases in MeOS format or the IOF (xml) format.\n\nDo you wish to proceed?
|
||||
help:14692 = Input control number, runner (start number or card number) and clock time (HH:MM:SS). You may leave the time field blank; then the computer clock is used. Press <Enter> to save.
|
||||
help:15491 = You can export settings, club and runner databases to a specified folder. This settings and databases can be imported to another computer.
|
||||
help:15491 = You can export settings, club and runner databases to a specified folder. These settings and databases can be imported to another computer.
|
||||
help:21576 = If you make a mistake, click the runners name to change the entry. Use the page runners to remove entries. To see a class in the list below, it must be marked for quick entry on the page classes.
|
||||
help:25041 = Here you define your courses. A course is then tied to one or more classes (or runners). It is also possible to import courses from OCAD, Condes, or other course software. If you specify the number of maps, MeOS will keep track of available maps in the quick entry form.
|
||||
help:26963 = A course pool is used for defining a pool of courses for a leg. The course is tied to the runner on finish by control matching. Define courses in the pool by adding them under Several Courses / Relay. An [S] after the class means that all its competitors has a start time.
|
||||
help:26963 = A course pool is used for defining a pool of courses for a leg. The course is tied to the runner on finish by control matching. Define courses in the pool by adding them under Several Courses / Relay. An [S] after the class means that all its competitors have a start time.
|
||||
help:29191 = You can install settings, clubs and runner database from a specified source folder. Your local settings are overwritten. MeOS might be restarted after the installation.\n\nThe button <Export> takes you to a page where instead you can export your current settings.
|
||||
help:29758 = Here you manage clubs and print invoices. You can assign competition fees based on class type and entry date. Duplicated (misspelled) clubs can be merged with the corresponding correct club. You can also update club addresses from the registry.
|
||||
help:30750 = You can create many different sorts of lists and reports. These can be shown on screen, printed, or saved in web format. The list is automatically updated when competition data is changed. Automatic result printing is done on the page Services. To export competition data, for example split times, go to the page Competition.
|
||||
@ -1323,23 +1323,23 @@ help:50431 = You are now connected to a server. To open a competition on the ser
|
||||
help:52726 = Connect to a server below.\n\nInstallation\nDownload and install MySQL 5 (Community Edition) from www.mysql.com. You can use default settings. It is only necessary to install MySQL on the computer acting server. When MySQL is installed, start MySQL Command Line Client and create a user account for MeOS. You write like this:\n\n> CREATE USER meos;\nGRANT ALL ON *.* TO meos;\n\nYou have now created a user meos with no password. Enter the name of the server below (you may have to configure firewalls to let through the traffic).\n\nAs an alternative you can use the built-in root account of MySQL. User name is 'root' and password is the one you provided when installing MySQL.
|
||||
help:5422 = Found no SI unit. Are they connected and started?
|
||||
help:59395 = In this form, you can quickly make basic settings for many classes in one step.\n\nStart is the name of the start as it is printed in the start list.\n\nBlock is a number between 0 and 100 which can provide an even finer distribution of runners. Classes in the same block will be printed on the same minute start list. \n\nIndex is a sorting key. The classes are sorted by this key in all lists.\n\nThe course can be specified for classes which have exactly one course; if there are several possible courses you need to use the standard class form.\n\nQuick entry determines if the class supports quick entry mode, i.e., is a possible choice in the quick entry class list.
|
||||
help:59395_more = The class fees, which shows if you have activated Economy features, are used for new entries. If you change a fee, MeOS will ask if you wish to apply the change to existing competitors.\n\nFor bibs you have the options None, Consecutive and Manual. You can also type the first bib in the class, for example A100, or 50. Consecutive means that the last number of the preceeding class is used to define the first number in this class. Reserved bib numbers gives a gap (of the specified width) in the numbering between classes.\n\nMeOS updates bibs when you draw start times or change the settings. Manual means that MeOS will never automatically update bibs.\n\nFor classes with teams the setting Team member controls the relation between the team number and the bibs. It can be the same, increasing (100, 101, 102), leg dependent (100-1, 100-2, etc.) or completely independent.
|
||||
help:59395_more = The class fees, which shows if you have activated Economy features, are used for new entries. If you change a fee, MeOS will ask if you wish to apply the change to existing competitors.\n\nFor bibs you have the options None, Consecutive and Manual. You can also type the first bib in the class, for example A100, or 50. Consecutive means that the last number of the preceding class is used to define the first number in this class. Reserved bib numbers give a gap (of the specified width) in the numbering between classes.\n\nMeOS updates bibs when you draw start times or change the settings. Manual means that MeOS will never automatically update bibs.\n\nFor classes with teams the setting Team member controls the relation between the team number and the bibs. It can be the same, increasing (100, 101, 102), leg dependent (100-1, 100-2, etc.) or completely independent.
|
||||
help:7618 = The number of runners in a team is specified on the page Classes.
|
||||
help:7620 = Interval (seconds). Leave the field blank to update when the competition is changed.
|
||||
help:89064 = For every control, you specify one or more code number (SI codes). In a course, you refer to the control by its ID number. Usually, you do not need to add controls manually, since MeOS automatically adds all controls needed.\n\nMore than one SI code is useful for replacing malfunctioning controls or to create simple forks. For an ordinary control, it is required that the runner visit on of the specified controls. If the control status is <Multiple>, all specified controls must be visited (in any order). If the status is <Bad>, the control is ignored.\n\nThe status <Lost> works like <Bad>, but in addition the running time to the next control is ignored; it does not matter for the final time how much time was spent looking for the lost control.\n\nIf you specify a control name, it is possible to print result lists with intermediate times at named controls.\n\nTime adjustment can be used if it turns out that a control has wrong time. Time format is +/-MM:SS or +/-HH:MM:SS.\n\nShortest leg time defines the shortest possible time on that leg. No runner will get a shorter time to this control, no matter how fast he/she is. This can be used, for example, if a dangerous road must be crossed.\n\nStatus <No timing> means that the time to the control is ignored; the total time will be the same no matter what the actual time to this control is.
|
||||
help:9373 = Provide one or more control numbers (SI codes) used by this control.\nExample: 31, 250.
|
||||
help:9615 = Received no answer. Do you want to open the port in passive mode; should MeOS listen to incoming punches?
|
||||
help:assignfee = MeOS will take care of entry fees for you automatically in many cases. The competitors are assigned fees based on age and entry date (you define the limits under Competition Settings). Every class defines its fees. You provide default values for different class types under Competition Settings, but you can also manually change class settings using Quick Settings for the class.\n\nThis page lets you manually use different ages and time limits for different fees. On the page competitor, you can manually adjust the fee for individual competitors, if needed.
|
||||
help:baudrate = Transmission speed/Baudrate: use 4800 or 38400.
|
||||
help:baudrate = Transmission speed/Baud rate: use 4800 or 38400.
|
||||
help:computer_voice = An incoming punch is matched against a start number and plays the file <N.wav>, where N is the start number. The files are located in the folder below. If the runner/team belongs has nationality NAT, MeOS first tries to play the file <NAT/N.wav>, which should contain the number in an appropriate language version.
|
||||
help:dbage = The runner database is older than two months. Do you wish to download a new database from Eventor?
|
||||
help:duplicate = Make a local copy of this competition.
|
||||
help:eventorkey = Type your club's Eventor (Sweden) API key. You get the key from your club's Eventor administrator.
|
||||
help:fullscreen = You can adjust the scroll speed using Ctrl+M (increase) and Ctrl+N (decrease) on your keyboard. To escape full screen mode, press Esc.
|
||||
help:import_entry_data = You can import runners, classes, clubs and entries from a number of different text and XML formats. It is not necessary to provide all files below. For example, an OE-CSV file with entries contains clubs and classes, so in that case these fields should be left empty.\n\nIf the same runner is imported several times you will not get several copies of the runner. Instead the entry is updated. This means that it is harmless to re-import or import an extended file with entries.
|
||||
help:import_entry_data = You can import runners, classes, clubs and entries from a number of different text and XML formats. It is not necessary to provide all files below. For example, an OE-CSV file with entries contains clubs and classes, so in that case these fields should be left empty.\n\nIf the same runner is imported several times, you will not get several copies of the runner. Instead, the entry is updated. This means that it is harmless to re-import or import an extended file with entries.
|
||||
help:importcourse = You can import courses and classes from (for example) an OCAD or Condes export.
|
||||
help:ocad13091 = If you have access to the courses (for example, from OCAD or Condes) you can provide the name of the course file here. Otherwise, you may add courses later.
|
||||
help:relaysetup = Use the guide below to choose between a number of predefined competition forms. After you apply the settings, it is possible to manually adapt the settings for each leg and setup courses.\n\nSome explanations:\n- Relay is used for different kinds of relays.\n- Two-runner relay means that two runners make a team and take turns running.\n- Co-runner relay is sometimes used in youth classes and allow for more than one runner on some legs. (the first runner changes over).\n- A patrol race can be run with one or two punching cards.\n- Prologue + pursuit is individual, but with two races.\n- Course pool means there are several course variants, but that it is not decided in advance who runs which course; it is decided automatically when the runner finishes.
|
||||
help:relaysetup = Use the guide below to choose between a number of predefined competition forms. After you apply the settings, it is possible to manually adapt the settings for each leg and setup courses.\n\nSome explanations:\n- Relay is used for different kinds of relays.\n- Two-runner relay means that two runners make a team and take turns running.\n- Co-runner relay is sometimes used in youth classes and allow for more than one runner on some legs. (The first runner changes over).\n- A patrol race can be run with one or two punching cards.\n- Prologue + pursuit is individual, but with two races.\n- Course pool means there are several course variants, but that it is not decided in advance who runs which course; it is decided automatically when the runner finishes.
|
||||
help:restore_backup = Choose a backup to restore by clicking the time when the backup was created.
|
||||
help:runnerdatabase = By importing a runner and club database, MeOS will automatically recognize unknown runners (by card number), and you will get addresses and phone numbers to clubs.
|
||||
help:save = MeOS automatically saves all settings when needed.
|
||||
@ -1355,7 +1355,7 @@ help_draw = You draw the start list in a two-step process. First you choose whic
|
||||
info:multieventnetwork = To handle more than one stage you must work locally. Save a copy of the competition, open it locally and transfer results to the next stage. Then upload the next stage to the server.
|
||||
info:readout_action = X: Card no. Y was read out.\nManual actions needed.
|
||||
info:readout_queue = X: Card no. Y was read out.\nThe card has been queued.
|
||||
inforestwarning = No runners seems to be in the forest. Since the data behind this conclusion might be incorrect, you should verify that no runner is left in the forest by other means.
|
||||
inforestwarning = No competitors seem to be in the forest. Since the data behind this conclusion might be incorrect, you should verify that no runner is left in the forest by other means.
|
||||
kartor = maps
|
||||
klar = settled
|
||||
kontroll = control
|
||||
@ -1449,7 +1449,7 @@ xml-data = xml data
|
||||
Öppna tävling = Open Competition
|
||||
Öppna vald tävling = Open selected competition
|
||||
Öppnad tävling = Opened competition
|
||||
Överför anmälda = Transfer entires
|
||||
Överför anmälda = Transfer entries
|
||||
Överför nya deltagare i ej valda klasser med status "deltar ej" = Transfer new competitors in remaining classes with status <Not taking part>
|
||||
Överför resultat = Transfer results
|
||||
Överför resultat till X = Transferring results to X
|
||||
@ -1602,9 +1602,9 @@ Hantera egna listor = Manage Custom Lists
|
||||
Redigera = Edit
|
||||
Skriver sträcktider när tävlingsdata ändras = Writing file when competition data is changed
|
||||
Bana med slingor = Course with loops
|
||||
En bana med slingor tillåter deltagaren att ta slingorna i valfri ordning = A course with loops allow the competitor to take the loops in any order
|
||||
En bana med slingor tillåter deltagaren att ta slingorna i valfri ordning = A course with loops allows the competitor to take the loops in any order
|
||||
Varvningskontroll = Common control
|
||||
warn:notextended = INFO: Program the unit with extended protocol in SI.Config to speed up card reading.
|
||||
warn:notextended = INFO: Program the unit with extended protocol in SIConfig to speed up card reading.
|
||||
help:DirectResult = - If there is no course, the status is set to OK on finish punch.\n\n- If there is a course, radio punches are used as controls. No card readout is necessary.
|
||||
Resultat vid målstämpling = Result on finish punch
|
||||
Stämpling = Punch
|
||||
@ -1688,7 +1688,7 @@ Klassval = Class selection
|
||||
The forking is not fair = The forking is not fair
|
||||
Unfair control legs = Unfair control legs
|
||||
Växel = Changeover
|
||||
help:teamlineup = Here you can import team line-ups from a structured text based format, which is easy to produce manually from a spreadsheet program. The file must have the following format:\n\nClass;Team name;[Club]\nCompetitor 1;[Card No];[Club];[Course];[Competitor's class]\nCompetitor 2;[Card No];[Club];[Course];[Competitor's class]\n...\nClass;Team name;[Club]\n...\n\nFields marked with [] may be excluded. Note that referred classes and courses must exist, and that the number of legs in the class must match the number of competitor rows following the class. Empty rows can be used if there is no competitor. The option <Use competitors already in competition> means that only competitors already in the competition are moved to the team; other competitors specified are ignored.
|
||||
help:teamlineup = Here you can import team line-ups from a structured text-based format, which is easy to produce manually from a spreadsheet program. The file must have the following format:\n\nClass;Team name;[Club]\nCompetitor 1;[Card No];[Club];[Course];[Competitor's class]\nCompetitor 2;[Card No];[Club];[Course];[Competitor's class]\n...\nClass;Team name;[Club]\n...\n\nFields marked with [] may be excluded. Note that referred classes and courses must exist, and that the number of legs in the class must match the number of competitor rows following the class. Empty rows can be used if there is no competitor. The option <Use competitors already in competition> means that only competitors already in the competition are moved to the team; other competitors specified are ignored.
|
||||
Poängjustering = Point adjustment
|
||||
Use initials in names = Use initials in names
|
||||
Exportera klubbar (IOF-XML) = Export Clubs (IOF-XML)
|
||||
@ -1845,8 +1845,8 @@ Debug X for Y = Debug X for Y
|
||||
Do you want to clear the card memory? = Do you want to clear the card memory?
|
||||
Portable Document Format (PDF) = Portable Document Format (PDF)
|
||||
Poängavdrag = Point reduction
|
||||
RunnerPointAdjustment = Competitors's point adjustment
|
||||
RunnerTimeAdjustment = Competitors's time adjustment
|
||||
RunnerPointAdjustment = Competitor's point adjustment
|
||||
RunnerTimeAdjustment = Competitor's time adjustment
|
||||
Save changes in rule code? = Save changes in rule code?
|
||||
Symboler = Symbols
|
||||
TeamPointAdjustment = Team's point adjustment
|
||||
@ -1896,8 +1896,8 @@ OL-Skytte med tidstillägg = Orienteering/Shooting with Time Punishment
|
||||
OL-Skytte utan tidstillägg = Orienteering/Shooting without Time Punishment
|
||||
OL-Skytte stafettresultat = Orienteering/Shooting Relay
|
||||
Sluttid = Final time
|
||||
olshooting:timepunishment = Result list Orienteering/Shooting with Time Punichment.\n\nActivate support for Rogaining and manual point adjustments. The use the field Point reduction on the page Competitors to specify misses on the form PPPLLSS, where PPP is the point orienteering error in millimetres, LL misses lying and SS is misses standing. Example 30201 means 3 mm error, 2 lying and 1 standing miss.
|
||||
olshooting:notimepunishment = Result list Orienteering/Shooting without Time Punichment.\n\nActivate support for Rogaining and manual point adjustments. The use the field Point reduction on the page Competitors to specify misses on the form LLSS, where LL means misses lying and SS means misses standing. Example: 0201 means 2 lying and 1 standing miss.
|
||||
olshooting:timepunishment = Result list Orienteering/Shooting with Time Punishment.\n\nActivate support for Rogaining and manual point adjustments. The use the field Point reduction on the page Competitors to specify misses on the form PPPLLSS, where PPP is the point orienteering error in millimeters, LL misses lying and SS is misses standing. Example 30201 means 3 mm error, 2 lying and 1 standing miss.
|
||||
olshooting:notimepunishment = Result list Orienteering/Shooting without Time Punishment.\n\nActivate support for Rogaining and manual point adjustments. The use the field Point reduction on the page Competitors to specify misses on the form LLSS, where LL means misses lying and SS means misses standing. Example: 0201 means 2 lying and 1 standing miss.
|
||||
Namnet kan inte vara tomt = The name cannot be empty
|
||||
Ingen / okänd = None / unknown
|
||||
Inget nummer = No number
|
||||
@ -1936,7 +1936,7 @@ Avkortad banvariant = Shortened course
|
||||
Avkortning = Shortening
|
||||
Hantera laget = Manage team
|
||||
Med avkortning = With shortening
|
||||
info_shortening = Select an existing course that shortens the current course. Several levels of shortening is possible.
|
||||
info_shortening = Select an existing course that shortens the current course. Several levels of shortening are possible.
|
||||
Tilldela starttider = Assign start times
|
||||
Avkortar: X = Shortens: X
|
||||
Vill du nollställa alla manuellt tilldelade banor? = Do you wish to clear all manually assigned courses?
|
||||
@ -2030,7 +2030,7 @@ Vill du att X och Y byter sträcka? = Do you want X and Y to switch leg?
|
||||
Vill du att X tar sträckan istället för Y? = Do you want X to run the leg instead of Y?
|
||||
Ändra lagets gaffling = Change Team Forking
|
||||
Deltagarens klass styrs av laget = The class is defined by the team
|
||||
För att delta i en lagklass måste deltagaren ingå i ett lag = To participate in a team class you need to assign a team to the competitor
|
||||
För att delta i en lagklass måste deltagaren ingå i ett lag = To participate in a team class, you need to assign a team to the competitor
|
||||
Dela upp = Split
|
||||
Alla sträckor = All legs
|
||||
Liveresultat, deltagare = Live Results, individual
|
||||
@ -2067,13 +2067,13 @@ StartTimeForClassRange = Class start time range
|
||||
TeamStartCond = Team's start time (if individual)
|
||||
Liveresultat = Live Results
|
||||
Visa rullande tider mellan kontroller i helskärmsläge = Show rolling times between controls in full screen mode
|
||||
help:liveresultat = This method starts a timer in full screen mode (large-screen) when a competitor in a selected class punches the <From> control, and measures the time until the <To> control is reached. Otherwise a top list with the best results is shown. Both controls need of course be online controls and if you use a network, make sure to activate <fast advance information on control punches> to get a responsive timer.
|
||||
help:liveresultat = This method starts a timer in full screen mode (large-screen) when a competitor in a selected class punches the <From> control, and measures the time until the <To> control is reached. Otherwise, a top list with the best results is shown. Both controls need of course be online controls and if you use a network, make sure to activate <fast advance information on control punches> to get a responsive timer.
|
||||
Result at a control = Result at a control
|
||||
Total/team result at a control = Total/team result at a control
|
||||
prefsAccount = Default account number
|
||||
prefsAddress = Default address
|
||||
prefsAdvancedClassSettings = Show advanced class settings
|
||||
prefsAutoSaveTimeOut = Automatic backup intervall (ms)
|
||||
prefsAutoSaveTimeOut = Automatic backup interval (ms)
|
||||
prefsCardFee = Default card fee
|
||||
prefsClient = Name of client in a network
|
||||
Vissa inställningar kräver omstart av MeOS för att ha effekt = Some settings require a restart of MeOS to have effect
|
||||
@ -2168,7 +2168,7 @@ Inget filter = No filter
|
||||
Inlästa stämplar = Read punches
|
||||
Löpare saknas = No competitor
|
||||
Klasserna X och Y har samma externa id. Använd tabelläget för att ändra id = The classes X and Y have the same external id. Use the table mode to correct the id
|
||||
Vill du koppla isär X från inläst bricka Y? = Would you like to disconnect X from the read out card Y?
|
||||
Vill du koppla isär X från inläst bricka Y? = Would you like to disconnect X from the read-out card Y?
|
||||
RunnerRogainingPointGross = Rogaining points before reduction
|
||||
Samlade poäng = Collected points
|
||||
Tidsavdrag = Reduction
|
||||
@ -2278,7 +2278,7 @@ Markera för att förhindra oavsiktlig ändring av gafflingsnycklar = Check to p
|
||||
Tillåt gafflingsändringar = Allow forking modification
|
||||
ask:updatetimes = Do you wish to keep all currently assigned start times, if possible? Answer no to move the competition in time.
|
||||
X har en tid (Y) som inte är kompatibel med förändringen = X has a time (Y) that is incompatible with this change
|
||||
warn:latestarttime = Using start times more than X hours after the zero time is not recommended, since older SI cards only has a 12 hour clock.\n\nDo you wish to proceed anyway?
|
||||
warn:latestarttime = Using start times more than X hours after the zero time is not recommended, since older SI cards only has a 12-hour clock.\n\nDo you wish to proceed anyway?
|
||||
Anm. tid = Entry time
|
||||
RunnerEntryDate = Competitor's entry date
|
||||
RunnerEntryTime = Competitor's entry time
|
||||
@ -2296,7 +2296,7 @@ Testa servern = Test the server
|
||||
help:rest = MeOS REST API lets you access competition data via a web connection. You can show result lists directly in a web browser, but you can also request competition data and results in an XML format, suitable for further processing in third party programs and apps.
|
||||
Server startad på X = Server running on port X
|
||||
Inconsistent qualification rule, X = Inconsistent qualification rule, X
|
||||
help:LockStartList = MeOS will not update assignement to a locked class even if qualification results are altered.
|
||||
help:LockStartList = MeOS will not update assignment to a locked class even if qualification results are altered.
|
||||
Kval/final-schema = Qualification/final scheme
|
||||
Lås startlista = Lock start list
|
||||
FilterNoCancel = Not cancelled
|
||||
@ -2309,7 +2309,7 @@ Rogaining results for a patrol = Rogaining results for a patrol of two or more c
|
||||
Exportera ett kalkylblad med lottningsinställningar som du kan redigera och sedan läsa in igen = Export a spreadsheet with draw settings that you can edit and then import again
|
||||
Kalkylblad/csv = Spreadsheet/csv
|
||||
Importerar lottningsinställningar = Importing draw settings
|
||||
help:exportdraw = You can export a spreadsheet in csv format, containing classes, number of comptitors, and draw settings for each class. It is then possible to edit the start data and then import it back into MeOS to draw the classes accordingly.
|
||||
help:exportdraw = You can export a spreadsheet in csv format, containing classes, number of competitors, and draw settings for each class. It is then possible to edit the start data and then import it back into MeOS to draw the classes accordingly.
|
||||
prefsDrawInterlace = Interlace class/course when drawing start lists
|
||||
prefsServicePort = Default service port
|
||||
Ingen nummerlapp = No bib
|
||||
@ -2367,7 +2367,7 @@ Endast tidtagning (utan banor), stafett = Only timekeeping (no courses), relay
|
||||
Individuellt = Individual
|
||||
Lag och stafett = Team and relay
|
||||
Övrigt = Miscellaneous
|
||||
htmlhelp = HTML can be exported as a structured table or as a freely formatted document (more similar to the MeOS lists). You can also use export templates for custom formatting: columns, JavaScript base page flips, automatic scrolling, etc. It is possible to add custom templates by adding '.template' files in MeOS data folder. If you use a template there is a number of parameters to set below. The exact interpretation depends on the template..\n\nIf you select <Store Settings> the list and its settings is stored permanently in the competition. You can then access the list by using MeOS as a web server (The service 'Information Server') or export the list automatically at regular intervals.
|
||||
htmlhelp = HTML can be exported as a structured table or as a freely formatted document (more similar to the MeOS lists). You can also use export templates for custom formatting: columns, JavaScript base page flips, automatic scrolling, etc. It is possible to add custom templates by adding '.template' files in MeOS data folder. If you use a template there is a number of parameters to set below. The exact interpretation depends on the template.\n\nIf you select <Store Settings> the list and its settings is stored permanently in the competition. You can then access the list by using MeOS as a web server (The service 'Information Server') or export the list automatically at regular intervals.
|
||||
HTML Export = HTML Export
|
||||
HTML Export för 'X' = HTML Export of 'X'
|
||||
Lagra inställningar = Store settings
|
||||
@ -2378,7 +2378,7 @@ Begränsa antal rader per sida = Limit rows per page
|
||||
Färre slingor = Fewer loops
|
||||
RunnerGrossTime = Competitor's time before adjustment
|
||||
TeamGrossTime = Team's time before adjustment
|
||||
Visa detaljerad rapport för viss deltagare = Show a detailed report for a specific competor
|
||||
Visa detaljerad rapport för viss deltagare = Show a detailed report for a specific competitor
|
||||
Förhindra att laget deltar i någon omstart = Prevent that the team takes part in a restart
|
||||
Förhindra omstart = Prevent restart
|
||||
Ej omstart = No restart
|
||||
@ -2408,7 +2408,7 @@ info:pageswithcolumns = Show the list one page at the time, with the specified n
|
||||
Pages with columns = Pages with columns
|
||||
Pages with columns, no header = Pages with columns, no header
|
||||
Externa adresser = External links
|
||||
info:advanceinfo = Starting the service for instant result transfer failed. Results will be recieved with a few seconds delay. This is expected behaviour if more than one MeOS process is started on this computer.
|
||||
info:advanceinfo = Starting the service for instant result transfer failed. Results will be received with a few second's delay. This is expected behavior if more than one MeOS process is started on this computer.
|
||||
Klassen är full = The class is full
|
||||
Flytta upp = Move up
|
||||
Flytta ner = Move down
|
||||
@ -2492,7 +2492,7 @@ Vakansplacering = Vacancy placement
|
||||
Först = First
|
||||
Lottat = Drawn
|
||||
Sist = Last
|
||||
Fakturadatum = Fakturadatum
|
||||
Fakturadatum = Invoice date
|
||||
Youth Cup X = Youth Cup X
|
||||
Ny startgrupp = New starting group
|
||||
Slut = End
|
||||
@ -2509,7 +2509,7 @@ Infoga version: X = Merge version: X
|
||||
Samma bastävling = Same base competition
|
||||
Sammanslagning fungerar om samma uppsättning banor/kontroller används = The merge will work if the same set of courses and controls are used
|
||||
Varning: Olika bastävlingar = Warning: Different base competitions
|
||||
Borttagna: X = Borttagna: X
|
||||
Borttagna: X = Removed: X
|
||||
Fel: En tävling kan inte slås ihop med sig själv = Error: Cannot merge a competition with itself
|
||||
Sammanfattning, uppdateradet poster = Summary, updated data entities
|
||||
Sammanslagning klar = Merge complete
|
||||
@ -2522,7 +2522,7 @@ Flytta deltagare från överfulla grupper = Move competitors from full groups
|
||||
Lotta med startgrupper = Draw with Starting Groups
|
||||
Startgrupp med id X tilldelad Y finns inte = Starting group with ID X defined for Y does not exist
|
||||
Använd om möjligt samma dator som användes vid senaste importen = If possible, use the same computer that was used to import the last time
|
||||
Tillåt borttagning av löpare (med mera) som raderats i den importerade tävlingen = Allow removal of competitors (etc) that has was deleted in the imported version.
|
||||
Tillåt borttagning av löpare (med mera) som raderats i den importerade tävlingen = Allow removal of competitors (etc) that were deleted in the imported version.
|
||||
Varning: Kunde inte hitta föregående version av tävlingen (X) = Warning: Could not find the previous version of the competition (X)
|
||||
ClassDefaultResult = Class, Default result
|
||||
RunnerCoursePlace = Competitor's place on course
|
||||
@ -2532,16 +2532,16 @@ RunnerStageTime = Competitor's time (on stage)
|
||||
RunnerStageStatus = Competitor's status (on stage)
|
||||
RunnerStageTimeStatus = Competitor's time or status (on stage)
|
||||
EFilterIncludeNotParticipating = Include not participating
|
||||
RunnerStageNumber = Stage number earlier stage
|
||||
RunnerStageNumber = Stage number (for result of previous stage)
|
||||
Begränsa bredd (klipp text) = Limit width (crop text)
|
||||
Håll ihop med = Keep columns close
|
||||
Justering i sidled = Line adjustment
|
||||
Justering i sidled = Horizontal adjustment
|
||||
Minsta blockbredd = Least width
|
||||
Relation till föregående = Relation to previous
|
||||
Bantilldelning hänvisar till en löpare (X) som saknas i laget (Y) = Course assignment specifies a competitor (X) that is missing in the team (Y)
|
||||
warn:mysqlbinlog = Performance warning: Could not disable binary logging. Uploading can be slow.\n\nX
|
||||
Server version: X = Server version: X
|
||||
prefsDatabaseEngine = Typ av databastabell för nya tävlingar (MySQL)
|
||||
prefsDatabaseEngine = Type of database table for new competitions (MySQL)
|
||||
Startgrupperna X och Y överlappar = Start groups X and Y are overlapping
|
||||
Batteristatus = Battery status
|
||||
Low = Low
|
||||
@ -2563,7 +2563,7 @@ Ljudval = Sound selection
|
||||
Markera allt (X) = Select all (X)
|
||||
Markera inget (X) = Select none (X)
|
||||
Ny ledare i klassen = New class leader
|
||||
Sparade automater = Saved machines
|
||||
Sparade automater = Saved services
|
||||
Spela upp ett ljud för att indikera resultatet av brickavläsningen = Play a sound to indicate the result of the card readout.
|
||||
Status inte OK (röd utgång) = Status not OK (red exit)
|
||||
help:selectsound = Select sounds to play. By default MeOS builtin sounds are played.
|
||||
@ -2584,7 +2584,7 @@ Sortera stigande = Sort increasing
|
||||
Sök symbol = Search for symbol
|
||||
Testa = Test
|
||||
Fel: Använd X i texten där värdet (Y) ska sättas in = Error: Use X in the text where the value (Y) should be used
|
||||
info:teamcourseassignment = The imported file contains forking data for teams. To import this data you must prepare the competition to match the imported file: \n\n1. Ensure all classes are setup with the correct number of legs.\n2. Provide bib numbers in each class. Use Quick Settings on the page Classes and enter the first bib number in each class (meaning automatic bib setting). You can also import the teams first and assign bibs as usual.\n3. Import the courses. You can import this file several times if needed to update the forking.
|
||||
info:teamcourseassignment = The imported file contains forking data for teams. To import this data, you must prepare the competition to match the imported file: \n\n1. Ensure all classes are setup with the correct number of legs.\n2. Provide bib numbers in each class. Use Quick Settings on the page Classes and enter the first bib number in each class (meaning automatic bib setting). You can also import the teams first and assign bibs as usual.\n3. Import the courses. You can import this file several times if needed to update the forking.
|
||||
Försvunnen = Missing
|
||||
Automatnamn = Service name
|
||||
Använd = Use
|
||||
|
||||
@ -1473,6 +1473,7 @@ void GeneralResult::calculateIndividualResults(vector<pRunner> &runners,
|
||||
const pair<int, int> & controlId,
|
||||
bool totalResults,
|
||||
bool inclForestRunners,
|
||||
bool inclPreliminary,
|
||||
const string &resTag,
|
||||
oListInfo::ResultType resType,
|
||||
int inputNumber,
|
||||
@ -1491,7 +1492,7 @@ void GeneralResult::calculateIndividualResults(vector<pRunner> &runners,
|
||||
for (pRunner r : runners) {
|
||||
clsId.insert(r->getClassId(true));
|
||||
}
|
||||
oe.calculateResults(clsId, oEvent::ResultType::ClassResult, true);
|
||||
oe.calculateResults(clsId, oEvent::ResultType::ClassResult, inclPreliminary);
|
||||
for (pRunner r : runners) {
|
||||
ri.status = r->getStatus();
|
||||
if (ri.status == StatusUnknown) {
|
||||
@ -1520,7 +1521,7 @@ void GeneralResult::calculateIndividualResults(vector<pRunner> &runners,
|
||||
}
|
||||
}
|
||||
else {
|
||||
oe.calculateResults(set<int>(), oEvent::ResultType::TotalResult, true);
|
||||
oe.calculateResults(set<int>(), oEvent::ResultType::TotalResult, inclPreliminary);
|
||||
for (pRunner r : runners) {
|
||||
ri.status = r->getTotalStatus();
|
||||
if (ri.status == StatusUnknown && r->getInputStatus() == StatusOK) {
|
||||
|
||||
@ -128,6 +128,7 @@ public:
|
||||
const pair<int, int> &controlId,
|
||||
bool totalResults,
|
||||
bool inclForestRunners,
|
||||
bool inclPreliminary,
|
||||
const string &resTag,
|
||||
oListInfo::ResultType resType,
|
||||
int inputNumber,
|
||||
|
||||
@ -187,6 +187,7 @@
|
||||
<h2>Results</h2>
|
||||
<b>Syntax:</b>
|
||||
<pre><a href="/meos?get=result">/meos?get=result</a></pre>
|
||||
<pre><a href="/meos?get=result">/meos?get=result#preliminary=false</a></pre>
|
||||
<pre>/meos?get=result#class=*c1>,*c2>,...</pre>
|
||||
<pre>/meos?get=result#to=*c1></pre>
|
||||
<pre>/meos?get=result#from=*c1></pre>
|
||||
@ -200,6 +201,7 @@
|
||||
<b>Arguments:</b>
|
||||
<ul>
|
||||
<li><i>class</i> A list of one or more class id:s, separated by comma. The default is all classes.</li>
|
||||
<li><i>preliminary</i> Control if preliminary results are returned. Preliminary results include competitors that have finished but not yet read out the card. The default is true.</li>
|
||||
<li>
|
||||
<i>from</i> Returns the result measuring time from a specific control. If a specified class
|
||||
does not visit the control, an empty result set is returned; no error is given.
|
||||
|
||||
@ -89,6 +89,20 @@ void ImportFormats::getOECSVLanguage(vector< pair<wstring, size_t> > &typeLangua
|
||||
typeLanguages.push_back(make_pair(L"Russian", 6));
|
||||
}
|
||||
|
||||
wstring ImportFormats::getExtension(ExportFormats fm) {
|
||||
switch (fm) {
|
||||
case IOF30:
|
||||
case IOF203:
|
||||
return L"xml";
|
||||
case OE:
|
||||
return L"csv";
|
||||
case HTML:
|
||||
return L"html";
|
||||
}
|
||||
throw exception();
|
||||
}
|
||||
|
||||
|
||||
int ImportFormats::getDefaultCSVLanguage(oEvent &oe) {
|
||||
string currentLanguage = oe.getPropertyString("Language", "English");
|
||||
int defaultLanguageType = 1;
|
||||
|
||||
@ -59,6 +59,8 @@ public:
|
||||
|
||||
static int getDefaultCSVLanguage(oEvent &oe);
|
||||
|
||||
static wstring getExtension(ExportFormats fm);
|
||||
|
||||
private:
|
||||
ImportFormatOptions option;
|
||||
};
|
||||
|
||||
@ -3362,7 +3362,7 @@ void IOF30Interface::writePersonResult(xmlparser &xml, const oRunner &r,
|
||||
if (r.getNumMulti() > 0) {
|
||||
for (int k = 0; k <= r.getNumMulti(); k++) {
|
||||
const pRunner tr = r.getMultiRunner(k);
|
||||
if (tr)
|
||||
if (tr && tr->getClassRef(true) == r.getClassRef(true))
|
||||
writeResult(xml, *tr, *tr, includeCourse, includeStageRaceInfo, teamMember, hasInputTime);
|
||||
}
|
||||
}
|
||||
@ -3394,6 +3394,7 @@ void IOF30Interface::writeResult(xmlparser &xml, const oRunner &rPerson, const o
|
||||
writeLegOrder(xml, rPerson.getClassRef(false), rPerson.getLegNumber());
|
||||
|
||||
bool patrolResult = r.getTeam() && r.getClassRef(false)->getClassType() == oClassPatrol && !teamsAsIndividual;
|
||||
bool qualFinal = r.getTeam() && r.getTeam()->getClassRef(false) != r.getClassRef(true);
|
||||
|
||||
wstring bib = rPerson.getBib();
|
||||
if (!bib.empty())
|
||||
@ -3474,7 +3475,7 @@ void IOF30Interface::writeResult(xmlparser &xml, const oRunner &rPerson, const o
|
||||
xml.write("Score", "type", L"Score", itow(rg));
|
||||
xml.write("Score", "type", L"Penalty", itow(r.getRogainingReduction(true)));
|
||||
}
|
||||
if ( (r.getTeam() && r.getClassRef(false)->getClassType() != oClassPatrol && !teamsAsIndividual) || hasInputTime) {
|
||||
if ( (r.getTeam() && r.getClassRef(false)->getClassType() != oClassPatrol && !teamsAsIndividual && !qualFinal) || hasInputTime) {
|
||||
xml.startTag("OverallResult");
|
||||
|
||||
int rt = r.getTotalRunningTime();
|
||||
@ -3677,9 +3678,10 @@ void IOF30Interface::writeEvent(xmlparser &xml) {
|
||||
void IOF30Interface::writePerson(xmlparser &xml, const oRunner &r) {
|
||||
xml.startTag("Person");
|
||||
|
||||
__int64 id = r.getExtIdentifier();
|
||||
if (id != 0)
|
||||
if (r.getExtIdentifier() != 0)
|
||||
xml.write("Id", r.getExtIdentifierString());
|
||||
else if (r.getMainRunner()->getExtIdentifier() != 0)
|
||||
xml.write("Id", r.getMainRunner()->getExtIdentifierString());
|
||||
|
||||
xml.startTag("Name");
|
||||
xml.write("Family", r.getFamilyName());
|
||||
@ -3818,7 +3820,7 @@ void IOF30Interface::getRunnersToUse(const pClass cls, vector<pRunner> &rToUse,
|
||||
if (leg == -1 && indRel && r[j]->getLegNumber() != 0)
|
||||
continue; // Skip all but leg 0 for individual relay
|
||||
|
||||
if (leg == -1 && !indRel && r[j]->getTeam())
|
||||
if (leg == -1 && !indRel && (r[j]->getTeam() && r[j]->getTeam()->getClassRef(true) == cls))
|
||||
continue; // For teams, skip presonal results, unless individual relay
|
||||
|
||||
if (!includeUnknown && !r[j]->hasResult())
|
||||
|
||||
@ -288,7 +288,18 @@ ButtonInfo &ListEditor::addButton(gdioutput &gdi, const MetaListPost &mlp, int x
|
||||
if (text[0] == '@') {
|
||||
vector<wstring> part;
|
||||
split(text.substr(1), L";", part);
|
||||
unsplit(part, L"|", cap);
|
||||
for (int j = 0; j < part.size(); j++) {
|
||||
if (part[j].empty())
|
||||
continue;
|
||||
else if (part[j][0] == '@')
|
||||
part[j] = part[j].substr(1);
|
||||
if (!cap.empty())
|
||||
cap += L"|";
|
||||
else
|
||||
cap += L"#";
|
||||
|
||||
cap += lang.tl(part[j] + L"#" + itow(j));
|
||||
}
|
||||
}
|
||||
else
|
||||
cap = text + L"#" + lang.tl(mlp.getType());
|
||||
@ -1201,11 +1212,19 @@ void ListEditor::showExample(gdioutput &gdi, const MetaListPost &mlp) {
|
||||
RECT rrInner;
|
||||
rrInner.left = x1 + margin;
|
||||
rrInner.top = gdi.getCY();
|
||||
bool hasSymbol;
|
||||
bool hasSymbol, hasStringMap = false;
|
||||
lastShownExampleText = mlp.getText();
|
||||
GDICOLOR color = GDICOLOR::colorLightGreen;
|
||||
wstring text = MetaList::encode(mlp.getTypeRaw(), lastShownExampleText, hasSymbol);
|
||||
if (!hasSymbol) {
|
||||
|
||||
if (mlp.getTypeRaw() == lResultModuleNumber || mlp.getTypeRaw() == lResultModuleNumberTeam) {
|
||||
if (text.length() > 0 && text[0]=='@') {
|
||||
hasStringMap = true;
|
||||
text = text.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasSymbol && !hasStringMap) {
|
||||
text = lang.tl("Fel: Använd X i texten där värdet (Y) ska sättas in.#X#%s");
|
||||
color = GDICOLOR::colorLightRed;
|
||||
}
|
||||
@ -1224,10 +1243,15 @@ void ListEditor::showExample(gdioutput &gdi, const MetaListPost &mlp) {
|
||||
set<wstring> used;
|
||||
for (size_t i = 0; i < rr.size(); i++) {
|
||||
int ix = (997 * i) % rr.size();
|
||||
wstring s = oe->formatListString(mlp.getTypeRaw(), rr[i]);
|
||||
wstring s;
|
||||
if (!hasStringMap)
|
||||
s = oe->formatListString(mlp.getTypeRaw(), rr[i]);
|
||||
else
|
||||
MetaList::fromResultModuleNumber(text, i, s);
|
||||
|
||||
if (used.insert(s).second) {
|
||||
int xb = gdi.getCX();
|
||||
if (!text.empty()) {
|
||||
if (!text.empty() && !hasStringMap) {
|
||||
wchar_t st[300];
|
||||
swprintf_s(st, text.c_str(), s.c_str());
|
||||
s = st;
|
||||
|
||||
@ -64,6 +64,8 @@ public:
|
||||
|
||||
void saveUnknown(const wstring &file);
|
||||
void saveTable(const wstring &file);
|
||||
void saveTranslation(const wstring &file);
|
||||
|
||||
void loadTable(const wstring &file, const wstring &language);
|
||||
void loadTable(int resource, const wstring &language);
|
||||
|
||||
@ -258,10 +260,11 @@ const wstring &LocalizerImpl::translate(const wstring &str, bool &found)
|
||||
value[i] = str;
|
||||
return value[i];
|
||||
}
|
||||
const wstring newline = L"\n";
|
||||
|
||||
void LocalizerImpl::saveUnknown(const wstring &file)
|
||||
{
|
||||
const wstring newline = L"\n";
|
||||
|
||||
if (!unknown.empty()) {
|
||||
ofstream fout(file.c_str(), ios::trunc|ios::out);
|
||||
for (map<wstring, wstring>::iterator it = unknown.begin(); it!=unknown.end(); ++it) {
|
||||
@ -281,6 +284,13 @@ void LocalizerImpl::saveUnknown(const wstring &file)
|
||||
key = L"help:" + itow(value.length()) + itow(value.find_first_of('.'));
|
||||
}
|
||||
}
|
||||
else {
|
||||
int nl = value.find(newline);
|
||||
while (nl != string::npos) {
|
||||
value.replace(nl, newline.length(), L"\\n");
|
||||
nl = value.find(newline);
|
||||
}
|
||||
}
|
||||
fout << toUTF8(key) << " = " << toUTF8(value) << endl;
|
||||
}
|
||||
}
|
||||
@ -329,6 +339,7 @@ void Localizer::LocalizerInternal::debugDump(const wstring &untranslated, const
|
||||
}
|
||||
impl->saveUnknown(untranslated);
|
||||
impl->saveTable(translated);
|
||||
impl->saveTranslation(L"spellcheck.txt");
|
||||
}
|
||||
|
||||
void LocalizerImpl::translateAll(const LocalizerImpl &all) {
|
||||
@ -342,8 +353,8 @@ void LocalizerImpl::translateAll(const LocalizerImpl &all) {
|
||||
}
|
||||
}
|
||||
|
||||
void LocalizerImpl::saveTable(const wstring &file)
|
||||
{
|
||||
void LocalizerImpl::saveTable(const wstring &file) {
|
||||
const wstring newline = L"\n";
|
||||
ofstream fout(language+L"_"+file, ios::trunc|ios::out);
|
||||
for (map<wstring, wstring>::iterator it = table.begin(); it!=table.end(); ++it) {
|
||||
wstring value = it->second;
|
||||
@ -356,6 +367,13 @@ void LocalizerImpl::saveTable(const wstring &file)
|
||||
}
|
||||
}
|
||||
|
||||
void LocalizerImpl::saveTranslation(const wstring &file) {
|
||||
ofstream fout(language + L"_" + file, ios::trunc | ios::out);
|
||||
for (map<wstring, wstring>::iterator it = table.begin(); it != table.end(); ++it) {
|
||||
fout << toUTF8(it->second) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void LocalizerImpl::loadTable(int id, const wstring &language)
|
||||
{
|
||||
wstring sname = L"#"+itow(id);
|
||||
|
||||
@ -25,17 +25,17 @@
|
||||
|
||||
//ABCDEFGHIJKLMNO
|
||||
int getMeosBuild() {
|
||||
string revision("$Rev: 1116 $");
|
||||
string revision("$Rev: 1132 $");
|
||||
return 174 + atoi(revision.substr(5, string::npos).c_str());
|
||||
}
|
||||
|
||||
wstring getMeosDate() {
|
||||
wstring date(L"$Date: 2022-02-18 14:51:32 +0100 (fre, 18 feb 2022) $");
|
||||
wstring date(L"$Date: 2022-03-23 22:25:26 +0100 (ons, 23 mar 2022) $");
|
||||
return date.substr(7,10);
|
||||
}
|
||||
|
||||
wstring getBuildType() {
|
||||
return L"RC2"; // No parantheses (...)
|
||||
return L""; // No parantheses (...)
|
||||
}
|
||||
|
||||
wstring getMajorVersion() {
|
||||
@ -135,6 +135,7 @@ void getSupporters(vector<wstring> &supp, vector<wstring> &developSupp)
|
||||
supp.emplace_back(L"Miroslav Kollar, KOB Kysak");
|
||||
supp.emplace_back(L"Zdenko Rohac, KOB ATU Košice");
|
||||
supp.emplace_back(L"Hans Carlstedt, Sävedalens AIK");
|
||||
supp.emplace_back(L"Javier Arufe Varela, O-Liceo");
|
||||
supp.emplace_back(L"O-Liceo, Spain");
|
||||
developSupp.emplace_back(L"Västerviks OK");
|
||||
reverse(supp.begin(), supp.end());
|
||||
}
|
||||
|
||||
@ -504,12 +504,17 @@ wstring MetaList::encode(EPostType type, const wstring &inputS, bool &foundSymbo
|
||||
int sCount = 0;
|
||||
if (type == EPostType::lString)
|
||||
sCount = 1; // No symbols expected in string
|
||||
bool outputNumberType = (type == EPostType::lResultModuleNumber || type == EPostType::lResultModuleNumberTeam) &&
|
||||
input.length() > 0 && input[0] == '@';
|
||||
|
||||
for (size_t k = 0; k<input.length(); k++) {
|
||||
int c = input[k];
|
||||
int p = k > 0 ? input[k-1] : ' ';
|
||||
int n = k+1 < input.length() ? input[k+1] : ' ';
|
||||
|
||||
if (outputNumberType && c == ';')
|
||||
sCount = 0;
|
||||
|
||||
if (c == '%') {
|
||||
out.push_back('%');
|
||||
out.push_back('%');
|
||||
@ -527,6 +532,34 @@ wstring MetaList::encode(EPostType type, const wstring &inputS, bool &foundSymbo
|
||||
return out;
|
||||
}
|
||||
|
||||
const wstring &MetaList::fromResultModuleNumber(const wstring &in, int nr, wstring &res) {
|
||||
vector<wstring> out;
|
||||
split(in, L";", out);
|
||||
size_t ix = nr;
|
||||
if (!out.empty() && ix + 1 >= out.size()) {
|
||||
if (out.back().size() > 1 && out.back()[0] == '@') {
|
||||
ix = out.size() - 1;
|
||||
out[ix] = out[ix].substr(1);
|
||||
}
|
||||
if (out.back().find_first_of('%') != wstring::npos) {
|
||||
ix = out.size() - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ix < out.size()) {
|
||||
res.swap(out[ix]);
|
||||
if (res.find_first_of('%') != wstring::npos) {
|
||||
wchar_t bf2[256];
|
||||
swprintf_s(bf2, res.c_str(), itow(nr).c_str());
|
||||
res = bf2;
|
||||
}
|
||||
}
|
||||
else
|
||||
res = L"";
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
MetaListPost &MetaList::add(ListIndex ix, const MetaListPost &post) {
|
||||
if (data[ix].empty())
|
||||
addRow(ix);
|
||||
|
||||
@ -239,6 +239,7 @@ private:
|
||||
public:
|
||||
|
||||
static wstring encode(EPostType type, const wstring &input, bool &foundSymbol);
|
||||
static const wstring &fromResultModuleNumber(const wstring &in, int nr, wstring &out);
|
||||
|
||||
static void getAutoComplete(const wstring &w, vector<AutoCompleteRecord> &records);
|
||||
|
||||
|
||||
@ -546,8 +546,8 @@ pCard oEvent::getCardByNumber(int cno) const
|
||||
oCardList::const_reverse_iterator it;
|
||||
pCard second = 0;
|
||||
for (it=Cards.rbegin(); it != Cards.rend(); ++it){
|
||||
if (it->cardNo==cno) {
|
||||
if (it->getOwner() == 0)
|
||||
if (!it->isRemoved() && it->cardNo==cno) {
|
||||
if (it->getOwner() == nullptr)
|
||||
return const_cast<pCard>(&*it);
|
||||
else if (second == 0)
|
||||
second = const_cast<pCard>(&*it);
|
||||
|
||||
@ -2362,7 +2362,7 @@ wstring oEvent::getZeroTime() const
|
||||
|
||||
void oEvent::setZeroTime(wstring m, bool manualSet)
|
||||
{
|
||||
unsigned nZeroTime = convertAbsoluteTime(m);
|
||||
const unsigned nZeroTime = convertAbsoluteTime(m);
|
||||
if (nZeroTime!=ZeroTime && nZeroTime != -1) {
|
||||
if (manualSet)
|
||||
setFlag(TransferFlags::FlagManualDateTime, true);
|
||||
@ -2370,6 +2370,9 @@ void oEvent::setZeroTime(wstring m, bool manualSet)
|
||||
updateChanged();
|
||||
ZeroTime=nZeroTime;
|
||||
}
|
||||
else if (manualSet && !hasFlag(oEvent::TransferFlags::FlagManualDateTime)) {
|
||||
setFlag(TransferFlags::FlagManualDateTime, true);
|
||||
}
|
||||
}
|
||||
|
||||
void oEvent::setName(const wstring &m, bool manualSet)
|
||||
@ -4341,15 +4344,28 @@ void oEvent::convertTimes(pRunner runner, SICard &sic) const
|
||||
|
||||
if (sic.convertedTime == ConvertedTimeStatus::Hour12) {
|
||||
|
||||
int startTime = ZeroTime + 3600; //Add one hour. Subtracted below
|
||||
int startTime = ZeroTime + 2*3600; //Add two hours. Subtracted below
|
||||
if (useLongTimes())
|
||||
startTime = 5 * 3600; // Avoid midnight as default. Prefer morning
|
||||
startTime = 7 * 3600; // Avoid midnight as default. Prefer morning
|
||||
|
||||
int st = -1;
|
||||
if (runner) {
|
||||
st = runner->getStartTime();
|
||||
if (st > 0) {
|
||||
startTime = (ZeroTime + st) % (3600 * 24);
|
||||
if (sic.StartPunch.Code == -1)
|
||||
startTime = (ZeroTime + st) % (3600 * 24); // No start punch
|
||||
else {
|
||||
// Got start punch. If this is close to specified start time,
|
||||
// use specified start time
|
||||
const int stPunch = sic.StartPunch.Time; // 12 hour
|
||||
const int stStart = startTime = (ZeroTime + st) % (3600 * 12); // 12 hour
|
||||
if (std::abs(stPunch - stStart) < 1800) {
|
||||
startTime = (ZeroTime + st) % (3600 * 24); // Use specified start time (for conversion)
|
||||
}
|
||||
else {
|
||||
st = -1; // Ignore start time
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
st = -1;
|
||||
@ -4370,7 +4386,7 @@ void oEvent::convertTimes(pRunner runner, SICard &sic) const
|
||||
startTime = (ZeroTime + relT12) % (3600 * 24);
|
||||
}
|
||||
}
|
||||
int zt = (startTime + 23 * 3600) % (24 * 3600); // Subtract one hour
|
||||
int zt = (startTime + 22 * 3600) % (24 * 3600); // Subtract two hours from start time
|
||||
sic.analyseHour12Time(zt);
|
||||
}
|
||||
sic.convertedTime = ConvertedTimeStatus::Done;
|
||||
|
||||
@ -895,6 +895,8 @@ protected:
|
||||
void calculateModuleTeamResults(const set<int> &cls, vector<oTeam *> &teams);
|
||||
|
||||
unsigned int lastTimeConsistencyCheck = 0;
|
||||
mutable bool lastResultCalcPrelState = false;
|
||||
|
||||
public:
|
||||
void updateStartTimes(int delta);
|
||||
|
||||
|
||||
@ -223,7 +223,9 @@ void oEvent::calculateResults(const set<int> &classes, ResultType resultType, bo
|
||||
getRunners(classes, runnersCls);
|
||||
|
||||
runners.reserve(runnersCls.size());
|
||||
bool resOK = true;
|
||||
|
||||
bool resOK = lastResultCalcPrelState == includePreliminary;
|
||||
lastResultCalcPrelState = includePreliminary;
|
||||
|
||||
for (auto it : runnersCls) {
|
||||
oRunner &r = *it;
|
||||
|
||||
@ -348,7 +348,7 @@ void renderRowSpeakerList(const oSpeakerObject &r, const oSpeakerObject *next_r,
|
||||
|
||||
row.push_back(SpeakerString(normalText, r.club));
|
||||
|
||||
if (r.status == StatusOK) {
|
||||
if (r.status == StatusOK || (r.status == StatusUnknown && r.runningTime.time > 0)) {
|
||||
row.push_back(SpeakerString(textRight, formatTime(r.runningTime.preliminary)));
|
||||
|
||||
if (r.runningTime.time != r.runningTimeLeg.time)
|
||||
@ -599,7 +599,7 @@ void oEvent::speakerList(gdioutput &gdi, int ClassId, int leg, int ControlId,
|
||||
|
||||
list<oSpeakerObject>::iterator sit;
|
||||
for (sit=speakerList.begin(); sit != speakerList.end(); ++sit) {
|
||||
if (sit->status==StatusOK && sit->priority>=0)
|
||||
if (sit->hasResult() && sit->priority>=0)
|
||||
sit->priority=1;
|
||||
else if (sit->status > StatusOK && sit->priority<=0)
|
||||
sit->priority=-1;
|
||||
@ -653,7 +653,7 @@ void oEvent::speakerList(gdioutput &gdi, int ClassId, int leg, int ControlId,
|
||||
//Calculate leader-time
|
||||
for(sit=speakerList.begin(); sit != speakerList.end(); ++sit) {
|
||||
int rt = sit->runningTime.time;
|
||||
if (sit->status==StatusOK && rt>0)
|
||||
if ((sit->status==StatusOK || sit->status == StatusUnknown) && rt>0)
|
||||
LeaderTime=min(LeaderTime, rt);
|
||||
}
|
||||
|
||||
@ -670,7 +670,7 @@ void oEvent::speakerList(gdioutput &gdi, int ClassId, int leg, int ControlId,
|
||||
++sit;
|
||||
oSpeakerObject *next = sit != speakerList.end() ? &*sit : 0;
|
||||
int type = 3;
|
||||
if (so->priority > 0 || (so->status==StatusOK && so->priority>=0))
|
||||
if (so->priority > 0 || (so->hasResult() && so->priority>=0))
|
||||
type = 1;
|
||||
else if (so->status == StatusUnknown && so->priority==0)
|
||||
type = 2;
|
||||
@ -720,7 +720,7 @@ void oEvent::speakerList(gdioutput &gdi, int ClassId, int leg, int ControlId,
|
||||
rendered = false;
|
||||
for (size_t k = 0; k < toRender.size(); k++) {
|
||||
oSpeakerObject *so = toRender[k].first;
|
||||
if (so && (so->priority > 0 || (so->status==StatusOK && so->priority>=0))) {
|
||||
if (so && (so->priority > 0 || (so->hasResult() && so->priority>=0))) {
|
||||
if (rendered == false) {
|
||||
gdi.addString("", y, x, boldSmall, "Resultat");
|
||||
y+=lh+5, rendered=true;
|
||||
@ -734,7 +734,7 @@ void oEvent::speakerList(gdioutput &gdi, int ClassId, int leg, int ControlId,
|
||||
rendered = false;
|
||||
for (size_t k = 0; k < toRender.size(); k++) {
|
||||
oSpeakerObject *so = toRender[k].first;
|
||||
if (so && so->status == StatusUnknown && so->priority==0) {
|
||||
if (so && so->isIncomming() && so->priority==0) {
|
||||
if (rendered == false) {
|
||||
gdi.addString("", y+4, x, boldSmall, "Inkommande");
|
||||
y+=lh+5, rendered=true;
|
||||
@ -1721,10 +1721,14 @@ void oEvent::getResultEvents(const set<int> &classFilter, const set<int> &punchF
|
||||
const oRunner &r = *it;
|
||||
if (r.isRemoved() || !classFilter.count(r.getClassId(true)))
|
||||
continue;
|
||||
if (r.getStatusComputed() != StatusOutOfCompetition &&
|
||||
r.getStatusComputed() != StatusNoTiming &&
|
||||
(r.prelStatusOK(true, false) || r.getStatusComputed() != StatusUnknown)) {
|
||||
|
||||
if (r.getStatusComputed() == StatusOutOfCompetition || r.getStatusComputed() == StatusNoTiming)
|
||||
continue;
|
||||
|
||||
bool wroteResult = false;
|
||||
if (r.prelStatusOK(true, false) || r.getStatusComputed() != StatusUnknown) {
|
||||
RunnerStatus stat = r.prelStatusOK(true, false) ? StatusOK : r.getStatusComputed();
|
||||
wroteResult = true;
|
||||
results.push_back(ResultEvent(pRunner(&r), r.getFinishTime(), oPunch::PunchFinish, stat));
|
||||
}
|
||||
pCard card = r.getCard();
|
||||
@ -1735,7 +1739,8 @@ void oEvent::getResultEvents(const set<int> &classFilter, const set<int> &punchF
|
||||
if (res != teamStatusPos.end()) {
|
||||
RunnerStatus prevStat = teamLegStatusOK[res->second + r.tLeg - 1];
|
||||
if (prevStat != StatusOK && prevStat != StatusUnknown) {
|
||||
results.back().status = StatusNotCompetiting;
|
||||
if (wroteResult)
|
||||
results.back().status = StatusNotCompetiting;
|
||||
punchStatus = StatusNotCompetiting;
|
||||
}
|
||||
}
|
||||
|
||||
@ -315,6 +315,22 @@ int oListInfo::getMaxCharWidth(const oEvent *oe,
|
||||
for (size_t k = 0; k < pps.size(); k++) {
|
||||
wstring extra;
|
||||
switch (pps[k].type) {
|
||||
case lResultModuleNumber:
|
||||
case lResultModuleNumberTeam:
|
||||
if (pps[k].text.length() > 1 && pps[k].text[0] == '@') {
|
||||
wstring tmp;
|
||||
int miLen = 0;
|
||||
for (int j = 0; j < 10; j++) {
|
||||
tmp = MetaList::fromResultModuleNumber(pps[k].text.substr(1), j, tmp);
|
||||
if (tmp.length() > miLen / 2) {
|
||||
miLen = tmp.length();
|
||||
extras[k].add(tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
extra = L"999";
|
||||
break;
|
||||
case lRunnerCardVoltage:
|
||||
extra = L"3.00 V";
|
||||
break;
|
||||
@ -404,8 +420,6 @@ int oListInfo::getMaxCharWidth(const oEvent *oe,
|
||||
case lTeamTotalPlace:
|
||||
case lPunchControlPlace:
|
||||
case lPunchControlPlaceAcc:
|
||||
case lResultModuleNumber:
|
||||
case lResultModuleNumberTeam:
|
||||
case lRunnerStagePlace:
|
||||
extra = L"99.";
|
||||
break;
|
||||
@ -2330,24 +2344,8 @@ const wstring &oEvent::formatListStringAux(const oPrintPost &pp, const oListPara
|
||||
if (pp.text.empty() || pp.text[0]!='@')
|
||||
wsptr = &itow(nr);
|
||||
else {
|
||||
vector<wstring> out;
|
||||
split(pp.text.substr(1), L";", out);//WCS
|
||||
wstring &res = StringCache::getInstance().wget();
|
||||
size_t ix = nr;
|
||||
if (!out.empty() && ix >= out.size() && out.back().find_first_of('%') != out.back().npos) {
|
||||
ix = out.size() - 1;
|
||||
}
|
||||
if (ix < out.size()) {
|
||||
res.swap(out[ix]);
|
||||
if (res.find_first_of('%') != res.npos) {
|
||||
wchar_t bf2[256];
|
||||
swprintf_s(bf2, res.c_str(), itow(nr).c_str());
|
||||
res = bf2;
|
||||
}
|
||||
}
|
||||
else
|
||||
res = L"";
|
||||
|
||||
MetaList::fromResultModuleNumber(pp.text.substr(1), nr, res);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,11 +272,11 @@ oRunner::oRunner(oEvent *poe) :oAbstractRunner(poe, false)
|
||||
{
|
||||
isTemporaryObject = false;
|
||||
Id = oe->getFreeRunnerId();
|
||||
Course = 0;
|
||||
Course = nullptr;
|
||||
StartNo = 0;
|
||||
cardNumber = 0;
|
||||
|
||||
tInTeam = 0;
|
||||
tInTeam = nullptr;
|
||||
tLeg = 0;
|
||||
tLegEquClass = 0;
|
||||
tNeedNoCard = false;
|
||||
@ -285,9 +285,9 @@ oRunner::oRunner(oEvent *poe) :oAbstractRunner(poe, false)
|
||||
correctionNeeded = false;
|
||||
|
||||
tDuplicateLeg = 0;
|
||||
tParentRunner = 0;
|
||||
tParentRunner = nullptr;
|
||||
|
||||
Card = 0;
|
||||
Card = nullptr;
|
||||
cPriority = 0;
|
||||
|
||||
tCachedRunningTime = 0;
|
||||
@ -309,11 +309,11 @@ oRunner::oRunner(oEvent *poe, int id) :oAbstractRunner(poe, true)
|
||||
isTemporaryObject = false;
|
||||
Id = id;
|
||||
oe->qFreeRunnerId = max(id, oe->qFreeRunnerId);
|
||||
Course = 0;
|
||||
Course = nullptr;
|
||||
StartNo = 0;
|
||||
cardNumber = 0;
|
||||
|
||||
tInTeam = 0;
|
||||
tInTeam = nullptr;
|
||||
tLeg = 0;
|
||||
tLegEquClass = 0;
|
||||
tNeedNoCard = false;
|
||||
@ -322,9 +322,9 @@ oRunner::oRunner(oEvent *poe, int id) :oAbstractRunner(poe, true)
|
||||
correctionNeeded = false;
|
||||
|
||||
tDuplicateLeg = 0;
|
||||
tParentRunner = 0;
|
||||
tParentRunner = nullptr;
|
||||
|
||||
Card = 0;
|
||||
Card = nullptr;
|
||||
cPriority = 0;
|
||||
tCachedRunningTime = 0;
|
||||
tSplitRevision = -1;
|
||||
@ -359,7 +359,7 @@ oRunner::~oRunner()
|
||||
}
|
||||
|
||||
delete tAdaptedCourse;
|
||||
tAdaptedCourse = 0;
|
||||
tAdaptedCourse = nullptr;
|
||||
}
|
||||
|
||||
bool oRunner::Write(xmlparser &xml)
|
||||
|
||||
@ -1,13 +1,4 @@
|
||||
// oRunner.h: interface for the oRunner class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(AFX_ORUNNER_H__D3B8D6C8_C90A_4F86_B776_7D77E5C76F42__INCLUDED_)
|
||||
#define AFX_ORUNNER_H__D3B8D6C8_C90A_4F86_B776_7D77E5C76F42__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
#pragma once
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
@ -675,6 +666,9 @@ protected:
|
||||
public:
|
||||
static const shared_ptr<Table> &getTable(oEvent *oe);
|
||||
|
||||
oRunner *getMainRunner() { return tParentRunner != nullptr ? tParentRunner : this; }
|
||||
const oRunner* getMainRunner() const { return tParentRunner != nullptr ? tParentRunner : this; }
|
||||
|
||||
int getStartGroup(bool useTmpStartGroup) const;
|
||||
void setStartGroup(int sg);
|
||||
|
||||
@ -977,5 +971,3 @@ public:
|
||||
static bool sortSplit(const oRunner &a, const oRunner &b);
|
||||
|
||||
};
|
||||
|
||||
#endif // !defined(AFX_ORUNNER_H__D3B8D6C8_C90A_4F86_B776_7D77E5C76F42__INCLUDED_)
|
||||
|
||||
@ -1402,6 +1402,7 @@ void oTeam::speakerLegInfo(int leg, int specifiedLeg, int courseControlId,
|
||||
RunnerStatus &status, int &runningTime) const {
|
||||
missingLeg = 0;
|
||||
totalLeg = 0;
|
||||
bool prelRes = false;
|
||||
bool extra = false, firstExtra = true;
|
||||
for (int i = leg; i <= specifiedLeg; i++) {
|
||||
LegTypes lt=Class->getLegType(i);
|
||||
@ -1433,25 +1434,29 @@ void oTeam::speakerLegInfo(int leg, int specifiedLeg, int courseControlId,
|
||||
runningTime = lrt;
|
||||
status = lst; // Take status/time from best runner
|
||||
}
|
||||
if (Runners[i] && lst == StatusUnknown)
|
||||
missingLeg++;
|
||||
if (Runners[i] && lst == StatusUnknown) {
|
||||
if (lrt == 0)
|
||||
missingLeg++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (lst > StatusOK) {
|
||||
status = lst;
|
||||
break;
|
||||
}
|
||||
else if (lst == StatusUnknown) {
|
||||
else if (lst == StatusUnknown && lrt == 0) {
|
||||
missingLeg++;
|
||||
}
|
||||
else {
|
||||
runningTime = max(lrt, runningTime);
|
||||
if (lst == StatusUnknown)
|
||||
prelRes = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (missingLeg == 0 && status == StatusUnknown)
|
||||
if (missingLeg == 0 && status == StatusUnknown && !prelRes)
|
||||
status = StatusOK;
|
||||
}
|
||||
|
||||
@ -1626,9 +1631,15 @@ void oTeam::fillSpeakerObject(int leg, int courseControlId, int previousControlC
|
||||
spk.runningTimeLeg.preliminary = spk.runningTimeLeg.time;
|
||||
}
|
||||
else if (spk.status==StatusUnknown && spk.finishStatus==StatusUnknown) {
|
||||
spk.runningTime.time = spk.runningTimeLeg.preliminary + timeOffset;
|
||||
spk.runningTime.time = 0;// spk.runningTimeLeg.preliminary + timeOffset;
|
||||
spk.runningTime.preliminary = spk.runningTimeLeg.preliminary + timeOffset;
|
||||
spk.runningTimeLeg.time = spk.runningTimeLeg.preliminary;
|
||||
if (spk.runningTimeLeg.time > 0) {
|
||||
spk.runningTime.time = spk.runningTimeLeg.time + timeOffset;
|
||||
}
|
||||
else {
|
||||
spk.runningTime.time = 0;
|
||||
// spk.runningTimeLeg.time = 0;// spk.runningTimeLeg.preliminary;
|
||||
}
|
||||
}
|
||||
else if (spk.status==StatusUnknown)
|
||||
spk.status=StatusMP;
|
||||
|
||||
@ -460,14 +460,14 @@ void OnlineResults::process(gdioutput &gdi, oEvent *oe, AutoSyncType ast) {
|
||||
key.push_back(mk1);
|
||||
pair<wstring, wstring> mk2(L"pwd", passwd);
|
||||
key.push_back(mk2);
|
||||
if (zipFile) {
|
||||
pair<wstring, wstring> mk3(L"Content-Type", L"application/zip");
|
||||
key.push_back(mk3);
|
||||
} else {
|
||||
pair<wstring, wstring> mk3(L"Content-Type", L"application/xml");
|
||||
key.push_back(mk3);
|
||||
}
|
||||
|
||||
if (zipFile) {
|
||||
pair<wstring, wstring> mk3(L"Content-Type", L"application/zip");
|
||||
key.push_back(mk3);
|
||||
}
|
||||
else {
|
||||
pair<wstring, wstring> mk3(L"Content-Type", L"application/xml");
|
||||
key.push_back(mk3);
|
||||
}
|
||||
|
||||
bool moreToWrite = true;
|
||||
string tmp;
|
||||
|
||||
@ -85,6 +85,9 @@ public:
|
||||
RunnerStatus status;
|
||||
RunnerStatus finishStatus;
|
||||
|
||||
bool hasResult() const { return status == StatusOK || status == StatusUnknown && runningTime.time > 0; }
|
||||
bool isIncomming() const { return status == StatusUnknown && runningTime.time <= 0; }
|
||||
|
||||
RunningTime runningTime;
|
||||
RunningTime runningTimeLeg;
|
||||
RunningTime runningTimeSinceLast;
|
||||
|
||||
@ -673,6 +673,12 @@ void RestServer::getData(oEvent &oe, const string &what, const multimap<string,
|
||||
sampleClass = tt[0];
|
||||
}
|
||||
|
||||
bool includePreliminary = true;
|
||||
if (param.count("preliminary")) {
|
||||
const string& prl = param.find("preliminary")->second;
|
||||
includePreliminary = atoi(prl.c_str()) > 0 || _stricmp(prl.c_str(), "true") == 0;
|
||||
}
|
||||
|
||||
string resTag;
|
||||
if (param.count("module") > 0)
|
||||
resTag = param.find("module")->second;
|
||||
@ -831,7 +837,8 @@ void RestServer::getData(oEvent &oe, const string &what, const multimap<string,
|
||||
r.swap(r2);
|
||||
}
|
||||
|
||||
GeneralResult::calculateIndividualResults(r, controlId, totalResult, inclRunnersInForest, resTag, resType, inputNumber, oe, results);
|
||||
GeneralResult::calculateIndividualResults(r, controlId, totalResult, inclRunnersInForest, includePreliminary,
|
||||
resTag, resType, inputNumber, oe, results);
|
||||
|
||||
|
||||
if (resType == oListInfo::Classwise)
|
||||
@ -854,7 +861,7 @@ void RestServer::getData(oEvent &oe, const string &what, const multimap<string,
|
||||
int place = -1;
|
||||
int cClass = -1;
|
||||
int counter = 0;
|
||||
for (const auto &res : results) {
|
||||
for (auto &res : results) {
|
||||
if (res.src->getClassId(true) != cClass) {
|
||||
counter = 0;
|
||||
place = 1;
|
||||
@ -863,6 +870,10 @@ void RestServer::getData(oEvent &oe, const string &what, const multimap<string,
|
||||
if (++counter > limit && (place != res.place || res.status != StatusOK))
|
||||
continue;
|
||||
place = res.place;
|
||||
|
||||
if (!includePreliminary && res.src->getStatus() == StatusUnknown)
|
||||
res.status = StatusUnknown;
|
||||
|
||||
writePerson(res, reslist, true, resType == oListInfo::Coursewise, rProp);
|
||||
}
|
||||
reslist.endTag();
|
||||
|
||||
@ -791,7 +791,7 @@ Resultatutskrift = Resultatutskrift
|
||||
Resultatutskrift / export = Resultatutskrift/export
|
||||
Rogaining = Rogaining
|
||||
Rogaining, individuell = Rogaining, individuell
|
||||
Rogaining-poäng = Rogaining-poäng
|
||||
Rogaining-poäng = Rogainingpoäng
|
||||
RogainingPunch = Stämpling, rogaining
|
||||
Rubrik = Rubrik
|
||||
Rulla upp och ner automatiskt = Rulla upp och ner automatiskt
|
||||
@ -1571,7 +1571,7 @@ Organisatör = Organisatör
|
||||
Tilldela nya fakturanummer till alla klubbar? = Tilldela nya fakturanummer till alla klubbar?
|
||||
Exportera alla till PDF = Exportera alla till PDF
|
||||
help:onlineresult = Automaten används för att skicka resultat och startlistor för direkt visning på webben eller i appar. Du måste göra inställningar som är anpassade för den tjänst du vill utnyttja: tjänsteleverantören kan ge dig detaljer.\n\nOm du vill utveckla egna tjänster finns dokumentation och exempel på MeOS hemsida: www.melin.nu/meos.
|
||||
help:onlineinput = Automaten används för att ta emot radiostämplingar från internet, t.ex. radiokontroller anslutna via mobiltelefon. Det är också möjligt att ha ett enkelt webbformulär där personer vid en bemannad radiokontroll fyller i nummerlappasnummer på dem som passerar.\n\nAutomatens protokoll stöder också andra typer av inmatningar, såsom laguppställningar, direktanmälningar, brickändringar m.m. Om du vill utveckla egna tjänster finns dokumentation och exempel på MeOS hemsida: www.melin.nu/meos.
|
||||
help:onlineinput = Automaten används för att ta emot radiostämplingar från internet, t.ex. radiokontroller anslutna via mobiltelefon. Det är också möjligt att ha ett enkelt webbformulär där personer vid en bemannad radiokontroll fyller i nummerlappsnummer på dem som passerar.\n\nAutomatens protokoll stöder också andra typer av inmatningar, såsom laguppställningar, direktanmälningar, brickändringar m.m. Om du vill utveckla egna tjänster finns dokumentation och exempel på MeOS hemsida: www.melin.nu/meos.
|
||||
Egna textrader = Egna textrader
|
||||
Inga bommar registrerade = Inga bommar registrerade
|
||||
Inställningar sträcktidsutskrift = Inställningar sträcktidsutskrift
|
||||
@ -1801,7 +1801,7 @@ Runner/team input running time = Deltagares/lags ingångstid
|
||||
Runner/team input status = Deltagares/lags ingångsstatus
|
||||
Runner/team place = Deltagares/lags placering
|
||||
Runner/team rogaining overtime = Deltagares/lags rogaining-övertid
|
||||
Runner/team rogaining points = Deltagares/lags rogaining-poäng
|
||||
Runner/team rogaining points = Deltagares/lags rogainingpoäng
|
||||
Runner/team rogaining points adjustment = Deltagares/lags manuella poängjustering
|
||||
Runner/team running time = Deltagares/lags tid
|
||||
Runner/team start time = Deltagares/lags starttid
|
||||
@ -2063,7 +2063,7 @@ StartTimeForClassRange = Klassens starttidsområde
|
||||
TeamStartCond = Lags starttid (om individuell)
|
||||
Liveresultat = Liveresultat
|
||||
Visa rullande tider mellan kontroller i helskärmsläge = Visa rullande tider mellan kontroller i helskärmsläge
|
||||
help:liveresultat = Den här funktionen startar en timer i helskärmsläge (storbildskärm) när en deltagare i vald klass stämplar kontrollen från, och tar tid tills slutkontrollen nås. Däremellen visas en topplista med de bästa resultaten. Gör de inställningar som krävs, dra fönstret till den skärm som ska användas och tryck på <Starta>. Vid använding av nätverk bör <snabb förhandsinformation om stämplingar> vara aktiverat för att undvika fördröjningar.
|
||||
help:liveresultat = Den här funktionen startar en timer i helskärmsläge (storbildsskärm) när en deltagare i vald klass stämplar kontrollen från, och tar tid tills slutkontrollen nås. Däremellan visas en topplista med de bästa resultaten. Gör de inställningar som krävs, dra fönstret till den skärm som ska användas och tryck på <Starta>. Vid användning av nätverk bör <snabb förhandsinformation om stämplingar> vara aktiverat för att undvika fördröjningar.
|
||||
Result at a control = Resultat vid kontroll
|
||||
Total/team result at a control = Lag- och totalresultat vid kontroll
|
||||
Vissa inställningar kräver omstart av MeOS för att ha effekt = Vissa inställningar kräver omstart av MeOS för att ha effekt
|
||||
@ -2082,7 +2082,7 @@ prefsCurrencyPreSymbol = Placera valutasymbol först
|
||||
prefsCurrencySeparator = Decimalseparator för valuta
|
||||
prefsCurrencySymbol = Valutasymbol
|
||||
prefsDatabase = Använd löpardatabasen
|
||||
prefsDatabaseUpdate = Senaste löparbasuppdatering
|
||||
prefsDatabaseUpdate = Senaste löpardatabasuppdatering
|
||||
prefsDefaultDrawMethod = Förvald lottningsmetod
|
||||
prefsDirectPort = Nätverksport för förhandsinformation om stämplingar
|
||||
prefsEMail = Arrangörs e-post
|
||||
@ -2093,8 +2093,8 @@ prefsFirstInvoice = Nästa fakturanummer
|
||||
prefsFirstTime = Första start av MeOS
|
||||
prefsHomepage = Organisatörs hemsida
|
||||
prefsInteractive = Interaktiv brickhantering
|
||||
prefsLateEntryFactor = Faktor för efteranmälningsvgift
|
||||
prefsLiveResultFont = Typesnitt för liveresultat
|
||||
prefsLateEntryFactor = Faktor för efteranmälningsavgift
|
||||
prefsLiveResultFont = Typsnitt för liveresultat
|
||||
prefsMIPURL = URL till MIP-server
|
||||
prefsMOPFolderName = Lokal MOP mapp
|
||||
prefsMOPURL = URL till MOP-server
|
||||
@ -2405,7 +2405,7 @@ Klassen X är listad flera gånger = Klassen X är listad flera gånger
|
||||
Ogiltig starttid X = Ogiltig starttid X
|
||||
Ogiltigt startintervall X = Ogiltigt startintervall X
|
||||
Hittar inte klass X = Hittar inte klass X
|
||||
MeOS utvecklinsstöd = MeOS utvecklinsstöd
|
||||
MeOS utvecklinsstöd = MeOS utvecklingsstöd
|
||||
info:pageswithcolumns = Visa listan en sida i taget med angivet antal kolumner. Ladda om data automatiskt efter varje varv.
|
||||
Pages with columns = Sidor med kolumner
|
||||
Pages with columns, no header = Sidor med kolumner utan rubrik
|
||||
@ -2427,7 +2427,7 @@ help:registerhiredcards = Förregistrera hyrbrickor för att få automatisk hyrb
|
||||
prefsLastExportTarget = Senaste exportmål
|
||||
prefsServiceRootMap = Standardfunktion för webbserverns root
|
||||
prefsshowheader = Visa sidrubriker i listor
|
||||
Lagändringblankett = Lagändringblankett
|
||||
Lagändringblankett = Lagändringsblankett
|
||||
Mappa rootadressen (http:///localhost:port/) till funktion = Mappa rootadressen (http:///localhost:port/) till funktion
|
||||
ClassAvailableMaps = Klassens lediga kartor
|
||||
ClassTotalMaps = Klassens antal kartor
|
||||
@ -2482,7 +2482,7 @@ Status code for cancelled entry = Statuskod för återbud
|
||||
Age (on last day of current year) = Ålder vid årets slut
|
||||
Age above or equal implies senior/pensioner = Åldersgräns äldre/pensionär
|
||||
Age below or equal implies youth = Åldersgräns ungdom
|
||||
Det finns multiplia Id-nummer för personer = Det finns multiplia Id-nummer för personer
|
||||
Det finns multiplia Id-nummer för personer = Det finns multipla Id-nummer för personer
|
||||
Välj vilken typ du vill importera = Välj vilken typ du vill importera
|
||||
Status code for no timing = Statuskod för utan tidtagning
|
||||
prefsVacantPercent = Andel vakanser
|
||||
@ -2509,7 +2509,7 @@ Tips: ställ in rätt tid innan du lägger till fler grupper = Tips: ställ in r
|
||||
Familj = Familj
|
||||
Startgrupp = Startgrupp
|
||||
Slå ihop tävlingar = Slå ihop tävlingar
|
||||
help:merge = Det är möjligt att slå ihop tävlingar och resultat, givet att de är grundade på samma uppsättning banor och kontroller. Olika grupper deltagare kan genomföra tävlingen vid olika tillfällen och sedan kan de olika tävlingarna slås ihop till en tävling med gemensam resultatlista. En annan möjlighet är att ha olika TC för olika klasser. Om det inte är möjliget att att sätt upp ett gemensamt nätverk, kan man med jämna mellanrum utbyta tävlingsfiler för att införliva ändringar.\n\n1. Förbered hela tävlingen.\n2. Spara en kopia och importera den på de utlokaliserade datorerna (eller lokala nätverken).\n3. För att överföra ändringar, exportera tävlingen från den utlokaliserade datorn (eller datorerna) och slå ihop den med denna funktion. Exportera sedan en kopia från huvuddatorn och gör motsvarande import på de utlokaliserade datorerna.\n4 Proceduren kan upprepas flera gånger för att kontinuerligt överföra resultaten. \n\n Observera: Om du gör ändringar i (t.ex.) samma deltagare på flera ställen, blir vissa av ändringarna överskrivna utan varning. Se till att varje utlokaliserat ställe endast ändrar i sin del av tävlingen.\n\nTips: Gör en överföring så snart de utlokaliserade tävlingarna är startade innan någon ändring utförts, för att testa att allt blivit rätt uppsatt.
|
||||
help:merge = Det är möjligt att slå ihop tävlingar och resultat, givet att de är grundade på samma uppsättning banor och kontroller. Olika grupper deltagare kan genomföra tävlingen vid olika tillfällen och sedan kan de olika tävlingarna slås ihop till en tävling med gemensam resultatlista. En annan möjlighet är att ha olika TC för olika klasser. Om det inte är möjligt att att sätt upp ett gemensamt nätverk, kan man med jämna mellanrum utbyta tävlingsfiler för att införliva ändringar.\n\n1. Förbered hela tävlingen.\n2. Spara en kopia och importera den på de utlokaliserade datorerna (eller lokala nätverken).\n3. För att överföra ändringar, exportera tävlingen från den utlokaliserade datorn (eller datorerna) och slå ihop den med denna funktion. Exportera sedan en kopia från huvuddatorn och gör motsvarande import på de utlokaliserade datorerna.\n4 Proceduren kan upprepas flera gånger för att kontinuerligt överföra resultaten. \n\n Observera: Om du gör ändringar i (t.ex.) samma deltagare på flera ställen, blir vissa av ändringarna överskrivna utan varning. Se till att varje utlokaliserat ställe endast ändrar i sin del av tävlingen.\n\nTips: Gör en överföring så snart de utlokaliserade tävlingarna är startade innan någon ändring utförts, för att testa att allt blivit rätt uppsatt.
|
||||
Denna datakälla är aldrig tidigare infogad = Denna datakälla är aldrig tidigare infogad
|
||||
Fel: Denna tävlingsversion är redan infogad = Fel: Denna tävlingsversion är redan infogad
|
||||
Infoga version: X = Infoga version: X
|
||||
@ -2518,7 +2518,7 @@ Sammanslagning fungerar om samma uppsättning banor/kontroller används = Samman
|
||||
Varning: Olika bastävlingar = Varning: Olika bastävlingar
|
||||
Borttagna: X = Borttagna: X
|
||||
Fel: En tävling kan inte slås ihop med sig själv = Fel: En tävling kan inte slås ihop med sig själv
|
||||
Sammanfattning, uppdateradet poster = Sammanfattning, uppdateradet poster
|
||||
Sammanfattning, uppdateradet poster = Sammanfattning, uppdaterade poster
|
||||
Sammanslagning klar = Sammanslagning klar
|
||||
Skapade lokal säkerhetskopia (X) innan sammanslagning = Skapade lokal säkerhetskopia (X) innan sammanslagning
|
||||
Tillagda: X = Tillagda: X
|
||||
|
||||
Loading…
Reference in New Issue
Block a user