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
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
*.bak
|
||||||
|
|
||||||
|
# Translation files
|
||||||
|
*translated.txt
|
||||||
|
*spellcheck.txt
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
@ -24,6 +31,9 @@ bld/
|
|||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
[Ll]og/
|
[Ll]og/
|
||||||
|
|
||||||
|
# vcpkg
|
||||||
|
vcpkg_installed*/
|
||||||
|
|
||||||
# Visual Studio 2015 cache/options directory
|
# Visual Studio 2015 cache/options directory
|
||||||
.vs/
|
.vs/
|
||||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
# 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
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -41,28 +41,30 @@ extern Image image;
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
double getLocalScale(const wstring &fontName, wstring &faceName);
|
double getLocalScale(const wstring &fontName, wstring &faceName);
|
||||||
wstring getMeosCompectVersion();
|
wstring getMeosCompectVersion();
|
||||||
|
|
||||||
map <string, shared_ptr<HTMLWriter>> HTMLWriter::tCache;
|
map <string, shared_ptr<HTMLWriter>> HTMLWriter::tCache;
|
||||||
extern wchar_t exePath[MAX_PATH];
|
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) {
|
map< pair<gdiFonts, string>, pair<string, string> > &styles) {
|
||||||
fout << "<style type=\"text/css\">\n";
|
fout << "<style type=\"text/css\">\n";
|
||||||
fout << "body {background-color: rgb(250,250,255)}\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 << "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:" << fixed << std::setprecision(2) << 20 * 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:" << fixed << std::setprecision(2) << 16 * 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:" << fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal}\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:" << fixed << std::setprecision(2) << 12 * scale << "px;font-weight:normal;white-space:nowrap}\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) {
|
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.e0 {background-color: rgb(238,238,255)}\n";
|
||||||
fout << "td.e1 {background-color: rgb(245,245,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.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:" << fixed << std::setprecision(2) << 1.2 * scale << "}\n";
|
fout << "td.freeheader {line-height:" << std::fixed << std::setprecision(2) << 1.2 * scale << "}\n";
|
||||||
}
|
}
|
||||||
list<TextInfo>::const_iterator it=TL.begin();
|
list<TextInfo>::const_iterator it=TL.begin();
|
||||||
int styleList = 1;
|
int styleList = 1;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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) {}
|
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>
|
template<typename T, typename TI>
|
||||||
static void formatTL(ostream& fout,
|
static void formatTL(std::ostream& fout,
|
||||||
ImageWriter& imageWriter,
|
ImageWriter& imageWriter,
|
||||||
const map< pair<gdiFonts, string>, pair<string, string> >& styles,
|
const map< pair<gdiFonts, string>, pair<string, string> >& styles,
|
||||||
const T& tl,
|
const T& tl,
|
||||||
@ -87,7 +87,7 @@ public:
|
|||||||
void read(const wstring &fileName);
|
void read(const wstring &fileName);
|
||||||
|
|
||||||
void generate(gdioutput &gdi,
|
void generate(gdioutput &gdi,
|
||||||
ostream &fout,
|
std::ostream &fout,
|
||||||
const wstring &title,
|
const wstring &title,
|
||||||
const wstring &contentDescription,
|
const wstring &contentDescription,
|
||||||
bool respectPageBreak,
|
bool respectPageBreak,
|
||||||
@ -99,12 +99,12 @@ public:
|
|||||||
|
|
||||||
void getPage(const oEvent &oe, string &out) const;
|
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,
|
bool includeImages,
|
||||||
const wstring& imageDirectoryDestination,
|
const wstring& imageDirectoryDestination,
|
||||||
int refreshTimeOut, double scale);
|
int refreshTimeOut, double scale);
|
||||||
|
|
||||||
static void writeTableHTML(gdioutput &gdi, ostream &fout,
|
static void writeTableHTML(gdioutput &gdi, std::ostream &fout,
|
||||||
const wstring &title,
|
const wstring &title,
|
||||||
bool includeImages,
|
bool includeImages,
|
||||||
const wstring &imageDirectoryDestination,
|
const wstring &imageDirectoryDestination,
|
||||||
@ -121,13 +121,13 @@ public:
|
|||||||
const wstring &title, int refreshTimeOut, double scale);
|
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, 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,
|
static void write(gdioutput& gdi, const wstring& file, const wstring& title, const wstring& contentsDescription,
|
||||||
bool respectPageBreak, const string& typeTag, int refresh,
|
bool respectPageBreak, const string& typeTag, int refresh,
|
||||||
int rows, int cols, int time_ms, int margin, double scale);
|
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,
|
bool includeImages,
|
||||||
const wstring& imageDirectoryDestination,
|
const wstring& imageDirectoryDestination,
|
||||||
const wstring& contentsDescription,
|
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
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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);
|
sql = sql.substr(0, sql.length() - 2);
|
||||||
query.execute(sql);
|
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) {
|
if (dc) {
|
||||||
// Ugrade table
|
// Ugrade table
|
||||||
@ -528,6 +534,16 @@ bool MeosSQL::openDB(oEvent *oe)
|
|||||||
upgradeTimeFormat(dbname);
|
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) {
|
if (tookLock) {
|
||||||
con->query().exec("UNLOCK TABLES");
|
con->query().exec("UNLOCK TABLES");
|
||||||
}
|
}
|
||||||
@ -700,7 +716,8 @@ bool MeosSQL::openDB(oEvent *oe)
|
|||||||
<< C_INT("CardNo")
|
<< C_INT("CardNo")
|
||||||
<< C_INT("Time")
|
<< C_INT("Time")
|
||||||
<< C_INT("Type")
|
<< C_INT("Type")
|
||||||
<< C_INT("Unit") << C_END();
|
<< C_INT("Unit")
|
||||||
|
<< C_INT("Origin") << C_END();
|
||||||
query.execute();
|
query.execute();
|
||||||
|
|
||||||
upgradeDB("oPunch", nullptr);
|
upgradeDB("oPunch", nullptr);
|
||||||
@ -1622,6 +1639,8 @@ void MeosSQL::storePunch(const RowWrapper &row, oFreePunch &p, bool rehash)
|
|||||||
p.type = row["Type"];
|
p.type = row["Type"];
|
||||||
}
|
}
|
||||||
p.punchUnit = row["Unit"];
|
p.punchUnit = row["Unit"];
|
||||||
|
p.origin = row["Origin"];
|
||||||
|
|
||||||
p.sqlUpdated = row["Modified"];
|
p.sqlUpdated = row["Modified"];
|
||||||
p.counter = row["Counter"];
|
p.counter = row["Counter"];
|
||||||
p.Removed = row["Removed"];
|
p.Removed = row["Removed"];
|
||||||
@ -2953,6 +2972,7 @@ OpFailStatus MeosSQL::syncUpdate(oFreePunch *c, bool forceWriteAll)
|
|||||||
queryset << " CardNo=" << c->CardNo << ", "
|
queryset << " CardNo=" << c->CardNo << ", "
|
||||||
<< " Type=" << c->type << ","
|
<< " Type=" << c->type << ","
|
||||||
<< " Time=" << c->punchTime << ","
|
<< " Time=" << c->punchTime << ","
|
||||||
|
<< " Origin=" << c->origin << ","
|
||||||
<< " Unit=" << c->punchUnit;
|
<< " Unit=" << c->punchUnit;
|
||||||
|
|
||||||
return syncUpdate(queryset, "oPunch", c);
|
return syncUpdate(queryset, "oPunch", c);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include <ShellAPI.h>
|
#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) {
|
RestService::RestService() : AutoMachine("Informationsserver", Machines::mInfoService), port(-1) {
|
||||||
}
|
}
|
||||||
@ -88,12 +88,12 @@ void RestService::settings(gdioutput &gdi, oEvent &oe, State state) {
|
|||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
gdi.addCheckbox("AllowEntry", "Tillåt anmälan", 0, false).setHandler(this);
|
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.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.autoGrow("PermissionPerson");
|
||||||
gdi.selectFirstItem("PermissionPerson");
|
gdi.selectFirstItem("PermissionPerson");
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
gdi.addSelection("PermissionClass", 180, 200, 0, L"Till vilka klasser:");
|
gdi.addSelection("PermissionClass", 180, 200, 0, L"Till vilka klasser:");
|
||||||
gdi.addItem("PermissionClass", RestServer::getPermissionsClass());
|
gdi.setItems("PermissionClass", RestServer::getPermissionsClass());
|
||||||
gdi.autoGrow("PermissionClass");
|
gdi.autoGrow("PermissionClass");
|
||||||
gdi.selectFirstItem("PermissionClass");
|
gdi.selectFirstItem("PermissionClass");
|
||||||
bool disablePermisson = true;
|
bool disablePermisson = true;
|
||||||
@ -111,9 +111,8 @@ void RestService::settings(gdioutput &gdi, oEvent &oe, State state) {
|
|||||||
else {
|
else {
|
||||||
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
gdi.addString("", 0, "Server startad på X#" + itos(port));
|
||||||
auto per = server->getEntryPermission();
|
auto per = server->getEntryPermission();
|
||||||
if (get<RestServer::EntryPermissionType>(per) != RestServer::EntryPermissionType::None)
|
if (get<RestServer::EntryPermissionType>(per) != RestServer::EntryPermissionType::None) {
|
||||||
disablePermisson = false;
|
disablePermisson = false;
|
||||||
else {
|
|
||||||
gdi.selectItemByData("PermissionPerson", size_t(get<RestServer::EntryPermissionType>(per)));
|
gdi.selectItemByData("PermissionPerson", size_t(get<RestServer::EntryPermissionType>(per)));
|
||||||
gdi.selectItemByData("PermissionClass", size_t(get<RestServer::EntryPermissionClass>(per)));
|
gdi.selectItemByData("PermissionClass", size_t(get<RestServer::EntryPermissionClass>(per)));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -464,7 +464,7 @@ void RunnerDB::compactifyClubs()
|
|||||||
ba=nba;
|
ba=nba;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
swap(ref, *best);
|
std::swap(ref, *best);
|
||||||
|
|
||||||
//Update map
|
//Update map
|
||||||
for (size_t j=0;j<compacted.size();j++) {
|
for (size_t j=0;j<compacted.size();j++) {
|
||||||
@ -789,7 +789,7 @@ string RunnerDB::getDataDate() const
|
|||||||
|
|
||||||
void RunnerDB::setDataDate(const string &date)
|
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;
|
int t = date.length()>11 ? convertAbsoluteTimeHMS(date.substr(11), -1) : 0;
|
||||||
|
|
||||||
if (d<=0)
|
if (d<=0)
|
||||||
@ -1960,7 +1960,7 @@ const wstring& RunnerDBEntry::getBirthDate() const {
|
|||||||
|
|
||||||
void RunnerDBEntry::setBirthDate(const wstring& in) {
|
void RunnerDBEntry::setBirthDate(const wstring& in) {
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
if (convertDateYMS(in, st, true) > 0) {
|
if (convertDateYMD(in, st, true) > 0) {
|
||||||
setBirthYear(st.wYear);
|
setBirthYear(st.wYear);
|
||||||
setBirthMonth(st.wMonth);
|
setBirthMonth(st.wMonth);
|
||||||
setBirthDay(st.wDay);
|
setBirthDay(st.wDay);
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -385,7 +385,7 @@ private:
|
|||||||
protected:
|
protected:
|
||||||
/** Get internal data buffers for DI */
|
/** Get internal data buffers for DI */
|
||||||
oDataContainer &getDataBuffers(pvoid &data, pvoid &olddata, pvectorstr &strData) const;
|
oDataContainer &getDataBuffers(pvoid &data, pvoid &olddata, pvectorstr &strData) const;
|
||||||
int getDISize() const {return 0;}
|
int getDISize() const final {return 0;}
|
||||||
void changedObject() {}
|
void changedObject() {}
|
||||||
public:
|
public:
|
||||||
void merge(const oBase &input, const oBase * base) final {}
|
void merge(const oBase &input, const oBase * base) final {}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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);
|
string2Wide(lastNameByte, lastName);
|
||||||
wcsncpy(card.lastName, lastName.c_str(), 20);
|
wcsncpy_s(card.lastName, lastName.c_str(), 20);
|
||||||
card.lastName[20] = 0;
|
card.lastName[20] = 0;
|
||||||
|
|
||||||
memcpy(firstNameByte, data+32+20, 20);
|
memcpy(firstNameByte, data+32+20, 20);
|
||||||
@ -1869,7 +1869,7 @@ bool SportIdent::getCard6Data(BYTE *data, SICard &card)
|
|||||||
}
|
}
|
||||||
|
|
||||||
string2Wide(firstNameByte, firstName);
|
string2Wide(firstNameByte, firstName);
|
||||||
wcsncpy(card.firstName, firstName.c_str(), 20);
|
wcsncpy_s(card.firstName, firstName.c_str(), 20);
|
||||||
card.firstName[20] = 0;
|
card.firstName[20] = 0;
|
||||||
|
|
||||||
data+=128-16;
|
data+=128-16;
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -96,6 +96,9 @@ struct SICard
|
|||||||
int relativeFinishTime;
|
int relativeFinishTime;
|
||||||
bool statusOK;
|
bool statusOK;
|
||||||
bool statusDNF;
|
bool statusDNF;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isDebugCard = false;
|
||||||
vector<string> codeLogData(gdioutput &converter, int row) const;
|
vector<string> codeLogData(gdioutput &converter, int row) const;
|
||||||
static vector<string> logHeader();
|
static vector<string> logHeader();
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
|
||||||
#define NOMINMAX
|
#define NOMINMAX
|
||||||
|
|
||||||
|
#include <winsdkver.h>
|
||||||
|
#define WINVER 0x0A00
|
||||||
|
#define _WIN32_WINNT 0x0601 // Target Windows 7.
|
||||||
|
#include <sdkddkver.h>
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#include "timeconstants.hpp"
|
#include "timeconstants.hpp"
|
||||||
@ -20,8 +24,34 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <list>
|
#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 getUserFile(wchar_t *fileNamePath, const wchar_t *fileName);
|
||||||
bool getDesktopFile(wchar_t *fileNamePath, const wchar_t *fileName, const wchar_t *subFolder = 0);
|
bool getDesktopFile(wchar_t *fileNamePath, const wchar_t *fileName, const wchar_t *subFolder = 0);
|
||||||
bool getMeOSFile(wchar_t *FileNamePath, const wchar_t *FileName);
|
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);
|
gdioutput *getExtraWindow(const string &tag, bool toForeGround);
|
||||||
string uniqueTag(const char *base);
|
string uniqueTag(const char *base);
|
||||||
|
|
||||||
void LoadPage(const string &name);
|
|
||||||
|
|
||||||
wstring getTempFile();
|
wstring getTempFile();
|
||||||
wstring getTempPath();
|
wstring getTempPath();
|
||||||
void removeTempFile(const wstring &file); // Delete a temporyary
|
void removeTempFile(const wstring &file); // Delete a temporyary
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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);
|
tabAuto->syncCallback(gdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
int AutomaticCB(gdioutput *gdi, int type, void *data)
|
int AutomaticCB(gdioutput *gdi, GuiEventType type, BaseInfo* data) {
|
||||||
{
|
|
||||||
if (!tabAuto)
|
if (!tabAuto)
|
||||||
throw std::exception("tabAuto undefined.");
|
throw std::exception("tabAuto undefined.");
|
||||||
|
|
||||||
@ -178,6 +177,10 @@ int AutomaticCB(gdioutput *gdi, int type, void *data)
|
|||||||
ListBoxInfo lbi=*static_cast<ListBoxInfo *>(data);
|
ListBoxInfo lbi=*static_cast<ListBoxInfo *>(data);
|
||||||
return tabAuto->processListBox(*gdi, lbi);
|
return tabAuto->processListBox(*gdi, lbi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case GuiEventType::GUI_POSTCLEAR:
|
||||||
|
case GuiEventType::GUI_CLEAR:
|
||||||
|
return tabAuto->clearPage(*gdi, type == GUI_POSTCLEAR);
|
||||||
}
|
}
|
||||||
return 0;
|
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)
|
int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (bu.id=="GenerateCMP") {
|
if (bu.id=="GenerateCMP") {
|
||||||
#ifndef MEOSDB
|
|
||||||
int nClass=gdi.getTextNo("nClass");
|
int nClass=gdi.getTextNo("nClass");
|
||||||
int nRunner=gdi.getTextNo("nRunner");
|
int nRunner=gdi.getTextNo("nRunner");
|
||||||
|
|
||||||
@ -303,7 +342,6 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
|||||||
gdi.getTabs().get(TCmpTab)->loadPage(gdi);
|
gdi.getTabs().get(TCmpTab)->loadPage(gdi);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (bu.id == "BrowseFolder") {
|
else if (bu.id == "BrowseFolder") {
|
||||||
const wchar_t *edit = bu.getExtra();
|
const wchar_t *edit = bu.getExtra();
|
||||||
@ -399,6 +437,7 @@ int TabAuto::processButton(gdioutput &gdi, const ButtonInfo &bu)
|
|||||||
if (gdi.hasWidget("Interval"))
|
if (gdi.hasWidget("Interval"))
|
||||||
iv = gdi.getText("Interval");
|
iv = gdi.getText("Interval");
|
||||||
sm->saveMachine(*oe, iv);
|
sm->saveMachine(*oe, iv);
|
||||||
|
wasSaved = true;
|
||||||
oe->updateChanged();
|
oe->updateChanged();
|
||||||
oe->synchronize(false);
|
oe->synchronize(false);
|
||||||
}
|
}
|
||||||
@ -531,11 +570,15 @@ void TabAuto::settings(gdioutput &gdi, AutoMachine *sm, AutoMachine::State state
|
|||||||
rc.left = cx - d;
|
rc.left = cx - d;
|
||||||
rc.right = w + d;
|
rc.right = w + d;
|
||||||
gdi.addRectangle(rc, colorLightBlue, true, true);
|
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();
|
gdi.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabAuto::killMachines()
|
void TabAuto::killMachines() {
|
||||||
{
|
|
||||||
while(!machines.empty()) {
|
while(!machines.empty()) {
|
||||||
machines.back()->stop();
|
machines.back()->stop();
|
||||||
delete machines.back();
|
delete machines.back();
|
||||||
@ -544,8 +587,7 @@ void TabAuto::killMachines()
|
|||||||
AutoMachine::resetGlobalId();
|
AutoMachine::resetGlobalId();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast)
|
bool TabAuto::loadPage(gdioutput &gdi, bool showSettingsLast) {
|
||||||
{
|
|
||||||
oe->checkDB();
|
oe->checkDB();
|
||||||
oe->synchronize();
|
oe->synchronize();
|
||||||
tabAuto=this;
|
tabAuto=this;
|
||||||
@ -773,7 +815,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
|||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
vector< pair<wstring, size_t> > d;
|
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.setSelection("Classes", classesToPrint);
|
||||||
|
|
||||||
gdi.addSelection("ListType", 200, 100, 0, L"Lista");
|
gdi.addSelection("ListType", 200, 100, 0, L"Lista");
|
||||||
@ -797,7 +839,7 @@ void PrintResultMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
|||||||
set<int> clsUnused;
|
set<int> clsUnused;
|
||||||
vector< pair<wstring, size_t> > out;
|
vector< pair<wstring, size_t> > out;
|
||||||
oe.fillLegNumbers(clsUnused, listInfo.isTeamList(), true, out);
|
oe.fillLegNumbers(clsUnused, listInfo.isTeamList(), true, out);
|
||||||
gdi.addItem("LegNumber", out);
|
gdi.setItems("LegNumber", out);
|
||||||
gdi.selectItemByData("LegNumber", listInfo.getLegNumberCoded());
|
gdi.selectItemByData("LegNumber", listInfo.getLegNumberCoded());
|
||||||
|
|
||||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, pageBreak);
|
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, pageBreak);
|
||||||
@ -981,7 +1023,7 @@ void PrewarningMachine::settings(gdioutput &gdi, oEvent &oe, State state) {
|
|||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
vector< pair<wstring, size_t> > d;
|
vector< pair<wstring, size_t> > d;
|
||||||
oe.fillControls(d, oEvent::ControlType::CourseControl);
|
oe.fillControls(d, oEvent::ControlType::CourseControl);
|
||||||
gdi.addItem("Controls", d);
|
gdi.setItems("Controls", d);
|
||||||
gdi.setSelection("Controls", controls);
|
gdi.setSelection("Controls", controls);
|
||||||
gdi.popX();
|
gdi.popX();
|
||||||
gdi.addButton("SelectAll", "Välj alla", AutomaticCB, "").setExtra(L"Controls");
|
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) {
|
if (doProcess) {
|
||||||
//Try exporting.
|
//Try exporting.
|
||||||
oe.exportIOFSplits(oEvent::IOF20, file.c_str(), true, false,
|
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;
|
interval = iv;
|
||||||
synchronize = true;
|
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 ((interval>0 && ast==SyncTimer) || (interval==0 && ast==SyncDataUp)) {
|
||||||
if (!file.empty())
|
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);
|
leg, false, true, true, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -311,12 +311,12 @@ class TabAuto :
|
|||||||
public TabBase
|
public TabBase
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
//DWORD printResultIntervalSec;
|
bool editMode = false;
|
||||||
//DWORD printResultTimeOut;
|
int currentMachineEditId = -1;
|
||||||
bool editMode;
|
bool wasCreated = false;
|
||||||
|
bool wasSaved = false;
|
||||||
bool synchronize;
|
bool synchronize = false;
|
||||||
bool synchronizePunches;
|
bool synchronizePunches = false;
|
||||||
void updateSyncInfo();
|
void updateSyncInfo();
|
||||||
|
|
||||||
list<AutoMachine *> machines;
|
list<AutoMachine *> machines;
|
||||||
@ -336,6 +336,7 @@ public:
|
|||||||
AutoMachine *getMachine(int id);
|
AutoMachine *getMachine(int id);
|
||||||
bool stopMachine(AutoMachine *am);
|
bool stopMachine(AutoMachine *am);
|
||||||
void killMachines();
|
void killMachines();
|
||||||
|
bool clearPage(gdioutput &gdi, bool postClear);
|
||||||
|
|
||||||
AutoMachine &addMachine(const AutoMachine &am) {
|
AutoMachine &addMachine(const AutoMachine &am) {
|
||||||
machines.push_back(am.clone());
|
machines.push_back(am.clone());
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -190,19 +190,6 @@ void FixedTabs::clearCompetitionData() {
|
|||||||
tabs[k]->clearCompetitionData();
|
tabs[k]->clearCompetitionData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TabObject::TabObject(TabBase *t)
|
|
||||||
{
|
|
||||||
tab = t;
|
|
||||||
tab->tabId = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
TabObject::~TabObject()
|
|
||||||
{
|
|
||||||
//delete tab;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TabObject::loadPage(gdioutput &gdi)
|
bool TabObject::loadPage(gdioutput &gdi)
|
||||||
{
|
{
|
||||||
if (tab)
|
if (tab)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -74,42 +74,23 @@ public:
|
|||||||
class TabObject
|
class TabObject
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
mutable TabBase *tab;
|
TabBase * const tab = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
string name;
|
const wstring name;
|
||||||
int id;
|
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 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 type_info &getType() const {return typeid(*tab);}
|
||||||
const TabBase &getTab() const {return *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)
|
TabObject(const TabObject& t) = delete;
|
||||||
{
|
TabObject& operator=(TabObject& t) = delete;
|
||||||
if (&t!=this) {
|
~TabObject() = default;
|
||||||
delete tab;
|
|
||||||
name=t.name;
|
|
||||||
id=t.id;
|
|
||||||
tab=t.tab;
|
|
||||||
//t.tab=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TabObject(TabBase *t);
|
|
||||||
~TabObject();
|
|
||||||
|
|
||||||
bool loadPage(gdioutput &gdi);
|
bool loadPage(gdioutput &gdi);
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -24,6 +24,8 @@
|
|||||||
#include "tabbase.h"
|
#include "tabbase.h"
|
||||||
#include "oEventDraw.h"
|
#include "oEventDraw.h"
|
||||||
|
|
||||||
|
class QFEditor;
|
||||||
|
|
||||||
class TabClass :
|
class TabClass :
|
||||||
public TabBase
|
public TabBase
|
||||||
{
|
{
|
||||||
@ -45,7 +47,6 @@ class TabClass :
|
|||||||
double pTimeScaling;
|
double pTimeScaling;
|
||||||
int pInterval;
|
int pInterval;
|
||||||
|
|
||||||
|
|
||||||
class HandleCloseWindow : public GuiHandler {
|
class HandleCloseWindow : public GuiHandler {
|
||||||
TabClass *tabClass;
|
TabClass *tabClass;
|
||||||
HandleCloseWindow(const HandleCloseWindow&);
|
HandleCloseWindow(const HandleCloseWindow&);
|
||||||
@ -57,7 +58,6 @@ class TabClass :
|
|||||||
};
|
};
|
||||||
HandleCloseWindow handleCloseWindow;
|
HandleCloseWindow handleCloseWindow;
|
||||||
|
|
||||||
|
|
||||||
bool EditChanged;
|
bool EditChanged;
|
||||||
int ClassId;
|
int ClassId;
|
||||||
int currentStage;
|
int currentStage;
|
||||||
@ -72,6 +72,8 @@ class TabClass :
|
|||||||
vector<ClassInfo> cInfo;
|
vector<ClassInfo> cInfo;
|
||||||
void saveDrawSettings() const;
|
void saveDrawSettings() const;
|
||||||
|
|
||||||
|
void dynamicStart(gdioutput& gdi);
|
||||||
|
|
||||||
map<int, ClassInfo> cInfoCache;
|
map<int, ClassInfo> cInfoCache;
|
||||||
|
|
||||||
DrawInfo drawInfo;
|
DrawInfo drawInfo;
|
||||||
@ -120,9 +122,6 @@ class TabClass :
|
|||||||
|
|
||||||
void showClassSelection(gdioutput &gdi, int &bx, int &by, GUICALLBACK classesCB) const;
|
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 updateFairForking(gdioutput &gdi, pClass pc) const;
|
||||||
void selectCourses(gdioutput &gdi, int legNo);
|
void selectCourses(gdioutput &gdi, int legNo);
|
||||||
bool showMulti(bool singleOnly) const;
|
bool showMulti(bool singleOnly) const;
|
||||||
@ -168,11 +167,15 @@ class TabClass :
|
|||||||
void fillResultModules(gdioutput &gdi, pClass pc);
|
void fillResultModules(gdioutput &gdi, pClass pc);
|
||||||
|
|
||||||
shared_ptr<GuiHandler> startGroupHandler;
|
shared_ptr<GuiHandler> startGroupHandler;
|
||||||
|
shared_ptr<QFEditor> qfEditor;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void loadStartGroupSettings(gdioutput &gdi, bool reload);
|
void loadStartGroupSettings(gdioutput &gdi, bool reload);
|
||||||
void drawStartGroups(gdioutput &gdi);
|
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 clearCompetitionData();
|
||||||
|
|
||||||
void closeWindow(gdioutput &gdi);
|
void closeWindow(gdioutput &gdi);
|
||||||
@ -182,14 +185,14 @@ public:
|
|||||||
bool loadPage(gdioutput &gdi);
|
bool loadPage(gdioutput &gdi);
|
||||||
void selectClass(gdioutput &gdi, int cid);
|
void selectClass(gdioutput &gdi, int cid);
|
||||||
|
|
||||||
int classCB(gdioutput &gdi, int type, void *data);
|
int classCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
int multiCB(gdioutput &gdi, int type, void *data);
|
int multiCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
|
|
||||||
const char * getTypeStr() const {return "TClassTab";}
|
const char * getTypeStr() const {return "TClassTab";}
|
||||||
TabType getType() 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(oEvent *oe);
|
||||||
~TabClass(void);
|
~TabClass();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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);
|
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));
|
TabClub &tc = dynamic_cast<TabClub &>(*gdi->getTabs().get(TClubTab));
|
||||||
return tc.clubCB(*gdi, type, data);
|
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) {
|
if (type==GUI_BUTTON) {
|
||||||
ButtonInfo bi=*(ButtonInfo *)data;
|
ButtonInfo bi=*(ButtonInfo *)data;
|
||||||
|
|
||||||
@ -414,7 +412,7 @@ int TabClub::clubCB(gdioutput &gdi, int type, void *data)
|
|||||||
oe->fillClassTypes(types);
|
oe->fillClassTypes(types);
|
||||||
oe->fillClasses(classes, oEvent::extraNone, oEvent::filterNone);
|
oe->fillClasses(classes, oEvent::extraNone, oEvent::filterNone);
|
||||||
types.insert(types.end(), classes.begin(), classes.end());
|
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.addItem("ClassType", lang.tl("Alla typer"), -5);
|
||||||
|
|
||||||
gdi.selectItemByData("ClassType", -5);
|
gdi.selectItemByData("ClassType", -5);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -26,7 +26,7 @@
|
|||||||
class TabClub :
|
class TabClub :
|
||||||
public TabBase
|
public TabBase
|
||||||
{
|
{
|
||||||
int clubCB(gdioutput &gdi, int type, void *data);
|
int clubCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
|
|
||||||
wstring firstDate;
|
wstring firstDate;
|
||||||
wstring lastDate;
|
wstring lastDate;
|
||||||
@ -59,5 +59,5 @@ public:
|
|||||||
TabClub(oEvent *oe);
|
TabClub(oEvent *oe);
|
||||||
~TabClub(void);
|
~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
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -67,7 +67,7 @@ void exportSetup();
|
|||||||
void resetSaveTimer();
|
void resetSaveTimer();
|
||||||
extern bool enableTests;
|
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)
|
TabCompetition::TabCompetition(oEvent *poe):TabBase(poe)
|
||||||
{
|
{
|
||||||
@ -198,7 +198,7 @@ bool TabCompetition::exportFileAs(HWND hWnd, gdioutput &gdi)
|
|||||||
return true;
|
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));
|
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));
|
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||||
|
|
||||||
return tc.restoreCB(*gdi, type, data);
|
return tc.restoreCB(*gdi, type, data);
|
||||||
@ -359,7 +358,7 @@ bool TabCompetition::checkEventor(gdioutput &gdi, ButtonInfo &bi) {
|
|||||||
return false;
|
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));
|
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||||
if (type == GUI_COMBO) {
|
if (type == GUI_COMBO) {
|
||||||
const ListBoxInfo &lbi = *((ListBoxInfo *)data);
|
const ListBoxInfo &lbi = *((ListBoxInfo *)data);
|
||||||
@ -390,8 +389,7 @@ bool TabCompetition::useEventorUTC() const {
|
|||||||
|
|
||||||
enum StartMethod {SMCommon = 1, SMDrawn, SMFree, SMCustom};
|
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) {
|
if (type == GUI_LINK) {
|
||||||
TextInfo ti = *(TextInfo *)data;
|
TextInfo ti = *(TextInfo *)data;
|
||||||
if (ti.id == "link") {
|
if (ti.id == "link") {
|
||||||
@ -569,10 +567,10 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
gdi.addButton("Cancel", "Återgå", CompetitionCB);
|
gdi.addButton("Cancel", "Återgå", CompetitionCB);
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
|
|
||||||
if (prefsEditor.empty())
|
if (!prefsEditor)
|
||||||
prefsEditor.push_back(PrefsEditor(oe));
|
prefsEditor = make_shared<PrefsEditor>(oe);
|
||||||
|
prefsEditor->showPrefs(gdi);
|
||||||
|
|
||||||
prefsEditor.back().showPrefs(gdi);
|
|
||||||
gdi.refresh();
|
gdi.refresh();
|
||||||
}
|
}
|
||||||
else if (bi.id=="Test") {
|
else if (bi.id=="Test") {
|
||||||
@ -1143,7 +1141,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
wstring startlist = getTempFile();
|
wstring startlist = getTempFile();
|
||||||
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
||||||
oe->exportIOFStartlist(oEvent::IOF30, startlist.c_str(), eventorUTC,
|
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;
|
vector<wstring> fileList;
|
||||||
fileList.push_back(startlist);
|
fileList.push_back(startlist);
|
||||||
|
|
||||||
@ -1236,7 +1234,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
set<int> classes;
|
set<int> classes;
|
||||||
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
bool eventorUTC = oe->getPropertyInt("UseEventorUTC", 0) != 0;
|
||||||
oe->exportIOFSplits(oEvent::IOF30, resultlist.c_str(), false,
|
oe->exportIOFSplits(oEvent::IOF30, resultlist.c_str(), false,
|
||||||
eventorUTC, classes, -1, false, true,
|
eventorUTC, classes, make_pair("", ""), -1, false, true,
|
||||||
false, true, true);
|
false, true, true);
|
||||||
vector<wstring> fileList;
|
vector<wstring> fileList;
|
||||||
fileList.push_back(resultlist);
|
fileList.push_back(resultlist);
|
||||||
@ -1531,7 +1529,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
gdi.addString("", 1, "Behandlar tävlingsdata").setColor(colorGreen);
|
gdi.addString("", 1, "Behandlar tävlingsdata").setColor(colorGreen);
|
||||||
set<int> noFilter;
|
set<int> noFilter;
|
||||||
string noType;
|
pair<string, string> noType;
|
||||||
|
|
||||||
if (createNew && id>0) {
|
if (createNew && id>0) {
|
||||||
gdi.addString("", 1, "Skapar ny tävling");
|
gdi.addString("", 1, "Skapar ny tävling");
|
||||||
@ -1559,9 +1557,12 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
removeTempFile(tClass);
|
removeTempFile(tClass);
|
||||||
|
|
||||||
set<int> stageFilter;
|
set<int> stageFilter;
|
||||||
string preferredIdType;
|
pair<string, string> preferredIdType;
|
||||||
checkStageFilter(gdi, tEntry, stageFilter, preferredIdType);
|
checkStageFilter(gdi, tEntry, stageFilter, preferredIdType);
|
||||||
oe->importXML_EntryData(gdi, tEntry.c_str(), false, removeRemoved, stageFilter, 0, 0, preferredIdType);
|
oe->importXML_EntryData(gdi, tEntry.c_str(), false, removeRemoved, stageFilter, 0, 0, preferredIdType);
|
||||||
|
if (!preferredIdType.second.empty())
|
||||||
|
oe->setRunnerIdTypes(preferredIdType);
|
||||||
|
|
||||||
removeTempFile(tEntry);
|
removeTempFile(tEntry);
|
||||||
|
|
||||||
if (!course.empty()) {
|
if (!course.empty()) {
|
||||||
@ -1791,6 +1792,8 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
oe->setProperty("ExpWithRaceNo", includeStage);
|
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto preferredIdTypes = getPreferredIdTypes(gdi);
|
||||||
|
|
||||||
gdi.getSelection("ClassNewEntries", allTransfer);
|
gdi.getSelection("ClassNewEntries", allTransfer);
|
||||||
ImportFormats::ExportFormats filterIndex = ImportFormats::setExportFormat(*oe, gdi.getSelectedItem("Type").first);
|
ImportFormats::ExportFormats filterIndex = ImportFormats::setExportFormat(*oe, gdi.getSelectedItem("Type").first);
|
||||||
int cSVLanguageHeaderIndex = gdi.getSelectedItem("LanguageType").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) {
|
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
||||||
bool useUTC = oe->getDCI().getInt("UTC") != 0;
|
bool useUTC = oe->getDCI().getInt("UTC") != 0;
|
||||||
oe->exportIOFStartlist(filterIndex == ImportFormats::IOF30 ? oEvent::IOF30 : oEvent::IOF20,
|
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) {
|
else if (filterIndex == ImportFormats::OE) {
|
||||||
oe->exportOECSV(save.c_str(), allTransfer, cSVLanguageHeaderIndex, false);
|
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);
|
oe->setProperty("ExpWithRaceNo", includeStage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto preferredIdTypes = getPreferredIdTypes(gdi);
|
||||||
|
|
||||||
gdi.setWaitCursor(true);
|
gdi.setWaitCursor(true);
|
||||||
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
if (filterIndex == ImportFormats::IOF30 || filterIndex == ImportFormats::IOF203) {
|
||||||
oEvent::IOFVersion ver = filterIndex == ImportFormats::IOF30 ? oEvent::IOF30 : oEvent::IOF20;
|
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")) {
|
if (!gdi.hasWidget("LegType")) {
|
||||||
oe->exportIOFSplits(ver, save.c_str(), true, useUTC,
|
oe->exportIOFSplits(ver, save.c_str(), true, useUTC,
|
||||||
allTransfer, -1, false, unroll, includeStage, false, false);
|
allTransfer, preferredIdTypes, -1, false, unroll, includeStage, false, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ListBoxInfo leglbi;
|
ListBoxInfo leglbi;
|
||||||
@ -1880,16 +1885,16 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
for (int leg = 0; leg<legMax; leg++) {
|
for (int leg = 0; leg<legMax; leg++) {
|
||||||
file = fileBase + L"_" + itow(leg+1) + fileEnd;
|
file = fileBase + L"_" + itow(leg+1) + fileEnd;
|
||||||
oe->exportIOFSplits(ver, file.c_str(), true, useUTC,
|
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) {
|
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);
|
-1, true, unroll, includeStage, false, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int leg = leglbi.data == 1 ? -1 : leglbi.data - 10;
|
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);
|
leg, false, unroll, includeStage, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2202,6 +2207,14 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
else if (type==GUI_LISTBOX) {
|
else if (type==GUI_LISTBOX) {
|
||||||
ListBoxInfo lbi=*(ListBoxInfo *)data;
|
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") {
|
if (lbi.id=="LocalCmp") {
|
||||||
gdi.selectItemByData("ServerCmp", -1);
|
gdi.selectItemByData("ServerCmp", -1);
|
||||||
gdi.disableInput("Repair", true);
|
gdi.disableInput("Repair", true);
|
||||||
@ -2302,7 +2315,7 @@ int TabCompetition::competitionCB(gdioutput &gdi, int type, void *data)
|
|||||||
gdi.setData("RunnerIx", ix);
|
gdi.setData("RunnerIx", ix);
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
gdi.addSelection("Classes", 200, 300, 0, L"Klasser:");
|
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))
|
if (lastSelectedClass == -1 || !gdi.selectItemByData("Classes", lastSelectedClass))
|
||||||
gdi.selectFirstItem("Classes");
|
gdi.selectFirstItem("Classes");
|
||||||
@ -2357,8 +2370,8 @@ void TabCompetition::openCompetition(gdioutput &gdi, int id) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TabCompetition::restoreCB(gdioutput &gdi, int type, void *data) {
|
int TabCompetition::restoreCB(gdioutput &gdi, GuiEventType type, BaseInfo *data) {
|
||||||
TextInfo &ti = *(TextInfo *)data;
|
TextInfo &ti = dynamic_cast<TextInfo&>(*data);
|
||||||
int id = ti.getExtraInt();
|
int id = ti.getExtraInt();
|
||||||
const BackupInfo &bi = oe->getBackup(id);
|
const BackupInfo &bi = oe->getBackup(id);
|
||||||
|
|
||||||
@ -2417,7 +2430,7 @@ void TabCompetition::copyrightLine(gdioutput &gdi) const
|
|||||||
|
|
||||||
gdi.dropLine(0.4);
|
gdi.dropLine(0.4);
|
||||||
gdi.fillDown();
|
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.dropLine(1);
|
||||||
gdi.popX();
|
gdi.popX();
|
||||||
|
|
||||||
@ -2447,12 +2460,9 @@ void TabCompetition::loadAboutPage(gdioutput &gdi) const
|
|||||||
gdi.dropLine(1.5);
|
gdi.dropLine(1.5);
|
||||||
gdi.setCX(gdi.getCX() + gdi.scaleLength(20));
|
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.dropLine();
|
||||||
gdi.addStringUT(10, "The database connection used is MySQL++\nCopyright "
|
gdi.addStringUT(10, "The database used is MySQL, Copyright (c) 2008-2024 Oracle, Inc."
|
||||||
"(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."
|
|
||||||
"\n\nGerman Translation by Erik Nilsson-Simkovics"
|
"\n\nGerman Translation by Erik Nilsson-Simkovics"
|
||||||
"\n\nDanish Translation by Michael Leth Jess and Chris Bagge"
|
"\n\nDanish Translation by Michael Leth Jess and Chris Bagge"
|
||||||
"\n\nRussian Translation by Paul A. Kazakov and Albert Salihov"
|
"\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\nCzech Translation by Marek Kustka"
|
||||||
"\n\nSpanish Translation by Manuel Pedre"
|
"\n\nSpanish Translation by Manuel Pedre"
|
||||||
"\n\nUkranian Translation by Oleg Rozhko"
|
"\n\nUkranian Translation by Oleg Rozhko"
|
||||||
|
"\n\nPortuguese Translation by Bruno Santos"
|
||||||
"\n\nHelp with English documentation: Torbjörn Wikström");
|
"\n\nHelp with English documentation: Torbjörn Wikström");
|
||||||
|
|
||||||
|
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
gdi.addString("", 0, "Det här programmet levereras utan någon som helst garanti. Programmet är ");
|
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,");
|
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();
|
gdi.fillDown();
|
||||||
|
|
||||||
if (oe->empty()) {
|
if (oe->empty()) {
|
||||||
|
gdi.selectTab(tabId);
|
||||||
gdi.addString("", 2, "Välkommen till MeOS");
|
gdi.addString("", 2, "Välkommen till MeOS");
|
||||||
gdi.addString("", 1, makeDash(L"#- ")+ lang.tl("ett Mycket Enkelt OrienteringsSystem")).setColor(colorDarkBlue);
|
gdi.addString("", 1, makeDash(L"#- ")+ lang.tl("ett Mycket Enkelt OrienteringsSystem")).setColor(colorDarkBlue);
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
@ -2578,7 +2591,7 @@ bool TabCompetition::loadPage(gdioutput &gdi)
|
|||||||
vector< pair<wstring, size_t> > tests;
|
vector< pair<wstring, size_t> > tests;
|
||||||
TestMeOS tm(oe, "ALL");
|
TestMeOS tm(oe, "ALL");
|
||||||
tm.getTests(tests);
|
tm.getTests(tests);
|
||||||
gdi.addItem("Tests", tests);
|
gdi.setItems("Tests", tests);
|
||||||
gdi.selectFirstItem("Tests");
|
gdi.selectFirstItem("Tests");
|
||||||
gdi.addButton("RunSpecificTest", "#Run", CompetitionCB);
|
gdi.addButton("RunSpecificTest", "#Run", CompetitionCB);
|
||||||
|
|
||||||
@ -3011,7 +3024,7 @@ void TabCompetition::getEventorCompetitions(gdioutput &gdi,
|
|||||||
eBreak.getObjectString("Date", breakDate);
|
eBreak.getObjectString("Date", breakDate);
|
||||||
|
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
convertDateYMS(breakDate, st, false);
|
convertDateYMD(breakDate, st, false);
|
||||||
__int64 time = SystemTimeToInt64TenthSecond(st) - 10;
|
__int64 time = SystemTimeToInt64TenthSecond(st) - 10;
|
||||||
breakDate = convertSystemDate(Int64TenthSecondToSystemTime(time));
|
breakDate = convertSystemDate(Int64TenthSecondToSystemTime(time));
|
||||||
|
|
||||||
@ -3319,6 +3332,7 @@ void TabCompetition::loadRunnerDB(gdioutput &gdi, int tableToShow, bool updateTa
|
|||||||
|
|
||||||
void TabCompetition::welcomeToMeOS(gdioutput &gdi) {
|
void TabCompetition::welcomeToMeOS(gdioutput &gdi) {
|
||||||
gdi.clearPage(false, false);
|
gdi.clearPage(false, false);
|
||||||
|
gdi.selectTab(tabId);
|
||||||
gdi.scaleSize(1.4*gdi.getScale());
|
gdi.scaleSize(1.4*gdi.getScale());
|
||||||
gdi.dropLine(5);
|
gdi.dropLine(5);
|
||||||
gdi.setCX(gdi.getCX() + 5*gdi.getLineHeight());
|
gdi.setCX(gdi.getCX() + 5*gdi.getLineHeight());
|
||||||
@ -3372,7 +3386,7 @@ void TabCompetition::selectTransferClasses(gdioutput &gdi, bool expand) {
|
|||||||
if (expand) {
|
if (expand) {
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
gdi.addListBox("ClassNewEntries", 200, 400, 0, L"Klasser där nyanmälningar ska överföras:", L"", true);
|
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.setSelection("ClassNewEntries", allTransfer);
|
||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
@ -3396,14 +3410,14 @@ void TabCompetition::selectTransferClasses(gdioutput &gdi, bool expand) {
|
|||||||
gdi.refresh();
|
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));
|
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||||
tc.saveMeosFeatures(*gdi, true);
|
tc.saveMeosFeatures(*gdi, true);
|
||||||
return 1;
|
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));
|
TabCompetition &tc = dynamic_cast<TabCompetition &>(*gdi->getTabs().get(TCmpTab));
|
||||||
tc.saveMeosFeatures(*gdi, false);
|
tc.saveMeosFeatures(*gdi, false);
|
||||||
@ -3653,13 +3667,16 @@ FlowOperation TabCompetition::saveEntries(gdioutput &gdi, bool removeRemoved, in
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set<int> stageFilter;
|
set<int> stageFilter;
|
||||||
string preferredIdType;
|
pair<string, string> preferredIdType;
|
||||||
|
|
||||||
FlowOperation res = checkStageFilter(gdi, filename[i], stageFilter, preferredIdType);
|
FlowOperation res = checkStageFilter(gdi, filename[i], stageFilter, preferredIdType);
|
||||||
|
|
||||||
if (res != FlowContinue)
|
if (res != FlowContinue)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
if (!preferredIdType.second.empty())
|
||||||
|
oe->setRunnerIdTypes(preferredIdType);
|
||||||
|
|
||||||
const int courseIdOffset = 0;
|
const int courseIdOffset = 0;
|
||||||
oe->importXML_EntryData(gdi, filename[i], false, removeRemoved, stageFilter,
|
oe->importXML_EntryData(gdi, filename[i], false, removeRemoved, stageFilter,
|
||||||
classOffset, courseIdOffset, preferredIdType);
|
classOffset, courseIdOffset, preferredIdType);
|
||||||
@ -3687,10 +3704,10 @@ FlowOperation TabCompetition::saveEntries(gdioutput &gdi, bool removeRemoved, in
|
|||||||
return FlowContinue;
|
return FlowContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int stageInfoCB(gdioutput *gdi, int type, void *data)
|
int stageInfoCB(gdioutput *gdi, GuiEventType type, BaseInfo *data)
|
||||||
{
|
{
|
||||||
if (type == GUI_BUTTON) {
|
if (type == GUI_BUTTON) {
|
||||||
ButtonInfo &bi = *(ButtonInfo *)data;
|
ButtonInfo &bi = dynamic_cast<ButtonInfo &>(*data);
|
||||||
bi.setExtra(1);
|
bi.setExtra(1);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -3702,12 +3719,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
const set<int>& stages,
|
const set<int>& stages,
|
||||||
const vector<string> &idProviders,
|
const vector<string> &idProviders,
|
||||||
set<int> & filter,
|
set<int> & filter,
|
||||||
string &preferredIdProvider);
|
pair<string, string>&preferredIdProvider);
|
||||||
|
|
||||||
FlowOperation TabCompetition::checkStageFilter(gdioutput & gdi,
|
FlowOperation TabCompetition::checkStageFilter(gdioutput & gdi,
|
||||||
const wstring & fname,
|
const wstring & fname,
|
||||||
set<int>& filter,
|
set<int>& filter,
|
||||||
string &preferredIdProvider) {
|
pair<string, string> &preferredIdProvider) {
|
||||||
xmlparser xml;
|
xmlparser xml;
|
||||||
xml.read(fname);
|
xml.read(fname);
|
||||||
xmlobject xo = xml.getObject("EntryList");
|
xmlobject xo = xml.getObject("EntryList");
|
||||||
@ -3728,7 +3745,7 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
const set<int>& stages,
|
const set<int>& stages,
|
||||||
const vector<string> &idProviders,
|
const vector<string> &idProviders,
|
||||||
set<int> & filter,
|
set<int> & filter,
|
||||||
string &preferredIdProvider) {
|
pair<string, string> &preferredIdProvider) {
|
||||||
auto &scanFilter = stages;
|
auto &scanFilter = stages;
|
||||||
bool stageFilter = scanFilter.size() > 1;
|
bool stageFilter = scanFilter.size() > 1;
|
||||||
bool idtype = idProviders.size() > 1;
|
bool idtype = idProviders.size() > 1;
|
||||||
@ -3748,6 +3765,7 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
gdi.addSelection("Stage", 150, 200, stageInfoCB, L"Välj etapp att importera:");
|
gdi.addSelection("Stage", 150, 200, stageInfoCB, L"Välj etapp att importera:");
|
||||||
gdi.addItem("Stage", lang.tl("Alla"), 0);
|
gdi.addItem("Stage", lang.tl("Alla"), 0);
|
||||||
|
gdi.fillDown();
|
||||||
for (int sn : scanFilter) {
|
for (int sn : scanFilter) {
|
||||||
if (sn > 0)
|
if (sn > 0)
|
||||||
gdi.addItem("Stage", lang.tl("Etapp X#" + itos(sn)), sn);
|
gdi.addItem("Stage", lang.tl("Etapp X#" + itos(sn)), sn);
|
||||||
@ -3757,14 +3775,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
gdi.selectItemByData("Stage", cn);
|
gdi.selectItemByData("Stage", cn);
|
||||||
else
|
else
|
||||||
gdi.selectItemByData("Stage", 0);
|
gdi.selectItemByData("Stage", 0);
|
||||||
|
|
||||||
|
gdi.popX();
|
||||||
|
gdi.dropLine(3.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idtype) {
|
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.addString("", 0, "Det finns multiplia Id-nummer för personer");
|
||||||
gdi.dropLine(0.5);
|
gdi.dropLine(0.5);
|
||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
@ -3773,9 +3789,12 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
for (const string &sn : idProviders) {
|
for (const string &sn : idProviders) {
|
||||||
gdi.addItem("IdType", gdi.widen(sn), i++);
|
gdi.addItem("IdType", gdi.widen(sn), i++);
|
||||||
}
|
}
|
||||||
|
gdi.popX();
|
||||||
|
gdi.dropLine(3.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needUseInput) {
|
if (needUseInput) {
|
||||||
|
gdi.fillRight();
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
gdi.addButton("OK_Stage", "OK", stageInfoCB);
|
gdi.addButton("OK_Stage", "OK", stageInfoCB);
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
@ -3817,7 +3836,14 @@ FlowOperation importFilterGUI(oEvent *oe,
|
|||||||
if (idProviders.size() > 1) {
|
if (idProviders.size() > 1) {
|
||||||
ListBoxInfo lbi;
|
ListBoxInfo lbi;
|
||||||
if (gdi.getSelectedItem("IdType", 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.addString("", boldLarge, "Exportera startlista");
|
||||||
gdi.pushY();
|
gdi.pushY();
|
||||||
gdi.addListBox("ClassNewEntries", 250, 400, 0, L"Klassval:", L"", true);
|
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.setSelection("ClassNewEntries", allTransfer);
|
||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
@ -3854,7 +3880,7 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
|||||||
|
|
||||||
vector< pair<wstring, size_t> > types;
|
vector< pair<wstring, size_t> > types;
|
||||||
ImportFormats::getExportFormats(types, false);
|
ImportFormats::getExportFormats(types, false);
|
||||||
gdi.addItem("Type", types);
|
gdi.setItems("Type", types);
|
||||||
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
||||||
gdi.selectItemByData("Type", format);
|
gdi.selectItemByData("Type", format);
|
||||||
|
|
||||||
@ -3862,7 +3888,7 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
|||||||
ImportFormats::getOECSVLanguage(typeLanguages);
|
ImportFormats::getOECSVLanguage(typeLanguages);
|
||||||
|
|
||||||
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
||||||
gdi.addItem("LanguageType", typeLanguages);
|
gdi.setItems("LanguageType", typeLanguages);
|
||||||
|
|
||||||
gdi.selectItemByData("LanguageType", ImportFormats::getDefaultCSVLanguage(*oe));
|
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,
|
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", nullptr,
|
||||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||||
|
|
||||||
|
pair<bool, bool> priSecondId = hasPersonExtId();
|
||||||
|
showSelectId(priSecondId, gdi);
|
||||||
|
|
||||||
wstring fn = oe->getPropertyString("ExpStaFilename", L"");
|
wstring fn = oe->getPropertyString("ExpStaFilename", L"");
|
||||||
gdi.addInput("Filename", fn,
|
gdi.addInput("Filename", fn,
|
||||||
48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveStartlist");
|
48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveStartlist");
|
||||||
@ -3892,13 +3921,34 @@ void TabCompetition::selectStartlistOptions(gdioutput &gdi) {
|
|||||||
gdi.refresh();
|
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) {
|
void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
||||||
gdi.clearPage(false);
|
gdi.clearPage(false);
|
||||||
gdi.addString("", boldLarge, "Export av resultat/sträcktider");
|
gdi.addString("", boldLarge, "Export av resultat/sträcktider");
|
||||||
gdi.dropLine();
|
gdi.dropLine();
|
||||||
gdi.pushY();
|
gdi.pushY();
|
||||||
gdi.addListBox("ClassNewEntries", 250, 400, 0, L"Klassval:", L"", true);
|
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.setSelection("ClassNewEntries", allTransfer);
|
||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
@ -3915,7 +3965,7 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
|||||||
vector<pair<wstring, size_t>> types;
|
vector<pair<wstring, size_t>> types;
|
||||||
ImportFormats::getExportFormats(types, true);
|
ImportFormats::getExportFormats(types, true);
|
||||||
|
|
||||||
gdi.addItem("Type", types);
|
gdi.setItems("Type", types);
|
||||||
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
ImportFormats::ExportFormats format = ImportFormats::getDefaultExportFormat(*oe);
|
||||||
gdi.selectItemByData("Type", format);
|
gdi.selectItemByData("Type", format);
|
||||||
|
|
||||||
@ -3923,7 +3973,7 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
|||||||
ImportFormats::getOECSVLanguage(typeLanguages);
|
ImportFormats::getOECSVLanguage(typeLanguages);
|
||||||
|
|
||||||
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
gdi.addSelection("LanguageType", 250, 200, CompetitionCB, L"Export language:");
|
||||||
gdi.addItem("LanguageType", typeLanguages);
|
gdi.setItems("LanguageType", typeLanguages);
|
||||||
|
|
||||||
gdi.selectItemByData("LanguageType", ImportFormats::getDefaultCSVLanguage(*oe));
|
gdi.selectItemByData("LanguageType", ImportFormats::getDefaultCSVLanguage(*oe));
|
||||||
|
|
||||||
@ -3933,7 +3983,8 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
|||||||
oe->getClassConfigurationInfo(cnf);
|
oe->getClassConfigurationInfo(cnf);
|
||||||
|
|
||||||
if (cnf.hasTeamClass() || cnf.hasQualificationFinal()) {
|
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("Totalresultat"), 1);
|
||||||
gdi.addItem("LegType", lang.tl("Alla lopp som individuella"), 3);
|
gdi.addItem("LegType", lang.tl("Alla lopp som individuella"), 3);
|
||||||
if (cnf.hasTeamClass()) {
|
if (cnf.hasTeamClass()) {
|
||||||
@ -3961,6 +4012,9 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
|||||||
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0,
|
gdi.addCheckbox("IncludeRaceNumber", "Inkludera information om flera lopp per löpare", 0,
|
||||||
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
oe->getPropertyInt("ExpWithRaceNo", true) != 0);
|
||||||
|
|
||||||
|
pair<bool, bool> priSecondId = hasPersonExtId();
|
||||||
|
showSelectId(priSecondId, gdi);
|
||||||
|
|
||||||
wstring fn = oe->getPropertyString("ExpResFilename", L"");
|
wstring fn = oe->getPropertyString("ExpResFilename", L"");
|
||||||
gdi.addInput("Filename", fn, 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveSplits");
|
gdi.addInput("Filename", fn, 48, CompetitionCB, L"Filnamn:").setExtra(L"DoSaveSplits");
|
||||||
setExportOptionsStatus(gdi, format);
|
setExportOptionsStatus(gdi, format);
|
||||||
@ -3975,6 +4029,60 @@ void TabCompetition::selectExportSplitOptions(gdioutput &gdi) {
|
|||||||
gdi.refresh();
|
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 {
|
void TabCompetition::setExportOptionsStatus(gdioutput &gdi, int format) const {
|
||||||
if (gdi.hasWidget("LegType")) {
|
if (gdi.hasWidget("LegType")) {
|
||||||
gdi.setInputStatus("LegType", format == ImportFormats::IOF30 || format == ImportFormats::IOF203); // Enable on IOF-XML
|
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
|
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);
|
gdi.setInputStatus("LanguageType", format == ImportFormats::OE);
|
||||||
|
|
||||||
if (gdi.hasWidget("Filename")) {
|
if (gdi.hasWidget("Filename")) {
|
||||||
@ -4064,10 +4183,25 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
|||||||
|
|
||||||
oe->getDI().buildDataFields(gdi, fields, 10);
|
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.fillDown();
|
||||||
gdi.popX();
|
gdi.popX();
|
||||||
gdi.dropLine(3);
|
gdi.dropLine(3);
|
||||||
|
|
||||||
|
|
||||||
gdi.addString("", 1, "Åldersgränser, reducerad anmälningsavgift");
|
gdi.addString("", 1, "Åldersgränser, reducerad anmälningsavgift");
|
||||||
gdi.addString("", 0, "Ungdomar och äldre kan få reducerad avgift");
|
gdi.addString("", 0, "Ungdomar och äldre kan få reducerad avgift");
|
||||||
gdi.dropLine(0.5);
|
gdi.dropLine(0.5);
|
||||||
@ -4199,8 +4333,21 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
|||||||
gdi.dropLine(2.5);
|
gdi.dropLine(2.5);
|
||||||
gdi.popX();
|
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.popX();
|
||||||
gdi.setCY(bottom);
|
gdi.setCY(bottom);
|
||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
@ -4208,8 +4355,133 @@ void TabCompetition::loadSettings(gdioutput &gdi) {
|
|||||||
gdi.addButton("Cancel", "Avbryt", CompetitionCB).setCancel();
|
gdi.addButton("Cancel", "Avbryt", CompetitionCB).setCancel();
|
||||||
gdi.dropLine(2);
|
gdi.dropLine(2);
|
||||||
gdi.setOnClearCb(CompetitionCB);
|
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) {
|
void TabCompetition::saveSettings(gdioutput &gdi) {
|
||||||
@ -4220,6 +4492,8 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
|||||||
fees[k] = oe->getDCI().getInt(fields[k]);
|
fees[k] = oe->getDCI().getInt(fields[k]);
|
||||||
|
|
||||||
wstring factor = oe->getDCI().getString("LateEntryFactor");
|
wstring factor = oe->getDCI().getString("LateEntryFactor");
|
||||||
|
wstring factor2 = oe->getDCI().getString("SecondEntryFactor");
|
||||||
|
bool useFactor2 = oe->getDCI().getInt("SecondEntryDate") > 0;
|
||||||
set<string> modified;
|
set<string> modified;
|
||||||
|
|
||||||
oe->getDI().saveDataFields(gdi, modified);
|
oe->getDI().saveDataFields(gdi, modified);
|
||||||
@ -4241,6 +4515,13 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
|||||||
if (factor != oe->getDCI().getString("LateEntryFactor"))
|
if (factor != oe->getDCI().getString("LateEntryFactor"))
|
||||||
changedFee = true;
|
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))
|
if (oe->getDI().setInt("UTC", gdi.isChecked("UTC") ? 1 : 0))
|
||||||
setEventorUTC(gdi.isChecked("UTC"));
|
setEventorUTC(gdi.isChecked("UTC"));
|
||||||
|
|
||||||
@ -4284,33 +4565,11 @@ void TabCompetition::saveSettings(gdioutput &gdi) {
|
|||||||
throw std::exception();
|
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);
|
oe->synchronize(true);
|
||||||
set<int> dummy;
|
set<int> dummy;
|
||||||
if (changedFee && oe->getNumClasses() > 0) {
|
if (changedFee && oe->getNumClasses() > 0) {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -45,7 +45,7 @@ class TabCompetition :
|
|||||||
|
|
||||||
// Events from Eventor
|
// Events from Eventor
|
||||||
vector<CompetitionInfo> events;
|
vector<CompetitionInfo> events;
|
||||||
list<PrefsEditor> prefsEditor;
|
shared_ptr<PrefsEditor> prefsEditor;
|
||||||
|
|
||||||
oFreeImport fi;
|
oFreeImport fi;
|
||||||
wstring entryText;
|
wstring entryText;
|
||||||
@ -83,7 +83,6 @@ class TabCompetition :
|
|||||||
vector<CompetitionInfo> &events) const;
|
vector<CompetitionInfo> &events) const;
|
||||||
|
|
||||||
void saveSettings(gdioutput &gdi);
|
void saveSettings(gdioutput &gdi);
|
||||||
void loadSettings(gdioutput &gdi);
|
|
||||||
|
|
||||||
void getEventorCmpData(gdioutput &gdi, int id,
|
void getEventorCmpData(gdioutput &gdi, int id,
|
||||||
const wstring &eventFile,
|
const wstring &eventFile,
|
||||||
@ -98,6 +97,8 @@ class TabCompetition :
|
|||||||
string eventorOrigin; // The command used when checking eventor
|
string eventorOrigin; // The command used when checking eventor
|
||||||
bool checkEventor(gdioutput &gdi, ButtonInfo &bi);
|
bool checkEventor(gdioutput &gdi, ButtonInfo &bi);
|
||||||
|
|
||||||
|
pair<bool, bool> hasPersonExtId() const;
|
||||||
|
|
||||||
bool useEventor() const;
|
bool useEventor() const;
|
||||||
bool useEventorUTC() const;
|
bool useEventorUTC() const;
|
||||||
|
|
||||||
@ -125,13 +126,18 @@ class TabCompetition :
|
|||||||
void entryForm(gdioutput &gdi, bool isGuide);
|
void entryForm(gdioutput &gdi, bool isGuide);
|
||||||
FlowOperation saveEntries(gdioutput &gdi, bool removeRemoved, int classOffset, 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 setExportOptionsStatus(gdioutput &gdi, int format) const;
|
||||||
|
|
||||||
void selectStartlistOptions(gdioutput &gdi);
|
void selectStartlistOptions(gdioutput &gdi);
|
||||||
void selectExportSplitOptions(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 entryChoice(gdioutput &gdi);
|
||||||
void createCompetition(gdioutput &gdi);
|
void createCompetition(gdioutput &gdi);
|
||||||
|
|
||||||
@ -149,6 +155,9 @@ protected:
|
|||||||
void clearCompetitionData();
|
void clearCompetitionData();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void loadSettings(gdioutput& gdi);
|
||||||
|
void showExtraFields(gdioutput& gdi, oEvent::ExtraFieldContext type);
|
||||||
|
|
||||||
const char * getTypeStr() const {return "TCmpTab";}
|
const char * getTypeStr() const {return "TCmpTab";}
|
||||||
TabType getType() const {return TCmpTab;}
|
TabType getType() const {return TCmpTab;}
|
||||||
|
|
||||||
@ -158,9 +167,9 @@ public:
|
|||||||
void setEventorServer(const wstring &server);
|
void setEventorServer(const wstring &server);
|
||||||
void setEventorUTC(bool useUTC);
|
void setEventorUTC(bool useUTC);
|
||||||
|
|
||||||
int competitionCB(gdioutput &gdi, int type, void *data);
|
int competitionCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||||
int restoreCB(gdioutput &gdi, int type, void *data);
|
int restoreCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||||
int newGuideCB(gdioutput &gdi, int type, void *data);
|
int newGuideCB(gdioutput &gdi, GuiEventType type, BaseInfo *data);
|
||||||
|
|
||||||
bool loadPage(gdioutput &gdi);
|
bool loadPage(gdioutput &gdi);
|
||||||
TabCompetition(oEvent *oe);
|
TabCompetition(oEvent *oe);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
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));
|
TabControl &tc = dynamic_cast<TabControl &>(*gdi->getTabs().get(TControlTab));
|
||||||
return tc.controlCB(*gdi, type, data);
|
return tc.controlCB(*gdi, type, data);
|
||||||
}
|
}
|
||||||
@ -278,7 +277,7 @@ void TabControl::save(gdioutput &gdi) {
|
|||||||
|
|
||||||
vector<pair<wstring, size_t>> d;
|
vector<pair<wstring, size_t>> d;
|
||||||
oe->fillControls(d, oEvent::ControlType::All);
|
oe->fillControls(d, oEvent::ControlType::All);
|
||||||
gdi.addItem("Controls", d);
|
gdi.setItems("Controls", d);
|
||||||
|
|
||||||
oe->reEvaluateAll(set<int>(), true);
|
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) {
|
if (type==GUI_BUTTON) {
|
||||||
ButtonInfo bi=*(ButtonInfo *)data;
|
ButtonInfo bi=*(ButtonInfo *)data;
|
||||||
|
|
||||||
@ -431,7 +429,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
|||||||
pc->synchronize();
|
pc->synchronize();
|
||||||
vector< pair<wstring, size_t> > d;
|
vector< pair<wstring, size_t> > d;
|
||||||
oe->fillControls(d, oEvent::ControlType::All);
|
oe->fillControls(d, oEvent::ControlType::All);
|
||||||
gdi.addItem("Controls", d);
|
gdi.setItems("Controls", d);
|
||||||
selectControl(gdi, pc);
|
selectControl(gdi, pc);
|
||||||
}
|
}
|
||||||
else if (bi.id=="Remove") {
|
else if (bi.id=="Remove") {
|
||||||
@ -449,7 +447,7 @@ int TabControl::controlCB(gdioutput &gdi, int type, void *data)
|
|||||||
|
|
||||||
vector< pair<wstring, size_t> > d;
|
vector< pair<wstring, size_t> > d;
|
||||||
oe->fillControls(d, oEvent::ControlType::All);
|
oe->fillControls(d, oEvent::ControlType::All);
|
||||||
gdi.addItem("Controls", d);
|
gdi.setItems("Controls", d);
|
||||||
selectControl(gdi, 0);
|
selectControl(gdi, 0);
|
||||||
}
|
}
|
||||||
else if (bi.id=="SwitchMode") {
|
else if (bi.id=="SwitchMode") {
|
||||||
@ -565,7 +563,7 @@ bool TabControl::loadPage(gdioutput &gdi)
|
|||||||
|
|
||||||
vector< pair<wstring, size_t> > d;
|
vector< pair<wstring, size_t> > d;
|
||||||
oe->fillControls(d, oEvent::ControlType::All);
|
oe->fillControls(d, oEvent::ControlType::All);
|
||||||
gdi.addItem("Controls", d);
|
gdi.setItems("Controls", d);
|
||||||
|
|
||||||
gdi.newColumn();
|
gdi.newColumn();
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -26,7 +26,7 @@
|
|||||||
class TabControl :
|
class TabControl :
|
||||||
public TabBase
|
public TabBase
|
||||||
{
|
{
|
||||||
int controlCB(gdioutput &gdi, int type, void *data);
|
int controlCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
|
|
||||||
bool tableMode;
|
bool tableMode;
|
||||||
int controlId;
|
int controlId;
|
||||||
@ -48,5 +48,5 @@ public:
|
|||||||
TabControl(oEvent *oe);
|
TabControl(oEvent *oe);
|
||||||
~TabControl(void);
|
~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
|
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
|
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
|
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)
|
void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
||||||
{
|
{
|
||||||
if (gdi.hasWidget("Rogaining")) {
|
if (gdi.hasWidget("Rogaining")) {
|
||||||
@ -179,9 +176,13 @@ void TabCourse::selectCourse(gdioutput &gdi, pCourse pc)
|
|||||||
if (cc) {
|
if (cc) {
|
||||||
gdi.selectItemByData("CommonControl", cc);
|
gdi.selectItemByData("CommonControl", cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
fillOtherCourses(gdi, *pc, cc != 0);
|
|
||||||
auto sh = pc->getShorterVersion();
|
auto sh = pc->getShorterVersion();
|
||||||
|
|
||||||
|
if (sh.first)
|
||||||
|
fillOtherCourses(gdi, *pc, cc != 0);
|
||||||
|
else
|
||||||
|
gdi.selectItemByData("ShortCourse", -1);
|
||||||
|
|
||||||
gdi.check("Shorten", sh.first);
|
gdi.check("Shorten", sh.first);
|
||||||
gdi.setInputStatus("ShortCourse", sh.first);
|
gdi.setInputStatus("ShortCourse", sh.first);
|
||||||
gdi.selectItemByData("ShortCourse", sh.second ? sh.second->getId() : 0);
|
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);
|
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));
|
TabCourse &tc = dynamic_cast<TabCourse &>(*gdi->getTabs().get(TCourseTab));
|
||||||
return tc.courseCB(*gdi, type, data);
|
return tc.courseCB(*gdi, type, data);
|
||||||
}
|
}
|
||||||
@ -307,7 +308,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode) {
|
|||||||
|
|
||||||
pc->synchronize();//Update SQL
|
pc->synchronize();//Update SQL
|
||||||
|
|
||||||
oe->fillCourses(gdi, "Courses");
|
oe->fillCourses(gdi, "Courses", {}, false);
|
||||||
oe->reEvaluateCourse(pc->getId(), true);
|
oe->reEvaluateCourse(pc->getId(), true);
|
||||||
|
|
||||||
if (canSwitchViewMode != 2 && changedCourse && pc->getLegLengths().size() > 2) {
|
if (canSwitchViewMode != 2 && changedCourse && pc->getLegLengths().size() > 2) {
|
||||||
@ -331,8 +332,7 @@ void TabCourse::save(gdioutput &gdi, int canSwitchViewMode) {
|
|||||||
selectCourse(gdi, pc);
|
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) {
|
if (type==GUI_BUTTON) {
|
||||||
ButtonInfo bi=*(ButtonInfo *)data;
|
ButtonInfo bi=*(ButtonInfo *)data;
|
||||||
|
|
||||||
@ -448,9 +448,13 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
|||||||
bool w = gdi.isChecked(bi.id);
|
bool w = gdi.isChecked(bi.id);
|
||||||
gdi.setInputStatus("ShortCourse", w);
|
gdi.setInputStatus("ShortCourse", w);
|
||||||
if (w) {
|
if (w) {
|
||||||
|
pCourse pc = oe->getCourse(courseId);
|
||||||
|
if (pc) {
|
||||||
|
fillOtherCourses(gdi, *pc, gdi.isChecked("WithLoops"));
|
||||||
|
}
|
||||||
ListBoxInfo clb;
|
ListBoxInfo clb;
|
||||||
if (!gdi.getSelectedItem("ShortCoursse", clb) || clb.data <= 0)
|
if (!gdi.getSelectedItem("ShortCourse", clb) || clb.data <= 0)
|
||||||
gdi.selectFirstItem("CommonControl");
|
gdi.selectFirstItem("ShortCourse");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (bi.id == "ExportCourses") {
|
else if (bi.id == "ExportCourses") {
|
||||||
@ -466,6 +470,29 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
|||||||
xml.closeOut();
|
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") {
|
else if (bi.id=="ImportCourses") {
|
||||||
setupCourseImport(gdi, CourseCB);
|
setupCourseImport(gdi, CourseCB);
|
||||||
}
|
}
|
||||||
@ -621,7 +648,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
|||||||
}
|
}
|
||||||
pCourse pc = oe->addCourse(oe->getAutoCourseName());
|
pCourse pc = oe->addCourse(oe->getAutoCourseName());
|
||||||
pc->synchronize();
|
pc->synchronize();
|
||||||
oe->fillCourses(gdi, "Courses");
|
oe->fillCourses(gdi, "Courses", {}, false);
|
||||||
selectCourse(gdi, pc);
|
selectCourse(gdi, pc);
|
||||||
gdi.setInputFocus("Name", true);
|
gdi.setInputFocus("Name", true);
|
||||||
addedCourse = true;
|
addedCourse = true;
|
||||||
@ -636,7 +663,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
|||||||
else
|
else
|
||||||
oe->removeCourse(cid);
|
oe->removeCourse(cid);
|
||||||
|
|
||||||
oe->fillCourses(gdi, "Courses");
|
oe->fillCourses(gdi, "Courses", {}, false);
|
||||||
|
|
||||||
selectCourse(gdi, 0);
|
selectCourse(gdi, 0);
|
||||||
}
|
}
|
||||||
@ -644,7 +671,7 @@ int TabCourse::courseCB(gdioutput &gdi, int type, void *data)
|
|||||||
refreshCourse(gdi.getText("Controls"), gdi);
|
refreshCourse(gdi.getText("Controls"), gdi);
|
||||||
}
|
}
|
||||||
else if (bi.id=="Cancel"){
|
else if (bi.id=="Cancel"){
|
||||||
LoadPage("Banor");
|
loadPage(gdi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (type==GUI_LISTBOX){
|
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.addListBox("Courses", 250, 360, CourseCB, L"Banor (antal kontroller)").isEdit(false).ignore(true);
|
||||||
gdi.setTabStops("Courses", 240);
|
gdi.setTabStops("Courses", 240);
|
||||||
|
|
||||||
oe->fillCourses(gdi, "Courses");
|
oe->fillCourses(gdi, "Courses", {}, false);
|
||||||
|
|
||||||
gdi.dropLine(0.7);
|
gdi.dropLine(0.7);
|
||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
@ -773,6 +800,8 @@ bool TabCourse::loadPage(gdioutput &gdi) {
|
|||||||
gdi.addButton("DrawCourse", "Lotta starttider..", CourseCB);
|
gdi.addButton("DrawCourse", "Lotta starttider..", CourseCB);
|
||||||
gdi.disableInput("DrawCourse");
|
gdi.disableInput("DrawCourse");
|
||||||
}
|
}
|
||||||
|
gdi.addButton("DeleteAll", "Radera alla...", CourseCB);
|
||||||
|
|
||||||
gdi.newColumn();
|
gdi.newColumn();
|
||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
|
|
||||||
@ -911,7 +940,7 @@ void TabCourse::runCourseImport(gdioutput& gdi, const wstring &filename,
|
|||||||
gdi.fillDown();
|
gdi.fillDown();
|
||||||
}
|
}
|
||||||
else if (filename.find(L".txt") != wstring::npos || filename.find(L".TXT") != wstring::npos) {
|
else if (filename.find(L".txt") != wstring::npos || filename.find(L".TXT") != wstring::npos) {
|
||||||
ifstream fin(filename);
|
std::ifstream fin(filename);
|
||||||
|
|
||||||
if (!fin.good())
|
if (!fin.good())
|
||||||
throw meosException(L"Cannot read " + filename);
|
throw meosException(L"Cannot read " + filename);
|
||||||
@ -970,7 +999,7 @@ void TabCourse::runCourseImport(gdioutput& gdi, const wstring &filename,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set<int> noFilter;
|
set<int> noFilter;
|
||||||
string noType;
|
pair<string, string> noType;
|
||||||
int classIdOffset = 0;
|
int classIdOffset = 0;
|
||||||
int courseIdOffset = 0;
|
int courseIdOffset = 0;
|
||||||
oe->importXML_EntryData(gdi, filename.c_str(), addToClasses, false,
|
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.clearList("CommonControl");
|
||||||
gdi.addItem("CommonControl", item);
|
gdi.setItems("CommonControl", item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabCourse::fillOtherCourses(gdioutput &gdi, oCourse &crs, bool withLoops) {
|
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]);
|
out.push_back(ac[k]);
|
||||||
}
|
}
|
||||||
|
|
||||||
gdi.clearList("ShortCourse");
|
gdi.setItems("ShortCourse", out);
|
||||||
gdi.addItem("ShortCourse", out);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabCourse::saveLegLengths(gdioutput &gdi) {
|
void TabCourse::saveLegLengths(gdioutput &gdi) {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -31,7 +31,7 @@ class TabCourse :
|
|||||||
int courseId;
|
int courseId;
|
||||||
/** canSwitchViewMode: 0 = no, 1 = yes, 2 = switching to legs */
|
/** canSwitchViewMode: 0 = no, 1 = yes, 2 = switching to legs */
|
||||||
void save(gdioutput &gdi, int canSwitchViewMode);
|
void save(gdioutput &gdi, int canSwitchViewMode);
|
||||||
int courseCB(gdioutput &gdi, int type, void *data);
|
int courseCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
bool addedCourse;
|
bool addedCourse;
|
||||||
|
|
||||||
wstring time_limit;
|
wstring time_limit;
|
||||||
@ -74,5 +74,5 @@ public:
|
|||||||
|
|
||||||
static void setupCourseImport(gdioutput& gdi, GUICALLBACK cb);
|
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);
|
||||||
};
|
};
|
||||||
|
|||||||
113
code/TabList.cpp
113
code/TabList.cpp
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -80,10 +80,9 @@ TabList::~TabList(void)
|
|||||||
liveResults.clear();
|
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)
|
if (type!=GUI_EVENT)
|
||||||
return -1;
|
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) {
|
if (type==GUI_LINK && data) {
|
||||||
TextInfo *ti = static_cast<TextInfo *>(data);
|
TextInfo *ti = dynamic_cast<TextInfo *>(data);
|
||||||
int id = ti->getExtraInt();
|
int id = ti->getExtraInt();
|
||||||
|
|
||||||
if (id != 0 && ti->id == "T" && gdi->canClear()) {
|
if (id != 0 && ti->id == "T" && gdi->canClear()) {
|
||||||
@ -123,11 +122,9 @@ int openRunnerTeamCB(gdioutput *gdi, int type, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NoStartRunnerCB(gdioutput *gdi, int type, void *data)
|
int NoStartRunnerCB(gdioutput* gdi, GuiEventType type, BaseInfo* data) {
|
||||||
{
|
if (type == GUI_LINK) {
|
||||||
if (type==GUI_LINK)
|
TextInfo* ti = dynamic_cast<TextInfo*>(data);
|
||||||
{
|
|
||||||
TextInfo *ti=(TextInfo *)data;
|
|
||||||
int id = atoi(ti->id.c_str());
|
int id = atoi(ti->id.c_str());
|
||||||
|
|
||||||
TabList& tc = dynamic_cast<TabList&>(*gdi->getTabs().get(TListTab));
|
TabList& tc = dynamic_cast<TabList&>(*gdi->getTabs().get(TListTab));
|
||||||
@ -146,8 +143,7 @@ int NoStartRunnerCB(gdioutput *gdi, int type, void *data)
|
|||||||
return 0;
|
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));
|
TabList &tc = dynamic_cast<TabList &>(*gdi->getTabs().get(TListTab));
|
||||||
|
|
||||||
return tc.listCB(*gdi, type, data);
|
return tc.listCB(*gdi, type, data);
|
||||||
@ -218,7 +214,7 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
|||||||
}
|
}
|
||||||
gdi.setRestorePoint("GeneralList");
|
gdi.setRestorePoint("GeneralList");
|
||||||
|
|
||||||
currentList.setCallback(ownWindow ? 0 : openRunnerTeamCB);
|
currentList.setCallback(ownWindow ? nullptr : openRunnerTeamCB);
|
||||||
const auto &par = currentList.getParam();
|
const auto &par = currentList.getParam();
|
||||||
int bgColor = par.bgColor;
|
int bgColor = par.bgColor;
|
||||||
|
|
||||||
@ -276,7 +272,7 @@ void TabList::generateList(gdioutput &gdi, bool forceUpdate)
|
|||||||
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(baseButtonWidth),
|
gdi.addButton(gdi.getWidth() + 20, baseY, gdi.scaleLength(baseButtonWidth),
|
||||||
"ListDesign", "Utseende...", ListsCB, "Justera visningsinställningar", true, false);
|
"ListDesign", "Utseende...", ListsCB, "Justera visningsinställningar", true, false);
|
||||||
|
|
||||||
if (!currentList.getParam().saved && !oe->isReadOnly()) {
|
if (!currentList.getParam().saved && !oe->isKiosk()) {
|
||||||
baseY += 3 + gdi.getButtonHeight();
|
baseY += 3 + gdi.getButtonHeight();
|
||||||
gdi.addButton(gdi.getWidth()+20, baseY, gdi.scaleLength(baseButtonWidth),
|
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);
|
"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;
|
int index;
|
||||||
if (type==GUI_BUTTON || type==GUI_EVENT) {
|
if (type==GUI_BUTTON || type==GUI_EVENT) {
|
||||||
BaseInfo *tbi = 0;
|
BaseInfo *tbi = 0;
|
||||||
ButtonInfo button;
|
ButtonInfo button;
|
||||||
EventInfo evnt;
|
EventInfo evnt;
|
||||||
if (type == GUI_BUTTON) {
|
if (type == GUI_BUTTON) {
|
||||||
button = *(ButtonInfo *)data;
|
button = dynamic_cast<ButtonInfo &>(*data);
|
||||||
tbi = &button;
|
tbi = &button;
|
||||||
}
|
}
|
||||||
else if (type == GUI_EVENT) {
|
else if (type == GUI_EVENT) {
|
||||||
evnt = *(EventInfo *)data;
|
evnt = dynamic_cast<EventInfo&>(*data);
|
||||||
tbi = &evnt;
|
tbi = &evnt;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -490,7 +485,7 @@ int TabList::listCB(gdioutput &gdi, int type, void *data)
|
|||||||
gdi.addListBox("Merge", 350, 250, 0, L"Slå ihop med:");
|
gdi.addListBox("Merge", 350, 250, 0, L"Slå ihop med:");
|
||||||
vector < pair<wstring, size_t> > cand;
|
vector < pair<wstring, size_t> > cand;
|
||||||
oe->getListContainer().getMergeCandidates(lbi.data, 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.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
gdi.addButton("DoMerge", "Slå ihop", ListsCB).setDefault();
|
gdi.addButton("DoMerge", "Slå ihop", ListsCB).setDefault();
|
||||||
@ -1349,7 +1344,7 @@ void TabList::enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to) {
|
|||||||
vector< pair<wstring, size_t> > ds;
|
vector< pair<wstring, size_t> > ds;
|
||||||
ds.push_back(make_pair(lang.tl("Start"), 0));
|
ds.push_back(make_pair(lang.tl("Start"), 0));
|
||||||
ds.insert(ds.end(), d.begin(), d.end());
|
ds.insert(ds.end(), d.begin(), d.end());
|
||||||
gdi.addItem("ResultSpecialFrom", ds);
|
gdi.setItems("ResultSpecialFrom", ds);
|
||||||
if (!gdi.selectItemByData("ResultSpecialFrom", oe.getPropertyInt("ControlFrom", 0))) {
|
if (!gdi.selectItemByData("ResultSpecialFrom", oe.getPropertyInt("ControlFrom", 0))) {
|
||||||
gdi.selectItemByData("ResultSpecialFrom", 0); // Fallback
|
gdi.selectItemByData("ResultSpecialFrom", 0); // Fallback
|
||||||
}
|
}
|
||||||
@ -1361,7 +1356,7 @@ void TabList::enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to) {
|
|||||||
|
|
||||||
if (to) {
|
if (to) {
|
||||||
gdi.enableInput("ResultSpecialTo");
|
gdi.enableInput("ResultSpecialTo");
|
||||||
gdi.addItem("ResultSpecialTo", d);
|
gdi.setItems("ResultSpecialTo", d);
|
||||||
gdi.addItem("ResultSpecialTo", lang.tl("Mål"), 0);
|
gdi.addItem("ResultSpecialTo", lang.tl("Mål"), 0);
|
||||||
if (!gdi.selectItemByData("ResultSpecialTo", oe.getPropertyInt("ControlTo", 0))) {
|
if (!gdi.selectItemByData("ResultSpecialTo", oe.getPropertyInt("ControlTo", 0))) {
|
||||||
gdi.selectItemByData("ResultSpecialTo", 0); // Fallback
|
gdi.selectItemByData("ResultSpecialTo", 0); // Fallback
|
||||||
@ -1380,7 +1375,7 @@ void TabList::selectGeneralList(gdioutput &gdi, EStdListType type)
|
|||||||
oe->setProperty("ListType", type);
|
oe->setProperty("ListType", type);
|
||||||
if (li.supportClasses) {
|
if (li.supportClasses) {
|
||||||
gdi.enableInput("ListSelection");
|
gdi.enableInput("ListSelection");
|
||||||
oe->fillClasses(gdi, "ListSelection", oEvent::extraNone, oEvent::filterNone);
|
oe->fillClasses(gdi, "ListSelection", {}, oEvent::extraNone, oEvent::filterNone);
|
||||||
if (lastClassSelection.empty())
|
if (lastClassSelection.empty())
|
||||||
lastClassSelection.insert(-1);
|
lastClassSelection.insert(-1);
|
||||||
gdi.setSelection("ListSelection", lastClassSelection);
|
gdi.setSelection("ListSelection", lastClassSelection);
|
||||||
@ -1405,7 +1400,7 @@ void TabList::selectGeneralList(gdioutput &gdi, EStdListType type)
|
|||||||
set<int> clsUnused;
|
set<int> clsUnused;
|
||||||
vector< pair<wstring, size_t> > out;
|
vector< pair<wstring, size_t> > out;
|
||||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||||
gdi.addItem("LegNumber", out);
|
gdi.setItems("LegNumber", out);
|
||||||
gdi.setInputStatus("LegNumber", !out.empty());
|
gdi.setInputStatus("LegNumber", !out.empty());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1655,7 +1650,7 @@ void TabList::loadRememberList(gdioutput &gdi, string targetTag) {
|
|||||||
gdi.addListBox("Merge", 350, 250);
|
gdi.addListBox("Merge", 350, 250);
|
||||||
vector < pair<wstring, size_t> > cand;
|
vector < pair<wstring, size_t> > cand;
|
||||||
oe->getListContainer().getMergeCandidates(-1, cand);
|
oe->getListContainer().getMergeCandidates(-1, cand);
|
||||||
gdi.addItem("Merge", cand);
|
gdi.setItems("Merge", cand);
|
||||||
gdi.dropLine(-0.2);
|
gdi.dropLine(-0.2);
|
||||||
gdi.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
gdi.addCheckbox("ShowTitle", "Visa rubrik mellan listorna", 0, false);
|
||||||
gdi.dropLine(0.5);
|
gdi.dropLine(0.5);
|
||||||
@ -2026,7 +2021,7 @@ void TabList::htmlSettings(gdioutput &gdi, string targetTag) {
|
|||||||
if (!htmlTemplateTag2Id.count(tmpSettingsParam.htmlTypeTag))
|
if (!htmlTemplateTag2Id.count(tmpSettingsParam.htmlTypeTag))
|
||||||
tmpSettingsParam.htmlTypeTag = "free";
|
tmpSettingsParam.htmlTypeTag = "free";
|
||||||
|
|
||||||
gdi.addItem("Format", items);
|
gdi.setItems("Format", items);
|
||||||
int tid = htmlTemplateTag2Id[tmpSettingsParam.htmlTypeTag];
|
int tid = htmlTemplateTag2Id[tmpSettingsParam.htmlTypeTag];
|
||||||
gdi.selectItemByData("Format", tid);
|
gdi.selectItemByData("Format", tid);
|
||||||
|
|
||||||
@ -2175,7 +2170,7 @@ void TabList::loadClassSettings(gdioutput &gdi, string targetTag) {
|
|||||||
|
|
||||||
oEvent::ClassFilter ct = currentList.isTeamList() ? oEvent::filterOnlyMulti : oEvent::filterNone;
|
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.setSelection("ListSelection", currentList.getParam().selection);
|
||||||
gdi.dropLine(2.5);
|
gdi.dropLine(2.5);
|
||||||
|
|
||||||
@ -2185,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("Alla"), size_t(oListParam::AgeFilter::All));
|
||||||
ages.emplace_back(lang.tl("Ungdom"), size_t(oListParam::AgeFilter::OnlyYouth));
|
ages.emplace_back(lang.tl("Ungdom"), size_t(oListParam::AgeFilter::OnlyYouth));
|
||||||
ages.emplace_back(lang.tl("Vuxna"), size_t(oListParam::AgeFilter::ExludeYouth));
|
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.selectItemByData("AgeFilter", int(currentList.getParam().ageFilter));
|
||||||
|
|
||||||
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, currentList.getParam().pageBreak).setHandler(&settingsClassSelection);
|
gdi.addCheckbox("PageBreak", "Sidbrytning mellan klasser", 0, currentList.getParam().pageBreak).setHandler(&settingsClassSelection);
|
||||||
gdi.addCheckbox("ShowHeader", "Visa rubrik", 0, currentList.getParam().showHeader).setHandler(&settingsClassSelection);
|
gdi.addCheckbox("ShowHeader", "Visa rubrik", 0, currentList.getParam().showHeader).setHandler(&settingsClassSelection);
|
||||||
|
|
||||||
gdi.dropLine(-0.3);
|
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.setInputStatus("Heading", currentList.getParam().showHeader);
|
||||||
gdi.dropLine(0.5);
|
gdi.dropLine(0.5);
|
||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
@ -2306,7 +2302,7 @@ void TabList::settingsResultList(gdioutput &gdi)
|
|||||||
}
|
}
|
||||||
sort(lists.begin() + startIx, lists.end());
|
sort(lists.begin() + startIx, lists.end());
|
||||||
|
|
||||||
gdi.addItem("ResultType", lists);
|
gdi.setItems("ResultType", lists);
|
||||||
gdi.autoGrow("ResultType");
|
gdi.autoGrow("ResultType");
|
||||||
|
|
||||||
int lastSelectedResultListOK = -1;
|
int lastSelectedResultListOK = -1;
|
||||||
@ -2616,7 +2612,7 @@ bool TabList::loadPage(gdioutput &gdi)
|
|||||||
gdi.pushX();
|
gdi.pushX();
|
||||||
|
|
||||||
gdi.addSelection("SavedInstance", 250, 200, ListsCB);
|
gdi.addSelection("SavedInstance", 250, 200, ListsCB);
|
||||||
gdi.addItem("SavedInstance", savedParams);
|
gdi.setItems("SavedInstance", savedParams);
|
||||||
gdi.autoGrow("SavedInstance");
|
gdi.autoGrow("SavedInstance");
|
||||||
gdi.selectFirstItem("SavedInstance");
|
gdi.selectFirstItem("SavedInstance");
|
||||||
gdi.addButton("ShowSaved", "Visa", ListsCB);
|
gdi.addButton("ShowSaved", "Visa", ListsCB);
|
||||||
@ -2638,7 +2634,29 @@ bool TabList::loadPage(gdioutput &gdi)
|
|||||||
gdi.fillRight();
|
gdi.fillRight();
|
||||||
gdi.pushX();
|
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);
|
gdi.addButton("InForestList", "Kvar-i-skogen", ListsCB, "tooltip:inforest").setExtra(IgnoreLimitPer);
|
||||||
|
|
||||||
if (cnf.hasIndividual()) {
|
if (cnf.hasIndividual()) {
|
||||||
gdi.addButton("PriceList", "Prisutdelningslista", ListsCB);
|
gdi.addButton("PriceList", "Prisutdelningslista", ListsCB);
|
||||||
}
|
}
|
||||||
@ -2665,25 +2683,6 @@ bool TabList::loadPage(gdioutput &gdi)
|
|||||||
gdi.addButton("GenLst:teamchanges", "Lagändringblankett", ListsCB).setExtra(AddTeamClasses | ForcePageBreak);
|
gdi.addButton("GenLst:teamchanges", "Lagändringblankett", ListsCB).setExtra(AddTeamClasses | ForcePageBreak);
|
||||||
checkWidth(gdi);
|
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) {
|
if (hasVac) {
|
||||||
gdi.addButton("GenLst:vacnacy", "Vakanser", ListsCB);
|
gdi.addButton("GenLst:vacnacy", "Vakanser", ListsCB);
|
||||||
@ -2797,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("Standard"), -10));
|
||||||
lists.insert(lists.begin(), make_pair(lang.tl("Automatisk"), -11));
|
lists.insert(lists.begin(), make_pair(lang.tl("Automatisk"), -11));
|
||||||
|
|
||||||
gdi.addItem("SplitPrintList", lists);
|
gdi.setItems("SplitPrintList", lists);
|
||||||
gdi.autoGrow("SplitPrintList");
|
gdi.autoGrow("SplitPrintList");
|
||||||
|
|
||||||
gdi.dropLine(0.8);
|
gdi.dropLine(0.8);
|
||||||
@ -2871,7 +2870,7 @@ void TabList::splitPrintSettings(oEvent &oe, gdioutput &gdi, bool setupPrinter,
|
|||||||
for (size_t j = 1; j < 8; j++)
|
for (size_t j = 1; j < 8; j++)
|
||||||
nsp.push_back(make_pair(itow(j), j));
|
nsp.push_back(make_pair(itow(j), j));
|
||||||
gdi.addSelection("NumPerPage", 90, 200, ListsCB, L"Max antal brickor per sida");
|
gdi.addSelection("NumPerPage", 90, 200, ListsCB, L"Max antal brickor per sida");
|
||||||
gdi.addItem("NumPerPage", nsp);
|
gdi.setItems("NumPerPage", nsp);
|
||||||
gdi.selectItemByData("NumPerPage", printLen);
|
gdi.selectItemByData("NumPerPage", printLen);
|
||||||
|
|
||||||
int maxWait = oe.getPropertyInt("SplitPrintMaxWait", 60);
|
int maxWait = oe.getPropertyInt("SplitPrintMaxWait", 60);
|
||||||
@ -2925,7 +2924,7 @@ void TabList::customTextLines(oEvent &oe, const char *dataField, bool withSymbol
|
|||||||
gdi.addInput(row, L"", 24);
|
gdi.addInput(row, L"", 24);
|
||||||
string key = "font"+itos(k);
|
string key = "font"+itos(k);
|
||||||
gdi.addSelection(key, 100, 100);
|
gdi.addSelection(key, 100, 100);
|
||||||
gdi.addItem(key, fonts);
|
gdi.setItems(key, fonts);
|
||||||
if (lines.size() > size_t(k)) {
|
if (lines.size() > size_t(k)) {
|
||||||
gdi.selectItemByData(key.c_str(), lines[k].second);
|
gdi.selectItemByData(key.c_str(), lines[k].second);
|
||||||
gdi.setText(row, lines[k].first);
|
gdi.setText(row, lines[k].first);
|
||||||
@ -2948,7 +2947,7 @@ void TabList::customTextLines(oEvent &oe, const char *dataField, bool withSymbol
|
|||||||
gdi.setTabStops("Symbols", 300);
|
gdi.setTabStops("Symbols", 300);
|
||||||
vector < pair<wstring, size_t>> symb;
|
vector < pair<wstring, size_t>> symb;
|
||||||
MetaList::fillSymbols(symb);
|
MetaList::fillSymbols(symb);
|
||||||
gdi.addItem("Symbols", symb);
|
gdi.setItems("Symbols", symb);
|
||||||
gdi.popX();
|
gdi.popX();
|
||||||
gdi.popY();
|
gdi.popY();
|
||||||
}
|
}
|
||||||
@ -3016,7 +3015,7 @@ void TabList::setResultOptionsFromType(gdioutput &gdi, int data) {
|
|||||||
vector< pair<wstring, size_t> > out;
|
vector< pair<wstring, size_t> > out;
|
||||||
|
|
||||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||||
gdi.addItem("LegNumber", out);
|
gdi.setItems("LegNumber", out);
|
||||||
gdi.setInputStatus("LegNumber", !out.empty());
|
gdi.setInputStatus("LegNumber", !out.empty());
|
||||||
|
|
||||||
if (!out.empty() && lastLeg >= 0)
|
if (!out.empty() && lastLeg >= 0)
|
||||||
@ -3033,7 +3032,7 @@ void TabList::setResultOptionsFromType(gdioutput &gdi, int data) {
|
|||||||
set<int> clsUnused;
|
set<int> clsUnused;
|
||||||
vector< pair<wstring, size_t> > out;
|
vector< pair<wstring, size_t> > out;
|
||||||
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
oe->fillLegNumbers(clsUnused, li.isTeamList(), true, out);
|
||||||
gdi.addItem("LegNumber", out);
|
gdi.setItems("LegNumber", out);
|
||||||
if (!out.empty() && lastLeg >= 0)
|
if (!out.empty() && lastLeg >= 0)
|
||||||
gdi.selectItemByData("LegNumber", lastLeg);
|
gdi.selectItemByData("LegNumber", lastLeg);
|
||||||
gdi.setInputStatus("LegNumber", !out.empty());
|
gdi.setInputStatus("LegNumber", !out.empty());
|
||||||
@ -3083,7 +3082,7 @@ void TabList::setResultOptionsFromType(gdioutput &gdi, int data) {
|
|||||||
if (lastFilledResultClassType != ct) {
|
if (lastFilledResultClassType != ct) {
|
||||||
lastFilledResultClassType = ct;
|
lastFilledResultClassType = ct;
|
||||||
lastResultClassSelection.insert(curSel.begin(), curSel.end());
|
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.setSelection("ListSelection", lastResultClassSelection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -126,7 +126,7 @@ public:
|
|||||||
static void enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to);
|
static void enableFromTo(oEvent &oe, gdioutput &gdi, bool from, bool to);
|
||||||
void liveResult(gdioutput &gdi, oListInfo ¤tList);
|
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 loadGeneralList(gdioutput &gdi);
|
||||||
void rebuildList(gdioutput &gdi);
|
void rebuildList(gdioutput &gdi);
|
||||||
void settingsResultList(gdioutput &gdi);
|
void settingsResultList(gdioutput &gdi);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
MeOS - Orienteering Software
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
class Table;
|
class Table;
|
||||||
struct AutoCompleteRecord;
|
struct AutoCompleteRecord;
|
||||||
|
//class RankScoreFormatter;
|
||||||
|
|
||||||
class TabRunner :
|
class TabRunner :
|
||||||
public TabBase, AutoCompleteHandler
|
public TabBase, AutoCompleteHandler
|
||||||
@ -44,6 +45,9 @@ private:
|
|||||||
|
|
||||||
void selectRunner(gdioutput &gdi, pRunner r);
|
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 numReportRow = 1;
|
||||||
int numReportColumn = 1;
|
int numReportColumn = 1;
|
||||||
bool hideReportControls = false;
|
bool hideReportControls = false;
|
||||||
@ -57,11 +61,11 @@ private:
|
|||||||
unordered_set<int> lastFilter;
|
unordered_set<int> lastFilter;
|
||||||
DWORD timeToFill;
|
DWORD timeToFill;
|
||||||
int inputId;
|
int inputId;
|
||||||
int searchCB(gdioutput &gdi, int type, void *data);
|
|
||||||
|
|
||||||
int runnerCB(gdioutput &gdi, int type, void *data);
|
int searchCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
int punchesCB(gdioutput &gdi, int type, void *data);
|
int runnerCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
int vacancyCB(gdioutput &gdi, int type, void *data);
|
int punchesCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
|
int vacancyCB(gdioutput &gdi, GuiEventType type, BaseInfo* data);
|
||||||
|
|
||||||
int currentMode;
|
int currentMode;
|
||||||
pRunner save(gdioutput &gdi, int runnerId, bool dontReloadRunners);
|
pRunner save(gdioutput &gdi, int runnerId, bool dontReloadRunners);
|
||||||
@ -84,9 +88,11 @@ private:
|
|||||||
bool savePunchTime(pRunner r, gdioutput &gdi);
|
bool savePunchTime(pRunner r, gdioutput &gdi);
|
||||||
|
|
||||||
PrinterObject splitPrinter;
|
PrinterObject splitPrinter;
|
||||||
|
//static shared_ptr<RankScoreFormatter> rankFormatter;
|
||||||
|
|
||||||
void showRunnerReport(gdioutput &gdi);
|
void showRunnerReport(gdioutput &gdi);
|
||||||
|
|
||||||
|
|
||||||
static void runnerReport(oEvent &oe, gdioutput &gdi,
|
static void runnerReport(oEvent &oe, gdioutput &gdi,
|
||||||
int id, bool compactReport,
|
int id, bool compactReport,
|
||||||
int maxWidth,
|
int maxWidth,
|
||||||
@ -122,20 +128,37 @@ private:
|
|||||||
oEvent *oe;
|
oEvent *oe;
|
||||||
oRunner &getRunner() const;
|
oRunner &getRunner() const;
|
||||||
void updateColor(gdioutput& gdi);
|
void updateColor(gdioutput& gdi);
|
||||||
public:
|
|
||||||
void init(oRunner& r);
|
void init(oRunner& r);
|
||||||
|
public:
|
||||||
|
EconomyHandler(oRunner& r) { init(r); }
|
||||||
void handle(gdioutput &gdi, BaseInfo &info, GuiEventType type);
|
void handle(gdioutput &gdi, BaseInfo &info, GuiEventType type);
|
||||||
void save(gdioutput &gdi);
|
void save(gdioutput &gdi);
|
||||||
};
|
};
|
||||||
|
|
||||||
shared_ptr<EconomyHandler> ecoHandler;
|
|
||||||
EconomyHandler *getEconomyHandler(oRunner &r);
|
|
||||||
|
|
||||||
void getAutoCompleteUnpairedCards(gdioutput &gdi, const wstring& w, vector<AutoCompleteRecord>& records);
|
void getAutoCompleteUnpairedCards(gdioutput &gdi, const wstring& w, vector<AutoCompleteRecord>& records);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void clearCompetitionData();
|
void clearCompetitionData();
|
||||||
public:
|
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);
|
static pClub extractClub(oEvent *oe, gdioutput &gdi);
|
||||||
|
|
||||||
void handleAutoComplete(gdioutput &gdi, AutoCompleteInfo &info) override;
|
void handleAutoComplete(gdioutput &gdi, AutoCompleteInfo &info) override;
|
||||||
@ -148,6 +171,10 @@ public:
|
|||||||
bool loadPage(gdioutput &gdi);
|
bool loadPage(gdioutput &gdi);
|
||||||
bool loadPage(gdioutput &gdi, int runnerId);
|
bool loadPage(gdioutput &gdi, int runnerId);
|
||||||
|
|
||||||
|
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,
|
static void generateRunnerReport(oEvent &oe,
|
||||||
gdioutput &gdi,
|
gdioutput &gdi,
|
||||||
int numX, int numY,
|
int numX, int numY,
|
||||||
@ -157,8 +184,8 @@ public:
|
|||||||
TabRunner(oEvent *oe);
|
TabRunner(oEvent *oe);
|
||||||
~TabRunner(void);
|
~TabRunner(void);
|
||||||
|
|
||||||
friend int runnerSearchCB(gdioutput *gdi, int type, void *data);
|
friend int runnerSearchCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||||
friend int RunnerCB(gdioutput *gdi, int type, void *data);
|
friend int RunnerCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||||
friend int PunchesCB(gdioutput *gdi, int type, void *data);
|
friend int PunchesCB(gdioutput *gdi, GuiEventType type, BaseInfo *data);
|
||||||
friend int VacancyCB(gdioutput *gdi, int type, void *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