Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3dca717410 | |||
| f7c36a56d4 | |||
| 3e6433d4dd | |||
| 68721b1833 | |||
| 11a015b7e5 | |||
| bb7ec53878 | |||
| 248d19ca95 | |||
| 3ab98c440e | |||
| 0dc0f3c104 | |||
| d314b6d8d0 | |||
| 45da33ab56 | |||
| 2840967e40 | |||
| 85285d4478 | |||
| c5ddfd83ad | |||
| 539a1a0fbb | |||
| f99cc80911 | |||
| a7ba273be1 | |||
| 918ea33506 | |||
| 587acd1a97 | |||
| 1fe66f8d37 | |||
|
|
403373fcc6 | ||
|
|
d06f4cbd7b | ||
|
|
631db20194 | ||
|
|
65f6fc6868 | ||
|
|
11942302fa |
10
.gitignore
vendored
10
.gitignore
vendored
@ -3,6 +3,13 @@
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# Backup files
|
||||
*.bak
|
||||
|
||||
# Translation files
|
||||
*translated.txt
|
||||
*spellcheck.txt
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
@ -24,6 +31,9 @@ bld/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# vcpkg
|
||||
vcpkg_installed*/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
|
||||
92
Lists/RogaineONB.listdef
Normal file
92
Lists/RogaineONB.listdef
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>RogainingONB</ListName>
|
||||
<Tag>RogainingONB</Tag>
|
||||
<SortOrder>ClassPoints</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Gross</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Penalty</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Final</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPointGross">
|
||||
<Align BlockAlign="true">Gross</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingReduction">
|
||||
<Align BlockAlign="true">Penalty</Align>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Text>X p.</Text>
|
||||
<Align BlockAlign="true">Final</Align>
|
||||
<Font>Bold</Font>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
46
Lists/apientry.listdef
Normal file
46
Lists/apientry.listdef
Normal file
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>EFilterAPIEntry</ListName>
|
||||
<Tag>apientry</Tag>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="EFilterAPIEntry"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>EFilterAPIEntry</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerEntryDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerEntryTime">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerFee">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
10
Lists/baseclass.xml
Normal file
10
Lists/baseclass.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<BaseClassTypes>
|
||||
<Type name="T" class="normal" />
|
||||
<Type name="H" class="normal" />
|
||||
<Type name="H*" class="normal" />
|
||||
<Type name="E" class="elite" />
|
||||
<Type name="I" class="youth" />
|
||||
<Type name="Ö" class="open" />
|
||||
<Type name="M" class="exercise" />
|
||||
</BaseClassTypes>
|
||||
63
Lists/classcourse.lxml
Normal file
63
Lists/classcourse.lxml
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Resultat banvis per klass</ListName>
|
||||
<Tag>classcourseresult</Tag>
|
||||
<SortOrder>ClassCourseResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat efter klass och bana - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="CourseName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="CourseLength">
|
||||
<Text>X meter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerClassCoursePlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>(X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerClassCourseTimeAfter">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
94
Lists/classes_together.listdef
Normal file
94
Lists/classes_together.listdef
Normal file
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Classes together</ListName>
|
||||
<Tag>classestogether</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>RunnerGlobal</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<SupportFrom>1</SupportFrom>
|
||||
<SupportTo>1</SupportTo>
|
||||
<Filter name="FilterPrelResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Namn</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Klubb</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Klass</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Namn</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolClubNameNames">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Klubb</Align>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Klass</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>atcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
58
Lists/clubstartlist_team.listdef
Normal file
58
Lists/clubstartlist_team.listdef
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Klubbstartlista, lag</ListName>
|
||||
<Tag>teamforking</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>ClubTeam</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<SubFilter name="FilterNotVacant"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="5">arial</ListFont>
|
||||
<SubListFont scale="140" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerLegNumberAlpha">
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
118
Lists/columnnohead.template
Normal file
118
Lists/columnnohead.template
Normal file
@ -0,0 +1,118 @@
|
||||
@MEOS EXPORT TEMPLATE
|
||||
pagenohead@Pages with columns, no header
|
||||
info:pageswithcolumns
|
||||
%Show the list one page at the time, with the specified number of columns. Automatically reload data for each round.
|
||||
|
||||
% This is a MeOS HTML Template file.
|
||||
%
|
||||
% The file must begin with
|
||||
%
|
||||
% @MEOS EXPORT TEMPLATE
|
||||
% [tag]@Short description / Name
|
||||
% Detailed description / help.
|
||||
%
|
||||
% The tag must be unique for the installation.
|
||||
%
|
||||
% The output is constructed like follows @HEAD @OUTERPAGE (@INNERPAGE @SEPARATOR @INNERPAGE ...)
|
||||
% @OUTERPAGE (@INNERPAGE @SEPARATOR @INNERPAGE ...)
|
||||
% ...
|
||||
% @END
|
||||
%
|
||||
% The number of inner pages is determined by the number of columns when exporting from MeOS.
|
||||
% The height of each inner page is determined by the number of rows per page set in the export.
|
||||
%
|
||||
% The following symbols will be replaced by MeOS output:
|
||||
% -----------------------------------------------------
|
||||
% @S | Dynamic (generated) CSS styles.
|
||||
% @D | Description of contents. (For example included class names, leg number, etc.)
|
||||
% @C | Contents: For an inner page, the consents in that page/column, for an outer page its inner pages.
|
||||
% @P | Inner or outer page number
|
||||
% @N | Total number of outer pages
|
||||
% @I | Number of inner pages (columns) per page
|
||||
% @M | MeOS version
|
||||
% @T | Show interval (milliseconds)
|
||||
%
|
||||
|
||||
@HEAD
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>@T</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@S
|
||||
|
||||
<style type="text/css">
|
||||
|
||||
body {margin: 0px;}
|
||||
|
||||
.vl {
|
||||
border-left: 2px solid grey;
|
||||
height: 100%;
|
||||
box-shadow: 0px 3px 3px gray;
|
||||
}
|
||||
|
||||
.bottomright {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
right: 16px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@OUTERPAGE
|
||||
<div id="page@P">@C</div>
|
||||
|
||||
@INNERPAGE
|
||||
<div id="ipage@P" style="position:absolute;left:@L%;top:0em">@C</div>
|
||||
|
||||
@SEPARATOR
|
||||
<div class="vl" style="position:absolute;left:@L%;top:0em"></div>
|
||||
|
||||
@END
|
||||
|
||||
<div class="bottomright">@M</div>
|
||||
|
||||
<script>
|
||||
|
||||
function swapPage() {
|
||||
var ix = 1;
|
||||
setInterval(frame, @T);
|
||||
var i;
|
||||
for (i = 2; i <= @N; i++) {
|
||||
document.getElementById("page" + i).style.display = "none";
|
||||
}
|
||||
|
||||
function frame() {
|
||||
document.getElementById("page" + ix).style.display = "none";
|
||||
ix++;
|
||||
if (ix > @N) {
|
||||
ix = 1;
|
||||
location.reload();
|
||||
}
|
||||
document.getElementById("page" + ix).style.display = "block";
|
||||
}
|
||||
}
|
||||
window.onload = swapPage;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
121
Lists/columns.template
Normal file
121
Lists/columns.template
Normal file
@ -0,0 +1,121 @@
|
||||
@MEOS EXPORT TEMPLATE
|
||||
page@Pages with columns
|
||||
info:pageswithcolumns
|
||||
%Show the list one page at the time, with the specified number of columns. Automatically reload data for each round.
|
||||
|
||||
% This is a MeOS HTML Template file.
|
||||
%
|
||||
% The file must begin with
|
||||
%
|
||||
% @MEOS EXPORT TEMPLATE
|
||||
% [tag]@Short description / Name
|
||||
% Detailed description / help.
|
||||
%
|
||||
% The tag must be unique for the installation.
|
||||
%
|
||||
% The output is constructed like follows @HEAD @OUTERPAGE (@INNERPAGE @SEPARATOR @INNERPAGE ...)
|
||||
% @OUTERPAGE (@INNERPAGE @SEPARATOR @INNERPAGE ...)
|
||||
% ...
|
||||
% @END
|
||||
%
|
||||
% The number of inner pages is determined by the number of columns when exporting from MeOS.
|
||||
% The height of each inner page is determined by the number of rows per page set in the export.
|
||||
%
|
||||
% The following symbols will be replaced by MeOS output:
|
||||
% -----------------------------------------------------
|
||||
% @S | Dynamic (generated) CSS styles.
|
||||
% @D | Description of contents. (For example included class names, leg number, etc.)
|
||||
% @C | Contents: For an inner page, the consents in that page/column, for an outer page its inner pages.
|
||||
% @P | Inner or outer page number
|
||||
% @N | Total number of outer pages
|
||||
% @I | Number of inner pages (columns) per page
|
||||
% @M | MeOS version
|
||||
% @T | Show interval (milliseconds)
|
||||
%
|
||||
|
||||
@HEAD
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<title>@T</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@S
|
||||
|
||||
<style type="text/css">
|
||||
|
||||
body {margin: 0px;}
|
||||
|
||||
.vl {
|
||||
border-left: 2px solid grey;
|
||||
height: 100%;
|
||||
box-shadow: 0px 3px 3px gray;
|
||||
}
|
||||
|
||||
.bottomright {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
right: 16px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div><h1>@D</h1></div>
|
||||
<div class="vl" style="position:absolute;left:0px;top:4em;height:3px;width:100%"></div>
|
||||
|
||||
@OUTERPAGE
|
||||
<div id="page@P">@C</div>
|
||||
|
||||
@INNERPAGE
|
||||
<div id="ipage@P" style="position:absolute;left:@L%;top:4em">@C</div>
|
||||
|
||||
@SEPARATOR
|
||||
<div class="vl" style="position:absolute;left:@L%;top:4em"></div>
|
||||
|
||||
@END
|
||||
|
||||
<div class="bottomright">@M</div>
|
||||
|
||||
<script>
|
||||
|
||||
function swapPage() {
|
||||
var ix = 1;
|
||||
setInterval(frame, @T);
|
||||
var i;
|
||||
for (i = 2; i <= @N; i++) {
|
||||
document.getElementById("page" + i).style.display = "none";
|
||||
}
|
||||
|
||||
function frame() {
|
||||
document.getElementById("page" + ix).style.display = "none";
|
||||
ix++;
|
||||
if (ix > @N) {
|
||||
ix = 1;
|
||||
location.reload();
|
||||
}
|
||||
document.getElementById("page" + ix).style.display = "block";
|
||||
}
|
||||
}
|
||||
window.onload = swapPage;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
56
Lists/controloverview.listdef
Normal file
56
Lists/controloverview.listdef
Normal file
@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.3">
|
||||
<ListName>Control Overview</ListName>
|
||||
<Tag>controloverview</Tag>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Control</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Kontrollrapport - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Kontroll</Text>
|
||||
<Align BlockAlign="true">CmpName</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Besökare</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Kvar-i-skogen</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="ControlName">
|
||||
<Align BlockAlign="true">CmpName</Align>
|
||||
</Block>
|
||||
<Block Type="ControlVisitors">
|
||||
<Align BlockAlign="true">Besökare</Align>
|
||||
</Block>
|
||||
<Block Type="ControlRunnersLeft">
|
||||
<Align BlockAlign="true">Kvar-i-skogen</Align>
|
||||
</Block>
|
||||
<Block Type="ControlClasses">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
74
Lists/controlstatistics.listdef
Normal file
74
Lists/controlstatistics.listdef
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.3">
|
||||
<ListName>Control Statistics</ListName>
|
||||
<Tag>controlstatistics</Tag>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Control</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Control Statistics - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Kontroll</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Besökare</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Bomkvot</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Medianbom</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Maxbom</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="ControlName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ControlPunches">
|
||||
<Align BlockAlign="true">Besökare</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="ControlMistakeQuotient">
|
||||
<Align BlockAlign="true">Bomkvot</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="ControlMedianLostTime">
|
||||
<Align BlockAlign="true">Medianbom</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="ControlMaxLostTime">
|
||||
<Align BlockAlign="true">Maxbom</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
65
Lists/coursestart.listdef
Normal file
65
Lists/coursestart.listdef
Normal file
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Startlista, banvis</ListName>
|
||||
<Tag>startbycourse</Tag>
|
||||
<SortOrder>CourseStartTime</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Startlista - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="CourseName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="CourseLength">
|
||||
<Text>X meter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassStartName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerStart">
|
||||
<Align BlockAlign="true">CourseName</Align>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">CourseLength</Align>
|
||||
</Block>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
72
Lists/courseteamtable.listdef
Normal file
72
Lists/courseteamtable.listdef
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.3">
|
||||
<ListName>Bantilldelning</ListName>
|
||||
<Tag>courseteamtable</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Klass</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Lag</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Nummerlapp</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Sträcka</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>5</BlockWidth>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Bana</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">Lag</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="TeamBib">
|
||||
<Align BlockAlign="true">Nummerlapp</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerLegNumberAlpha">
|
||||
<Text>X</Text>
|
||||
<Align BlockAlign="true">Sträcka</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="CourseName">
|
||||
<Align BlockAlign="true">Bana</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
55
Lists/courseusage.listdef
Normal file
55
Lists/courseusage.listdef
Normal file
@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.3">
|
||||
<ListName>Bananvändning</ListName>
|
||||
<Tag>courseusage</Tag>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Course</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Bananvändning</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Bana</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>15</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Klasser</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Antal kartor</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="CourseName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>15</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="CourseClasses">
|
||||
<Align BlockAlign="true">Klasser</Align>
|
||||
</Block>
|
||||
<Block Type="CourseUsage">
|
||||
<Align BlockAlign="true">Antal kartor</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
1075
Lists/database.wclubs
Normal file
1075
Lists/database.wclubs
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Lists/database.wpersons
Normal file
BIN
Lists/database.wpersons
Normal file
Binary file not shown.
363
Lists/entryform.template
Normal file
363
Lists/entryform.template
Normal file
@ -0,0 +1,363 @@
|
||||
@MEOS PAGE
|
||||
entryform@Pages with columns
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>MeOS $!Direktanmälan$</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<style>
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font: 12px Arial;
|
||||
}
|
||||
|
||||
.autocomplete {
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
input {
|
||||
border: 1px solid transparent;
|
||||
background-color: #f1f1f1;
|
||||
padding: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
background-color: #f1f1f1;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
select {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
border-radius: 2px;
|
||||
background-color: #f1f1f1;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
input[type=button] {
|
||||
background-color: DodgerBlue;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: DodgerBlue;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
|
||||
.autocomplete-items {
|
||||
position: absolute;
|
||||
border: 1px solid #d4d4d4;
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
z-index: 99;
|
||||
/*position the autocomplete items to be the same width as the container:*/
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.autocomplete-items div {
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #d4d4d4;
|
||||
}
|
||||
.autocomplete-items div:hover {
|
||||
/*when hovering an item:*/
|
||||
background-color: #e9e9e9;
|
||||
}
|
||||
.autocomplete-active {
|
||||
/*when navigating through the items using the arrow keys:*/
|
||||
background-color: DodgerBlue !important;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<img src="/meos?image=meos">
|
||||
<h1>$!Direktanmälan$</h1>
|
||||
|
||||
|
||||
<div id="info" style="display: block;padding:5px"> </div>
|
||||
|
||||
|
||||
<div id="form">
|
||||
<form autocomplete="off">
|
||||
<div class="autocomplete" style="width:300px;">
|
||||
$Klubb$: <input type="text" name="club" size="20" id="club" placeholder="$Klubb$"><br>
|
||||
</div>
|
||||
|
||||
<div class="autocomplete" style="width:300px;">
|
||||
$Namn$: <input type="text" name="name" size="20" id="name" placeholder="$Namn$"><br>
|
||||
</div>
|
||||
|
||||
<div class="autocomplete" style="width:300px;">
|
||||
$Bricknummer$: <input type="text" name="card" size="10" id="card" placeholder="$Bricknummer$">
|
||||
</div>
|
||||
|
||||
<div class="autocomplete" style="width:300px;">
|
||||
$Klass$: <select id="class"></select>
|
||||
</div>
|
||||
|
||||
<div class="autocomplete" style="width:300px;margin:10px;">
|
||||
<input type="button" value="$Anmäl$" onclick="enter()" style="float:right;">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var xhttp, xmlDoc, i;
|
||||
xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
xmlDoc = this.responseXML;
|
||||
var x = xmlDoc.getElementsByTagName("Class");
|
||||
var newSelect = document.getElementById("class");
|
||||
for (i = 0; i < x.length; i++) {
|
||||
var opt = document.createElement("option");
|
||||
opt.value = x[i].getAttribute("id");
|
||||
opt.innerHTML = x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
|
||||
|
||||
// then append it to the select element
|
||||
newSelect.appendChild(opt);
|
||||
}
|
||||
}
|
||||
};
|
||||
xhttp.open("GET", "/meos?get=entryclass", true);
|
||||
xhttp.send();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
function enter() {
|
||||
var url = "/meos?entry&class=";
|
||||
|
||||
var e = document.getElementById("class");
|
||||
var classId = e.options[e.selectedIndex].value;
|
||||
url += classId;
|
||||
url += "&name=" + encodeURI(document.getElementById("name").value);
|
||||
url += "&club=" + encodeURI(document.getElementById("club").value);
|
||||
url += "&card=" + encodeURI(document.getElementById("card").value);
|
||||
|
||||
var xhttp = new XMLHttpRequest();
|
||||
|
||||
xhttp.onreadystatechange = function() {
|
||||
var info = document.getElementById("info");
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
var xmlDoc = this.responseXML;
|
||||
var x = xmlDoc.getElementsByTagName("Status");
|
||||
if (x.length == 0) {
|
||||
alert("Server error");
|
||||
}
|
||||
else if (x[0].childNodes[0].nodeValue == "OK") {
|
||||
document.getElementById("form").style.display = 'none';
|
||||
x = xmlDoc.getElementsByTagName("Info");
|
||||
info.style.color = "black";
|
||||
info.style.backgroundColor = "palegreen";
|
||||
info.innerHTML = "<strong>$Anmälan mottagen$</strong> " + x[0].childNodes[0].nodeValue +
|
||||
"<br><br><div class=\"autocomplete\" style=\"width:300px;margin:10px;\">" +
|
||||
"<button onclick=\"newEntry()\" style=\"float:right;\">$Anmäl andra$</button></div><br><br>";
|
||||
}
|
||||
else {
|
||||
x = xmlDoc.getElementsByTagName("Info");
|
||||
info.style.color = "darkred";
|
||||
info.style.backgroundColor = "mistyrose";
|
||||
info.innerHTML = "<p style=\"font-size: 140%\">" + x[0].childNodes[0].nodeValue + "</p>";
|
||||
}
|
||||
//document.getElementById("info").innerHTML = this.responseText;
|
||||
//document.getElementById("form").style.display = 'none'
|
||||
}
|
||||
};
|
||||
xhttp.open("GET", url, true);
|
||||
xhttp.send();
|
||||
}
|
||||
|
||||
|
||||
function newEntry() {
|
||||
var info = document.getElementById("info");
|
||||
info.style.color = "black";
|
||||
info.style.backgroundColor = "transparent";
|
||||
info.innerHTML = "";
|
||||
|
||||
document.getElementById("name").value = '';
|
||||
document.getElementById("card").value = '';
|
||||
document.getElementById("form").style.display = 'block';
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function autocomplete(inp, requestFunc, responseFunc) {
|
||||
/*the autocomplete function takes two arguments,
|
||||
the text field element and an array of possible autocompleted values:*/
|
||||
var currentFocus;
|
||||
/*execute a function when someone writes in the text field:*/
|
||||
inp.addEventListener("input", function(e) {
|
||||
var a, i, val = this.value;
|
||||
var field = this;
|
||||
/*close any already open lists of autocompleted values*/
|
||||
closeAllLists();
|
||||
if (!val) { return false;}
|
||||
currentFocus = -1;
|
||||
|
||||
var xhttp, xmlDoc, x;
|
||||
xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
xmlDoc = this.responseXML;
|
||||
|
||||
/*create a DIV element that will contain the items (values):*/
|
||||
a = document.createElement("div");
|
||||
a.setAttribute("id", inp.id + "autocomplete-list");
|
||||
a.setAttribute("class", "autocomplete-items");
|
||||
/*append the DIV element as a child of the autocomplete container:*/
|
||||
field.parentNode.appendChild(a);
|
||||
|
||||
responseFunc(xmlDoc, a, closeAllLists);
|
||||
}
|
||||
};
|
||||
xhttp.open("GET", encodeURI(requestFunc(val)), true);
|
||||
xhttp.send();
|
||||
});
|
||||
|
||||
/*execute a function presses a key on the keyboard:*/
|
||||
inp.addEventListener("keydown", function(e) {
|
||||
var x = document.getElementById(this.id + "autocomplete-list");
|
||||
if (x) x = x.getElementsByTagName("div");
|
||||
if (e.keyCode == 40) {
|
||||
/*If the arrow DOWN key is pressed,
|
||||
increase the currentFocus variable:*/
|
||||
currentFocus++;
|
||||
/*and and make the current item more visible:*/
|
||||
addActive(x);
|
||||
} else if (e.keyCode == 38) { //up
|
||||
/*If the arrow UP key is pressed,
|
||||
decrease the currentFocus variable:*/
|
||||
currentFocus--;
|
||||
/*and and make the current item more visible:*/
|
||||
addActive(x);
|
||||
} else if (e.keyCode == 13) {
|
||||
/*If the ENTER key is pressed, prevent the form from being submitted,*/
|
||||
e.preventDefault();
|
||||
if (currentFocus > -1) {
|
||||
/*and simulate a click on the "active" item:*/
|
||||
if (x) x[currentFocus].click();
|
||||
}
|
||||
}
|
||||
});
|
||||
function addActive(x) {
|
||||
/*a function to classify an item as "active":*/
|
||||
if (!x) return false;
|
||||
/*start by removing the "active" class on all items:*/
|
||||
removeActive(x);
|
||||
if (currentFocus >= x.length) currentFocus = 0;
|
||||
if (currentFocus < 0) currentFocus = (x.length - 1);
|
||||
/*add class "autocomplete-active":*/
|
||||
x[currentFocus].classList.add("autocomplete-active");
|
||||
}
|
||||
function removeActive(x) {
|
||||
/*a function to remove the "active" class from all autocomplete items:*/
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
x[i].classList.remove("autocomplete-active");
|
||||
}
|
||||
}
|
||||
function closeAllLists(elmnt) {
|
||||
/*close all autocomplete lists in the document,
|
||||
except the one passed as an argument:*/
|
||||
var x = document.getElementsByClassName("autocomplete-items");
|
||||
for (var i = 0; i < x.length; i++) {
|
||||
if (elmnt != x[i] && elmnt != inp) {
|
||||
x[i].parentNode.removeChild(x[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*execute a function when someone clicks in the document:*/
|
||||
document.addEventListener("click", function (e) {
|
||||
closeAllLists(e.target);
|
||||
});
|
||||
}
|
||||
|
||||
var clubField = document.getElementById("club");
|
||||
var nameField = document.getElementById("name");
|
||||
var cardField = document.getElementById("card");
|
||||
|
||||
autocomplete(clubField, function(val) {
|
||||
return "/meos?lookup=dbclub&name=" + val;
|
||||
},
|
||||
function(xmlDoc, a, closeAllLists) {
|
||||
var b, i;
|
||||
xres = xmlDoc.getElementsByTagName("Club");
|
||||
for (i = 0; i < xres.length; i++) {
|
||||
var Name = xres[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
|
||||
// create a DIV element for each matching element:
|
||||
b = document.createElement("div");
|
||||
// make the matching letters bold:
|
||||
b.innerHTML = Name;
|
||||
// insert a input field that will hold the current array item's value:
|
||||
b.innerHTML += "<input type='hidden' value='" + Name + "'>";
|
||||
// execute a function when someone clicks on the item value (DIV element):
|
||||
b.addEventListener("click", function(e) {
|
||||
// insert the value for the autocomplete text field:
|
||||
clubField.value = this.getElementsByTagName("input")[0].value;
|
||||
// close the list of autocompleted values, (or any other open lists of autocompleted values:
|
||||
closeAllLists();
|
||||
});
|
||||
a.appendChild(b);
|
||||
}
|
||||
});
|
||||
|
||||
autocomplete(nameField, function(val) {
|
||||
return "/meos?lookup=dbcompetitor&name=" + val + "&club=" + clubField.value;
|
||||
},
|
||||
function(xmlDoc, a, closeAllLists) {
|
||||
var b, i;
|
||||
xres = xmlDoc.getElementsByTagName("Competitor");
|
||||
|
||||
for (i = 0; i < xres.length; i++) {
|
||||
var Id = xres[i].getAttribute("id");
|
||||
var Name = xres[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
|
||||
var Club = xres[i].getElementsByTagName("Club")[0].childNodes[0].nodeValue;
|
||||
var Card = xres[i].getElementsByTagName("Card")[0].childNodes[0].nodeValue;
|
||||
|
||||
// create a DIV element for each matching element:
|
||||
b = document.createElement("div");
|
||||
// make the matching letters bold:
|
||||
b.innerHTML = Name + ", " + Club;
|
||||
// insert a input field that will hold the current array item's value:
|
||||
b.innerHTML += "<input type='hidden' value='" + Name + "'><input type='hidden' value='" + Club + "'><input type='hidden' value='" + Card + "'>";
|
||||
// execute a function when someone clicks on the item value (DIV element):
|
||||
b.addEventListener("click", function(e) {
|
||||
var hiddenInput = this.getElementsByTagName("input");
|
||||
// insert the value for the autocomplete text field:
|
||||
nameField.value = hiddenInput[0].value;
|
||||
clubField.value = hiddenInput[1].value;
|
||||
|
||||
if (cardField.value.length === 0)
|
||||
cardField.value = hiddenInput[2].value;
|
||||
// close the list of autocompleted values, (or any other open lists of autocompleted values:
|
||||
closeAllLists();
|
||||
});
|
||||
a.appendChild(b);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
108
Lists/first_to_finish.listdef
Normal file
108
Lists/first_to_finish.listdef
Normal file
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>First to finish</ListName>
|
||||
<Tag>firsttofinish</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>RunnerGlobal</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Finish order</Name>
|
||||
<Tag>result-by-finish-time</Tag>
|
||||
<Description>Individual result by finish time.</Description>
|
||||
<Date>2018-04-10 17:33:37</Date>
|
||||
<Rule name="RunnerTime">
|
||||
<Method>Finish</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterPrelResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Namn</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Klubb</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Starttid</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Mål</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">Namn</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolClubNameNames">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">Klubb</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerStart">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerFinish">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>result-by-finish-time</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
110
Lists/hired_card_default.csv
Normal file
110
Lists/hired_card_default.csv
Normal file
@ -0,0 +1,110 @@
|
||||
889740
|
||||
889741
|
||||
889742
|
||||
889743
|
||||
889744
|
||||
889745
|
||||
889746
|
||||
889747
|
||||
889748
|
||||
889749
|
||||
889750
|
||||
889751
|
||||
889752
|
||||
889753
|
||||
889754
|
||||
889755
|
||||
889756
|
||||
889757
|
||||
889758
|
||||
889759
|
||||
889760
|
||||
889761
|
||||
889762
|
||||
889763
|
||||
889764
|
||||
889765
|
||||
889766
|
||||
889767
|
||||
889768
|
||||
889769
|
||||
889770
|
||||
889771
|
||||
889772
|
||||
889773
|
||||
889774
|
||||
889775
|
||||
889776
|
||||
889777
|
||||
889778
|
||||
889779
|
||||
2027251
|
||||
2027252
|
||||
2027253
|
||||
2027254
|
||||
2027255
|
||||
2027256
|
||||
2027257
|
||||
2027258
|
||||
2027259
|
||||
2027260
|
||||
2027261
|
||||
2027262
|
||||
2027263
|
||||
2027264
|
||||
2027265
|
||||
2027266
|
||||
2027267
|
||||
2027268
|
||||
2027269
|
||||
2027270
|
||||
2027271
|
||||
2027272
|
||||
2027273
|
||||
2027274
|
||||
2027275
|
||||
2027276
|
||||
2027277
|
||||
2027278
|
||||
2027279
|
||||
2027280
|
||||
2027281
|
||||
2027282
|
||||
2027283
|
||||
2027284
|
||||
2027285
|
||||
2027286
|
||||
2027287
|
||||
2027288
|
||||
2027289
|
||||
2027290
|
||||
2027291
|
||||
2027292
|
||||
2027293
|
||||
2027294
|
||||
2027295
|
||||
2027296
|
||||
2027297
|
||||
2027298
|
||||
2027299
|
||||
2027300
|
||||
2027301
|
||||
2027302
|
||||
2027303
|
||||
2027304
|
||||
2027305
|
||||
2027306
|
||||
2027307
|
||||
2027308
|
||||
2027309
|
||||
2027310
|
||||
2027311
|
||||
2027312
|
||||
2027313
|
||||
2027314
|
||||
2027315
|
||||
2027316
|
||||
2027317
|
||||
2027318
|
||||
2027319
|
||||
2027320
|
||||
|
64
Lists/ind_courseresult.lxml
Normal file
64
Lists/ind_courseresult.lxml
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Resultat per bana</ListName>
|
||||
<Tag>courseresult</Tag>
|
||||
<SortOrder>CourseResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat per bana - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
|
||||
<Block Type="RunnerCourse">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</SubHead>
|
||||
|
||||
<List>
|
||||
<Line>
|
||||
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</List>
|
||||
|
||||
<SubList>
|
||||
</SubList>
|
||||
|
||||
</MeOSListDefinition>
|
||||
76
Lists/ind_finalresult.lxml
Normal file
76
Lists/ind_finalresult.lxml
Normal file
@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition>
|
||||
<ListName>Individuella slutresultat</ListName>
|
||||
<Tag>finalresult</Tag>
|
||||
<SortOrder>ClassTotalResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Totalresultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<Text>Totaltid</Text>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<Text>Efter</Text>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</SubHead>
|
||||
|
||||
<List>
|
||||
<Line>
|
||||
|
||||
<Block Type="RunnerTotalPlace">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTotalTimeStatus">
|
||||
<Align BlockAlign="true">Totaltid</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTotalTimeAfter">
|
||||
<Align BlockAlign="true">AlignNext</Align>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</List>
|
||||
|
||||
<SubList>
|
||||
</SubList>
|
||||
|
||||
</MeOSListDefinition>
|
||||
68
Lists/ind_result.listdef
Normal file
68
Lists/ind_result.listdef
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Individuella resultat</ListName>
|
||||
<Tag>indresult</Tag>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterPrelResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolClubNameNames">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
101
Lists/ind_totalresult.lxml
Normal file
101
Lists/ind_totalresult.lxml
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition>
|
||||
<ListName>Individuella totalresultat</ListName>
|
||||
<Tag>stageresult</Tag>
|
||||
<SortOrder>ClassTotalResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Totalresultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<Text>Totaltid</Text>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<Text>Efter</Text>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<Text>Etapp</Text>
|
||||
</Block>
|
||||
|
||||
<Block Type="String">
|
||||
<Text>Bomtid</Text>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</SubHead>
|
||||
|
||||
<List>
|
||||
<Line>
|
||||
|
||||
<Block Type="RunnerTotalPlace">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
|
||||
|
||||
<Block Type="RunnerTotalTimeStatus">
|
||||
<Align BlockAlign="true">Totaltid</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTotalTimeAfter">
|
||||
<Align BlockAlign="true">AlignNext</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="false">Etapp</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="false">AlignNext</Align>
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTimeAfter">
|
||||
</Block>
|
||||
|
||||
<Block Type="RunnerTimeLost">
|
||||
<Align>Bomtid</Align>
|
||||
</Block>
|
||||
|
||||
</Line>
|
||||
</List>
|
||||
|
||||
<SubList>
|
||||
</SubList>
|
||||
|
||||
</MeOSListDefinition>
|
||||
112
Lists/inputresults.listdef
Normal file
112
Lists/inputresults.listdef
Normal file
@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.2">
|
||||
<ListName>Input Results</ListName>
|
||||
<Tag>inputresult</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Input Results</Name>
|
||||
<Tag>ms-result-02FF-3FE2-1</Tag>
|
||||
<Description>listinfo:inputresults</Description>
|
||||
<Origin>New Competition A E2 (2015-03-23)</Origin>
|
||||
<Date>2015-04-14 16:28:10</Date>
|
||||
<Rule name="RunnerPoints">
|
||||
<Method>InputPoints</Method>
|
||||
</Rule>
|
||||
<Rule name="RunnerStatus">
|
||||
<Method>OutputNumbers[0] = InputPlace; InputStatus;</Method>
|
||||
</Rule>
|
||||
<Rule name="RunnerTime">
|
||||
<Method>InputTime</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamPoints">
|
||||
<Method>InputPoints</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamStatus">
|
||||
<Method>OutputNumbers[0] = InputPlace; return InputStatus;</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamTime">
|
||||
<Method>InputTime</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterNotVacant"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Input Results - X</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Placering</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Status</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerClub">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text>@;X</Text>
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="false">Placering</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="true">Status</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<ResultModule>ms-result-02FF-3FE2-1</ResultModule>
|
||||
<Align BlockAlign="false">Poäng</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
91
Lists/knockouttotal.listdef
Normal file
91
Lists/knockouttotal.listdef
Normal file
@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Knockout total</ListName>
|
||||
<Tag>knockout-total</Tag>
|
||||
<SortOrder>ClassKnockoutTotalResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<SubFilter name="FilterPrelResult"/>
|
||||
<SubFilter name="FilterStarted"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="110" above="3">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>20</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Placering</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerClub">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="SubSubCounter">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<IndentMin>5</IndentMin>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="true">Placering</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
101
Lists/lap_count.listdef
Normal file
101
Lists/lap_count.listdef
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Lap Count</ListName>
|
||||
<Tag>lapcount</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>AllPunches</SubListType>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Antal varv</Name>
|
||||
<Tag>ms-number-loops</Tag>
|
||||
<Description>Number of punches (laps), then time.</Description>
|
||||
<Date>2018-10-28 09:12:21</Date>
|
||||
<Rule name="RunnerScore">
|
||||
<Method>if (Status != StatusOK) return Status + 3600*10; score = 0; for(i = 0; i < CardTimes.size(); i++) { if (i == 0 || (CardTimes[i] - CardTimes[i-1]) > 60) score++; } OutputNumbers[0] = score + 1; return Time - score*3600*10;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterAnyResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="5">arial</ListFont>
|
||||
<SubListFont scale="120" above="0">Arial</SubListFont>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>300</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X. </Text>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="SubSubCounter">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchName">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchAbsTime">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTotalTime">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTimeSinceLast">
|
||||
<Text>(X)</Text>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="LineBreak">
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
101
Lists/lap_extra_control.listdef
Normal file
101
Lists/lap_extra_control.listdef
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Lap count with extra punch</ListName>
|
||||
<Tag>lapcountextra</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>AllPunches</SubListType>
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Antal varv (med extrakontroll)</Name>
|
||||
<Tag>ms-number-loops-extra</Tag>
|
||||
<Description>Number of loops, then time. On each loop you need to punch a extra control in order for the loop to count.</Description>
|
||||
<Date>2018-10-28 09:10:24</Date>
|
||||
<Rule name="RunnerScore">
|
||||
<Method>if (Status != StatusOK) return Status + 3600*10; score = 0; for(i = 1; i < CardTimes.size(); i = i+2) { if (CardPunches[i] != CardPunches[i-1]) score++; else i--; } OutputNumbers[0] = score; return Time - score*3600*10;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterAnyResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="5">arial</ListFont>
|
||||
<SubListFont scale="120" above="0">Arial</SubListFont>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>300</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X. </Text>
|
||||
<ResultModule>ms-number-loops</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="SubSubCounter">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchName">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchAbsTime">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTotalTime">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTimeSinceLast">
|
||||
<Text>(X)</Text>
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="LineBreak">
|
||||
<ResultModule>ms-number-loops-extra</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
82
Lists/latest.listdef
Normal file
82
Lists/latest.listdef
Normal file
@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Latest Results</ListName>
|
||||
<Tag>latestresult</Tag>
|
||||
<SortOrder>FinishTimeReverse</SortOrder>
|
||||
<ListType>RunnerLeg</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<SupportFrom>1</SupportFrom>
|
||||
<SupportTo>1</SupportTo>
|
||||
<Filter name="FilterPrelResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="200" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="150" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="150" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Color>381d3f</Color>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Klass</Text>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Namn</Text>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Placering</Text>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Namn</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Placering</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>totatcontrol</ResultModule>
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
77
Lists/legresult.listdef
Normal file
77
Lists/legresult.listdef
Normal file
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Stafettresultat, sträcka</ListName>
|
||||
<Tag>legresult</Tag>
|
||||
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<SubFilter name="FilterResult"/>
|
||||
<SubFilter name="FilterSameParallelNotFirst"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerLegNumberAlpha">
|
||||
<Text> - Resultat efter sträcka X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamLegTimeStatus">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamLegTimeAfter">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Text>(X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">RunnerName</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Text>(X)</Text>
|
||||
<Align BlockAlign="true">RunnerTimeStatus</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
674
Lists/license.txt
Normal file
674
Lists/license.txt
Normal file
@ -0,0 +1,674 @@
|
||||
This product is made available subject to the terms of GNU Affero Public License Version 3.
|
||||
|
||||
------------------------------------
|
||||
Third Party Code. Additional copyright notices and license terms applicable to portions of the Software are set forth in the thirdpartylicense.txt file.
|
||||
|
||||
------------------------------------
|
||||
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
|
||||
|
||||
------------------------------------
|
||||
Copyright 2007-2024 Melin Software HB.
|
||||
|
||||
------------------------------------
|
||||
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
91
Lists/liveresults.listdef
Normal file
91
Lists/liveresults.listdef
Normal file
@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Live results, radio</ListName>
|
||||
<Tag>liveresultradio</Tag>
|
||||
<SortOrder>ClassLiveResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>CoursePunches</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<Filter name="FilterAnyResult"/>
|
||||
<SubFilter name="FilterNotFinish"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="120" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="120" above="3">arial</ListFont>
|
||||
<SubListFont scale="130" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">CmpName</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X. </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolClubNameNames">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="ControlName">
|
||||
<Text>X:</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTotalTime">
|
||||
<Text>X</Text>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
</Block>
|
||||
<Block Type="PunchTotalTimeAfter">
|
||||
<Text>, X</Text>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="PunchControlPlaceAcc">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
42
Lists/modifiedcard.listdef
Normal file
42
Lists/modifiedcard.listdef
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MeOSListDefinition version="4.0">
|
||||
<ListName>Modified card data</ListName>
|
||||
<Tag>modifiedcard</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<Filter name="EFilterModifiedCard"/>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Manuellt ändrad brickdata</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
53
Lists/narrow_resultlist.listdef
Normal file
53
Lists/narrow_resultlist.listdef
Normal file
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Narrow Results</ListName>
|
||||
<UID>A1953845972770663068B776784610</UID>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>Punches</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<IndentMin>15</IndentMin>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
137
Lists/patrol_rogaining.listdef
Normal file
137
Lists/patrol_rogaining.listdef
Normal file
@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.8">
|
||||
<ListName>Patrol Team Rogaining</ListName>
|
||||
<Tag>patrol_team_rogaining</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Patrol Rogaining</Name>
|
||||
<Tag>ms-patrol-rogaining</Tag>
|
||||
<Description>Rogaining results for a patrol of two or more competitors.</Description>
|
||||
<Origin>Rogaining patrol (2018-01-18)</Origin>
|
||||
<Date>2022-01-29 23:28:29</Date>
|
||||
<Rule name="RunnerPoints">
|
||||
<Method>OutputNumbers[0] = PointReduction; return Points;</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamPoints">
|
||||
<Method>OutputTimes[0] = PatrolRogainingOvertime; OutputNumbers[0] = PatrolRogainingReduction; return PatrolRogainingScore;</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamScore">
|
||||
<Method>if (Status==StatusOK) return Time - 1000000 * ComputedPoints; else return 100000+Status; </Method>
|
||||
</Rule>
|
||||
<Rule name="TeamTime">
|
||||
<Method>t = 0; for(i = 0; i < RunnerTime.size(); i++) { if (t<RunnerTime[i]) t = RunnerTime[i]; } return t;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<SubFilter name="FilterResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="3">arial</ListFont>
|
||||
<SubListFont scale="120" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Övertid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Avdrag</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>20</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingPoint">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
<Font>Bold</Font>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleTimeTeam">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumberTeam">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">TeamRogainingPoint</Align>
|
||||
<BlockWidth>5</BlockWidth>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerTime">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingOvertime">
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>ms-patrol-rogaining</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
67
Lists/patrolresult.listdef
Normal file
67
Lists/patrolresult.listdef
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Patrol result</ListName>
|
||||
<Tag>patrolresult</Tag>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Align BlockAlign="true">CmpName</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="TeamTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
77
Lists/patrolstart.listdef
Normal file
77
Lists/patrolstart.listdef
Normal file
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Patrol, start list</ListName>
|
||||
<Tag>patrolstart</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Startlista - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassLength">
|
||||
<Text> (X meter)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="StartTimeForClass">
|
||||
<Text>Start: X</Text>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Bricka</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerStartCond">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">StartTimeForClass</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">Bricka</Align>
|
||||
</Block>
|
||||
<Block Type="TeamRunnerCard">
|
||||
<Text> / X</Text>
|
||||
<Leg>1</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
112
Lists/relay.listdef
Normal file
112
Lists/relay.listdef
Normal file
@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.5">
|
||||
<ListName>Stafettresultat</ListName>
|
||||
<Tag>relaytotalresult</Tag>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<SubFilter name="FilterPrelResult"/>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="110" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>20</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="TeamTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="SubSubCounter">
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<IndentMin>5</IndentMin>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">ClassResultFraction</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTotalTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerTotalPlace">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamLegTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
92
Lists/resultinclub.listdef
Normal file
92
Lists/resultinclub.listdef
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.2">
|
||||
<ListName>Individual results in a club</ListName>
|
||||
<Tag>indresultinclub</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>select-club</Name>
|
||||
<Tag>result-5C89-7E82-1</Tag>
|
||||
<Description>listinfo:singleclub</Description>
|
||||
<Date>2015-03-27 21:14:11</Date>
|
||||
<Rule name="RunnerStatus">
|
||||
<Method>if (InputNumber == ClubId) return Status; else return 0</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamStatus">
|
||||
<Method>if (InputNumber == ClubId) return Status; else return 0</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="PatrolNameNames">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="PatrolClubNameNames">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>result-5C89-7E82-1</ResultModule>
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
13
Lists/rogaining.brules
Normal file
13
Lists/rogaining.brules
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Individual Rogaining</Name>
|
||||
<Tag>rogaining</Tag>
|
||||
<Description>Individual standard rogaining results.</Description>
|
||||
<Origin>Melin Software HB</Origin>
|
||||
<Date>2017-11-16 07:10:20</Date>
|
||||
<Rule name="RunnerScore">
|
||||
<Method>if (Status==StatusOK) return Time - Points*100000; else return Status + 100000;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
90
Lists/rogaining.listdef
Normal file
90
Lists/rogaining.listdef
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.4">
|
||||
<ListName>Rogaining</ListName>
|
||||
<Tag>rogainingind</Tag>
|
||||
<SortOrder>ClassPoints</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassResultFraction">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Samlade poäng</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tidsavdrag</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerClub">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Text>X p.</Text>
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPointGross">
|
||||
<Align BlockAlign="true">Samlade poäng</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingReduction">
|
||||
<Align BlockAlign="true">Tidsavdrag</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
152
Lists/shooting_add_time.listdef
Normal file
152
Lists/shooting_add_time.listdef
Normal file
@ -0,0 +1,152 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.2">
|
||||
<ListName>OL-Skytte med tidstillägg</ListName>
|
||||
<Tag>shootaddtime</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>OL/Shooting Time Punishment</Name>
|
||||
<Tag>result-3243-76EA-1</Tag>
|
||||
<Description>olshooting:timepunishment</Description>
|
||||
<Origin>OL-Skytte (2015-02-16)</Origin>
|
||||
<Date>2015-05-07 12:01:12</Date>
|
||||
<Rule name="RunnerTime">
|
||||
<Method>pr = -PointAdjustment; OutputNumbers[0] = pr%10; // Standing OutputNumbers[1] = (pr/10)%10; // Standing OutputNumbers[2] = (pr/100)%10; // Prone OutputNumbers[3] = (pr/1000)%10; // Prone OutputNumbers[4] = pr/10000; // Location OutputNumbers[5] = OutputNumbers[0] + OutputNumbers[1] + OutputNumbers[2] + OutputNumbers[3]; // Total # shooting OutputNumbers[6] = 2*OutputNumbers[0] + 2*OutputNumbers[1] + 2*OutputNumbers[2] + 2*OutputNumbers[3] + OutputNumbers[4]; // Total penalty if (Time == 0) return 0; else return Time + (OutputNumbers[0]+OutputNumbers[1]+OutputNumbers[2]+OutputNumbers[3])*120 + OutputNumbers[4]*60; </Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tot löptid (Pl)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>mm</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>L L S S</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>T</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tot tillägg</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Totaltid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Color>4000</Color>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTime">
|
||||
<Align BlockAlign="true">Tot löptid (Pl)</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>4</Leg>
|
||||
<Align BlockAlign="true">mm</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>3</Leg>
|
||||
<Align BlockAlign="true">L L S S</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>2</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>1</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>5</Leg>
|
||||
<Align BlockAlign="true">T</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Leg>6</Leg>
|
||||
<Align BlockAlign="true">Tot tillägg</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">Totaltid</Align>
|
||||
<Color>4000</Color>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>result-3243-76EA-1</ResultModule>
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
97
Lists/shooting_no_add_time.listdef
Normal file
97
Lists/shooting_no_add_time.listdef
Normal file
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.2">
|
||||
<ListName>OL-Skytte utan tidstillägg</ListName>
|
||||
<Tag>shootnoaddtime</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Biathlonorienteering Sprint</Name>
|
||||
<Tag>result-91F1-253E-1</Tag>
|
||||
<Description>olshooting:notimepunishment</Description>
|
||||
<Origin>OL-Skytte (2015-02-16)</Origin>
|
||||
<Date>2015-05-07 12:01:53</Date>
|
||||
<Rule name="RunnerTime">
|
||||
<Method>pr = -PointAdjustment; OutputNumbers[0] = pr%10; // Standing OutputNumbers[1] = (pr/10)%10; // Prone return Time; </Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterResult"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>L S</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Totaltid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Color>4000</Color>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Leg>1</Leg>
|
||||
<Align BlockAlign="true">L S</Align>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Align BlockAlign="true">Totaltid</Align>
|
||||
<Color>4000</Color>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<ResultModule>result-91F1-253E-1</ResultModule>
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
151
Lists/shooting_relay.listdef
Normal file
151
Lists/shooting_relay.listdef
Normal file
@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.2">
|
||||
<ListName>OL-Skytte stafettresultat</ListName>
|
||||
<Tag>shootingrelaytotalresult</Tag>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Biathlonorienteering Relay</Name>
|
||||
<Tag>result-90A7-3EFA-1</Tag>
|
||||
<Description>olshooting:notimepunishment</Description>
|
||||
<Origin>OL-Skytte (2015-02-16)</Origin>
|
||||
<Date>2015-05-01 20:14:44</Date>
|
||||
<Rule name="RunnerTime">
|
||||
<Method>pr = -PointAdjustment; OutputNumbers[0] = pr%10; OutputNumbers[1] = (pr/10)%10; return Time;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterResult"/>
|
||||
<SubFilter name="FilterPrelResult"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="110"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>20</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Sträcktid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>L S</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Efter</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="TeamTimeAfter">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">Efter</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="SubSubCounter">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="false">None</Align>
|
||||
<IndentMin>5</IndentMin>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Align BlockAlign="true">Sträcktid</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeAfter">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Leg>1</Leg>
|
||||
<Align BlockAlign="true">L S</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="ResultModuleNumber">
|
||||
<Text> X</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Leg>0</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTotalTimeStatus">
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
<Font>NormalFont</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerTotalPlace">
|
||||
<Text> (X)</Text>
|
||||
<ResultModule>result-90A7-3EFA-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>NormalFont</Font>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
30
Lists/split_empty.listdef
Normal file
30
Lists/split_empty.listdef
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Empty Results Split Print</ListName>
|
||||
<Tag>split_result_empty</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>true</Speed>
|
||||
<Result>true</Result>
|
||||
<Analysis>true</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
</SubHead>
|
||||
<List>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
64
Lists/split_individual_result.listdef
Normal file
64
Lists/split_individual_result.listdef
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Individual Results Split Print</ListName>
|
||||
<Tag>split_result_individual</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>true</Speed>
|
||||
<Result>true</Result>
|
||||
<Analysis>true</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>CoursePunches</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Resultat</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X. </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Text>, X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
30
Lists/split_onb.listdef
Normal file
30
Lists/split_onb.listdef
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>ONB Results Split Print</ListName>
|
||||
<Tag>split_onb</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>false</Speed>
|
||||
<Result>false</Result>
|
||||
<Analysis>false</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>SortNameOnly</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
</SubHead>
|
||||
<List>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
69
Lists/split_rogaining.listdef
Normal file
69
Lists/split_rogaining.listdef
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Individual Rogaining Split Print</ListName>
|
||||
<Tag>split_result_rogaining</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>true</Speed>
|
||||
<Result>true</Result>
|
||||
<Analysis>true</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>ClassPoints</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>CoursePunches</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Resultat</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerPlace">
|
||||
<Text>X. </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Text>, X p.</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerTimeStatus">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
69
Lists/split_team_result.listdef
Normal file
69
Lists/split_team_result.listdef
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Relay/Team Results Split Print</ListName>
|
||||
<Tag>split_result_team</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>true</Speed>
|
||||
<Result>true</Result>
|
||||
<Analysis>true</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>ClassResult</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>CoursePunches</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Resultat</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Text>X. </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerLegTeamLeaderName">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Text>, X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
74
Lists/split_team_rogaining.listdef
Normal file
74
Lists/split_team_rogaining.listdef
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Team Rogaining Split Print</ListName>
|
||||
<Tag>split_result_team_rogaining</Tag>
|
||||
<SplitPrint>
|
||||
<Split>true</Split>
|
||||
<Speed>true</Speed>
|
||||
<Result>true</Result>
|
||||
<Analysis>true</Analysis>
|
||||
<Heading>true</Heading>
|
||||
<NumClsResult>3</NumClsResult>
|
||||
</SplitPrint>
|
||||
<SortOrder>ClassPoints</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>CoursePunches</SubListType>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Resultat</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Text>X. </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerLegTeamLeaderName">
|
||||
<Text> (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingPoint">
|
||||
<Text>, X p.</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Text>, X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
67
Lists/startlist.listdef
Normal file
67
Lists/startlist.listdef
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Startlista, individuell</ListName>
|
||||
<Tag>indstartlist</Tag>
|
||||
<SortOrder>ClassStartTimeClub</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Startlista - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassNumEntries">
|
||||
<Text>X anmälda</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassLength">
|
||||
<Text>X meter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassStartName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerStart">
|
||||
<Align BlockAlign="true">ClassName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">ClassNumEntries</Align>
|
||||
</Block>
|
||||
<Block Type="ClubName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
68
Lists/startlistteam.listdef
Normal file
68
Lists/startlistteam.listdef
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.7">
|
||||
<ListName>Startlista, lag</ListName>
|
||||
<Tag>teamstartlist</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<SubFilter name="FilterNotVacant"/>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="5"/>
|
||||
<SubListFont scale="140" above="0"/>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="StartTimeForClass">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassLength">
|
||||
<Text>X meter</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassStartName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerLegNumberAlpha">
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Align BlockAlign="true">ClassStartName</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
73
Lists/teamchange.listdef
Normal file
73
Lists/teamchange.listdef
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Lagändringblankett</ListName>
|
||||
<Tag>teamchanges</Tag>
|
||||
<SortOrder>ClubClassStartTime</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="150" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="TeamBib">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text> </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
<Block Type="RunnerCard">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text> </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="RunnerLegNumberAlpha">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>ItalicMediumPlus</Font>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>MediumPlus</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text> </Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
49
Lists/teamforking.listdef
Normal file
49
Lists/teamforking.listdef
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.9">
|
||||
<ListName>Gafflingar lagvis</ListName>
|
||||
<Tag>teamforking</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<HeadFont scale="100" above="0"/>
|
||||
<SubHeadFont scale="100" above="0"/>
|
||||
<ListFont scale="100" above="0"/>
|
||||
<SubListFont scale="100" above="0"/>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="String">
|
||||
<Text>Startnummer</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>SmallFont</Font>
|
||||
</Block>
|
||||
<Block Type="TeamLegName">
|
||||
<Text>Sträcka X</Text>
|
||||
<Leg>-2</Leg>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<Font>SmallFont</Font>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamStartNo">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamCourseName">
|
||||
<Leg>-2</Leg>
|
||||
<Align BlockAlign="true">TeamLegName</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
114
Lists/teamrogaining.listdef
Normal file
114
Lists/teamrogaining.listdef
Normal file
@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition>
|
||||
<ListName>Team Rogaining</ListName>
|
||||
<Tag>teamrogaining</Tag>
|
||||
<SortOrder>CustomSort</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<ResultModule>result-ms-4A5B-66C8-1</ResultModule>
|
||||
<MeOSResultCalculationSet>
|
||||
<Name>Team Rogaining Collect Points</Name>
|
||||
<Description>Rogaining results for a team, where each team member collects points individually</Description>
|
||||
<Tag>result-ms-4A5B-66C8-1</Tag>
|
||||
<Origin>Melin Software HB</Origin>
|
||||
<Date>2023-05-05 07:17:19</Date>
|
||||
<Rule name="TeamScore">
|
||||
<Method>if (ComputedStatus == StatusOK) return 1000000000-ComputedPoints*100000+ComputedTime; else return 1000000000+ComputedStatus;</Method>
|
||||
</Rule>
|
||||
<Rule name="TeamStatus">
|
||||
<Method>if (Status == StatusUnknown && Points>0) return StatusOK; return Status; </Method>
|
||||
</Rule>
|
||||
<Rule name="TeamTime">
|
||||
<Method>t = Finish-Start; for (i = 0; i < RunnerTime.size(); i++) t = max(t, RunnerTime[i]); return t;</Method>
|
||||
</Rule>
|
||||
</MeOSResultCalculationSet>
|
||||
<Filter name="FilterResult"/>
|
||||
<SubFilter name="FilterResult"/>
|
||||
<HeadFont scale="100"></HeadFont>
|
||||
<SubHeadFont scale="100"></SubHeadFont>
|
||||
<ListFont scale="100"></ListFont>
|
||||
<SubListFont scale="100"></SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Övertid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Avdrag</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<ResultModule>result-ms-4A5B-66C8-1</ResultModule>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingPoint">
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingOvertime">
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingReduction">
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerTime">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingOvertime">
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingReduction">
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
108
Lists/teamrogainingresult.listdef
Normal file
108
Lists/teamrogainingresult.listdef
Normal file
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.7">
|
||||
<ListName>Resultatlista, Rogaining, lag</ListName>
|
||||
<Tag>teamrogainingresult</Tag>
|
||||
<SortOrder>ClassPoints</SortOrder>
|
||||
<ListType>Team</ListType>
|
||||
<SubListType>Runner</SubListType>
|
||||
<HideLegSelection>1</HideLegSelection>
|
||||
<Filter name="FilterResult"/>
|
||||
<Filter name="FilterNoCancel"/>
|
||||
<SubFilter name="FilterResult"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="3">arial</ListFont>
|
||||
<SubListFont scale="120" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Resultat - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
<Line>
|
||||
<Block Type="CmpDate">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Poäng</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Tid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Övertid</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Avdrag</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="TeamPlace">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="TeamName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<BlockWidth>20</BlockWidth>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingPoint">
|
||||
<Align BlockAlign="true">Poäng</Align>
|
||||
<Font>Bold</Font>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="TeamTimeStatus">
|
||||
<Align BlockAlign="true">Tid</Align>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingOvertime">
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="TeamRogainingReduction">
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
<Line>
|
||||
<Block Type="RunnerName">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">TeamName</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingPoint">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">TeamRogainingPoint</Align>
|
||||
<BlockWidth>5</BlockWidth>
|
||||
<TextAdjust>Center</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerTime">
|
||||
<Text> X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingOvertime">
|
||||
<Align BlockAlign="true">Övertid</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
<Block Type="RunnerRogainingReduction">
|
||||
<Align BlockAlign="true">Avdrag</Align>
|
||||
<TextAdjust>Right</TextAdjust>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
146
Lists/thirdpartylicense.txt
Normal file
146
Lists/thirdpartylicense.txt
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
MySQL++:
|
||||
|
||||
/***********************************************************************
|
||||
Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by
|
||||
MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc.
|
||||
Others may also hold copyrights on code in this file. See the CREDITS
|
||||
file in the top directory of the distribution for details.
|
||||
|
||||
This file is part of MySQL++.
|
||||
|
||||
MySQL++ is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published
|
||||
by the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MySQL++ is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with MySQL++; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||||
USA
|
||||
***********************************************************************/
|
||||
|
||||
CREDITS
|
||||
|
||||
MySQL++ was created by Kevin Atkinson during 1998. From version 1.0
|
||||
(released in June 1999) through 1.7.9 (May 2001), the primary maintainer
|
||||
was Sinisa Milivojevic <sinisa@mysql.com>. Neither Kevin nor Sinisa
|
||||
are currently involved in MySQL++ development. The current maintainer
|
||||
is Warren Young <mysqlpp@etr-usa.com>, starting with version 1.7.10 in
|
||||
August of 2004.
|
||||
|
||||
For a fuller account of the library's history, see the first chapter
|
||||
of the user manual. For the nitty-gritty details, see the ChangeLog
|
||||
in the root package directory. ChangeLog items since 1.7.9 that
|
||||
aren't attributed to anyone else were done by Warren Young.
|
||||
|
||||
|
||||
Other contributors of note since 1.7.10:
|
||||
|
||||
Chris Frey <cdfrey@netdirect.ca>: Lots of GCC warning fixes for
|
||||
the bleeding-edge compiler versions, and Gentoo ebuild support.
|
||||
Also, if there were a "steering committee" for MySQL++, he'd be
|
||||
on it.
|
||||
|
||||
Mark Meredino <Mark_Merendino@cnt.com>: Several fixes and
|
||||
additions, including a lot of work on Microsoft Visual C++
|
||||
compatibility, and discoveries made while spelunking in the
|
||||
library.
|
||||
|
||||
Evan Wies <evan@athenacr.com>: Contributed several C++ code
|
||||
style cleanups.
|
||||
|
||||
Arnon Jalon <Arnon.Jalon@247RealMedia.com>: Added the multi-query
|
||||
result set handling features, and multiquery example to demonstrate
|
||||
it.
|
||||
|
||||
Korolyov Ilya has submitted several patches in many different
|
||||
areas of the library.
|
||||
|
||||
Remi Collet <Liste@FamilleCollet.com> is maintaining offical
|
||||
RPMs for Fedora, with other systems on the way. His work has
|
||||
improved the RPM spec file we distribute greatly.
|
||||
|
||||
Joel Fielder <joel.fielder@switchplane.com> came up with the
|
||||
original idea for Query::for_each() and Query::store_in(),
|
||||
provided the basis for examples/for_each.cpp, and provided
|
||||
a fix for exception flag propagation in Query.
|
||||
|
||||
|
||||
Here are the personal credits from the old 1.7.9 documentation,
|
||||
apparently written by Kevin Atkinson:
|
||||
|
||||
Chris Halverson - For helping me get it to compile under Solaris.
|
||||
|
||||
Fredric Fredricson - For a long talk about automatic conversions.
|
||||
|
||||
Michael Widenius - MySQL developer who has been very supportive of
|
||||
my efforts.
|
||||
|
||||
Paul J. Lucas - For the original idea of treating the query object
|
||||
like a stream.
|
||||
|
||||
Scott Barron - For helping me with the shared libraries.
|
||||
|
||||
Jools Enticknap - For giving me the Template Queries idea.
|
||||
|
||||
M. S. Sriram - For a detailed dission of how the Template Queries
|
||||
should be implemented, the suggestion to throw exceptions on bad
|
||||
queries, and the idea of having a back-end independent query
|
||||
object (ie SQLQuery).
|
||||
|
||||
Sinisa Milivojevic - For becoming the new offical maintainer.
|
||||
|
||||
D. Hawkins and E. Loic for their autoconf + automake contribution.
|
||||
|
||||
|
||||
See the ChangeLog for further credits, and details about the differences
|
||||
between the many versions of this library.
|
||||
|
||||
|
||||
Please do not email any of these people with general questions about
|
||||
MySQL++. All of us who are still active in MySQL++ development read the
|
||||
mailing list, so questions sent there do get to us:
|
||||
|
||||
http://lists.mysql.com/plusplus
|
||||
|
||||
The mailing list is superior to private email because the answers are
|
||||
archived for future questioners to find, and because you are likely to
|
||||
get answers from more people.
|
||||
|
||||
* * * * * * * * *
|
||||
|
||||
LibHaru (PDF)
|
||||
|
||||
*
|
||||
* License
|
||||
*
|
||||
Haru is distributed under the ZLIB/LIBPNG License. Because ZLIB/LIBPNG License
|
||||
is one of the freest licenses, You can use Haru for various purposes.
|
||||
|
||||
The license of Haru is as follows.
|
||||
|
||||
Copyright (C) 1999-2006 Takeshi Kanno
|
||||
Copyright (C) 2007-2009 Antony Dovgal
|
||||
|
||||
This software is provided 'as-is', without any express or implied warranty.
|
||||
|
||||
In no event will the authors be held liable for any damages arising from the
|
||||
use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,including
|
||||
commercial applications, and to alter it and redistribute it freely, subject
|
||||
to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not claim
|
||||
that you wrote the original software. If you use this software in a
|
||||
product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
61
Lists/unexpectedfee.listdef
Normal file
61
Lists/unexpectedfee.listdef
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.6">
|
||||
<ListName>Unexpected Fee</ListName>
|
||||
<Tag>unexpectedfee</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="EFilterWrongFee"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Anmälningsdatum</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Födelseår</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Avgift</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="String">
|
||||
<Text>Förväntad</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerCompleteName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerEntryDate">
|
||||
<Align BlockAlign="true">Anmälningsdatum</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerBirthYear">
|
||||
<Align BlockAlign="true">Födelseår</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerFee">
|
||||
<Align BlockAlign="true">Avgift</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerExpectedFee">
|
||||
<Align BlockAlign="true">Förväntad</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
49
Lists/vacancy.listdef
Normal file
49
Lists/vacancy.listdef
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
|
||||
<MeOSListDefinition version="3.3">
|
||||
<ListName>Vakanser</ListName>
|
||||
<Tag>vacnacy</Tag>
|
||||
<SortOrder>ClassStartTime</SortOrder>
|
||||
<ListType>Runner</ListType>
|
||||
<SubListType>None</SubListType>
|
||||
<Filter name="FilterOnlyVacant"/>
|
||||
<HeadFont scale="100" above="0">arial</HeadFont>
|
||||
<SubHeadFont scale="100" above="0">arial</SubHeadFont>
|
||||
<ListFont scale="100" above="0">arial</ListFont>
|
||||
<SubListFont scale="100" above="0">arial</SubListFont>
|
||||
<Head>
|
||||
<Line>
|
||||
<Block Type="CmpName">
|
||||
<Text>Vakanser - X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</Head>
|
||||
<SubHead>
|
||||
<Line>
|
||||
<Block Type="ClassName">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
</Line>
|
||||
</SubHead>
|
||||
<List>
|
||||
<Line>
|
||||
<Block Type="RunnerStart">
|
||||
<Align BlockAlign="true">None</Align>
|
||||
</Block>
|
||||
<Block Type="RunnerName">
|
||||
<Text>, X</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
<Block Type="RunnerBib">
|
||||
<Text>, (X)</Text>
|
||||
<Align BlockAlign="true">None</Align>
|
||||
<MergePrevious>1</MergePrevious>
|
||||
</Block>
|
||||
</Line>
|
||||
</List>
|
||||
<SubList>
|
||||
</SubList>
|
||||
</MeOSListDefinition>
|
||||
BIN
Lists/wclass.mwd
Normal file
BIN
Lists/wclass.mwd
Normal file
Binary file not shown.
BIN
Lists/wclub.mwd
Normal file
BIN
Lists/wclub.mwd
Normal file
Binary file not shown.
BIN
Lists/wfamily.mwd
Normal file
BIN
Lists/wfamily.mwd
Normal file
Binary file not shown.
BIN
Lists/wgiven.mwd
Normal file
BIN
Lists/wgiven.mwd
Normal file
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -41,28 +41,30 @@ extern Image image;
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
using namespace std;
|
||||
|
||||
double getLocalScale(const wstring &fontName, wstring &faceName);
|
||||
wstring getMeosCompectVersion();
|
||||
|
||||
map <string, shared_ptr<HTMLWriter>> HTMLWriter::tCache;
|
||||
extern wchar_t exePath[MAX_PATH];
|
||||
|
||||
static void generateStyles(const gdioutput &gdi, ostream &fout, double scale, bool withTbl, const list<TextInfo> &TL,
|
||||
static void generateStyles(const gdioutput &gdi, std::ostream &fout, double scale, bool withTbl, const list<TextInfo> &TL,
|
||||
map< pair<gdiFonts, string>, pair<string, string> > &styles) {
|
||||
fout << "<style type=\"text/css\">\n";
|
||||
fout << "body {background-color: rgb(250,250,255)}\n";
|
||||
fout << "h1 {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 24 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "h2 {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 20 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "h3 {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 16 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "p {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal}\n";
|
||||
fout << "div {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "h1 {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 24 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "h2 {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 20 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "h3 {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 16 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "p {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal}\n";
|
||||
fout << "div {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
|
||||
if (withTbl) {
|
||||
fout << "td {font-family:arial,sans-serif;font-size:" << fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "td {font-family:arial,sans-serif;font-size:" << std::fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal;white-space:nowrap}\n";
|
||||
fout << "td.e0 {background-color: rgb(238,238,255)}\n";
|
||||
fout << "td.e1 {background-color: rgb(245,245,255)}\n";
|
||||
fout << "td.header {line-height:" << fixed << std::setprecision(2) << 1.8 * scale << ";height:" << fixed << std::setprecision(2) << 40 * scale << "px}\n";
|
||||
fout << "td.freeheader {line-height:" << fixed << std::setprecision(2) << 1.2 * scale << "}\n";
|
||||
fout << "td.header {line-height:" << std::fixed << std::setprecision(2) << 1.8 * scale << ";height:" << std::fixed << std::setprecision(2) << 40 * scale << "px}\n";
|
||||
fout << "td.freeheader {line-height:" << std::fixed << std::setprecision(2) << 1.2 * scale << "}\n";
|
||||
}
|
||||
list<TextInfo>::const_iterator it=TL.begin();
|
||||
int styleList = 1;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -49,11 +49,11 @@ class HTMLWriter {
|
||||
ImageWriter(const wstring& dst, bool writeImages) : destination(dst), writeImages(writeImages) {}
|
||||
|
||||
|
||||
void write(ostream &fout, const string &xp, const string &yp, const wstring &img, int width, int height);
|
||||
void write(std::ostream &fout, const string &xp, const string &yp, const wstring &img, int width, int height);
|
||||
};
|
||||
|
||||
template<typename T, typename TI>
|
||||
static void formatTL(ostream& fout,
|
||||
static void formatTL(std::ostream& fout,
|
||||
ImageWriter& imageWriter,
|
||||
const map< pair<gdiFonts, string>, pair<string, string> >& styles,
|
||||
const T& tl,
|
||||
@ -87,7 +87,7 @@ public:
|
||||
void read(const wstring &fileName);
|
||||
|
||||
void generate(gdioutput &gdi,
|
||||
ostream &fout,
|
||||
std::ostream &fout,
|
||||
const wstring &title,
|
||||
const wstring &contentDescription,
|
||||
bool respectPageBreak,
|
||||
@ -99,12 +99,12 @@ public:
|
||||
|
||||
void getPage(const oEvent &oe, string &out) const;
|
||||
|
||||
static void writeHTML(gdioutput &gdi, ostream &dout, const wstring &title,
|
||||
static void writeHTML(gdioutput &gdi, std::ostream &dout, const wstring &title,
|
||||
bool includeImages,
|
||||
const wstring& imageDirectoryDestination,
|
||||
int refreshTimeOut, double scale);
|
||||
|
||||
static void writeTableHTML(gdioutput &gdi, ostream &fout,
|
||||
static void writeTableHTML(gdioutput &gdi, std::ostream &fout,
|
||||
const wstring &title,
|
||||
bool includeImages,
|
||||
const wstring &imageDirectoryDestination,
|
||||
@ -121,13 +121,13 @@ public:
|
||||
const wstring &title, int refreshTimeOut, double scale);
|
||||
|
||||
static void write(gdioutput& gdi, const wstring& file, const wstring& title, int refresh, oListParam& param, const oEvent& oe);
|
||||
static void write(gdioutput& gdi, ostream& fout, const wstring& title, int refresh, oListParam& param, const oEvent& oe);
|
||||
static void write(gdioutput& gdi, std::ostream& fout, const wstring& title, int refresh, oListParam& param, const oEvent& oe);
|
||||
|
||||
static void write(gdioutput& gdi, const wstring& file, const wstring& title, const wstring& contentsDescription,
|
||||
bool respectPageBreak, const string& typeTag, int refresh,
|
||||
int rows, int cols, int time_ms, int margin, double scale);
|
||||
|
||||
static void write(gdioutput& gdi, ostream& fout, const wstring& title,
|
||||
static void write(gdioutput& gdi, std::ostream& fout, const wstring& title,
|
||||
bool includeImages,
|
||||
const wstring& imageDirectoryDestination,
|
||||
const wstring& contentsDescription,
|
||||
|
||||
31
code/MeOS-orig.sln
Normal file
31
code/MeOS-orig.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34330.188
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeOS", "MeOS.vcxproj", "{60BC59CB-8987-4A39-B866-403066F59B0F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x64.Build.0 = Debug|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x86.Build.0 = Debug|Win32
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x64.ActiveCfg = Release|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x64.Build.0 = Release|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x86.ActiveCfg = Release|Win32
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {0AA159AF-578B-49E9-8D52-50F9272169DB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
381
code/MeOS-orig.vcxproj
Normal file
381
code/MeOS-orig.vcxproj
Normal file
@ -0,0 +1,381 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<ProjectGuid>{60BC59CB-8987-4A39-B866-403066F59B0F}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>MeOS</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<CopyCppRuntimeToOutputDir>false</CopyCppRuntimeToOutputDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<AdditionalIncludeDirectories>./libharu;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4267;4244;4018</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<AdditionalLibraryDirectories>./lib_db</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;odbc32.lib;odbccp32.lib;winmm.lib;ws2_32.lib;wininet.lib;zlibstat_vc15.lib;libmysql.lib;libhpdf.lib;RestBed.lib;libpng.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>meos_dpi_manifest.xml %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<DisableSpecificWarnings>4267;4244;4018</DisableSpecificWarnings>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<AdditionalIncludeDirectories>./libharu;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;odbc32.lib;odbccp32.lib;winmm.lib;ws2_32.lib;wininet.lib;zlibstat.lib;libharu.lib;RestBed.lib;libpng.lib;libmysql.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>./lib64_db</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>meos_dpi_manifest.xml %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<DisableSpecificWarnings>4267;4244;4018</DisableSpecificWarnings>
|
||||
<AdditionalIncludeDirectories>./libharu;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>./lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;odbc32.lib;odbccp32.lib;winmm.lib;ws2_32.lib;wininet.lib;zlibstat_vc15.lib;libmysql.lib;libhpdf.lib;RestBed.lib;libpng.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>meos_dpi_manifest.xml %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DisableSpecificWarnings>4267;4244;4018</DisableSpecificWarnings>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<AdditionalIncludeDirectories>./libharu;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;odbc32.lib;odbccp32.lib;winmm.lib;ws2_32.lib;wininet.lib;zlibstat.lib;libharu.lib;RestBed.lib;libpng.lib;libmysql.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>./lib64</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<AdditionalManifestFiles>meos_dpi_manifest.xml %(AdditionalManifestFiles)</AdditionalManifestFiles>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="animationdata.cpp" />
|
||||
<ClCompile Include="autocomplete.cpp" />
|
||||
<ClCompile Include="autotask.cpp" />
|
||||
<ClCompile Include="binencoder.cpp" />
|
||||
<ClCompile Include="classconfiginfo.cpp" />
|
||||
<ClCompile Include="csvparser.cpp" />
|
||||
<ClCompile Include="download.cpp" />
|
||||
<ClCompile Include="gdioutput.cpp" />
|
||||
<ClCompile Include="generalresult.cpp" />
|
||||
<ClCompile Include="HTMLWriter.cpp" />
|
||||
<ClCompile Include="image.cpp" />
|
||||
<ClCompile Include="importformats.cpp" />
|
||||
<ClCompile Include="infoserver.cpp" />
|
||||
<ClCompile Include="iof30interface.cpp" />
|
||||
<ClCompile Include="listeditor.cpp" />
|
||||
<ClCompile Include="liveresult.cpp" />
|
||||
<ClCompile Include="localizer.cpp" />
|
||||
<ClCompile Include="machinecontainer.cpp" />
|
||||
<ClCompile Include="meos.cpp" />
|
||||
<ClCompile Include="MeOSFeatures.cpp" />
|
||||
<ClCompile Include="MeosSQL.cpp" />
|
||||
<ClCompile Include="meosversion.cpp" />
|
||||
<ClCompile Include="meos_util.cpp" />
|
||||
<ClCompile Include="metalist.cpp" />
|
||||
<ClCompile Include="methodeditor.cpp" />
|
||||
<ClCompile Include="mysqldaemon.cpp" />
|
||||
<ClCompile Include="mysqlwrapper.cpp" />
|
||||
<ClCompile Include="newcompetition.cpp" />
|
||||
<ClCompile Include="oBase.cpp" />
|
||||
<ClCompile Include="oCard.cpp" />
|
||||
<ClCompile Include="oClass.cpp" />
|
||||
<ClCompile Include="oClub.cpp" />
|
||||
<ClCompile Include="oControl.cpp" />
|
||||
<ClCompile Include="oCourse.cpp" />
|
||||
<ClCompile Include="oDataContainer.cpp" />
|
||||
<ClCompile Include="oEvent.cpp" />
|
||||
<ClCompile Include="oEventDraw.cpp" />
|
||||
<ClCompile Include="oEventResult.cpp" />
|
||||
<ClCompile Include="oEventSpeaker.cpp" />
|
||||
<ClCompile Include="oEventSQL.cpp" />
|
||||
<ClCompile Include="oevent_transfer.cpp" />
|
||||
<ClCompile Include="oFreeImport.cpp" />
|
||||
<ClCompile Include="oFreePunch.cpp" />
|
||||
<ClCompile Include="oImportExport.cpp" />
|
||||
<ClCompile Include="oListInfo.cpp" />
|
||||
<ClCompile Include="onlineinput.cpp" />
|
||||
<ClCompile Include="onlineresults.cpp" />
|
||||
<ClCompile Include="oPunch.cpp" />
|
||||
<ClCompile Include="oReport.cpp" />
|
||||
<ClCompile Include="oRunner.cpp" />
|
||||
<ClCompile Include="oTeam.cpp" />
|
||||
<ClCompile Include="oTeamEvent.cpp" />
|
||||
<ClCompile Include="parser.cpp" />
|
||||
<ClCompile Include="pdfwriter.cpp" />
|
||||
<ClCompile Include="prefseditor.cpp" />
|
||||
<ClCompile Include="printer.cpp" />
|
||||
<ClCompile Include="progress.cpp" />
|
||||
<ClCompile Include="qf_editor.cpp" />
|
||||
<ClCompile Include="qualification_final.cpp" />
|
||||
<ClCompile Include="random.cpp" />
|
||||
<ClCompile Include="recorder.cpp" />
|
||||
<ClCompile Include="restserver.cpp" />
|
||||
<ClCompile Include="RestService.cpp" />
|
||||
<ClCompile Include="RunnerDB.cpp" />
|
||||
<ClCompile Include="socket.cpp" />
|
||||
<ClCompile Include="speakermonitor.cpp" />
|
||||
<ClCompile Include="SportIdent.cpp" />
|
||||
<ClCompile Include="StdAfx.cpp" />
|
||||
<ClCompile Include="TabAuto.cpp" />
|
||||
<ClCompile Include="TabBase.cpp" />
|
||||
<ClCompile Include="TabClass.cpp" />
|
||||
<ClCompile Include="TabClub.cpp" />
|
||||
<ClCompile Include="TabCompetition.cpp" />
|
||||
<ClCompile Include="TabControl.cpp" />
|
||||
<ClCompile Include="TabCourse.cpp" />
|
||||
<ClCompile Include="Table.cpp" />
|
||||
<ClCompile Include="TabList.cpp" />
|
||||
<ClCompile Include="TabMulti.cpp" />
|
||||
<ClCompile Include="TabRunner.cpp" />
|
||||
<ClCompile Include="TabSI.cpp" />
|
||||
<ClCompile Include="TabSpeaker.cpp" />
|
||||
<ClCompile Include="TabTeam.cpp" />
|
||||
<ClCompile Include="testmeos.cpp" />
|
||||
<ClCompile Include="tests.cpp" />
|
||||
<ClCompile Include="TimeStamp.cpp" />
|
||||
<ClCompile Include="toolbar.cpp" />
|
||||
<ClCompile Include="xmlparser.cpp" />
|
||||
<ClCompile Include="zip.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="animationdata.h" />
|
||||
<ClInclude Include="autocomplete.h" />
|
||||
<ClInclude Include="autocompletehandler.h" />
|
||||
<ClInclude Include="autotask.h" />
|
||||
<ClInclude Include="binencoder.h" />
|
||||
<ClInclude Include="classconfiginfo.h" />
|
||||
<ClInclude Include="csvparser.h" />
|
||||
<ClInclude Include="datadefiners.h" />
|
||||
<ClInclude Include="download.h" />
|
||||
<ClInclude Include="gdiconstants.h" />
|
||||
<ClInclude Include="gdifonts.h" />
|
||||
<ClInclude Include="gdiimpl.h" />
|
||||
<ClInclude Include="gdioutput.h" />
|
||||
<ClInclude Include="gdistructures.h" />
|
||||
<ClInclude Include="generalresult.h" />
|
||||
<ClInclude Include="guihandler.h" />
|
||||
<ClInclude Include="HTMLWriter.h" />
|
||||
<ClInclude Include="image.h" />
|
||||
<ClInclude Include="importformats.h" />
|
||||
<ClInclude Include="infoserver.h" />
|
||||
<ClInclude Include="inthashmap.h" />
|
||||
<ClInclude Include="intkeymap.hpp" />
|
||||
<ClInclude Include="intkeymapimpl.hpp" />
|
||||
<ClInclude Include="iof30interface.h" />
|
||||
<ClInclude Include="listeditor.h" />
|
||||
<ClInclude Include="liveresult.h" />
|
||||
<ClInclude Include="localizer.h" />
|
||||
<ClInclude Include="machinecontainer.h" />
|
||||
<ClInclude Include="meos.h" />
|
||||
<ClInclude Include="meosexception.h" />
|
||||
<ClInclude Include="MeOSFeatures.h" />
|
||||
<ClInclude Include="MeosSQL.h" />
|
||||
<ClInclude Include="meos_util.h" />
|
||||
<ClInclude Include="metalist.h" />
|
||||
<ClInclude Include="methodeditor.h" />
|
||||
<ClInclude Include="mysqlwrapper.h" />
|
||||
<ClInclude Include="oBase.h" />
|
||||
<ClInclude Include="oCard.h" />
|
||||
<ClInclude Include="oClass.h" />
|
||||
<ClInclude Include="oClub.h" />
|
||||
<ClInclude Include="oControl.h" />
|
||||
<ClInclude Include="oCourse.h" />
|
||||
<ClInclude Include="oDataContainer.h" />
|
||||
<ClInclude Include="oEvent.h" />
|
||||
<ClInclude Include="oEventDraw.h" />
|
||||
<ClInclude Include="oFreeImport.h" />
|
||||
<ClInclude Include="oFreePunch.h" />
|
||||
<ClInclude Include="oListInfo.h" />
|
||||
<ClInclude Include="onlineinput.h" />
|
||||
<ClInclude Include="onlineresults.h" />
|
||||
<ClInclude Include="oPunch.h" />
|
||||
<ClInclude Include="oRunner.h" />
|
||||
<ClInclude Include="ospeaker.h" />
|
||||
<ClInclude Include="oTeam.h" />
|
||||
<ClInclude Include="parser.h" />
|
||||
<ClInclude Include="pdfwriter.h" />
|
||||
<ClInclude Include="prefseditor.h" />
|
||||
<ClInclude Include="Printer.h" />
|
||||
<ClInclude Include="progress.h" />
|
||||
<ClInclude Include="qf_editor.h" />
|
||||
<ClInclude Include="qualification_final.h" />
|
||||
<ClInclude Include="random.h" />
|
||||
<ClInclude Include="recorder.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="restserver.h" />
|
||||
<ClInclude Include="RestService.h" />
|
||||
<ClInclude Include="RunnerDB.h" />
|
||||
<ClInclude Include="socket.h" />
|
||||
<ClInclude Include="speakermonitor.h" />
|
||||
<ClInclude Include="SportIdent.h" />
|
||||
<ClInclude Include="StdAfx.h" />
|
||||
<ClInclude Include="subcommand.h" />
|
||||
<ClInclude Include="TabAuto.h" />
|
||||
<ClInclude Include="TabBase.h" />
|
||||
<ClInclude Include="TabClass.h" />
|
||||
<ClInclude Include="TabClub.h" />
|
||||
<ClInclude Include="TabCompetition.h" />
|
||||
<ClInclude Include="TabControl.h" />
|
||||
<ClInclude Include="TabCourse.h" />
|
||||
<ClInclude Include="Table.h" />
|
||||
<ClInclude Include="TabList.h" />
|
||||
<ClInclude Include="TabMulti.h" />
|
||||
<ClInclude Include="TabRunner.h" />
|
||||
<ClInclude Include="TabSI.h" />
|
||||
<ClInclude Include="TabSpeaker.h" />
|
||||
<ClInclude Include="TabTeam.h" />
|
||||
<ClInclude Include="testmeos.h" />
|
||||
<ClInclude Include="timeconstants.hpp" />
|
||||
<ClInclude Include="TimeStamp.h" />
|
||||
<ClInclude Include="toolbar.h" />
|
||||
<ClInclude Include="xmlparser.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="meos.rc" />
|
||||
<ResourceCompile Include="meoslang.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="html1.htm" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="announcer24.png" />
|
||||
<Image Include="bitmap1.bmp" />
|
||||
<Image Include="bmp00001.bmp" />
|
||||
<Image Include="class24.png" />
|
||||
<Image Include="clubs24.png" />
|
||||
<Image Include="competition24.png" />
|
||||
<Image Include="course24.png" />
|
||||
<Image Include="ctrl24.png" />
|
||||
<Image Include="edit.png" />
|
||||
<Image Include="info24.png" />
|
||||
<Image Include="lists24.png" />
|
||||
<Image Include="meos.ICO" />
|
||||
<Image Include="meos.png" />
|
||||
<Image Include="readout24.png" />
|
||||
<Image Include="runner24.png" />
|
||||
<Image Include="services24.png" />
|
||||
<Image Include="team24.png" />
|
||||
<Image Include="title.png" />
|
||||
<Image Include="warn24.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
25
code/MeOS.sln
Normal file
25
code/MeOS.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34330.188
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeOS", "MeOS.vcxproj", "{60BC59CB-8987-4A39-B866-403066F59B0F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Debug|x64.Build.0 = Debug|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x64.ActiveCfg = Release|x64
|
||||
{60BC59CB-8987-4A39-B866-403066F59B0F}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {0AA159AF-578B-49E9-8D52-50F9272169DB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
300
code/MeOS.vcxproj
Normal file
300
code/MeOS.vcxproj
Normal file
@ -0,0 +1,300 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<ProjectGuid>{60BC59CB-8987-4A39-B866-403066F59B0F}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>MeOS</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnableManifest>true</VcpkgEnableManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;winmm.lib;ws2_32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>Msimg32.lib;comctl32.lib;winmm.lib;ws2_32.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<Manifest>
|
||||
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
|
||||
</Manifest>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="animationdata.cpp" />
|
||||
<ClCompile Include="autocomplete.cpp" />
|
||||
<ClCompile Include="autotask.cpp" />
|
||||
<ClCompile Include="binencoder.cpp" />
|
||||
<ClCompile Include="classconfiginfo.cpp" />
|
||||
<ClCompile Include="csvparser.cpp" />
|
||||
<ClCompile Include="download.cpp" />
|
||||
<ClCompile Include="gdioutput.cpp" />
|
||||
<ClCompile Include="generalresult.cpp" />
|
||||
<ClCompile Include="HTMLWriter.cpp" />
|
||||
<ClCompile Include="image.cpp" />
|
||||
<ClCompile Include="importformats.cpp" />
|
||||
<ClCompile Include="infoserver.cpp" />
|
||||
<ClCompile Include="iof30interface.cpp" />
|
||||
<ClCompile Include="listeditor.cpp" />
|
||||
<ClCompile Include="liveresult.cpp" />
|
||||
<ClCompile Include="localizer.cpp" />
|
||||
<ClCompile Include="machinecontainer.cpp" />
|
||||
<ClCompile Include="meos.cpp" />
|
||||
<ClCompile Include="MeOSFeatures.cpp" />
|
||||
<ClCompile Include="MeosSQL.cpp" />
|
||||
<ClCompile Include="meosversion.cpp" />
|
||||
<ClCompile Include="meos_util.cpp" />
|
||||
<ClCompile Include="metalist.cpp" />
|
||||
<ClCompile Include="methodeditor.cpp" />
|
||||
<ClCompile Include="mysqldaemon.cpp" />
|
||||
<ClCompile Include="mysqlwrapper.cpp" />
|
||||
<ClCompile Include="newcompetition.cpp" />
|
||||
<ClCompile Include="oBase.cpp" />
|
||||
<ClCompile Include="oCard.cpp" />
|
||||
<ClCompile Include="oClass.cpp" />
|
||||
<ClCompile Include="oClub.cpp" />
|
||||
<ClCompile Include="oControl.cpp" />
|
||||
<ClCompile Include="oCourse.cpp" />
|
||||
<ClCompile Include="oDataContainer.cpp" />
|
||||
<ClCompile Include="oEvent.cpp" />
|
||||
<ClCompile Include="oEventDraw.cpp" />
|
||||
<ClCompile Include="oEventResult.cpp" />
|
||||
<ClCompile Include="oEventSpeaker.cpp" />
|
||||
<ClCompile Include="oEventSQL.cpp" />
|
||||
<ClCompile Include="oevent_transfer.cpp" />
|
||||
<ClCompile Include="oFreeImport.cpp" />
|
||||
<ClCompile Include="oFreePunch.cpp" />
|
||||
<ClCompile Include="oImportExport.cpp" />
|
||||
<ClCompile Include="oListInfo.cpp" />
|
||||
<ClCompile Include="onlineinput.cpp" />
|
||||
<ClCompile Include="onlineresults.cpp" />
|
||||
<ClCompile Include="oPunch.cpp" />
|
||||
<ClCompile Include="oReport.cpp" />
|
||||
<ClCompile Include="oRunner.cpp" />
|
||||
<ClCompile Include="oTeam.cpp" />
|
||||
<ClCompile Include="oTeamEvent.cpp" />
|
||||
<ClCompile Include="parser.cpp" />
|
||||
<ClCompile Include="pdfwriter.cpp" />
|
||||
<ClCompile Include="prefseditor.cpp" />
|
||||
<ClCompile Include="printer.cpp" />
|
||||
<ClCompile Include="progress.cpp" />
|
||||
<ClCompile Include="qf_editor.cpp" />
|
||||
<ClCompile Include="qualification_final.cpp" />
|
||||
<ClCompile Include="random.cpp" />
|
||||
<ClCompile Include="recorder.cpp" />
|
||||
<ClCompile Include="restserver.cpp" />
|
||||
<ClCompile Include="RestService.cpp" />
|
||||
<ClCompile Include="RunnerDB.cpp" />
|
||||
<ClCompile Include="socket.cpp" />
|
||||
<ClCompile Include="speakermonitor.cpp" />
|
||||
<ClCompile Include="SportIdent.cpp" />
|
||||
<ClCompile Include="StdAfx.cpp" />
|
||||
<ClCompile Include="TabAuto.cpp" />
|
||||
<ClCompile Include="TabBase.cpp" />
|
||||
<ClCompile Include="TabClass.cpp" />
|
||||
<ClCompile Include="TabClub.cpp" />
|
||||
<ClCompile Include="TabCompetition.cpp" />
|
||||
<ClCompile Include="TabControl.cpp" />
|
||||
<ClCompile Include="TabCourse.cpp" />
|
||||
<ClCompile Include="Table.cpp" />
|
||||
<ClCompile Include="TabList.cpp" />
|
||||
<ClCompile Include="TabMulti.cpp" />
|
||||
<ClCompile Include="TabRunner.cpp" />
|
||||
<ClCompile Include="TabSI.cpp" />
|
||||
<ClCompile Include="TabSpeaker.cpp" />
|
||||
<ClCompile Include="TabTeam.cpp" />
|
||||
<ClCompile Include="testmeos.cpp" />
|
||||
<ClCompile Include="tests.cpp" />
|
||||
<ClCompile Include="TimeStamp.cpp" />
|
||||
<ClCompile Include="toolbar.cpp" />
|
||||
<ClCompile Include="xmlparser.cpp" />
|
||||
<ClCompile Include="zip.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="animationdata.h" />
|
||||
<ClInclude Include="autocomplete.h" />
|
||||
<ClInclude Include="autocompletehandler.h" />
|
||||
<ClInclude Include="autotask.h" />
|
||||
<ClInclude Include="binencoder.h" />
|
||||
<ClInclude Include="classconfiginfo.h" />
|
||||
<ClInclude Include="csvparser.h" />
|
||||
<ClInclude Include="datadefiners.h" />
|
||||
<ClInclude Include="download.h" />
|
||||
<ClInclude Include="gdiconstants.h" />
|
||||
<ClInclude Include="gdifonts.h" />
|
||||
<ClInclude Include="gdiimpl.h" />
|
||||
<ClInclude Include="gdioutput.h" />
|
||||
<ClInclude Include="gdistructures.h" />
|
||||
<ClInclude Include="generalresult.h" />
|
||||
<ClInclude Include="guihandler.h" />
|
||||
<ClInclude Include="HTMLWriter.h" />
|
||||
<ClInclude Include="image.h" />
|
||||
<ClInclude Include="importformats.h" />
|
||||
<ClInclude Include="infoserver.h" />
|
||||
<ClInclude Include="inthashmap.h" />
|
||||
<ClInclude Include="intkeymap.hpp" />
|
||||
<ClInclude Include="intkeymapimpl.hpp" />
|
||||
<ClInclude Include="iof30interface.h" />
|
||||
<ClInclude Include="listeditor.h" />
|
||||
<ClInclude Include="liveresult.h" />
|
||||
<ClInclude Include="localizer.h" />
|
||||
<ClInclude Include="machinecontainer.h" />
|
||||
<ClInclude Include="meos.h" />
|
||||
<ClInclude Include="meosexception.h" />
|
||||
<ClInclude Include="MeOSFeatures.h" />
|
||||
<ClInclude Include="MeosSQL.h" />
|
||||
<ClInclude Include="meos_util.h" />
|
||||
<ClInclude Include="metalist.h" />
|
||||
<ClInclude Include="methodeditor.h" />
|
||||
<ClInclude Include="mysqlwrapper.h" />
|
||||
<ClInclude Include="oBase.h" />
|
||||
<ClInclude Include="oCard.h" />
|
||||
<ClInclude Include="oClass.h" />
|
||||
<ClInclude Include="oClub.h" />
|
||||
<ClInclude Include="oControl.h" />
|
||||
<ClInclude Include="oCourse.h" />
|
||||
<ClInclude Include="oDataContainer.h" />
|
||||
<ClInclude Include="oEvent.h" />
|
||||
<ClInclude Include="oEventDraw.h" />
|
||||
<ClInclude Include="oFreeImport.h" />
|
||||
<ClInclude Include="oFreePunch.h" />
|
||||
<ClInclude Include="oListInfo.h" />
|
||||
<ClInclude Include="onlineinput.h" />
|
||||
<ClInclude Include="onlineresults.h" />
|
||||
<ClInclude Include="oPunch.h" />
|
||||
<ClInclude Include="oRunner.h" />
|
||||
<ClInclude Include="ospeaker.h" />
|
||||
<ClInclude Include="oTeam.h" />
|
||||
<ClInclude Include="parser.h" />
|
||||
<ClInclude Include="pdfwriter.h" />
|
||||
<ClInclude Include="prefseditor.h" />
|
||||
<ClInclude Include="Printer.h" />
|
||||
<ClInclude Include="progress.h" />
|
||||
<ClInclude Include="qf_editor.h" />
|
||||
<ClInclude Include="qualification_final.h" />
|
||||
<ClInclude Include="random.h" />
|
||||
<ClInclude Include="recorder.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="restserver.h" />
|
||||
<ClInclude Include="RestService.h" />
|
||||
<ClInclude Include="RunnerDB.h" />
|
||||
<ClInclude Include="socket.h" />
|
||||
<ClInclude Include="speakermonitor.h" />
|
||||
<ClInclude Include="SportIdent.h" />
|
||||
<ClInclude Include="StdAfx.h" />
|
||||
<ClInclude Include="subcommand.h" />
|
||||
<ClInclude Include="TabAuto.h" />
|
||||
<ClInclude Include="TabBase.h" />
|
||||
<ClInclude Include="TabClass.h" />
|
||||
<ClInclude Include="TabClub.h" />
|
||||
<ClInclude Include="TabCompetition.h" />
|
||||
<ClInclude Include="TabControl.h" />
|
||||
<ClInclude Include="TabCourse.h" />
|
||||
<ClInclude Include="Table.h" />
|
||||
<ClInclude Include="TabList.h" />
|
||||
<ClInclude Include="TabMulti.h" />
|
||||
<ClInclude Include="TabRunner.h" />
|
||||
<ClInclude Include="TabSI.h" />
|
||||
<ClInclude Include="TabSpeaker.h" />
|
||||
<ClInclude Include="TabTeam.h" />
|
||||
<ClInclude Include="testmeos.h" />
|
||||
<ClInclude Include="timeconstants.hpp" />
|
||||
<ClInclude Include="TimeStamp.h" />
|
||||
<ClInclude Include="toolbar.h" />
|
||||
<ClInclude Include="xmlparser.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="meos.rc" />
|
||||
<ResourceCompile Include="meoslang.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="res\html1.htm" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="res\bmp\bitmap1.bmp" />
|
||||
<Image Include="res\bmp\bmp00001.bmp" />
|
||||
<Image Include="res\meos.ico" />
|
||||
<Image Include="res\png\announcer24.png" />
|
||||
<Image Include="res\png\class24.png" />
|
||||
<Image Include="res\png\clubs24.png" />
|
||||
<Image Include="res\png\competition24.png" />
|
||||
<Image Include="res\png\course24.png" />
|
||||
<Image Include="res\png\ctrl24.png" />
|
||||
<Image Include="res\png\edit.png" />
|
||||
<Image Include="res\png\info24.png" />
|
||||
<Image Include="res\png\lists24.png" />
|
||||
<Image Include="res\png\meos.png" />
|
||||
<Image Include="res\png\readout24.png" />
|
||||
<Image Include="res\png\runner24.png" />
|
||||
<Image Include="res\png\services24.png" />
|
||||
<Image Include="res\png\team24.png" />
|
||||
<Image Include="res\png\title.png" />
|
||||
<Image Include="res\png\warn24.png" />
|
||||
<Image Include="res\small.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -470,6 +470,12 @@ void MeosSQL::upgradeDB(const string &db, oDataContainer const * dc) {
|
||||
sql = sql.substr(0, sql.length() - 2);
|
||||
query.execute(sql);
|
||||
}
|
||||
if (!eCol.count("Origin")) {
|
||||
string sql = "ALTER TABLE " + db + " ";
|
||||
sql += "ADD COLUMN " + C_INT("Origin");
|
||||
sql = sql.substr(0, sql.length() - 2);
|
||||
query.execute(sql);
|
||||
}
|
||||
}
|
||||
if (dc) {
|
||||
// Ugrade table
|
||||
@ -528,6 +534,16 @@ bool MeosSQL::openDB(oEvent *oe)
|
||||
upgradeTimeFormat(dbname);
|
||||
}
|
||||
|
||||
if (version <= 94) {
|
||||
auto query = con->query();
|
||||
string v = "ALTER TABLE oRunner MODIFY COLUMN Rank INT NOT NULL DEFAULT 0";
|
||||
try {
|
||||
query.execute(v);
|
||||
}
|
||||
catch (const Exception&) {
|
||||
}
|
||||
}
|
||||
|
||||
if (tookLock) {
|
||||
con->query().exec("UNLOCK TABLES");
|
||||
}
|
||||
@ -700,7 +716,8 @@ bool MeosSQL::openDB(oEvent *oe)
|
||||
<< C_INT("CardNo")
|
||||
<< C_INT("Time")
|
||||
<< C_INT("Type")
|
||||
<< C_INT("Unit") << C_END();
|
||||
<< C_INT("Unit")
|
||||
<< C_INT("Origin") << C_END();
|
||||
query.execute();
|
||||
|
||||
upgradeDB("oPunch", nullptr);
|
||||
@ -1622,6 +1639,8 @@ void MeosSQL::storePunch(const RowWrapper &row, oFreePunch &p, bool rehash)
|
||||
p.type = row["Type"];
|
||||
}
|
||||
p.punchUnit = row["Unit"];
|
||||
p.origin = row["Origin"];
|
||||
|
||||
p.sqlUpdated = row["Modified"];
|
||||
p.counter = row["Counter"];
|
||||
p.Removed = row["Removed"];
|
||||
@ -2953,6 +2972,7 @@ OpFailStatus MeosSQL::syncUpdate(oFreePunch *c, bool forceWriteAll)
|
||||
queryset << " CardNo=" << c->CardNo << ", "
|
||||
<< " Type=" << c->type << ","
|
||||
<< " Time=" << c->punchTime << ","
|
||||
<< " Origin=" << c->origin << ","
|
||||
<< " Unit=" << c->punchUnit;
|
||||
|
||||
return syncUpdate(queryset, "oPunch", c);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
#include <ShellAPI.h>
|
||||
|
||||
int AutomaticCB(gdioutput *gdi, int type, void *data);
|
||||
int AutomaticCB(gdioutput *gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
RestService::RestService() : AutoMachine("Informationsserver", Machines::mInfoService), port(-1) {
|
||||
}
|
||||
@ -88,12 +88,12 @@ void RestService::settings(gdioutput &gdi, oEvent &oe, State state) {
|
||||
gdi.pushX();
|
||||
gdi.addCheckbox("AllowEntry", "Tillåt anmälan", 0, false).setHandler(this);
|
||||
gdi.addSelection("PermissionPerson", 180, 200, 0, L"Vem får anmäla sig:");
|
||||
gdi.addItem("PermissionPerson", RestServer::getPermissionsPersons());
|
||||
gdi.setItems("PermissionPerson", RestServer::getPermissionsPersons());
|
||||
gdi.autoGrow("PermissionPerson");
|
||||
gdi.selectFirstItem("PermissionPerson");
|
||||
gdi.fillDown();
|
||||
gdi.addSelection("PermissionClass", 180, 200, 0, L"Till vilka klasser:");
|
||||
gdi.addItem("PermissionClass", RestServer::getPermissionsClass());
|
||||
gdi.setItems("PermissionClass", RestServer::getPermissionsClass());
|
||||
gdi.autoGrow("PermissionClass");
|
||||
gdi.selectFirstItem("PermissionClass");
|
||||
bool disablePermisson = true;
|
||||
@ -111,9 +111,8 @@ void RestService::settings(gdioutput &gdi, oEvent &oe, State state) {
|
||||
else {
|
||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||
auto per = server->getEntryPermission();
|
||||
if (get<RestServer::EntryPermissionType>(per) != RestServer::EntryPermissionType::None)
|
||||
if (get<RestServer::EntryPermissionType>(per) != RestServer::EntryPermissionType::None) {
|
||||
disablePermisson = false;
|
||||
else {
|
||||
gdi.selectItemByData("PermissionPerson", size_t(get<RestServer::EntryPermissionType>(per)));
|
||||
gdi.selectItemByData("PermissionClass", size_t(get<RestServer::EntryPermissionClass>(per)));
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -464,7 +464,7 @@ void RunnerDB::compactifyClubs()
|
||||
ba=nba;
|
||||
}
|
||||
}
|
||||
swap(ref, *best);
|
||||
std::swap(ref, *best);
|
||||
|
||||
//Update map
|
||||
for (size_t j=0;j<compacted.size();j++) {
|
||||
@ -789,7 +789,7 @@ string RunnerDB::getDataDate() const
|
||||
|
||||
void RunnerDB::setDataDate(const string &date)
|
||||
{
|
||||
int d = convertDateYMS(date.substr(0, 10), false);
|
||||
int d = convertDateYMD(date.substr(0, 10), false);
|
||||
int t = date.length()>11 ? convertAbsoluteTimeHMS(date.substr(11), -1) : 0;
|
||||
|
||||
if (d<=0)
|
||||
@ -1960,7 +1960,7 @@ const wstring& RunnerDBEntry::getBirthDate() const {
|
||||
|
||||
void RunnerDBEntry::setBirthDate(const wstring& in) {
|
||||
SYSTEMTIME st;
|
||||
if (convertDateYMS(in, st, true) > 0) {
|
||||
if (convertDateYMD(in, st, true) > 0) {
|
||||
setBirthYear(st.wYear);
|
||||
setBirthMonth(st.wMonth);
|
||||
setBirthDay(st.wDay);
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -385,7 +385,7 @@ private:
|
||||
protected:
|
||||
/** Get internal data buffers for DI */
|
||||
oDataContainer &getDataBuffers(pvoid &data, pvoid &olddata, pvectorstr &strData) const;
|
||||
int getDISize() const {return 0;}
|
||||
int getDISize() const final {return 0;}
|
||||
void changedObject() {}
|
||||
public:
|
||||
void merge(const oBase &input, const oBase * base) final {}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -1858,7 +1858,7 @@ bool SportIdent::getCard6Data(BYTE *data, SICard &card)
|
||||
}
|
||||
|
||||
string2Wide(lastNameByte, lastName);
|
||||
wcsncpy(card.lastName, lastName.c_str(), 20);
|
||||
wcsncpy_s(card.lastName, lastName.c_str(), 20);
|
||||
card.lastName[20] = 0;
|
||||
|
||||
memcpy(firstNameByte, data+32+20, 20);
|
||||
@ -1869,7 +1869,7 @@ bool SportIdent::getCard6Data(BYTE *data, SICard &card)
|
||||
}
|
||||
|
||||
string2Wide(firstNameByte, firstName);
|
||||
wcsncpy(card.firstName, firstName.c_str(), 20);
|
||||
wcsncpy_s(card.firstName, firstName.c_str(), 20);
|
||||
card.firstName[20] = 0;
|
||||
|
||||
data+=128-16;
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -96,6 +96,9 @@ struct SICard
|
||||
int relativeFinishTime;
|
||||
bool statusOK;
|
||||
bool statusDNF;
|
||||
|
||||
//
|
||||
bool isDebugCard = false;
|
||||
vector<string> codeLogData(gdioutput &converter, int row) const;
|
||||
static vector<string> logHeader();
|
||||
|
||||
|
||||
@ -1,9 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
|
||||
#define NOMINMAX
|
||||
|
||||
#include <winsdkver.h>
|
||||
#define WINVER 0x0A00
|
||||
#define _WIN32_WINNT 0x0601 // Target Windows 7.
|
||||
#include <sdkddkver.h>
|
||||
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include "timeconstants.hpp"
|
||||
@ -20,8 +24,34 @@
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <unordered_set>
|
||||
#include <unordered_map>
|
||||
#include <deque>
|
||||
#include <algorithm>
|
||||
|
||||
using std::shared_ptr;
|
||||
using std::string;
|
||||
using std::wstring;
|
||||
using std::vector;
|
||||
using std::list;
|
||||
using std::map;
|
||||
using std::set;
|
||||
using std::pair;
|
||||
using std::make_pair;
|
||||
using std::make_shared;
|
||||
using std::unordered_set;
|
||||
using std::unordered_map;
|
||||
using std::min;
|
||||
using std::max;
|
||||
using std::numeric_limits;
|
||||
using std::multimap;
|
||||
using std::unique_ptr;
|
||||
using std::deque;
|
||||
using std::tuple;
|
||||
|
||||
using namespace std;
|
||||
bool getUserFile(wchar_t *fileNamePath, const wchar_t *fileName);
|
||||
bool getDesktopFile(wchar_t *fileNamePath, const wchar_t *fileName, const wchar_t *subFolder = 0);
|
||||
bool getMeOSFile(wchar_t *FileNamePath, const wchar_t *FileName);
|
||||
@ -31,8 +61,6 @@ gdioutput *createExtraWindow(const string &tag, const wstring &title, int max_x
|
||||
gdioutput *getExtraWindow(const string &tag, bool toForeGround);
|
||||
string uniqueTag(const char *base);
|
||||
|
||||
void LoadPage(const string &name);
|
||||
|
||||
wstring getTempFile();
|
||||
wstring getTempPath();
|
||||
void removeTempFile(const wstring &file); // Delete a temporyary
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -163,8 +163,7 @@ void tabForceSync(gdioutput &gdi, pEvent oe) {
|
||||
tabAuto->syncCallback(gdi);
|
||||
}
|
||||
|
||||
int AutomaticCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int AutomaticCB(gdioutput *gdi, GuiEventType type, BaseInfo* data) {
|
||||
if (!tabAuto)
|
||||
throw std::exception("tabAuto undefined.");
|
||||
|
||||
@ -178,6 +177,10 @@ int AutomaticCB(gdioutput *gdi, int type, void *data)
|
||||
ListBoxInfo lbi=*static_cast<ListBoxInfo *>(data);
|
||||
return tabAuto->processListBox(*gdi, lbi);
|
||||
}
|
||||
|
||||
case GuiEventType::GUI_POSTCLEAR:
|
||||
case GuiEventType::GUI_CLEAR:
|
||||
return tabAuto->clearPage(*gdi, type == GUI_POSTCLEAR);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -289,11 +292,47 @@ void TabAuto::setTimer(AutoMachine *am)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool TabAuto::clearPage(gdioutput &gdi, bool postClear) {
|
||||
if (!postClear) {
|
||||
if (wasSaved) {
|
||||
AutoMachine* sm = getMachine(currentMachineEditId);
|
||||
if (sm && wasCreated)
|
||||
stopMachine(sm);
|
||||
}
|
||||
else {
|
||||
auto ans = gdi.askCancel(wasCreated ? L"Vill du starta automaten?" : L"Vill du spara ändringar?");
|
||||
if (ans == gdioutput::AskAnswer::AnswerCancel)
|
||||
return false;
|
||||
else {
|
||||
AutoMachine* sm = getMachine(currentMachineEditId);
|
||||
if (sm) {
|
||||
if (ans == gdioutput::AskAnswer::AnswerYes) {
|
||||
sm->save(*oe, gdi, true);
|
||||
setTimer(sm);
|
||||
updateSyncInfo();
|
||||
}
|
||||
else {
|
||||
if (wasCreated)
|
||||
stopMachine(sm);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
currentMachineEditId = -1;
|
||||
wasSaved = false;
|
||||
wasCreated = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
{
|
||||
|
||||
if (bu.id=="GenerateCMP") {
|
||||
#ifndef MEOSDB
|
||||
int nClass=gdi.getTextNo("nClass");
|
||||
int nRunner=gdi.getTextNo("nRunner");
|
||||
|
||||
@ -303,7 +342,6 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
gdi.getTabs().get(TCmpTab)->loadPage(gdi);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (bu.id == "BrowseFolder") {
|
||||
const wchar_t *edit = bu.getExtra();
|
||||
@ -399,6 +437,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||
if (gdi.hasWidget("Interval"))
|
||||
iv = gdi.getText("Interval");
|
||||
sm->saveMachine(*oe, iv);
|
||||
wasSaved = true;
|
||||
oe->updateChanged();
|
||||
oe->synchronize(false);
|
||||
}
|
||||
@ -531,11 +570,15 @@ void TabAuto::settings(gdioutput &gdi, AutoMachine *sm, AutoMachine::State state
|
||||
rc.left = cx - d;
|
||||
rc.right = w + d;
|
||||
gdi.addRectangle(rc, colorLightBlue, true, true);
|
||||
gdi.setOnClearCb(AutomaticCB);
|
||||
gdi.setPostClearCb(AutomaticCB);
|
||||
currentMachineEditId = sm->getId();
|
||||
wasCreated = (state == AutoMachine::State::Create) || (state == AutoMachine::State::Load);
|
||||
wasSaved = false;
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
void TabAuto::killMachines()
|
||||
{
|
||||
void TabAuto::killMachines() {
|
||||
while(!machines.empty()) {
|
||||
machines.back()->stop();
|
||||
delete machines.back();
|
||||
@ -544,8 +587,7 @@ void TabAuto::killMachines()
|
||||
AutoMachine::resetGlobalId();
|
||||
}
|
||||
|
||||
bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast)
|
||||
{
|
||||
bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast) {
|
||||
oe->checkDB();
|
||||
oe->synchronize();
|
||||
tabAuto=this;
|
||||
@ -773,7 +815,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
||||
gdi.pushX();
|
||||
gdi.fillDown();
|
||||
vector< pair<wstring, size_t> > d;
|
||||
gdi.addItem("Classes", oe.fillClasses(d, oEvent::extraNone, oEvent::filterNone));
|
||||
gdi.setItems("Classes", oe.fillClasses(d, oEvent::extraNone, oEvent::filterNone));
|
||||
gdi.setSelection("Classes", classesToPrint);
|
||||
|
||||
gdi.addSelection("ListType", 200, 100, 0, L"Lista");
|
||||
@ -797,7 +839,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
||||
set<int> clsUnused;
|
||||
vector< pair<wstring, size_t> > out;
|
||||
oe.fillLegNumbers(clsUnused, listInfo.isTeamList(), true, out);
|
||||
gdi.addItem("LegNumber", out);
|
||||
gdi.setItems("LegNumber", out);
|
||||
gdi.selectItemByData("LegNumber", listInfo.getLegNumberCoded());
|
||||
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, pageBreak);
|
||||
@ -981,7 +1023,7 @@ void PrewarningMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
||||
gdi.fillDown();
|
||||
vector< pair<wstring, size_t> > d;
|
||||
oe.fillControls(d, oEvent::ControlType::CourseControl);
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setItems("Controls", d);
|
||||
gdi.setSelection("Controls", controls);
|
||||
gdi.popX();
|
||||
gdi.addButton("SelectAll", "Välj alla", AutomaticCB, "").setExtra(L"Controls");
|
||||
@ -1205,7 +1247,7 @@ void SplitsMachine::save(oEvent &oe, gdioutput &gdi, bool doProcess) {
|
||||
if (doProcess) {
|
||||
//Try exporting.
|
||||
oe.exportIOFSplits(oEvent::IOF20, file.c_str(), true, false,
|
||||
set<int>(), -1, false, true, true, false, false);
|
||||
set<int>(), make_pair("",""), -1, false, true, true, false, false);
|
||||
interval = iv;
|
||||
synchronize = true;
|
||||
}
|
||||
@ -1244,7 +1286,8 @@ void SplitsMachine::process(gdioutput &gdi, oEvent *oe, AutoSyncType ast)
|
||||
{
|
||||
if ((interval>0 && ast==SyncTimer) || (interval==0 && ast==SyncDataUp)) {
|
||||
if (!file.empty())
|
||||
oe->exportIOFSplits(oEvent::IOF20, file.c_str(), true, false, classes,
|
||||
oe->exportIOFSplits(oEvent::IOF20, file.c_str(),
|
||||
true, false, classes, make_pair("", ""),
|
||||
leg, false, true, true, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -311,12 +311,12 @@ class TabAuto :
|
||||
public TabBase
|
||||
{
|
||||
private:
|
||||
//DWORD printResultIntervalSec;
|
||||
//DWORD printResultTimeOut;
|
||||
bool editMode;
|
||||
|
||||
bool synchronize;
|
||||
bool synchronizePunches;
|
||||
bool editMode = false;
|
||||
int currentMachineEditId = -1;
|
||||
bool wasCreated = false;
|
||||
bool wasSaved = false;
|
||||
bool synchronize = false;
|
||||
bool synchronizePunches = false;
|
||||
void updateSyncInfo();
|
||||
|
||||
list<AutoMachine *> machines;
|
||||
@ -336,6 +336,7 @@ public:
|
||||
AutoMachine *getMachine(int id);
|
||||
bool stopMachine(AutoMachine *am);
|
||||
void killMachines();
|
||||
bool clearPage(gdioutput &gdi, bool postClear);
|
||||
|
||||
AutoMachine &addMachine(const AutoMachine &am) {
|
||||
machines.push_back(am.clone());
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -190,19 +190,6 @@ void FixedTabs::clearCompetitionData() {
|
||||
tabs[k]->clearCompetitionData();
|
||||
}
|
||||
|
||||
|
||||
TabObject::TabObject(TabBase *t)
|
||||
{
|
||||
tab = t;
|
||||
tab->tabId = id;
|
||||
}
|
||||
|
||||
TabObject::~TabObject()
|
||||
{
|
||||
//delete tab;
|
||||
}
|
||||
|
||||
|
||||
bool TabObject::loadPage(gdioutput &gdi)
|
||||
{
|
||||
if (tab)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -74,42 +74,23 @@ public:
|
||||
class TabObject
|
||||
{
|
||||
protected:
|
||||
mutable TabBase *tab;
|
||||
TabBase * const tab = nullptr;
|
||||
|
||||
public:
|
||||
string name;
|
||||
int id;
|
||||
const wstring name;
|
||||
const int imageId = -1;
|
||||
int id = -1;
|
||||
|
||||
TabObject(TabBase *t, string n):name(n),tab(t) {}
|
||||
TabObject(TabBase *t, wstring n, int imageId) : name(n), tab(t), imageId(imageId) {}
|
||||
|
||||
void setId(int i){id=i; if (tab) tab->tabId=id;}
|
||||
void setPage(TabBase *tb){delete tab; tab=tb;}
|
||||
|
||||
const type_info &getType() const {return typeid(*tab);}
|
||||
const TabBase &getTab() const {return *tab;}
|
||||
TabObject(const TabObject &t)
|
||||
{
|
||||
if (&t!=this) {
|
||||
name=t.name;
|
||||
id=t.id;
|
||||
tab=t.tab;
|
||||
//t.tab=0;
|
||||
}
|
||||
}
|
||||
|
||||
TabObject &operator=(TabObject &t)
|
||||
{
|
||||
if (&t!=this) {
|
||||
delete tab;
|
||||
name=t.name;
|
||||
id=t.id;
|
||||
tab=t.tab;
|
||||
//t.tab=0;
|
||||
}
|
||||
}
|
||||
|
||||
TabObject(TabBase *t);
|
||||
~TabObject();
|
||||
TabObject(const TabObject& t) = delete;
|
||||
TabObject& operator=(TabObject& t) = delete;
|
||||
~TabObject() = default;
|
||||
|
||||
bool loadPage(gdioutput &gdi);
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -24,6 +24,8 @@
|
||||
#include "tabbase.h"
|
||||
#include "oEventDraw.h"
|
||||
|
||||
class QFEditor;
|
||||
|
||||
class TabClass :
|
||||
public TabBase
|
||||
{
|
||||
@ -45,7 +47,6 @@ class TabClass :
|
||||
double pTimeScaling;
|
||||
int pInterval;
|
||||
|
||||
|
||||
class HandleCloseWindow : public GuiHandler {
|
||||
TabClass *tabClass;
|
||||
HandleCloseWindow(const HandleCloseWindow&);
|
||||
@ -57,7 +58,6 @@ class TabClass :
|
||||
};
|
||||
HandleCloseWindow handleCloseWindow;
|
||||
|
||||
|
||||
bool EditChanged;
|
||||
int ClassId;
|
||||
int currentStage;
|
||||
@ -72,6 +72,8 @@ class TabClass :
|
||||
vector<ClassInfo> cInfo;
|
||||
void saveDrawSettings() const;
|
||||
|
||||
void dynamicStart(gdioutput& gdi);
|
||||
|
||||
map<int, ClassInfo> cInfoCache;
|
||||
|
||||
DrawInfo drawInfo;
|
||||
@ -120,9 +122,6 @@ class TabClass :
|
||||
|
||||
void showClassSelection(gdioutput &gdi, int &bx, int &by, GUICALLBACK classesCB) const;
|
||||
|
||||
// Set simultaneous start in a class
|
||||
void simultaneous(int classId, const wstring &time, int nVacant);
|
||||
|
||||
void updateFairForking(gdioutput &gdi, pClass pc) const;
|
||||
void selectCourses(gdioutput &gdi, int legNo);
|
||||
bool showMulti(bool singleOnly) const;
|
||||
@ -168,11 +167,15 @@ class TabClass :
|
||||
void fillResultModules(gdioutput &gdi, pClass pc);
|
||||
|
||||
shared_ptr<GuiHandler> startGroupHandler;
|
||||
shared_ptr<QFEditor> qfEditor;
|
||||
|
||||
public:
|
||||
void loadStartGroupSettings(gdioutput &gdi, bool reload);
|
||||
void drawStartGroups(gdioutput &gdi);
|
||||
|
||||
// Set simultaneous start in a class
|
||||
static void simultaneous(oEvent &oe, int classId, const wstring& time, int nVacant);
|
||||
|
||||
void clearCompetitionData();
|
||||
|
||||
void closeWindow(gdioutput &gdi);
|
||||
@ -182,14 +185,14 @@ public:
|
||||
bool loadPage(gdioutput &gdi);
|
||||
void selectClass(gdioutput &gdi, int cid);
|
||||
|
||||
int classCB(gdioutput &gdi, int type, void *data);
|
||||
int multiCB(gdioutput &gdi, int type, void *data);
|
||||
int classCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
int multiCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
const char * getTypeStr() const {return "TClassTab";}
|
||||
TabType getType() const {return TClassTab;}
|
||||
|
||||
friend int DrawClassesCB(gdioutput *gdi, int type, void *data);
|
||||
friend int DrawClassesCB(gdioutput *gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
TabClass(oEvent *oe);
|
||||
~TabClass(void);
|
||||
~TabClass();
|
||||
};
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -108,14 +108,12 @@ void ageFilter(gdioutput &gdi, bool on, bool use) {
|
||||
gdi.setInputStatus("FilterAge", use);
|
||||
}
|
||||
|
||||
int ClubsCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int ClubsCB(gdioutput *gdi, GuiEventType type, BaseInfo* data) {
|
||||
TabClub &tc = dynamic_cast<TabClub &>(*gdi->getTabs().get(TClubTab));
|
||||
return tc.clubCB(*gdi, type, data);
|
||||
}
|
||||
|
||||
int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
{
|
||||
int TabClub::clubCB(gdioutput &gdi, GuiEventType type, BaseInfo* data) {
|
||||
if (type==GUI_BUTTON) {
|
||||
ButtonInfo bi=*(ButtonInfo *)data;
|
||||
|
||||
@ -414,7 +412,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
||||
oe->fillClassTypes(types);
|
||||
oe->fillClasses(classes, oEvent::extraNone, oEvent::filterNone);
|
||||
types.insert(types.end(), classes.begin(), classes.end());
|
||||
gdi.addItem("ClassType", types);
|
||||
gdi.setItems("ClassType", types);
|
||||
gdi.addItem("ClassType", lang.tl("Alla typer"), -5);
|
||||
|
||||
gdi.selectItemByData("ClassType", -5);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -26,7 +26,7 @@
|
||||
class TabClub :
|
||||
public TabBase
|
||||
{
|
||||
int clubCB(gdioutput &gdi, int type, void *data);
|
||||
int clubCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
wstring firstDate;
|
||||
wstring lastDate;
|
||||
@ -59,5 +59,5 @@ public:
|
||||
TabClub(oEvent *oe);
|
||||
~TabClub(void);
|
||||
|
||||
friend int ClubsCB(gdioutput *gdi, int type, void *data);
|
||||
friend int ClubsCB(gdioutput *gdi, GuiEventType type, BaseInfo* data);
|
||||
};
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -67,7 +67,7 @@ void exportSetup();
|
||||
void resetSaveTimer();
|
||||
extern bool enableTests;
|
||||
|
||||
int ListsCB(gdioutput *gdi, int type, void *data);
|
||||
int ListsCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
|
||||
TabCompetition::TabCompetition(oEvent *poe):TabBase(poe)
|
||||
{
|
||||
@ -198,7 +198,7 @@ bool TabCompetition::exportFileAs(HWND hWnd, gdioutput &gdi)
|
||||
return true;
|
||||
}
|
||||
|
||||
int CompetitionCB(gdioutput *gdi, int type, void *data)
|
||||
int CompetitionCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||
{
|
||||
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||
|
||||
@ -206,8 +206,7 @@ int CompetitionCB(gdioutput *gdi, int type, void *data)
|
||||
}
|
||||
|
||||
|
||||
int restoreCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int restoreCB(gdioutput *gdi, GuiEventType type, BaseInfo *data) {
|
||||
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||
|
||||
return tc.restoreCB(*gdi, type, data);
|
||||
@ -359,7 +358,7 @@ bool TabCompetition::checkEventor(gdioutput &gdi, ButtonInfo &bi) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int eventorServer(gdioutput *gdi, int type, void *data) {
|
||||
int eventorServer(gdioutput *gdi, GuiEventType type, BaseInfo *data) {
|
||||
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||
if (type == GUI_COMBO) {
|
||||
const ListBoxInfo &lbi = *((ListBoxInfo *)data);
|
||||
@ -390,8 +389,7 @@ bool TabCompetition::useEventorUTC() const {
|
||||
|
||||
enum StartMethod {SMCommon = 1, SMDrawn, SMFree, SMCustom};
|
||||
|
||||
int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
{
|
||||
int TabCompetition::competitionCB(gdioutput &gdi, GuiEventType type, BaseInfo *data) {
|
||||
if (type == GUI_LINK) {
|
||||
TextInfo ti = *(TextInfo *)data;
|
||||
if (ti.id == "link") {
|
||||
@ -569,10 +567,10 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addButton("Cancel", "Återgå", CompetitionCB);
|
||||
gdi.dropLine();
|
||||
|
||||
if (prefsEditor.empty())
|
||||
prefsEditor.push_back(PrefsEditor(oe));
|
||||
if (!prefsEditor)
|
||||
prefsEditor = make_shared<PrefsEditor>(oe);
|
||||
prefsEditor->showPrefs(gdi);
|
||||
|
||||
prefsEditor.back().showPrefs(gdi);
|
||||
gdi.refresh();
|
||||
}
|
||||
else if (bi.id=="Test") {
|
||||
@ -1143,7 +1141,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
wstring startlist = getTempFile();
|
||||
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
||||
oe->exportIOFStartlist(oEvent::IOF30, startlist.c_str(), eventorUTC,
|
||||
set<int>(), false, false, true, true);
|
||||
set<int>(), make_pair("",""), false, false, true, true);
|
||||
vector<wstring> fileList;
|
||||
fileList.push_back(startlist);
|
||||
|
||||
@ -1236,7 +1234,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
set<int> classes;
|
||||
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
||||
oe->exportIOFSplits(oEvent::IOF30, resultlist.c_str(), false,
|
||||
eventorUTC, classes, -1, false, true,
|
||||
eventorUTC, classes, make_pair("", ""), -1, false, true,
|
||||
false, true, true);
|
||||
vector<wstring> fileList;
|
||||
fileList.push_back(resultlist);
|
||||
@ -1531,7 +1529,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 1, "Behandlar tävlingsdata").setColor(colorGreen);
|
||||
set<int> noFilter;
|
||||
string noType;
|
||||
pair<string, string> noType;
|
||||
|
||||
if (createNew && id>0) {
|
||||
gdi.addString("", 1, "Skapar ny tävling");
|
||||
@ -1559,9 +1557,12 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
removeTempFile(tClass);
|
||||
|
||||
set<int> stageFilter;
|
||||
string preferredIdType;
|
||||
pair<string, string> preferredIdType;
|
||||
checkStageFilter(gdi, tEntry, stageFilter, preferredIdType);
|
||||
oe->importXML_EntryData(gdi, tEntry.c_str(), false, removeRemoved, stageFilter, 0, 0, preferredIdType);
|
||||
if (!preferredIdType.second.empty())
|
||||
oe->setRunnerIdTypes(preferredIdType);
|
||||
|
||||
removeTempFile(tEntry);
|
||||
|
||||
if (!course.empty()) {
|
||||
@ -1791,6 +1792,8 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||
}
|
||||
|
||||
auto preferredIdTypes = getPreferredIdTypes(gdi);
|
||||
|
||||
gdi.getSelection("ClassNewEntries", allTransfer);
|
||||
ImportFormats::ExportFormats filterIndex = ImportFormats::setExportFormat(*oe, gdi.getSelectedItem("Type").first);
|
||||
int cSVLanguageHeaderIndex = gdi.getSelectedItem("LanguageType").first;
|
||||
@ -1800,7 +1803,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
||||
bool useUTC = oe->getDCI().getInt("UTC") != 0;
|
||||
oe->exportIOFStartlist(filterIndex == ImportFormats::IOF30 ? oEvent::IOF30 : oEvent::IOF20,
|
||||
save.c_str(), useUTC, allTransfer, individual, includeStage, false, false);
|
||||
save.c_str(), useUTC, allTransfer, preferredIdTypes, individual, includeStage, false, false);
|
||||
}
|
||||
else if (filterIndex == ImportFormats::OE) {
|
||||
oe->exportOECSV(save.c_str(), allTransfer, cSVLanguageHeaderIndex, false);
|
||||
@ -1849,6 +1852,8 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||
}
|
||||
|
||||
auto preferredIdTypes = getPreferredIdTypes(gdi);
|
||||
|
||||
gdi.setWaitCursor(true);
|
||||
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
||||
oEvent::IOFVersion ver = filterIndex == ImportFormats::IOF30 ? oEvent::IOF30 : oEvent::IOF20;
|
||||
@ -1858,7 +1863,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
if (!gdi.hasWidget("LegType")) {
|
||||
oe->exportIOFSplits(ver, save.c_str(), true, useUTC,
|
||||
allTransfer, -1, false, unroll, includeStage, false, false);
|
||||
allTransfer, preferredIdTypes, -1, false, unroll, includeStage, false, false);
|
||||
}
|
||||
else {
|
||||
ListBoxInfo leglbi;
|
||||
@ -1880,16 +1885,16 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
for (int leg = 0; leg<legMax; leg++) {
|
||||
file = fileBase + L"_" + itow(leg+1) + fileEnd;
|
||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC,
|
||||
allTransfer, leg, false, unroll, includeStage, false, false);
|
||||
allTransfer, preferredIdTypes, leg, false, unroll, includeStage, false, false);
|
||||
}
|
||||
}
|
||||
else if (leglbi.data == 3) {
|
||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC, allTransfer,
|
||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC, allTransfer, preferredIdTypes,
|
||||
-1, true, unroll, includeStage, false, false);
|
||||
}
|
||||
else {
|
||||
int leg = leglbi.data == 1 ? -1 : leglbi.data - 10;
|
||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC, allTransfer,
|
||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC, allTransfer, preferredIdTypes,
|
||||
leg, false, unroll, includeStage, false, false);
|
||||
}
|
||||
}
|
||||
@ -2202,6 +2207,14 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
else if (type==GUI_LISTBOX) {
|
||||
ListBoxInfo lbi=*(ListBoxInfo *)data;
|
||||
|
||||
if (lbi.id == "DataFields") {
|
||||
oEvent::ExtraFieldContext context = oEvent::ExtraFieldContext(gdi.getDataInt("DataFieldsContext"));
|
||||
saveExtraFields(gdi, context);
|
||||
oe->synchronize(true);
|
||||
|
||||
oEvent::ExtraFieldContext contextNew = oEvent::ExtraFieldContext(lbi.data);
|
||||
showExtraFields(gdi, contextNew);
|
||||
}
|
||||
if (lbi.id=="LocalCmp") {
|
||||
gdi.selectItemByData("ServerCmp", -1);
|
||||
gdi.disableInput("Repair", true);
|
||||
@ -2302,7 +2315,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.setData("RunnerIx", ix);
|
||||
gdi.dropLine();
|
||||
gdi.addSelection("Classes", 200, 300, 0, L"Klasser:");
|
||||
oe->fillClasses(gdi, "Classes", oEvent::extraNone, oEvent::filterOnlySingle);
|
||||
oe->fillClasses(gdi, "Classes", {}, oEvent::extraNone, oEvent::filterOnlySingle);
|
||||
|
||||
if (lastSelectedClass == -1 || !gdi.selectItemByData("Classes", lastSelectedClass))
|
||||
gdi.selectFirstItem("Classes");
|
||||
@ -2357,8 +2370,8 @@ void TabCompetition::openCompetition(gdioutput &gdi, int id) {
|
||||
}
|
||||
}
|
||||
|
||||
int TabCompetition::restoreCB(gdioutput &gdi, int type, void *data) {
|
||||
TextInfo &ti = *(TextInfo *)data;
|
||||
int TabCompetition::restoreCB(gdioutput &gdi, GuiEventType type, BaseInfo *data) {
|
||||
TextInfo &ti = dynamic_cast<TextInfo&>(*data);
|
||||
int id = ti.getExtraInt();
|
||||
const BackupInfo &bi = oe->getBackup(id);
|
||||
|
||||
@ -2417,7 +2430,7 @@ void TabCompetition::copyrightLine(gdioutput &gdi) const
|
||||
|
||||
gdi.dropLine(0.4);
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 0, makeDash(L"#Copyright © 2007-2023 Melin Software HB"));
|
||||
gdi.addString("", 0, makeDash(L"#Copyright © 2007-2024 Melin Software HB"));
|
||||
gdi.dropLine(1);
|
||||
gdi.popX();
|
||||
|
||||
@ -2447,12 +2460,9 @@ void TabCompetition::loadAboutPage(gdioutput &gdi) const
|
||||
gdi.dropLine(1.5);
|
||||
gdi.setCX(gdi.getCX() + gdi.scaleLength(20));
|
||||
|
||||
gdi.addStringUT(1, makeDash(L"Copyright © 2007-2023 Melin Software HB"));
|
||||
gdi.addStringUT(1, makeDash(L"Copyright © 2007-2024 Melin Software HB"));
|
||||
gdi.dropLine();
|
||||
gdi.addStringUT(10, "The database connection used is MySQL++\nCopyright "
|
||||
"(c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by MySQL AB,"
|
||||
"\nand (c) 2004-2007 by Educational Technology Resources, Inc.\n"
|
||||
"The database used is MySQL, Copyright (c) 2008-2017 Oracle, Inc."
|
||||
gdi.addStringUT(10, "The database used is MySQL, Copyright (c) 2008-2024 Oracle, Inc."
|
||||
"\n\nGerman Translation by Erik Nilsson-Simkovics"
|
||||
"\n\nDanish Translation by Michael Leth Jess and Chris Bagge"
|
||||
"\n\nRussian Translation by Paul A. Kazakov and Albert Salihov"
|
||||
@ -2462,8 +2472,10 @@ void TabCompetition::loadAboutPage(gdioutput &gdi) const
|
||||
"\n\nCzech Translation by Marek Kustka"
|
||||
"\n\nSpanish Translation by Manuel Pedre"
|
||||
"\n\nUkranian Translation by Oleg Rozhko"
|
||||
"\n\nPortuguese Translation by Bruno Santos"
|
||||
"\n\nHelp with English documentation: Torbjörn Wikström");
|
||||
|
||||
|
||||
gdi.dropLine();
|
||||
gdi.addString("", 0, "Det här programmet levereras utan någon som helst garanti. Programmet är ");
|
||||
gdi.addString("", 0, "fritt att använda och du är välkommen att distribuera det under vissa villkor,");
|
||||
@ -2519,6 +2531,7 @@ bool TabCompetition::loadPage(gdioutput &gdi)
|
||||
gdi.fillDown();
|
||||
|
||||
if (oe->empty()) {
|
||||
gdi.selectTab(tabId);
|
||||
gdi.addString("", 2, "Välkommen till MeOS");
|
||||
gdi.addString("", 1, makeDash(L"#- ")+ lang.tl("ett Mycket Enkelt OrienteringsSystem")).setColor(colorDarkBlue);
|
||||
gdi.dropLine();
|
||||
@ -2578,7 +2591,7 @@ bool TabCompetition::loadPage(gdioutput &gdi)
|
||||
vector< pair<wstring, size_t> > tests;
|
||||
TestMeOS tm(oe, "ALL");
|
||||
tm.getTests(tests);
|
||||
gdi.addItem("Tests", tests);
|
||||
gdi.setItems("Tests", tests);
|
||||
gdi.selectFirstItem("Tests");
|
||||
gdi.addButton("RunSpecificTest", "#Run", CompetitionCB);
|
||||
|
||||
@ -3011,7 +3024,7 @@ void TabCompetition::getEventorCompetitions(gdioutput &gdi,
|
||||
eBreak.getObjectString("Date", breakDate);
|
||||
|
||||
SYSTEMTIME st;
|
||||
convertDateYMS(breakDate, st, false);
|
||||
convertDateYMD(breakDate, st, false);
|
||||
__int64 time = SystemTimeToInt64TenthSecond(st) - 10;
|
||||
breakDate = convertSystemDate(Int64TenthSecondToSystemTime(time));
|
||||
|
||||
@ -3319,6 +3332,7 @@ void TabCompetition::loadRunnerDB(gdioutput &gdi, int tableToShow, bool updateTa
|
||||
|
||||
void TabCompetition::welcomeToMeOS(gdioutput &gdi) {
|
||||
gdi.clearPage(false, false);
|
||||
gdi.selectTab(tabId);
|
||||
gdi.scaleSize(1.4*gdi.getScale());
|
||||
gdi.dropLine(5);
|
||||
gdi.setCX(gdi.getCX() + 5*gdi.getLineHeight());
|
||||
@ -3372,7 +3386,7 @@ void TabCompetition::selectTransferClasses(gdioutput &gdi, bool expand) {
|
||||
if (expand) {
|
||||
gdi.fillDown();
|
||||
gdi.addListBox("ClassNewEntries", 200, 400, 0, L"Klasser där nyanmälningar ska överföras:", L"", true);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", oEvent::extraNone, oEvent::filterNone);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", {}, oEvent::extraNone, oEvent::filterNone);
|
||||
|
||||
gdi.setSelection("ClassNewEntries", allTransfer);
|
||||
gdi.pushX();
|
||||
@ -3396,14 +3410,14 @@ void TabCompetition::selectTransferClasses(gdioutput &gdi, bool expand) {
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
static int ClearFeaturesCB(gdioutput *gdi, int type, void *data)
|
||||
static int ClearFeaturesCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||
{
|
||||
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||
tc.saveMeosFeatures(*gdi, true);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int CheckFeaturesCB(gdioutput *gdi, int type, void *data)
|
||||
static int CheckFeaturesCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||
{
|
||||
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||
tc.saveMeosFeatures(*gdi, false);
|
||||
@ -3653,13 +3667,16 @@ FlowOperation TabCompetition::saveEntries(gdioutput &gdi, bool removeRemoved, in
|
||||
}
|
||||
else {
|
||||
set<int> stageFilter;
|
||||
string preferredIdType;
|
||||
pair<string, string> preferredIdType;
|
||||
|
||||
FlowOperation res = checkStageFilter(gdi, filename[i], stageFilter, preferredIdType);
|
||||
|
||||
if (res != FlowContinue)
|
||||
return res;
|
||||
|
||||
if (!preferredIdType.second.empty())
|
||||
oe->setRunnerIdTypes(preferredIdType);
|
||||
|
||||
const int courseIdOffset = 0;
|
||||
oe->importXML_EntryData(gdi, filename[i], false, removeRemoved, stageFilter,
|
||||
classOffset, courseIdOffset, preferredIdType);
|
||||
@ -3687,10 +3704,10 @@ FlowOperation TabCompetition::saveEntries(gdioutput &gdi, bool removeRemoved, in
|
||||
return FlowContinue;
|
||||
}
|
||||
|
||||
int stageInfoCB(gdioutput *gdi, int type, void *data)
|
||||
int stageInfoCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||
{
|
||||
if (type == GUI_BUTTON) {
|
||||
ButtonInfo &bi = *(ButtonInfo *)data;
|
||||
ButtonInfo &bi = dynamic_cast<ButtonInfo &>(*data);
|
||||
bi.setExtra(1);
|
||||
}
|
||||
return 0;
|
||||
@ -3702,12 +3719,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
const set<int>& stages,
|
||||
const vector<string> &idProviders,
|
||||
set<int> & filter,
|
||||
string &preferredIdProvider);
|
||||
pair<string, string>&preferredIdProvider);
|
||||
|
||||
FlowOperation TabCompetition::checkStageFilter(gdioutput & gdi,
|
||||
const wstring & fname,
|
||||
set<int>& filter,
|
||||
string &preferredIdProvider) {
|
||||
pair<string, string> &preferredIdProvider) {
|
||||
xmlparser xml;
|
||||
xml.read(fname);
|
||||
xmlobject xo = xml.getObject("EntryList");
|
||||
@ -3728,7 +3745,7 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
const set<int>& stages,
|
||||
const vector<string> &idProviders,
|
||||
set<int> & filter,
|
||||
string &preferredIdProvider) {
|
||||
pair<string, string> &preferredIdProvider) {
|
||||
auto &scanFilter = stages;
|
||||
bool stageFilter = scanFilter.size() > 1;
|
||||
bool idtype = idProviders.size() > 1;
|
||||
@ -3748,6 +3765,7 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
gdi.fillRight();
|
||||
gdi.addSelection("Stage", 150, 200, stageInfoCB, L"Välj etapp att importera:");
|
||||
gdi.addItem("Stage", lang.tl("Alla"), 0);
|
||||
gdi.fillDown();
|
||||
for (int sn : scanFilter) {
|
||||
if (sn > 0)
|
||||
gdi.addItem("Stage", lang.tl("Etapp X#" + itos(sn)), sn);
|
||||
@ -3757,14 +3775,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
gdi.selectItemByData("Stage", cn);
|
||||
else
|
||||
gdi.selectItemByData("Stage", 0);
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(3.5);
|
||||
}
|
||||
|
||||
if (idtype) {
|
||||
if (stageFilter) {
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
}
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 0, "Det finns multiplia Id-nummer för personer");
|
||||
gdi.dropLine(0.5);
|
||||
gdi.fillRight();
|
||||
@ -3773,9 +3789,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
for (const string &sn : idProviders) {
|
||||
gdi.addItem("IdType", gdi.widen(sn), i++);
|
||||
}
|
||||
gdi.popX();
|
||||
gdi.dropLine(3.6);
|
||||
}
|
||||
|
||||
if (needUseInput) {
|
||||
gdi.fillRight();
|
||||
gdi.dropLine();
|
||||
gdi.addButton("OK_Stage", "OK", stageInfoCB);
|
||||
gdi.fillDown();
|
||||
@ -3817,7 +3836,14 @@ FlowOperation importFilterGUI(oEvent *oe,
|
||||
if (idProviders.size() > 1) {
|
||||
ListBoxInfo lbi;
|
||||
if (gdi.getSelectedItem("IdType", lbi)) {
|
||||
preferredIdProvider = gdi.narrow(lbi.text);
|
||||
preferredIdProvider.first = gdi.narrow(lbi.text);
|
||||
}
|
||||
|
||||
// Auto select secondary type. TODO: Manually select if not unique...
|
||||
for (const string& sn : idProviders) {
|
||||
if (preferredIdProvider.first != sn) {
|
||||
preferredIdProvider.second = sn;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3837,7 +3863,7 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
gdi.addString("", boldLarge, "Exportera startlista");
|
||||
gdi.pushY();
|
||||
gdi.addListBox("ClassNewEntries", 250, 400, 0, L"Klassval:", L"", true);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", oEvent::extraNone, oEvent::filterNone);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", {}, oEvent::extraNone, oEvent::filterNone);
|
||||
|
||||
gdi.setSelection("ClassNewEntries", allTransfer);
|
||||
gdi.pushX();
|
||||
@ -3854,7 +3880,7 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
|
||||
vector< pair<wstring, size_t> > types;
|
||||
ImportFormats::getExportFormats(types, false);
|
||||
gdi.addItem("Type", types);
|
||||
gdi.setItems("Type", types);
|
||||
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
||||
gdi.selectItemByData("Type", format);
|
||||
|
||||
@ -3862,7 +3888,7 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
ImportFormats::getOECSVLanguage(typeLanguages);
|
||||
|
||||
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
||||
gdi.addItem("LanguageType", typeLanguages);
|
||||
gdi.setItems("LanguageType", typeLanguages);
|
||||
|
||||
gdi.selectItemByData("LanguageType", ImportFormats::getDefaultCSVLanguage(*oe));
|
||||
|
||||
@ -3878,6 +3904,9 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", nullptr,
|
||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||
|
||||
pair<bool, bool> priSecondId = hasPersonExtId();
|
||||
showSelectId(priSecondId, gdi);
|
||||
|
||||
wstring fn = oe->getPropertyString("ExpStaFilename", L"");
|
||||
gdi.addInput("Filename", fn,
|
||||
48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveStartlist");
|
||||
@ -3892,13 +3921,34 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
pair<bool, bool> TabCompetition::hasPersonExtId() const {
|
||||
vector<pRunner> runners;
|
||||
oe->getRunners(-1, -1, runners, false);
|
||||
pair<bool, bool> res(false, false);
|
||||
for (pRunner r : runners) {
|
||||
if (!res.first && r->getExtIdentifier() != 0) {
|
||||
res.first = true;
|
||||
if (res.second)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!res.second && r->getExtIdentifier2() != 0) {
|
||||
res.second = true;
|
||||
if (res.first)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
gdi.clearPage(false);
|
||||
gdi.addString("", boldLarge, "Export av resultat/sträcktider");
|
||||
gdi.dropLine();
|
||||
gdi.pushY();
|
||||
gdi.addListBox("ClassNewEntries", 250, 400, 0, L"Klassval:", L"", true);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", oEvent::extraNone, oEvent::filterNone);
|
||||
oe->fillClasses(gdi, "ClassNewEntries", {}, oEvent::extraNone, oEvent::filterNone);
|
||||
|
||||
gdi.setSelection("ClassNewEntries", allTransfer);
|
||||
gdi.pushX();
|
||||
@ -3915,7 +3965,7 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
vector<pair<wstring, size_t>> types;
|
||||
ImportFormats::getExportFormats(types, true);
|
||||
|
||||
gdi.addItem("Type", types);
|
||||
gdi.setItems("Type", types);
|
||||
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
||||
gdi.selectItemByData("Type", format);
|
||||
|
||||
@ -3923,7 +3973,7 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
ImportFormats::getOECSVLanguage(typeLanguages);
|
||||
|
||||
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
||||
gdi.addItem("LanguageType", typeLanguages);
|
||||
gdi.setItems("LanguageType", typeLanguages);
|
||||
|
||||
gdi.selectItemByData("LanguageType", ImportFormats::getDefaultCSVLanguage(*oe));
|
||||
|
||||
@ -3933,7 +3983,8 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
oe->getClassConfigurationInfo(cnf);
|
||||
|
||||
if (cnf.hasTeamClass() || cnf.hasQualificationFinal()) {
|
||||
gdi.addSelection("LegType", 300, 100, 0, L"Exportval, IOF-XML");
|
||||
gdi.dropLine(0.2);
|
||||
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);
|
||||
if (cnf.hasTeamClass()) {
|
||||
@ -3961,6 +4012,9 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0,
|
||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||
|
||||
pair<bool, bool> priSecondId = hasPersonExtId();
|
||||
showSelectId(priSecondId, gdi);
|
||||
|
||||
wstring fn = oe->getPropertyString("ExpResFilename", L"");
|
||||
gdi.addInput("Filename", fn, 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveSplits");
|
||||
setExportOptionsStatus(gdi, format);
|
||||
@ -3975,6 +4029,60 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
void TabCompetition::showSelectId(std::pair<bool, bool>& priSecondId, gdioutput& gdi) {
|
||||
class IdType : public GuiHandler {
|
||||
void handle(gdioutput& gdi, BaseInfo& info, GuiEventType type) final {
|
||||
string baseType = info.id.substr(0, info.id.length() - 2);
|
||||
gdi.setInputStatus(baseType + "Type", gdi.isChecked(info.id));
|
||||
}
|
||||
};
|
||||
|
||||
if (priSecondId.first && priSecondId.second) {
|
||||
auto idTypes = oe->getRunnerIdTypes();
|
||||
gdi.dropLine(0.5);
|
||||
gdi.addString("", 0, "Välj typ av ID att exportera:");
|
||||
gdi.dropLine(0.3);
|
||||
gdi.fillRight();
|
||||
const int baseX = gdi.getCX();
|
||||
gdi.addCheckbox("PrimaryId", "Primärt").setHandler(make_shared<IdType>());
|
||||
const int idx = baseX + (3 * (gdi.getCX() - baseX)) / 2;
|
||||
gdi.setCX(idx);
|
||||
gdi.addInput("PrimaryType", idTypes.first);
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
|
||||
gdi.fillRight();
|
||||
gdi.addCheckbox("SecondaryId", "Sekundärt").setHandler(make_shared<IdType>());
|
||||
gdi.setCX(max(idx, gdi.getCX()));
|
||||
gdi.addInput("SecondaryType", idTypes.second);
|
||||
gdi.popX();
|
||||
gdi.dropLine(2);
|
||||
|
||||
gdi.fillDown();
|
||||
}
|
||||
}
|
||||
|
||||
pair<string, string> TabCompetition::getPreferredIdTypes(gdioutput& gdi) {
|
||||
pair<string, string> preferredIdTypes;
|
||||
|
||||
if (gdi.hasWidget("PrimaryId")) {
|
||||
if (gdi.isChecked("PrimaryId")) {
|
||||
wstring pt = gdi.getText("PrimaryType");
|
||||
preferredIdTypes.first = gdioutput::narrow(pt);
|
||||
if (preferredIdTypes.first.empty())
|
||||
preferredIdTypes.first = "PRIMARY";
|
||||
}
|
||||
|
||||
if (gdi.isChecked("SecondaryId")) {
|
||||
wstring st = gdi.getText("SecondaryType");
|
||||
preferredIdTypes.second = gdioutput::narrow(st);
|
||||
if (preferredIdTypes.second.empty())
|
||||
preferredIdTypes.second = "SECONDARY";
|
||||
}
|
||||
}
|
||||
return preferredIdTypes;
|
||||
}
|
||||
|
||||
void TabCompetition::setExportOptionsStatus(gdioutput &gdi, int format) const {
|
||||
if (gdi.hasWidget("LegType")) {
|
||||
gdi.setInputStatus("LegType", format == ImportFormats::IOF30 || format == ImportFormats::IOF203); // Enable on IOF-XML
|
||||
@ -3993,6 +4101,17 @@ void TabCompetition::setExportOptionsStatus(gdioutput &gdi, int format) const {
|
||||
gdi.setInputStatus("IncludeRaceNumber", format == ImportFormats::IOF30); // Enable on IOF-XML
|
||||
}
|
||||
|
||||
if (gdi.hasWidget("PrimaryId")) {
|
||||
for (auto s : {"Primary", "Secondary" }) {
|
||||
bool enable = format == ImportFormats::IOF30;
|
||||
string ss = s;
|
||||
string ids = ss + "Id";
|
||||
// Enable on IOF-XML
|
||||
gdi.setInputStatus(ids, enable);
|
||||
gdi.setInputStatus(ss + "Type", enable && gdi.isChecked(ids));
|
||||
}
|
||||
}
|
||||
|
||||
gdi.setInputStatus("LanguageType", format == ImportFormats::OE);
|
||||
|
||||
if (gdi.hasWidget("Filename")) {
|
||||
@ -4064,10 +4183,25 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
||||
|
||||
oe->getDI().buildDataFields(gdi, fields, 10);
|
||||
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
gdi.fillDown();
|
||||
gdi.addString("", gdi.getCY(), gdi.getCX(), 10| breakLines,
|
||||
L"help_second_fee",
|
||||
gdi.scaleLength(250));
|
||||
gdi.fillRight();;
|
||||
|
||||
fields.clear();
|
||||
fields.push_back("SecondEntryDate");
|
||||
fields.push_back("SecondEntryFactor");
|
||||
|
||||
oe->getDI().buildDataFields(gdi, fields, 10);
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.popX();
|
||||
gdi.dropLine(3);
|
||||
|
||||
|
||||
gdi.addString("", 1, "Åldersgränser, reducerad anmälningsavgift");
|
||||
gdi.addString("", 0, "Ungdomar och äldre kan få reducerad avgift");
|
||||
gdi.dropLine(0.5);
|
||||
@ -4199,8 +4333,21 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
||||
gdi.dropLine(2.5);
|
||||
gdi.popX();
|
||||
}
|
||||
bottom = max(bottom, gdi.getCY());
|
||||
|
||||
gdi.fillDown();
|
||||
gdi.addString("", 1, "Extra datafält");
|
||||
gdi.dropLine(0.2);
|
||||
|
||||
gdi.addSelection("DataFields", 200, 200, CompetitionCB, L"Sida:");
|
||||
gdi.addItem("DataFields", lang.tl("Deltagare"), 0);
|
||||
gdi.addItem("DataFields", lang.tl("Lag"), 1);
|
||||
gdi.addItem("DataFields", lang.tl("Klass"), 2);
|
||||
gdi.addItem("DataFields", lang.tl("Direktanmälan"), 3);
|
||||
gdi.selectFirstItem("DataFields");
|
||||
gdi.setData("FieldX", gdi.getCX());
|
||||
gdi.setData("FieldY", gdi.getCY());
|
||||
|
||||
bottom = max(bottom, gdi.getCY());
|
||||
gdi.popX();
|
||||
gdi.setCY(bottom);
|
||||
gdi.fillRight();
|
||||
@ -4208,8 +4355,133 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
||||
gdi.addButton("Cancel", "Avbryt", CompetitionCB).setCancel();
|
||||
gdi.dropLine(2);
|
||||
gdi.setOnClearCb(CompetitionCB);
|
||||
gdi.refresh();
|
||||
|
||||
showExtraFields(gdi, oEvent::ExtraFieldContext::Runner);
|
||||
}
|
||||
|
||||
void TabCompetition::showExtraFields(gdioutput& gdi, oEvent::ExtraFieldContext type) {
|
||||
gdi.restore("ExtraFields", false);
|
||||
gdi.setRestorePoint("ExtraFields");
|
||||
|
||||
gdi.setData("DataFieldsContext", int(type));
|
||||
auto ef = oe->getExtraFields(type);
|
||||
auto efNames = oe->getExtraFieldNames();
|
||||
|
||||
auto getName = [&ef, &efNames](oEvent::ExtraFields field) -> wstring {
|
||||
auto res = ef.find(field);
|
||||
if (res != ef.end() && !res->second.empty())
|
||||
return res->second;
|
||||
|
||||
res = efNames.find(field);
|
||||
if (res != efNames.end() && !res->second.empty())
|
||||
return res->second;
|
||||
|
||||
return L"";
|
||||
};
|
||||
|
||||
gdi.setCX(gdi.getDataInt("FieldX"));
|
||||
gdi.setCY(gdi.getDataInt("FieldY"));
|
||||
gdi.dropLine(0.5);
|
||||
gdi.pushX();
|
||||
gdi.fillRight();
|
||||
auto dataA = ef.find(oEvent::ExtraFields::DataA);
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addCheckbox("DataA", L"Extra data X:#(A)", nullptr, dataA != ef.end());
|
||||
gdi.addInput("DataAName", getName(oEvent::ExtraFields::DataA), 16);
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
gdi.popX();
|
||||
|
||||
auto dataB = ef.find(oEvent::ExtraFields::DataB);
|
||||
gdi.addCheckbox("DataB", L"Extra data X:#(B)", nullptr, dataB != ef.end());
|
||||
gdi.dropLine(-0.2);
|
||||
|
||||
gdi.addInput("DataBName", getName(oEvent::ExtraFields::DataB), 16);
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
gdi.popX();
|
||||
auto textA = ef.find(oEvent::ExtraFields::TextA);
|
||||
gdi.addCheckbox("TextA", L"Text:", nullptr, textA != ef.end());
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addInput("TextAName", getName(oEvent::ExtraFields::TextA), 16);
|
||||
|
||||
gdi.dropLine(2.5);
|
||||
gdi.popX();
|
||||
|
||||
if (type == oEvent::ExtraFieldContext::DirectEntry) {
|
||||
gdi.addCheckbox("StartTime", L"Starttid", nullptr, ef.count(oEvent::ExtraFields::StartTime));
|
||||
gdi.addCheckbox("Bib", L"Nummerlapp", nullptr, ef.count(oEvent::ExtraFields::Bib));
|
||||
}
|
||||
|
||||
if (type != oEvent::ExtraFieldContext::Class)
|
||||
gdi.addCheckbox("Nationality", L"Nationalitet", nullptr, ef.count(oEvent::ExtraFields::Nationality));
|
||||
|
||||
if (type == oEvent::ExtraFieldContext::DirectEntry) {
|
||||
gdi.dropLine(2.5);
|
||||
gdi.popX();
|
||||
}
|
||||
if (type == oEvent::ExtraFieldContext::Runner || type == oEvent::ExtraFieldContext::DirectEntry) {
|
||||
gdi.addCheckbox("Sex", L"Kön", nullptr, ef.count(oEvent::ExtraFields::Sex));
|
||||
gdi.addCheckbox("BirthDate", L"Födelsedatum", nullptr, ef.count(oEvent::ExtraFields::BirthDate));
|
||||
gdi.addCheckbox("Rank", L"Ranking", nullptr, ef.count(oEvent::ExtraFields::Rank));
|
||||
gdi.addCheckbox("Phone", L"Telefon", nullptr, ef.count(oEvent::ExtraFields::Phone));
|
||||
}
|
||||
|
||||
gdi.refresh();
|
||||
}
|
||||
|
||||
void TabCompetition::saveExtraFields(gdioutput& gdi, oEvent::ExtraFieldContext type) {
|
||||
map<oEvent::ExtraFields, wstring> fields;
|
||||
|
||||
if (gdi.isChecked("DataA")) {
|
||||
wstring name = gdi.getText("DataAName");
|
||||
if (trim(name).empty())
|
||||
name = L"Data A";
|
||||
fields[oEvent::ExtraFields::DataA] = name;
|
||||
}
|
||||
|
||||
if (gdi.isChecked("DataB")) {
|
||||
wstring name = gdi.getText("DataBName");
|
||||
if (trim(name).empty())
|
||||
name = L"Data B";
|
||||
fields[oEvent::ExtraFields::DataB] = name;
|
||||
}
|
||||
|
||||
if (gdi.isChecked("TextA")) {
|
||||
wstring name = gdi.getText("TextAName");
|
||||
if (trim(name).empty())
|
||||
name = L"Text";
|
||||
fields[oEvent::ExtraFields::TextA] = name;
|
||||
}
|
||||
|
||||
if (gdi.isChecked("Nationality"))
|
||||
fields[oEvent::ExtraFields::Nationality] = L"";
|
||||
|
||||
if (gdi.isChecked("Sex"))
|
||||
fields[oEvent::ExtraFields::Sex] = L"";
|
||||
|
||||
if (gdi.isChecked("BirthDate"))
|
||||
fields[oEvent::ExtraFields::BirthDate] = L"";
|
||||
|
||||
if (gdi.isChecked("Rank"))
|
||||
fields[oEvent::ExtraFields::Rank] = L"";
|
||||
|
||||
if (gdi.isChecked("Phone"))
|
||||
fields[oEvent::ExtraFields::Phone] = L"";
|
||||
|
||||
if (gdi.isChecked("Sex"))
|
||||
fields[oEvent::ExtraFields::Sex] = L"";
|
||||
|
||||
if (gdi.isChecked("StartTime"))
|
||||
fields[oEvent::ExtraFields::StartTime] = L"";
|
||||
|
||||
if (gdi.isChecked("Bib"))
|
||||
fields[oEvent::ExtraFields::Bib] = L"";
|
||||
|
||||
if (gdi.isChecked("Sex"))
|
||||
fields[oEvent::ExtraFields::Sex] = L"";
|
||||
|
||||
oe->updateExtraFields(type, fields);
|
||||
}
|
||||
|
||||
void TabCompetition::saveSettings(gdioutput &gdi) {
|
||||
@ -4220,6 +4492,8 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
||||
fees[k] = oe->getDCI().getInt(fields[k]);
|
||||
|
||||
wstring factor = oe->getDCI().getString("LateEntryFactor");
|
||||
wstring factor2 = oe->getDCI().getString("SecondEntryFactor");
|
||||
bool useFactor2 = oe->getDCI().getInt("SecondEntryDate") > 0;
|
||||
set<string> modified;
|
||||
|
||||
oe->getDI().saveDataFields(gdi, modified);
|
||||
@ -4241,6 +4515,13 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
||||
if (factor != oe->getDCI().getString("LateEntryFactor"))
|
||||
changedFee = true;
|
||||
|
||||
if (factor2 != oe->getDCI().getString("SecondEntryFactor"))
|
||||
changedFee = true;
|
||||
|
||||
bool useFactor2Now = oe->getDCI().getInt("SecondEntryDate") > 0;
|
||||
if (useFactor2 != useFactor2Now)
|
||||
changedFee = true;
|
||||
|
||||
if (oe->getDI().setInt("UTC", gdi.isChecked("UTC") ? 1 : 0))
|
||||
setEventorUTC(gdi.isChecked("UTC"));
|
||||
|
||||
@ -4284,33 +4565,11 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
||||
throw std::exception();
|
||||
}
|
||||
}
|
||||
|
||||
//oe->setProperty("PayModes", oe->getDCI().getString("PayModes"));
|
||||
|
||||
/*oe->setProperty("Organizer", oe->getDCI().getString("Organizer"));
|
||||
oe->setProperty("Street", oe->getDCI().getString("Street"));
|
||||
oe->setProperty("Address", oe->getDCI().getString("Address"));
|
||||
oe->setProperty("EMail", oe->getDCI().getString("EMail"));
|
||||
oe->setProperty("Homepage", oe->getDCI().getString("Homepage"));
|
||||
|
||||
oe->setProperty("CardFee", oe->getDCI().getInt("CardFee"));
|
||||
oe->setProperty("EliteFee", oe->getDCI().getInt("EliteFee"));
|
||||
oe->setProperty("EntryFee", oe->getDCI().getInt("EntryFee"));
|
||||
oe->setProperty("YouthFee", oe->getDCI().getInt("YouthFee"));
|
||||
|
||||
oe->setProperty("YouthAge", oe->getDCI().getInt("YouthAge"));
|
||||
oe->setProperty("SeniorAge", oe->getDCI().getInt("SeniorAge"));
|
||||
|
||||
oe->setProperty("Account", oe->getDCI().getString("Account"));
|
||||
oe->setProperty("LateEntryFactor", oe->getDCI().getString("LateEntryFactor"));
|
||||
|
||||
oe->setProperty("CurrencySymbol", oe->getDCI().getString("CurrencySymbol"));
|
||||
oe->setProperty("CurrencyFactor", oe->getDCI().getInt("CurrencyFactor"));
|
||||
oe->setProperty("CurrencyPreSymbol", oe->getDCI().getInt("CurrencyPreSymbol"));
|
||||
oe->setProperty("CurrencySeparator", oe->getDCI().getString("CurrencySeparator"));
|
||||
*/
|
||||
//oe->setProperty("PayModes", oe->getDCI().getString("PayModes"));
|
||||
}
|
||||
|
||||
oEvent::ExtraFieldContext context = oEvent::ExtraFieldContext(gdi.getSelectedItem("DataFields").first);
|
||||
saveExtraFields(gdi, context);
|
||||
|
||||
oe->synchronize(true);
|
||||
set<int> dummy;
|
||||
if (changedFee && oe->getNumClasses() > 0) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -45,7 +45,7 @@ class TabCompetition :
|
||||
|
||||
// Events from Eventor
|
||||
vector<CompetitionInfo> events;
|
||||
list<PrefsEditor> prefsEditor;
|
||||
shared_ptr<PrefsEditor> prefsEditor;
|
||||
|
||||
oFreeImport fi;
|
||||
wstring entryText;
|
||||
@ -83,7 +83,6 @@ class TabCompetition :
|
||||
vector<CompetitionInfo> &events) const;
|
||||
|
||||
void saveSettings(gdioutput &gdi);
|
||||
void loadSettings(gdioutput &gdi);
|
||||
|
||||
void getEventorCmpData(gdioutput &gdi, int id,
|
||||
const wstring &eventFile,
|
||||
@ -98,6 +97,8 @@ class TabCompetition :
|
||||
string eventorOrigin; // The command used when checking eventor
|
||||
bool checkEventor(gdioutput &gdi, ButtonInfo &bi);
|
||||
|
||||
pair<bool, bool> hasPersonExtId() const;
|
||||
|
||||
bool useEventor() const;
|
||||
bool useEventorUTC() const;
|
||||
|
||||
@ -125,13 +126,18 @@ class TabCompetition :
|
||||
void entryForm(gdioutput &gdi, bool isGuide);
|
||||
FlowOperation saveEntries(gdioutput &gdi, bool removeRemoved, int classOffset, bool isGuide);
|
||||
|
||||
FlowOperation checkStageFilter(gdioutput &gdi, const wstring &fname, set<int> &filter, string &preferredIdProvider);
|
||||
FlowOperation checkStageFilter(gdioutput &gdi, const wstring &fname, set<int> &filter, pair<string, string> &preferredIdProvider);
|
||||
|
||||
void setExportOptionsStatus(gdioutput &gdi, int format) const;
|
||||
|
||||
void selectStartlistOptions(gdioutput &gdi);
|
||||
void selectExportSplitOptions(gdioutput &gdi);
|
||||
|
||||
void showSelectId(std::pair<bool, bool>& priSecondId, gdioutput& gdi);
|
||||
pair<string, string> getPreferredIdTypes(gdioutput& gdi);
|
||||
|
||||
void saveExtraFields(gdioutput& gdi, oEvent::ExtraFieldContext type);
|
||||
|
||||
void entryChoice(gdioutput &gdi);
|
||||
void createCompetition(gdioutput &gdi);
|
||||
|
||||
@ -149,6 +155,9 @@ protected:
|
||||
void clearCompetitionData();
|
||||
|
||||
public:
|
||||
void loadSettings(gdioutput& gdi);
|
||||
void showExtraFields(gdioutput& gdi, oEvent::ExtraFieldContext type);
|
||||
|
||||
const char * getTypeStr() const {return "TCmpTab";}
|
||||
TabType getType() const {return TCmpTab;}
|
||||
|
||||
@ -158,9 +167,9 @@ public:
|
||||
void setEventorServer(const wstring &server);
|
||||
void setEventorUTC(bool useUTC);
|
||||
|
||||
int competitionCB(gdioutput &gdi, int type, void *data);
|
||||
int restoreCB(gdioutput &gdi, int type, void *data);
|
||||
int newGuideCB(gdioutput &gdi, int type, void *data);
|
||||
int competitionCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||
int restoreCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||
int newGuideCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||
|
||||
bool loadPage(gdioutput &gdi);
|
||||
TabCompetition(oEvent *oe);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -151,8 +151,7 @@ void TabControl::selectControl(gdioutput &gdi, pControl pc)
|
||||
}
|
||||
}
|
||||
|
||||
int ControlsCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int ControlsCB(gdioutput *gdi, GuiEventType type, BaseInfo* data) {
|
||||
TabControl &tc = dynamic_cast<TabControl &>(*gdi->getTabs().get(TControlTab));
|
||||
return tc.controlCB(*gdi, type, data);
|
||||
}
|
||||
@ -278,7 +277,7 @@ void TabControl::save(gdioutput &gdi) {
|
||||
|
||||
vector<pair<wstring, size_t>> d;
|
||||
oe->fillControls(d, oEvent::ControlType::All);
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setItems("Controls", d);
|
||||
|
||||
oe->reEvaluateAll(set<int>(), true);
|
||||
|
||||
@ -402,8 +401,7 @@ void TabControl::visitorTable(Table &table) const {
|
||||
}
|
||||
}
|
||||
|
||||
int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
{
|
||||
int TabControl::controlCB(gdioutput &gdi, GuiEventType type, BaseInfo* data) {
|
||||
if (type==GUI_BUTTON) {
|
||||
ButtonInfo bi=*(ButtonInfo *)data;
|
||||
|
||||
@ -431,7 +429,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
pc->synchronize();
|
||||
vector< pair<wstring, size_t> > d;
|
||||
oe->fillControls(d, oEvent::ControlType::All);
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setItems("Controls", d);
|
||||
selectControl(gdi, pc);
|
||||
}
|
||||
else if (bi.id=="Remove") {
|
||||
@ -449,7 +447,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
||||
|
||||
vector< pair<wstring, size_t> > d;
|
||||
oe->fillControls(d, oEvent::ControlType::All);
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setItems("Controls", d);
|
||||
selectControl(gdi, 0);
|
||||
}
|
||||
else if (bi.id=="SwitchMode") {
|
||||
@ -565,7 +563,7 @@ bool TabControl::loadPage(gdioutput &gdi)
|
||||
|
||||
vector< pair<wstring, size_t> > d;
|
||||
oe->fillControls(d, oEvent::ControlType::All);
|
||||
gdi.addItem("Controls", d);
|
||||
gdi.setItems("Controls", d);
|
||||
|
||||
gdi.newColumn();
|
||||
gdi.fillDown();
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -26,7 +26,7 @@
|
||||
class TabControl :
|
||||
public TabBase
|
||||
{
|
||||
int controlCB(gdioutput &gdi, int type, void *data);
|
||||
int controlCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
bool tableMode;
|
||||
int controlId;
|
||||
@ -48,5 +48,5 @@ public:
|
||||
TabControl(oEvent *oe);
|
||||
~TabControl(void);
|
||||
|
||||
friend int ControlsCB(gdioutput *gdi, int type, void *data);
|
||||
friend int ControlsCB(gdioutput *gdi, GuiEventType type, BaseInfo* data);
|
||||
};
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -54,9 +54,6 @@ TabCourse::~TabCourse(void)
|
||||
{
|
||||
}
|
||||
|
||||
void LoadCoursePage(gdioutput &gdi);
|
||||
void LoadClassPage(gdioutput &gdi);
|
||||
|
||||
void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
||||
{
|
||||
if (gdi.hasWidget("Rogaining")) {
|
||||
@ -179,9 +176,13 @@ void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
||||
if (cc) {
|
||||
gdi.selectItemByData("CommonControl", cc);
|
||||
}
|
||||
|
||||
fillOtherCourses(gdi, *pc, cc != 0);
|
||||
auto sh = pc->getShorterVersion();
|
||||
|
||||
if (sh.first)
|
||||
fillOtherCourses(gdi, *pc, cc != 0);
|
||||
else
|
||||
gdi.selectItemByData("ShortCourse", -1);
|
||||
|
||||
gdi.check("Shorten", sh.first);
|
||||
gdi.setInputStatus("ShortCourse", sh.first);
|
||||
gdi.selectItemByData("ShortCourse", sh.second ? sh.second->getId() : 0);
|
||||
@ -216,7 +217,7 @@ void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
||||
gdi.setInputStatus("DrawCourse", pc != 0, true);
|
||||
}
|
||||
|
||||
int CourseCB(gdioutput *gdi, int type, void *data) {
|
||||
int CourseCB(gdioutput *gdi, GuiEventType type, BaseInfo* data) {
|
||||
TabCourse &tc = dynamic_cast<TabCourse &>(*gdi->getTabs().get(TCourseTab));
|
||||
return tc.courseCB(*gdi, type, data);
|
||||
}
|
||||
@ -307,7 +308,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode) {
|
||||
|
||||
pc->synchronize();//Update SQL
|
||||
|
||||
oe->fillCourses(gdi, "Courses");
|
||||
oe->fillCourses(gdi, "Courses", {}, false);
|
||||
oe->reEvaluateCourse(pc->getId(), true);
|
||||
|
||||
if (canSwitchViewMode != 2 && changedCourse && pc->getLegLengths().size() > 2) {
|
||||
@ -331,8 +332,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode) {
|
||||
selectCourse(gdi, pc);
|
||||
}
|
||||
|
||||
int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
{
|
||||
int TabCourse::courseCB(gdioutput &gdi, GuiEventType type, BaseInfo* data) {
|
||||
if (type==GUI_BUTTON) {
|
||||
ButtonInfo bi=*(ButtonInfo *)data;
|
||||
|
||||
@ -448,9 +448,13 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
bool w = gdi.isChecked(bi.id);
|
||||
gdi.setInputStatus("ShortCourse", w);
|
||||
if (w) {
|
||||
pCourse pc = oe->getCourse(courseId);
|
||||
if (pc) {
|
||||
fillOtherCourses(gdi, *pc, gdi.isChecked("WithLoops"));
|
||||
}
|
||||
ListBoxInfo clb;
|
||||
if (!gdi.getSelectedItem("ShortCoursse", clb) || clb.data <= 0)
|
||||
gdi.selectFirstItem("CommonControl");
|
||||
if (!gdi.getSelectedItem("ShortCourse", clb) || clb.data <= 0)
|
||||
gdi.selectFirstItem("ShortCourse");
|
||||
}
|
||||
}
|
||||
else if (bi.id == "ExportCourses") {
|
||||
@ -466,6 +470,29 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
xml.closeOut();
|
||||
}
|
||||
}
|
||||
else if (bi.id == "DeleteAll") {
|
||||
if (!gdi.ask(L"Vill du ta bort alla banor från tävlingen?"))
|
||||
return 0;
|
||||
// Clear all course references
|
||||
vector<pRunner> rr;
|
||||
oe->getRunners(0, 0, rr);
|
||||
for (pRunner r : rr) {
|
||||
r->setCourseId(0);
|
||||
}
|
||||
vector<pClass> cc;
|
||||
oe->getClasses(cc, true);
|
||||
for (pClass c : cc) {
|
||||
c->setCourse(nullptr);
|
||||
for (int i = 0; i < c->getNumStages(); i++)
|
||||
c->clearStageCourses(i);
|
||||
}
|
||||
vector<pCourse> crs;
|
||||
oe->getCourses(crs);
|
||||
for (pCourse c : crs) {
|
||||
oe->removeCourse(c->getId());
|
||||
}
|
||||
loadPage(gdi);
|
||||
}
|
||||
else if (bi.id=="ImportCourses") {
|
||||
setupCourseImport(gdi, CourseCB);
|
||||
}
|
||||
@ -621,7 +648,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
}
|
||||
pCourse pc = oe->addCourse(oe->getAutoCourseName());
|
||||
pc->synchronize();
|
||||
oe->fillCourses(gdi, "Courses");
|
||||
oe->fillCourses(gdi, "Courses", {}, false);
|
||||
selectCourse(gdi, pc);
|
||||
gdi.setInputFocus("Name", true);
|
||||
addedCourse = true;
|
||||
@ -636,7 +663,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
else
|
||||
oe->removeCourse(cid);
|
||||
|
||||
oe->fillCourses(gdi, "Courses");
|
||||
oe->fillCourses(gdi, "Courses", {}, false);
|
||||
|
||||
selectCourse(gdi, 0);
|
||||
}
|
||||
@ -644,7 +671,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
||||
refreshCourse(gdi.getText("Controls"), gdi);
|
||||
}
|
||||
else if (bi.id=="Cancel"){
|
||||
LoadPage("Banor");
|
||||
loadPage(gdi);
|
||||
}
|
||||
}
|
||||
else if (type==GUI_LISTBOX){
|
||||
@ -757,7 +784,7 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.addListBox("Courses", 250, 360, CourseCB, L"Banor (antal kontroller)").isEdit(false).ignore(true);
|
||||
gdi.setTabStops("Courses", 240);
|
||||
|
||||
oe->fillCourses(gdi, "Courses");
|
||||
oe->fillCourses(gdi, "Courses", {}, false);
|
||||
|
||||
gdi.dropLine(0.7);
|
||||
gdi.pushX();
|
||||
@ -773,6 +800,8 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
||||
gdi.addButton("DrawCourse", "Lotta starttider..", CourseCB);
|
||||
gdi.disableInput("DrawCourse");
|
||||
}
|
||||
gdi.addButton("DeleteAll", "Radera alla...", CourseCB);
|
||||
|
||||
gdi.newColumn();
|
||||
gdi.fillDown();
|
||||
|
||||
@ -911,7 +940,7 @@ void TabCourse::runCourseImport(gdioutput& gdi, const wstring &filename,
|
||||
gdi.fillDown();
|
||||
}
|
||||
else if (filename.find(L".txt") != wstring::npos || filename.find(L".TXT") != wstring::npos) {
|
||||
ifstream fin(filename);
|
||||
std::ifstream fin(filename);
|
||||
|
||||
if (!fin.good())
|
||||
throw meosException(L"Cannot read " + filename);
|
||||
@ -970,7 +999,7 @@ void TabCourse::runCourseImport(gdioutput& gdi, const wstring &filename,
|
||||
}
|
||||
else {
|
||||
set<int> noFilter;
|
||||
string noType;
|
||||
pair<string, string> noType;
|
||||
int classIdOffset = 0;
|
||||
int courseIdOffset = 0;
|
||||
oe->importXML_EntryData(gdi, filename.c_str(), addToClasses, false,
|
||||
@ -1174,7 +1203,7 @@ void TabCourse::fillCourseControls(gdioutput &gdi, const wstring &ctrl) {
|
||||
}
|
||||
|
||||
gdi.clearList("CommonControl");
|
||||
gdi.addItem("CommonControl", item);
|
||||
gdi.setItems("CommonControl", item);
|
||||
}
|
||||
|
||||
void TabCourse::fillOtherCourses(gdioutput &gdi, oCourse &crs, bool withLoops) {
|
||||
@ -1198,8 +1227,7 @@ void TabCourse::fillOtherCourses(gdioutput &gdi, oCourse &crs, bool withLoops) {
|
||||
out.push_back(ac[k]);
|
||||
}
|
||||
|
||||
gdi.clearList("ShortCourse");
|
||||
gdi.addItem("ShortCourse", out);
|
||||
gdi.setItems("ShortCourse", out);
|
||||
}
|
||||
|
||||
void TabCourse::saveLegLengths(gdioutput &gdi) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -31,7 +31,7 @@ class TabCourse :
|
||||
int courseId;
|
||||
/** canSwitchViewMode: 0 = no, 1 = yes, 2 = switching to legs */
|
||||
void save(gdioutput &gdi, int canSwitchViewMode);
|
||||
int courseCB(gdioutput &gdi, int type, void *data);
|
||||
int courseCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
bool addedCourse;
|
||||
|
||||
wstring time_limit;
|
||||
@ -74,5 +74,5 @@ public:
|
||||
|
||||
static void setupCourseImport(gdioutput& gdi, GUICALLBACK cb);
|
||||
|
||||
friend int CourseCB(gdioutput *gdi, int type, void *data);
|
||||
friend int CourseCB(gdioutput *gdi, GuiEventType type, BaseInfo* data);
|
||||
};
|
||||
|
||||
132
code/TabList.cpp
132
code/TabList.cpp
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -80,10 +80,9 @@ TabList::~TabList(void)
|
||||
liveResults.clear();
|
||||
}
|
||||
|
||||
int ListsCB(gdioutput *gdi, int type, void *data);
|
||||
int ListsCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
|
||||
int ListsEventCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int ListsEventCB(gdioutput *gdi, GuiEventType type, BaseInfo *data) {
|
||||
if (type!=GUI_EVENT)
|
||||
return -1;
|
||||
|
||||
@ -105,10 +104,10 @@ void TabList::rebuildList(gdioutput &gdi)
|
||||
}
|
||||
}
|
||||
|
||||
int openRunnerTeamCB(gdioutput *gdi, int type, void *data)
|
||||
int openRunnerTeamCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||
{
|
||||
if (type==GUI_LINK && data) {
|
||||
TextInfo *ti = static_cast<TextInfo *>(data);
|
||||
TextInfo *ti = dynamic_cast<TextInfo *>(data);
|
||||
int id = ti->getExtraInt();
|
||||
|
||||
if (id != 0 && ti->id == "T" && gdi->canClear()) {
|
||||
@ -123,11 +122,9 @@ int openRunnerTeamCB(gdioutput *gdi, int type, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int NoStartRunnerCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
if (type==GUI_LINK)
|
||||
{
|
||||
TextInfo *ti=(TextInfo *)data;
|
||||
int NoStartRunnerCB(gdioutput* gdi, GuiEventType type, BaseInfo* data) {
|
||||
if (type == GUI_LINK) {
|
||||
TextInfo* ti = dynamic_cast<TextInfo*>(data);
|
||||
int id = atoi(ti->id.c_str());
|
||||
|
||||
TabList& tc = dynamic_cast<TabList&>(*gdi->getTabs().get(TListTab));
|
||||
@ -146,8 +143,7 @@ int NoStartRunnerCB(gdioutput *gdi, int type, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ListsCB(gdioutput *gdi, int type, void *data)
|
||||
{
|
||||
int ListsCB(gdioutput *gdi, GuiEventType type, BaseInfo *data) {
|
||||
TabList &tc = dynamic_cast<TabList &>(*gdi->getTabs().get(TListTab));
|
||||
|
||||
return tc.listCB(*gdi, type, data);
|
||||
@ -218,7 +214,7 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
}
|
||||
gdi.setRestorePoint("GeneralList");
|
||||
|
||||
currentList.setCallback(ownWindow ? 0 : openRunnerTeamCB);
|
||||
currentList.setCallback(ownWindow ? nullptr : openRunnerTeamCB);
|
||||
const auto &par = currentList.getParam();
|
||||
int bgColor = par.bgColor;
|
||||
|
||||
@ -276,7 +272,7 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(baseButtonWidth),
|
||||
"ListDesign", "Utseende...", ListsCB, "Justera visningsinställningar", true, false);
|
||||
|
||||
if (!currentList.getParam().saved && !oe->isReadOnly()) {
|
||||
if (!currentList.getParam().saved && !oe->isKiosk()) {
|
||||
baseY += 3 + gdi.getButtonHeight();
|
||||
gdi.addButton(gdi.getWidth()+20, baseY, gdi.scaleLength(baseButtonWidth),
|
||||
"Remember", "Kom ihåg listan...", ListsCB, "Spara den här listan som en favoritlista", true, false);
|
||||
@ -300,19 +296,18 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
||||
}
|
||||
}
|
||||
|
||||
int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
{
|
||||
int TabList::listCB(gdioutput &gdi, GuiEventType type, BaseInfo *data) {
|
||||
int index;
|
||||
if (type==GUI_BUTTON || type==GUI_EVENT) {
|
||||
BaseInfo *tbi = 0;
|
||||
ButtonInfo button;
|
||||
EventInfo evnt;
|
||||
if (type == GUI_BUTTON) {
|
||||
button = *(ButtonInfo *)data;
|
||||
button = dynamic_cast<ButtonInfo &>(*data);
|
||||
tbi = &button;
|
||||
}
|
||||
else if (type == GUI_EVENT) {
|
||||
evnt = *(EventInfo *)data;
|
||||
evnt = dynamic_cast<EventInfo&>(*data);
|
||||
tbi = &evnt;
|
||||
}
|
||||
else
|
||||
@ -490,7 +485,7 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
gdi.addListBox("Merge", 350, 250, 0, L"Slå ihop med:");
|
||||
vector < pair<wstring, size_t> > cand;
|
||||
oe->getListContainer().getMergeCandidates(lbi.data, cand);
|
||||
gdi.addItem("Merge", cand);
|
||||
gdi.setItems("Merge", cand);
|
||||
gdi.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
||||
gdi.fillRight();
|
||||
gdi.addButton("DoMerge", "Slå ihop", ListsCB).setDefault();
|
||||
@ -1230,6 +1225,7 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
||||
else if (lbi.id == "ListSelection") {
|
||||
gdi.getSelection(lbi.id, lastClassSelection);
|
||||
if (gdi.hasWidget("ResultType")) {
|
||||
lastResultClassSelection = lastClassSelection;
|
||||
ListBoxInfo entry;
|
||||
gdi.getSelectedItem("ResultType", entry);
|
||||
gdi.setInputStatus("Generate", !lastClassSelection.empty() && int(entry.data) >= 0);
|
||||
@ -1348,7 +1344,7 @@ void TabList::enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to) {
|
||||
vector< pair<wstring, size_t> > ds;
|
||||
ds.push_back(make_pair(lang.tl("Start"), 0));
|
||||
ds.insert(ds.end(), d.begin(), d.end());
|
||||
gdi.addItem("ResultSpecialFrom", ds);
|
||||
gdi.setItems("ResultSpecialFrom", ds);
|
||||
if (!gdi.selectItemByData("ResultSpecialFrom", oe.getPropertyInt("ControlFrom", 0))) {
|
||||
gdi.selectItemByData("ResultSpecialFrom", 0); // Fallback
|
||||
}
|
||||
@ -1360,7 +1356,7 @@ void TabList::enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to) {
|
||||
|
||||
if (to) {
|
||||
gdi.enableInput("ResultSpecialTo");
|
||||
gdi.addItem("ResultSpecialTo", d);
|
||||
gdi.setItems("ResultSpecialTo", d);
|
||||
gdi.addItem("ResultSpecialTo", lang.tl("Mål"), 0);
|
||||
if (!gdi.selectItemByData("ResultSpecialTo", oe.getPropertyInt("ControlTo", 0))) {
|
||||
gdi.selectItemByData("ResultSpecialTo", 0); // Fallback
|
||||
@ -1379,7 +1375,7 @@ void TabList::selectGeneralList(gdioutput &gdi, EStdListType type)
|
||||
oe->setProperty("ListType", type);
|
||||
if (li.supportClasses) {
|
||||
gdi.enableInput("ListSelection");
|
||||
oe->fillClasses(gdi, "ListSelection", oEvent::extraNone, oEvent::filterNone);
|
||||
oe->fillClasses(gdi, "ListSelection", {}, oEvent::extraNone, oEvent::filterNone);
|
||||
if (lastClassSelection.empty())
|
||||
lastClassSelection.insert(-1);
|
||||
gdi.setSelection("ListSelection", lastClassSelection);
|
||||
@ -1404,7 +1400,7 @@ void TabList::selectGeneralList(gdioutput &gdi, EStdListType type)
|
||||
set<int> clsUnused;
|
||||
vector< pair<wstring, size_t> > out;
|
||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||
gdi.addItem("LegNumber", out);
|
||||
gdi.setItems("LegNumber", out);
|
||||
gdi.setInputStatus("LegNumber", !out.empty());
|
||||
}
|
||||
else {
|
||||
@ -1654,7 +1650,7 @@ void TabList::loadRememberList(gdioutput &gdi, string targetTag) {
|
||||
gdi.addListBox("Merge", 350, 250);
|
||||
vector < pair<wstring, size_t> > cand;
|
||||
oe->getListContainer().getMergeCandidates(-1, cand);
|
||||
gdi.addItem("Merge", cand);
|
||||
gdi.setItems("Merge", cand);
|
||||
gdi.dropLine(-0.2);
|
||||
gdi.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
||||
gdi.dropLine(0.5);
|
||||
@ -2025,7 +2021,7 @@ void TabList::htmlSettings(gdioutput &gdi, string targetTag) {
|
||||
if (!htmlTemplateTag2Id.count(tmpSettingsParam.htmlTypeTag))
|
||||
tmpSettingsParam.htmlTypeTag = "free";
|
||||
|
||||
gdi.addItem("Format", items);
|
||||
gdi.setItems("Format", items);
|
||||
int tid = htmlTemplateTag2Id[tmpSettingsParam.htmlTypeTag];
|
||||
gdi.selectItemByData("Format", tid);
|
||||
|
||||
@ -2174,7 +2170,7 @@ void TabList::loadClassSettings(gdioutput &gdi, string targetTag) {
|
||||
|
||||
oEvent::ClassFilter ct = currentList.isTeamList() ? oEvent::filterOnlyMulti : oEvent::filterNone;
|
||||
|
||||
oe->fillClasses(gdi, "ListSelection", oEvent::extraNone, ct);
|
||||
oe->fillClasses(gdi, "ListSelection", {}, oEvent::extraNone, ct);
|
||||
gdi.setSelection("ListSelection", currentList.getParam().selection);
|
||||
gdi.dropLine(2.5);
|
||||
|
||||
@ -2184,14 +2180,15 @@ void TabList::loadClassSettings(gdioutput &gdi, string targetTag) {
|
||||
ages.emplace_back(lang.tl("Alla"), size_t(oListParam::AgeFilter::All));
|
||||
ages.emplace_back(lang.tl("Ungdom"), size_t(oListParam::AgeFilter::OnlyYouth));
|
||||
ages.emplace_back(lang.tl("Vuxna"), size_t(oListParam::AgeFilter::ExludeYouth));
|
||||
gdi.addItem("AgeFilter", ages);
|
||||
gdi.setItems("AgeFilter", ages);
|
||||
gdi.selectItemByData("AgeFilter", int(currentList.getParam().ageFilter));
|
||||
|
||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, currentList.getParam().pageBreak).setHandler(&settingsClassSelection);
|
||||
gdi.addCheckbox("ShowHeader", "Visa rubrik", 0, currentList.getParam().showHeader).setHandler(&settingsClassSelection);
|
||||
|
||||
gdi.dropLine(-0.3);
|
||||
gdi.addInput("Heading", currentList.getParam().getCustomTitle(wstring(L"")), 28, 0, L"Egen listrubrik:");
|
||||
wstring hdr;
|
||||
gdi.addInput("Heading", currentList.getParam().getCustomTitle(hdr), 28, 0, L"Egen listrubrik:");
|
||||
gdi.setInputStatus("Heading", currentList.getParam().showHeader);
|
||||
gdi.dropLine(0.5);
|
||||
gdi.fillRight();
|
||||
@ -2305,7 +2302,7 @@ void TabList::settingsResultList(gdioutput &gdi)
|
||||
}
|
||||
sort(lists.begin() + startIx, lists.end());
|
||||
|
||||
gdi.addItem("ResultType", lists);
|
||||
gdi.setItems("ResultType", lists);
|
||||
gdi.autoGrow("ResultType");
|
||||
|
||||
int lastSelectedResultListOK = -1;
|
||||
@ -2615,7 +2612,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
gdi.pushX();
|
||||
|
||||
gdi.addSelection("SavedInstance", 250, 200, ListsCB);
|
||||
gdi.addItem("SavedInstance", savedParams);
|
||||
gdi.setItems("SavedInstance", savedParams);
|
||||
gdi.autoGrow("SavedInstance");
|
||||
gdi.selectFirstItem("SavedInstance");
|
||||
gdi.addButton("ShowSaved", "Visa", ListsCB);
|
||||
@ -2637,7 +2634,29 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
gdi.fillRight();
|
||||
gdi.pushX();
|
||||
|
||||
bool hasVac = false;
|
||||
bool hasAPIEntry = false;
|
||||
bool hasModifiedCard = false;
|
||||
{
|
||||
vector<pRunner> rr;
|
||||
oe->getRunners(0, 0, rr, false);
|
||||
for (pRunner r : rr) {
|
||||
if (r->isVacant())
|
||||
hasVac = true;
|
||||
if (r->hasFlag(oRunner::FlagAddedViaAPI))
|
||||
hasAPIEntry = true;
|
||||
if (r->getCard() && r->getCard()->isOriginalCard() == oCard::PunchOrigin::Manual)
|
||||
hasModifiedCard = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasModifiedCard) {
|
||||
gdi.addButton("GenLst:modifiedcard", "Modifierade resultat", ListsCB);
|
||||
checkWidth(gdi);
|
||||
}
|
||||
|
||||
gdi.addButton("InForestList", "Kvar-i-skogen", ListsCB, "tooltip:inforest").setExtra(IgnoreLimitPer);
|
||||
|
||||
if (cnf.hasIndividual()) {
|
||||
gdi.addButton("PriceList", "Prisutdelningslista", ListsCB);
|
||||
}
|
||||
@ -2664,25 +2683,6 @@ bool TabList::loadPage(gdioutput &gdi)
|
||||
gdi.addButton("GenLst:teamchanges", "Lagändringblankett", ListsCB).setExtra(AddTeamClasses | ForcePageBreak);
|
||||
checkWidth(gdi);
|
||||
}
|
||||
bool hasVac = false;
|
||||
bool hasAPIEntry = false;
|
||||
{
|
||||
vector<pRunner> rr;
|
||||
oe->getRunners(0, 0, rr, false);
|
||||
for (pRunner r : rr) {
|
||||
if (r->isVacant()) {
|
||||
hasVac = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (pRunner r : rr) {
|
||||
if (r->hasFlag(oRunner::FlagAddedViaAPI)) {
|
||||
hasAPIEntry = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasVac) {
|
||||
gdi.addButton("GenLst:vacnacy", "Vakanser", ListsCB);
|
||||
@ -2796,7 +2796,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
lists.insert(lists.begin(), make_pair(lang.tl("Standard"), -10));
|
||||
lists.insert(lists.begin(), make_pair(lang.tl("Automatisk"), -11));
|
||||
|
||||
gdi.addItem("SplitPrintList", lists);
|
||||
gdi.setItems("SplitPrintList", lists);
|
||||
gdi.autoGrow("SplitPrintList");
|
||||
|
||||
gdi.dropLine(0.8);
|
||||
@ -2870,7 +2870,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
||||
for (size_t j = 1; j < 8; j++)
|
||||
nsp.push_back(make_pair(itow(j), j));
|
||||
gdi.addSelection("NumPerPage", 90, 200, ListsCB, L"Max antal brickor per sida");
|
||||
gdi.addItem("NumPerPage", nsp);
|
||||
gdi.setItems("NumPerPage", nsp);
|
||||
gdi.selectItemByData("NumPerPage", printLen);
|
||||
|
||||
int maxWait = oe.getPropertyInt("SplitPrintMaxWait", 60);
|
||||
@ -2924,7 +2924,7 @@ void TabList::customTextLines(oEvent &oe, const char *dataField, bool withSymbol
|
||||
gdi.addInput(row, L"", 24);
|
||||
string key = "font"+itos(k);
|
||||
gdi.addSelection(key, 100, 100);
|
||||
gdi.addItem(key, fonts);
|
||||
gdi.setItems(key, fonts);
|
||||
if (lines.size() > size_t(k)) {
|
||||
gdi.selectItemByData(key.c_str(), lines[k].second);
|
||||
gdi.setText(row, lines[k].first);
|
||||
@ -2947,7 +2947,7 @@ void TabList::customTextLines(oEvent &oe, const char *dataField, bool withSymbol
|
||||
gdi.setTabStops("Symbols", 300);
|
||||
vector < pair<wstring, size_t>> symb;
|
||||
MetaList::fillSymbols(symb);
|
||||
gdi.addItem("Symbols", symb);
|
||||
gdi.setItems("Symbols", symb);
|
||||
gdi.popX();
|
||||
gdi.popY();
|
||||
}
|
||||
@ -3011,37 +3011,28 @@ void TabList::setResultOptionsFromType(gdioutput &gdi, int data) {
|
||||
gdi.setInputStatus("ShowInterResults", builtIn);
|
||||
gdi.setInputStatus("ShowSplits", builtIn);
|
||||
|
||||
|
||||
set<int> clsUnused;
|
||||
vector< pair<wstring, size_t> > out;
|
||||
|
||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||
gdi.addItem("LegNumber", out);
|
||||
gdi.setItems("LegNumber", out);
|
||||
gdi.setInputStatus("LegNumber", !out.empty());
|
||||
|
||||
if (!out.empty() && lastLeg >= 0)
|
||||
gdi.selectItemByData("LegNumber", lastLeg);
|
||||
|
||||
//oe->fillLegNumbers(gdi, "LegNumber", li.isTeamList(), true);
|
||||
gdi.setInputStatus("InputNumber", false);
|
||||
}
|
||||
else {
|
||||
|
||||
gdi.setInputStatus("UseLargeSize", li.supportLarge);
|
||||
gdi.setInputStatus("InputNumber", li.supportParameter);
|
||||
|
||||
//gdi.setInputStatus("SplitAnalysis", li.supportSplitAnalysis);
|
||||
//gdi.setInputStatus("ShowInterResults", li.supportInterResults);
|
||||
//gdi.setInputStatus("PageBreak", li.supportPageBreak);
|
||||
//gdi.setInputStatus("ClassLimit", li.supportClassLimit);
|
||||
|
||||
if (li.supportLegs) {
|
||||
gdi.enableInput("LegNumber");
|
||||
//oe->fillLegNumbers(gdi, "LegNumber", li.isTeamList(), true);
|
||||
set<int> clsUnused;
|
||||
vector< pair<wstring, size_t> > out;
|
||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||
gdi.addItem("LegNumber", out);
|
||||
gdi.setItems("LegNumber", out);
|
||||
if (!out.empty() && lastLeg >= 0)
|
||||
gdi.selectItemByData("LegNumber", lastLeg);
|
||||
gdi.setInputStatus("LegNumber", !out.empty());
|
||||
@ -3091,16 +3082,23 @@ void TabList::setResultOptionsFromType(gdioutput &gdi, int data) {
|
||||
if (lastFilledResultClassType != ct) {
|
||||
lastFilledResultClassType = ct;
|
||||
lastResultClassSelection.insert(curSel.begin(), curSel.end());
|
||||
oe->fillClasses(gdi, "ListSelection", oEvent::extraNone, ct);
|
||||
oe->fillClasses(gdi, "ListSelection", {}, oEvent::extraNone, ct);
|
||||
gdi.setSelection("ListSelection", lastResultClassSelection);
|
||||
}
|
||||
|
||||
gdi.setInputStatus("Generate", data >= 0 && !lastResultClassSelection.empty());
|
||||
gdi.setInputStatus("Generate", data >= 0 && hasSelectedClass(gdi));
|
||||
}
|
||||
|
||||
bool TabList::hasSelectedClass(gdioutput& gdi) {
|
||||
set<int> sel;
|
||||
gdi.getSelection("ListSelection", sel);
|
||||
return !sel.empty();
|
||||
}
|
||||
|
||||
void TabList::clearCompetitionData() {
|
||||
SelectedList = "";
|
||||
lastResultClassSelection.clear();
|
||||
lastClassSelection.clear();
|
||||
|
||||
ownWindow = false;
|
||||
hideButtons = false;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -49,6 +49,8 @@ protected:
|
||||
|
||||
static void createListButtons(gdioutput &gdi);
|
||||
|
||||
static bool hasSelectedClass(gdioutput& gdi);
|
||||
|
||||
void generateList(gdioutput &gdi, bool forceUpdate = false);
|
||||
void selectGeneralList(gdioutput &gdi, EStdListType type);
|
||||
|
||||
@ -124,7 +126,7 @@ public:
|
||||
static void enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to);
|
||||
void liveResult(gdioutput &gdi, oListInfo ¤tList);
|
||||
|
||||
int listCB(gdioutput &gdi, int type, void *data);
|
||||
int listCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||
void loadGeneralList(gdioutput &gdi);
|
||||
void rebuildList(gdioutput &gdi);
|
||||
void settingsResultList(gdioutput &gdi);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
||||
1032
code/TabRunner.cpp
1032
code/TabRunner.cpp
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
/************************************************************************
|
||||
MeOS - Orienteering Software
|
||||
Copyright (C) 2009-2023 Melin Software HB
|
||||
Copyright (C) 2009-2024 Melin Software HB
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -23,9 +23,11 @@
|
||||
#include "tabbase.h"
|
||||
#include "Printer.h"
|
||||
#include "autocompletehandler.h"
|
||||
#include <deque>
|
||||
|
||||
class Table;
|
||||
struct AutoCompleteRecord;
|
||||
//class RankScoreFormatter;
|
||||
|
||||
class TabRunner :
|
||||
public TabBase, AutoCompleteHandler
|
||||
@ -43,15 +45,27 @@ private:
|
||||
|
||||
void selectRunner(gdioutput &gdi, pRunner r);
|
||||
|
||||
void updateCardStatus(const pCard& pc, gdioutput& gdi);
|
||||
void updatePunchStatus(const pPunch& punch, InputInfo* bb, gdioutput& gdi);
|
||||
|
||||
int numReportRow = 1;
|
||||
int numReportColumn = 1;
|
||||
bool hideReportControls = false;
|
||||
bool showReportHeader = true;
|
||||
void addToReport(int cardNo, bool punchForShowReport);
|
||||
void addToReport(int id);
|
||||
|
||||
string computeKeyForReport();
|
||||
|
||||
wstring lastSearchExpr;
|
||||
unordered_set<int> lastFilter;
|
||||
DWORD timeToFill;
|
||||
int inputId;
|
||||
int searchCB(gdioutput &gdi, int type, void *data);
|
||||
|
||||
int runnerCB(gdioutput &gdi, int type, void *data);
|
||||
int punchesCB(gdioutput &gdi, int type, void *data);
|
||||
int vacancyCB(gdioutput &gdi, int type, void *data);
|
||||
int searchCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
int runnerCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
int punchesCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
int vacancyCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||
|
||||
int currentMode;
|
||||
pRunner save(gdioutput &gdi, int runnerId, bool dontReloadRunners);
|
||||
@ -64,7 +78,7 @@ private:
|
||||
int runnerId;
|
||||
bool ownWindow;
|
||||
bool listenToPunches;
|
||||
vector< pair<int, bool> > runnersToReport;
|
||||
deque<pair<int, bool>> runnersToReport;
|
||||
|
||||
vector<pRunner> unknown_dns;
|
||||
vector<pRunner> known_dns;
|
||||
@ -74,9 +88,23 @@ private:
|
||||
bool savePunchTime(pRunner r, gdioutput &gdi);
|
||||
|
||||
PrinterObject splitPrinter;
|
||||
//static shared_ptr<RankScoreFormatter> rankFormatter;
|
||||
|
||||
void showRunnerReport(gdioutput &gdi);
|
||||
static void runnerReport(oEvent &oe, gdioutput &gdi, int id, bool compactReport);
|
||||
|
||||
|
||||
static void runnerReport(oEvent &oe, gdioutput &gdi,
|
||||
int id, bool compactReport,
|
||||
int maxWidth,
|
||||
RECT& rc);
|
||||
|
||||
static void teamReport(oEvent& oe, gdioutput& gdi,
|
||||
const oTeam *team,
|
||||
bool onlySelectedRunner,
|
||||
const deque<pair<int, bool>> &runners,
|
||||
int maxWidth,
|
||||
RECT &rc);
|
||||
|
||||
|
||||
void showVacancyList(gdioutput &gdi, const string &method="", int classId=0);
|
||||
void showCardsList(gdioutput &gdi);
|
||||
@ -100,20 +128,37 @@ private:
|
||||
oEvent *oe;
|
||||
oRunner &getRunner() const;
|
||||
void updateColor(gdioutput& gdi);
|
||||
public:
|
||||
void init(oRunner& r);
|
||||
public:
|
||||
EconomyHandler(oRunner& r) { init(r); }
|
||||
void handle(gdioutput &gdi, BaseInfo &info, GuiEventType type);
|
||||
void save(gdioutput &gdi);
|
||||
};
|
||||
|
||||
shared_ptr<EconomyHandler> ecoHandler;
|
||||
EconomyHandler *getEconomyHandler(oRunner &r);
|
||||
|
||||
void getAutoCompleteUnpairedCards(gdioutput &gdi, const wstring& w, vector<AutoCompleteRecord>& records);
|
||||
|
||||
protected:
|
||||
void clearCompetitionData();
|
||||
public:
|
||||
|
||||
class CommentHandler : public GuiHandler {
|
||||
int runnerId;
|
||||
bool isTeam = false;
|
||||
protected:
|
||||
oAbstractRunner& getRunner() const;
|
||||
oEvent* oe;
|
||||
void doSave(gdioutput& gdi);
|
||||
public:
|
||||
CommentHandler(oAbstractRunner& r) : oe(r.getEvent()) {
|
||||
runnerId = r.getId(); isTeam = r.isTeam();
|
||||
}
|
||||
void handle(gdioutput& gdi, BaseInfo& info, GuiEventType type);
|
||||
virtual void save(gdioutput& gdi);
|
||||
};
|
||||
|
||||
static void renderComments(gdioutput& gdi, oAbstractRunner& r, bool newColumn, bool refresh);
|
||||
static void loadComments(gdioutput& gdi, oAbstractRunner& r, const shared_ptr<CommentHandler> &handler);
|
||||
|
||||
static pClub extractClub(oEvent *oe, gdioutput &gdi);
|
||||
|
||||
void handleAutoComplete(gdioutput &gdi, AutoCompleteInfo &info) override;
|
||||
@ -126,13 +171,21 @@ public:
|
||||
bool loadPage(gdioutput &gdi);
|
||||
bool loadPage(gdioutput &gdi, int runnerId);
|
||||
|
||||
static void generateRunnerReport(oEvent &oe, gdioutput &gdi, vector<pair<int, bool>> &runnersToReport);
|
||||
static int addExtraFields(const oEvent &oe, gdioutput& gdi, oEvent::ExtraFieldContext context);
|
||||
static void saveExtraFields(gdioutput& gdi, oBase &r);
|
||||
static void loadExtraFields(gdioutput& gdi, const oBase* r);
|
||||
|
||||
static void generateRunnerReport(oEvent &oe,
|
||||
gdioutput &gdi,
|
||||
int numX, int numY,
|
||||
bool onlySelectedRunner,
|
||||
const deque<pair<int, bool>> &runnersToReport);
|
||||
|
||||
TabRunner(oEvent *oe);
|
||||
~TabRunner(void);
|
||||
|
||||
friend int runnerSearchCB(gdioutput *gdi, int type, void *data);
|
||||
friend int RunnerCB(gdioutput *gdi, int type, void *data);
|
||||
friend int PunchesCB(gdioutput *gdi, int type, void *data);
|
||||
friend int VacancyCB(gdioutput *gdi, int type, void *data);
|
||||
friend int runnerSearchCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
friend int RunnerCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
friend int PunchesCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
friend int VacancyCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user