Merge branch 'master' of gitorious.org:fg/fgdata
This commit is contained in:
commit
fa26992660
14 changed files with 5339 additions and 24 deletions
|
@ -150,12 +150,12 @@ var cdu = func{
|
||||||
line1l = sprintf("%3.1f", (getprop("/yasim/gross-weight-lbs")/1000));
|
line1l = sprintf("%3.1f", (getprop("/yasim/gross-weight-lbs")/1000));
|
||||||
line2l = sprintf("%3.1f", (getprop("/consumables/fuel/total-fuel-lbs")/1000));
|
line2l = sprintf("%3.1f", (getprop("/consumables/fuel/total-fuel-lbs")/1000));
|
||||||
|
|
||||||
yasim_emptyweight = line1l;
|
yasim_emptyweight = getprop("/yasim/gross-weight-lbs");
|
||||||
|
yasim_emptyweight -= getprop("/consumables/fuel/total-fuel-lbs");
|
||||||
yasim_weights = props.globals.getNode("/sim").getChildren("weight");
|
yasim_weights = props.globals.getNode("/sim").getChildren("weight");
|
||||||
for (i = 0; i < size(yasim_weights); i += 1) {
|
for (i = 0; i < size(yasim_weights); i += 1) {
|
||||||
yasim_emptyweight -= yasim_weights[i].getValue();
|
yasim_emptyweight -= yasim_weights[i].getChild("weight-lb").getValue();
|
||||||
}
|
}
|
||||||
yasim_emptyweight -= line2l;
|
|
||||||
|
|
||||||
line3l = sprintf("%3.1f", yasim_emptyweight/1000);
|
line3l = sprintf("%3.1f", yasim_emptyweight/1000);
|
||||||
}
|
}
|
||||||
|
|
2717
HLA/AviationSimNet-v3.1.xml
Normal file
2717
HLA/AviationSimNet-v3.1.xml
Normal file
File diff suppressed because it is too large
Load diff
63
HLA/av-aircraft.xml
Normal file
63
HLA/av-aircraft.xml
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<hlaConfiguration version="1">
|
||||||
|
<!-- This is the top level HLA configuration file for use with the
|
||||||
|
multiplayer federation. This serves now as first demo how to configure
|
||||||
|
flightgears hla implementation.
|
||||||
|
This toplevel file consists of startup parameters for the rti,
|
||||||
|
the federate object model to use on create and a way to map the hla
|
||||||
|
attribute values to a semantic meaning or flightgear properties.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<rti version="RTI13">
|
||||||
|
<!-- is ignored for RTI13 anyway, so the example here ... -->
|
||||||
|
<argument>rtiarg0</argument>
|
||||||
|
<argument>rtiarg1</argument>
|
||||||
|
</rti>
|
||||||
|
|
||||||
|
<!-- Contains the data layout and the object classes -->
|
||||||
|
<federateObjectModel name="AviationSimNet-v3.1.xml"/>
|
||||||
|
|
||||||
|
<!-- ??? more a AIModel Tag??? Or a generic one and decide which type should be time exact???? -->
|
||||||
|
<objects>
|
||||||
|
<objectClass type="Multiplayer" name="aircraft">
|
||||||
|
|
||||||
|
<model type="map">
|
||||||
|
<dataElement type="external" name="aircraftType"/>
|
||||||
|
<key external="A320" modelPath="Aircraft/A320/Models/a320-fb.xml"/>
|
||||||
|
<key external="B733" modelPath="Aircraft/737-300/Models/737-300.xml"/>
|
||||||
|
<key external="B742" modelPath="Aircraft/747-200/Models/boeing747-200.xml"/>
|
||||||
|
<key external="C172" modelPath="Aircraft/c172p/Models/c172p.xml"/>
|
||||||
|
<key external="C310" modelPath="Aircraft/c310/Models/c310-dpm.xml"/>
|
||||||
|
<key external="F18" modelPath="Aircraft/f18/Models/f18.xml"/>
|
||||||
|
<key external="PC7" modelPath="Aircraft/pc7/Models/pc7.xml"/>
|
||||||
|
<key external="DH8C" modelPath="Aircraft/dhc8/Models/dhc8-300Q.xml"/>
|
||||||
|
<key external="UFO" modelPath="Aircraft/ufo/Models/ufo.xml"/>
|
||||||
|
<key external="C172"/>
|
||||||
|
</model>
|
||||||
|
|
||||||
|
<!-- This is an example for the variant that would make the AviationSimNet guys visible in flightgear. -->
|
||||||
|
<!-- It does not know any rotational velocities, but the linear velocity is present. -->
|
||||||
|
<position type="geodetic">
|
||||||
|
<dataElement type="latitude-deg" name="latitude"/>
|
||||||
|
<dataElement type="longitude-deg" name="longitude"/>
|
||||||
|
<dataElement type="elevation-m" name="altitudeMSL"/>
|
||||||
|
|
||||||
|
<dataElement type="heading-deg" name="trueHeading"/>
|
||||||
|
<dataElement type="pitch-deg" name="pitch"/>
|
||||||
|
<dataElement type="roll-deg" name="roll"/>
|
||||||
|
|
||||||
|
<dataElement type="ground-track-deg" name="groundTrack"/>
|
||||||
|
<dataElement type="ground-speed-kt" name="groundSpeed"/>
|
||||||
|
<dataElement type="vertical-speed-ft-per-min" name="verticalSpeed"/>
|
||||||
|
</position>
|
||||||
|
|
||||||
|
<simTime type="attribute-sec-msec">
|
||||||
|
<dataElement type="local-simtime-sec" name="timestampSeconds"/>
|
||||||
|
<dataElement type="local-simtime-msec" name="timestampMilliseconds"/>
|
||||||
|
</simTime>
|
||||||
|
|
||||||
|
<dataElement type="property" name="tailNum" in="sim/user/callsign" out="sim/user/callsign"/>
|
||||||
|
|
||||||
|
</objectClass>
|
||||||
|
</objects>
|
||||||
|
</hlaConfiguration>
|
324
HLA/hla.dtd
Normal file
324
HLA/hla.dtd
Normal file
|
@ -0,0 +1,324 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- HLA.dtd This is version 1.0 of a DTD file to fully define the OMT in XML terms -->
|
||||||
|
<!ELEMENT objectModel (
|
||||||
|
objects?,
|
||||||
|
interactions?,
|
||||||
|
dimensions?,
|
||||||
|
time?,
|
||||||
|
tags?,
|
||||||
|
synchronizations?,
|
||||||
|
transportations?,
|
||||||
|
switches?,
|
||||||
|
dataTypes?,
|
||||||
|
notes?)>
|
||||||
|
<!ATTLIST objectModel
|
||||||
|
DTDversion CDATA #FIXED "1516.2"
|
||||||
|
name CDATA #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
type (FOM|SOM) #REQUIRED
|
||||||
|
typeNotes NMTOKENS #IMPLIED
|
||||||
|
version CDATA #IMPLIED
|
||||||
|
versionNotes NMTOKENS #IMPLIED
|
||||||
|
date CDATA #IMPLIED
|
||||||
|
dateNotes NMTOKENS #IMPLIED
|
||||||
|
purpose CDATA #IMPLIED
|
||||||
|
purposeNotes NMTOKENS #IMPLIED
|
||||||
|
appDomain CDATA #IMPLIED
|
||||||
|
appDomainNotes NMTOKENS #IMPLIED
|
||||||
|
sponsor CDATA #IMPLIED
|
||||||
|
sponsorNotes NMTOKENS #IMPLIED
|
||||||
|
pocName CDATA #IMPLIED
|
||||||
|
pocNameNotes NMTOKENS #IMPLIED
|
||||||
|
pocOrg CDATA #IMPLIED
|
||||||
|
pocOrgNotes NMTOKENS #IMPLIED
|
||||||
|
pocPhone CDATA #IMPLIED
|
||||||
|
pocPhoneNotes NMTOKENS #IMPLIED
|
||||||
|
pocEmail CDATA #IMPLIED
|
||||||
|
pocEmailNotes NMTOKENS #IMPLIED
|
||||||
|
references CDATA #IMPLIED
|
||||||
|
referencesNotes NMTOKENS #IMPLIED
|
||||||
|
other CDATA #IMPLIED
|
||||||
|
otherNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT objects (objectClass+)>
|
||||||
|
<!ELEMENT objectClass (attribute*, objectClass*)>
|
||||||
|
<!ATTLIST objectClass
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
sharing (Publish|Subscribe|PublishSubscribe|Neither) #IMPLIED
|
||||||
|
sharingNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT attribute EMPTY>
|
||||||
|
<!ATTLIST attribute
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
updateType (Static|Periodic|Conditional|NA) #IMPLIED
|
||||||
|
updateTypeNotes NMTOKENS #IMPLIED
|
||||||
|
updateCondition CDATA #IMPLIED
|
||||||
|
updateConditionNotes NMTOKENS #IMPLIED
|
||||||
|
ownership (Divest|Acquire|DivestAcquire|NoTransfer)
|
||||||
|
#IMPLIED
|
||||||
|
ownershipNotes NMTOKENS #IMPLIED
|
||||||
|
sharing (Publish|Subscribe|PublishSubscribe|Neither)
|
||||||
|
#IMPLIED
|
||||||
|
sharingNotes NMTOKENS #IMPLIED
|
||||||
|
dimensions NMTOKENS #IMPLIED
|
||||||
|
dimensionsNotes NMTOKENS #IMPLIED
|
||||||
|
transportation NMTOKEN #IMPLIED
|
||||||
|
transportationNotes NMTOKENS #IMPLIED
|
||||||
|
order (Receive|TimeStamp) #IMPLIED
|
||||||
|
orderNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT interactions (interactionClass+)>
|
||||||
|
<!ELEMENT interactionClass (parameter*, interactionClass*)>
|
||||||
|
<!ATTLIST interactionClass
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
sharing (Publish|Subscribe|PublishSubscribe|Neither) #IMPLIED
|
||||||
|
sharingNotes NMTOKENS #IMPLIED
|
||||||
|
dimensions NMTOKENS #IMPLIED
|
||||||
|
dimensionsNotes NMTOKENS #IMPLIED
|
||||||
|
transportation NMTOKEN #IMPLIED
|
||||||
|
transportationNotes NMTOKENS #IMPLIED
|
||||||
|
order (Receive|TimeStamp) #IMPLIED
|
||||||
|
orderNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT parameter EMPTY>
|
||||||
|
<!ATTLIST parameter
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
|
||||||
|
<!ELEMENT dimensions (dimension*)>
|
||||||
|
<!ELEMENT dimension EMPTY>
|
||||||
|
<!ATTLIST dimension
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
upperBound CDATA #IMPLIED
|
||||||
|
upperBoundNotes NMTOKENS #IMPLIED
|
||||||
|
normalization CDATA #IMPLIED
|
||||||
|
normalizationNotes NMTOKENS #IMPLIED
|
||||||
|
value CDATA #IMPLIED
|
||||||
|
valueNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT time (timeStamp?, lookahead?)>
|
||||||
|
<!ELEMENT timeStamp EMPTY>
|
||||||
|
<!ATTLIST timeStamp
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT lookahead EMPTY>
|
||||||
|
<!ATTLIST lookahead
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
|
||||||
|
<!ELEMENT tags (updateReflectTag?,
|
||||||
|
sendReceiveTag?,
|
||||||
|
deleteRemoveTag?,
|
||||||
|
divestitureRequestTag?,
|
||||||
|
divestitureCompletionTag?,
|
||||||
|
acquisitionRequestTag?,
|
||||||
|
requestUpdateTag?)>
|
||||||
|
<!ELEMENT updateReflectTag EMPTY>
|
||||||
|
<!ATTLIST updateReflectTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT sendReceiveTag EMPTY>
|
||||||
|
<!ATTLIST sendReceiveTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT deleteRemoveTag EMPTY>
|
||||||
|
<!ATTLIST deleteRemoveTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT divestitureRequestTag EMPTY>
|
||||||
|
<!ATTLIST divestitureRequestTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT divestitureCompletionTag EMPTY>
|
||||||
|
<!ATTLIST divestitureCompletionTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT acquisitionRequestTag EMPTY>
|
||||||
|
<!ATTLIST acquisitionRequestTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT requestUpdateTag EMPTY>
|
||||||
|
<!ATTLIST requestUpdateTag
|
||||||
|
dataType NMTOKEN #REQUIRED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
|
||||||
|
<!ELEMENT synchronizations (synchronization+)>
|
||||||
|
<!ELEMENT synchronization EMPTY>
|
||||||
|
<!ATTLIST synchronization
|
||||||
|
label NMTOKEN #REQUIRED
|
||||||
|
labelNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
capability (Register|Achieve|RegisterAchieve|NoSynch) #IMPLIED
|
||||||
|
capabilityNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
|
||||||
|
<!ELEMENT transportations (transportation+)>
|
||||||
|
<!ELEMENT transportation EMPTY>
|
||||||
|
<!ATTLIST transportation
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
description CDATA #IMPLIED
|
||||||
|
descriptionNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT switches EMPTY>
|
||||||
|
<!ATTLIST switches
|
||||||
|
autoProvide (Enabled|Disabled) #IMPLIED
|
||||||
|
autoProvideNotes NMTOKENS #IMPLIED
|
||||||
|
conveyRegionDesignatorSets (Enabled|Disabled) #IMPLIED
|
||||||
|
conveyRegionDesignatorSetsNotes NMTOKENS #IMPLIED
|
||||||
|
attributeScopeAdvisory (Enabled|Disabled) #IMPLIED
|
||||||
|
attributeScopeAdvisoryNotes NMTOKENS #IMPLIED
|
||||||
|
attributeRelevanceAdvisory (Enabled|Disabled) #IMPLIED
|
||||||
|
attributeRelevanceAdvisoryNotes NMTOKENS #IMPLIED
|
||||||
|
objectClassRelevanceAdvisory (Enabled|Disabled) #IMPLIED
|
||||||
|
objectClassRelevanceAdvisoryNotes NMTOKENS #IMPLIED
|
||||||
|
interactionRelevanceAdvisory (Enabled|Disabled) #IMPLIED
|
||||||
|
interactionRelevanceAdvisoryNotes NMTOKENS #IMPLIED
|
||||||
|
serviceReporting (Enabled|Disabled) #IMPLIED
|
||||||
|
serviceReportingNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT dataTypes (basicDataRepresentations,
|
||||||
|
simpleDataTypes?,
|
||||||
|
enumeratedDataTypes?,
|
||||||
|
arrayDataTypes?,
|
||||||
|
fixedRecordDataTypes?,
|
||||||
|
variantRecordDataTypes?)>
|
||||||
|
<!ELEMENT basicDataRepresentations (basicData+)>
|
||||||
|
<!ELEMENT basicData EMPTY>
|
||||||
|
<!ATTLIST basicData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
size CDATA #IMPLIED
|
||||||
|
sizeNotes NMTOKENS #IMPLIED
|
||||||
|
interpretation CDATA #IMPLIED
|
||||||
|
interpretationNotes NMTOKENS #IMPLIED
|
||||||
|
endian (Big|Little) #IMPLIED
|
||||||
|
endianNotes NMTOKENS #IMPLIED
|
||||||
|
encoding CDATA #IMPLIED
|
||||||
|
encodingNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT simpleDataTypes (simpleData+)>
|
||||||
|
<!ELEMENT simpleData EMPTY>
|
||||||
|
<!ATTLIST simpleData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
representation NMTOKEN #IMPLIED
|
||||||
|
representationNotes NMTOKENS #IMPLIED
|
||||||
|
units CDATA #IMPLIED
|
||||||
|
unitsNotes NMTOKENS #IMPLIED
|
||||||
|
resolution CDATA #IMPLIED
|
||||||
|
resolutionNotes NMTOKENS #IMPLIED
|
||||||
|
accuracy CDATA #IMPLIED
|
||||||
|
accuracyNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT enumeratedDataTypes (enumeratedData+)>
|
||||||
|
<!ELEMENT enumeratedData (enumerator+)>
|
||||||
|
<!ATTLIST enumeratedData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
representation NMTOKEN #IMPLIED
|
||||||
|
representationNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT enumerator EMPTY>
|
||||||
|
<!ATTLIST enumerator
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
values NMTOKENS #IMPLIED
|
||||||
|
valuesNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT arrayDataTypes (arrayData+)>
|
||||||
|
<!ELEMENT arrayData EMPTY>
|
||||||
|
<!ATTLIST arrayData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
cardinality CDATA #IMPLIED
|
||||||
|
cardinalityNotes NMTOKENS #IMPLIED
|
||||||
|
encoding CDATA #IMPLIED
|
||||||
|
encodingNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT fixedRecordDataTypes (fixedRecordData+)>
|
||||||
|
<!ELEMENT fixedRecordData (field+)>
|
||||||
|
<!ATTLIST fixedRecordData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
encoding CDATA #IMPLIED
|
||||||
|
encodingNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
||||||
|
<!ELEMENT field EMPTY>
|
||||||
|
<!ATTLIST field
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT variantRecordDataTypes (variantRecordData+)>
|
||||||
|
<!ELEMENT variantRecordData (alternative+)>
|
||||||
|
<!ATTLIST variantRecordData
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
discriminant CDATA #IMPLIED
|
||||||
|
discriminantNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
encoding CDATA #IMPLIED
|
||||||
|
encodingNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
<!ELEMENT alternative EMPTY>
|
||||||
|
<!ATTLIST alternative
|
||||||
|
enumerator CDATA #REQUIRED
|
||||||
|
enumeratorNotes NMTOKENS #IMPLIED
|
||||||
|
name NMTOKEN #IMPLIED
|
||||||
|
nameNotes NMTOKENS #IMPLIED
|
||||||
|
dataType NMTOKEN #IMPLIED
|
||||||
|
dataTypeNotes NMTOKENS #IMPLIED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED>
|
||||||
|
|
||||||
|
<!ELEMENT notes (note+)>
|
||||||
|
<!ELEMENT note EMPTY>
|
||||||
|
<!ATTLIST note
|
||||||
|
name NMTOKEN #REQUIRED
|
||||||
|
semantics CDATA #IMPLIED
|
||||||
|
semanticsNotes NMTOKENS #IMPLIED >
|
1710
HLA/mp-aircraft-fom.xml
Normal file
1710
HLA/mp-aircraft-fom.xml
Normal file
File diff suppressed because it is too large
Load diff
64
HLA/mp-aircraft.xml
Normal file
64
HLA/mp-aircraft.xml
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<hlaConfiguration version="1">
|
||||||
|
<!-- This is the top level HLA configuration file for use with the
|
||||||
|
multiplayer federation. This serves now as first demo how to configure
|
||||||
|
flightgears hla implementation.
|
||||||
|
This toplevel file consists of startup parameters for the rti,
|
||||||
|
the federate object model to use on create and a way to map the hla
|
||||||
|
attribute values to a semantic meaning or flightgear properties.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<rti version="RTI13">
|
||||||
|
<!-- is ignored for RTI13 anyway, so the example here ... -->
|
||||||
|
<argument>rtiarg0</argument>
|
||||||
|
<argument>rtiarg1</argument>
|
||||||
|
</rti>
|
||||||
|
|
||||||
|
<!-- Contains the data layout and the object classes -->
|
||||||
|
<federateObjectModel name="mp-aircraft-fom.xml"/>
|
||||||
|
|
||||||
|
<objects>
|
||||||
|
<objectClass type="Multiplayer" name="MPAircraft">
|
||||||
|
|
||||||
|
<model type="native">
|
||||||
|
<dataElement type="model-path" name="model.path"/>
|
||||||
|
</model>
|
||||||
|
|
||||||
|
<!-- Should contain all those attributes that form the position and orientation of the aircraft in total -->
|
||||||
|
<position type="cartesian">
|
||||||
|
<!-- These are the positions in the earth centered coordinate system. -->
|
||||||
|
<dataElement type="position-x" name="location.position[0]"/>
|
||||||
|
<dataElement type="position-y" name="location.position[1]"/>
|
||||||
|
<dataElement type="position-z" name="location.position[2]"/>
|
||||||
|
<!-- A very compact and lossless representation of a quaternion wrt the earth centered coordinate system. -->
|
||||||
|
<dataElement type="orientation-sin-angle-axis-x" name="location.orientation[0]"/>
|
||||||
|
<dataElement type="orientation-sin-angle-axis-y" name="location.orientation[1]"/>
|
||||||
|
<dataElement type="orientation-sin-angle-axis-z" name="location.orientation[2]"/>
|
||||||
|
|
||||||
|
<!-- The body velocities in the usual x-fwd, z-down, righthandside body coordinate system. -->
|
||||||
|
<dataElement type="linear-velocity-x" name="velocity.linear[0]"/>
|
||||||
|
<dataElement type="linear-velocity-y" name="velocity.linear[1]"/>
|
||||||
|
<dataElement type="linear-velocity-z" name="velocity.linear[2]"/>
|
||||||
|
<dataElement type="angular-velocity-x" name="velocity.angular[0]"/>
|
||||||
|
<dataElement type="angular-velocity-y" name="velocity.angular[1]"/>
|
||||||
|
<dataElement type="angular-velocity-z" name="velocity.angular[2]"/>
|
||||||
|
</position>
|
||||||
|
|
||||||
|
<simTime type="attribute">
|
||||||
|
<dataElement type="local-simtime" name="simTime"/>
|
||||||
|
</simTime>
|
||||||
|
|
||||||
|
<!-- the attribute that carries the big blob of multiplayer attributes.
|
||||||
|
This datatype is tightly coupled with the implementation for now.
|
||||||
|
It is done in this way to provide the same feature set for the
|
||||||
|
multiplayer object like the existing multiplayer protocol.
|
||||||
|
In the long term, think more about the content of this blob and
|
||||||
|
sensibly distribute that across different datatypes and attributes.
|
||||||
|
-->
|
||||||
|
<mpProperties name="mpProperties"/>
|
||||||
|
|
||||||
|
<dataElement type="property" name="model.livery" in="sim/model/livery/file" out="sim/model/livery/file"/>
|
||||||
|
|
||||||
|
</objectClass>
|
||||||
|
</objects>
|
||||||
|
</hlaConfiguration>
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
<PropertyList>
|
<PropertyList>
|
||||||
<name>Default Aircraft Hud</name>
|
<name>Default Aircraft Hud</name>
|
||||||
<enable3d>true</enable3d>
|
|
||||||
|
|
||||||
<import>
|
<import>
|
||||||
<path>Huds/Instruments/turn-bank-indicator.xml</path>
|
<path>Huds/Instruments/turn-bank-indicator.xml</path>
|
||||||
|
|
|
@ -532,6 +532,54 @@ var FileSelector = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
##
|
||||||
|
# ScreenshotSelector class (derived from Dialog class).
|
||||||
|
#
|
||||||
|
# SYNOPSIS: DirectorySelector.new(<callback>, <title>, <button> [, <pattern> [, <dir>]])
|
||||||
|
#
|
||||||
|
# callback ... callback function that gets return value as first argument
|
||||||
|
# title ... dialog title
|
||||||
|
# button ... button text (should say "Save", "Load", etc. and not just "OK")
|
||||||
|
# pattern ... array with shell pattern or nil (which is equivalent to "*")
|
||||||
|
# dir ... starting dir ($FG_ROOT if unset)
|
||||||
|
|
||||||
|
var ScreenshotSelector = {
|
||||||
|
new: func(callback, title, button, pattern = nil, dir = "") {
|
||||||
|
var name = "screenshot";
|
||||||
|
## var data = props.globals.getNode("/sim/gui/dialogs/", 1);
|
||||||
|
# for (var i = 1; 1; i += 1)
|
||||||
|
# if (data.getNode(name ~ i, 0) == nil)
|
||||||
|
# break;
|
||||||
|
data = props.globals.getNode("sim/gui/dialogs/screenshot", 1);
|
||||||
|
|
||||||
|
var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/screenshot.xml", name);
|
||||||
|
m.parents = [ScreenshotSelector, Dialog];
|
||||||
|
m.data = data;
|
||||||
|
m.set_title(title);
|
||||||
|
m.set_button(button);
|
||||||
|
m.set_directory(dir);
|
||||||
|
m.set_pattern(pattern);
|
||||||
|
m.cblistener = setlistener(data.getNode("path", 1), callback);
|
||||||
|
return m;
|
||||||
|
},
|
||||||
|
# setters only take effect after the next call to open()
|
||||||
|
set_title: func(title) { me.data.getNode("title", 1).setValue(title) },
|
||||||
|
set_button: func(button) { me.data.getNode("button", 1).setValue(button) },
|
||||||
|
set_directory: func(dir) { me.data.getNode("directory", 1).setValue(dir) },
|
||||||
|
set_pattern: func(pattern) {
|
||||||
|
me.data.removeChildren("pattern");
|
||||||
|
if (pattern != nil)
|
||||||
|
forindex (var i; pattern)
|
||||||
|
me.data.getChild("pattern", i, 1).setValue(pattern[i]);
|
||||||
|
},
|
||||||
|
del: func {
|
||||||
|
me.close();
|
||||||
|
delete(me.instance, me.name);
|
||||||
|
removelistener(me.cblistener);
|
||||||
|
me.data.remove();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Save/load flight menu functions.
|
# Save/load flight menu functions.
|
||||||
|
@ -561,6 +609,32 @@ var load_flight = func {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Save screenshot menu function.
|
||||||
|
#
|
||||||
|
var save_screenshot_sel = nil;
|
||||||
|
var save_screenshot = func {
|
||||||
|
foreach (var n; props.globals.getNode("/sim/presets").getChildren())
|
||||||
|
n.setAttribute("archive", 1);
|
||||||
|
var save = func(n) {
|
||||||
|
save_screenshot_sel.close();
|
||||||
|
setprop("/sim/paths/screenshot-dir", n.getValue());
|
||||||
|
var hide_menubar = getprop("sim/gui/dialogs/screenshot/hide-menubar");
|
||||||
|
if (hide_menubar == 1){
|
||||||
|
menu_visibility = getprop("/sim/menubar/visibility");
|
||||||
|
setprop("/sim/menubar/visibility",0);
|
||||||
|
}
|
||||||
|
settimer(func { fgcommand("screen-capture") },0);
|
||||||
|
if (hide_menubar == 1){
|
||||||
|
settimer(func { setprop("/sim/menubar/visibility",menu_visibility) },0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (save_screenshot_sel == nil)
|
||||||
|
save_screenshot_sel = ScreenshotSelector.new(save, "Save Screenshot", "Take screenshot",
|
||||||
|
, getprop("/sim/paths/screenshot-dir"),);
|
||||||
|
save_screenshot_sel.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Open property browser with given target path.
|
# Open property browser with given target path.
|
||||||
|
|
27
Nasal/weather_scenario.nas
Normal file
27
Nasal/weather_scenario.nas
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Set the global weather according to the defined
|
||||||
|
# scenario in /environment/weather-scenario
|
||||||
|
#
|
||||||
|
var initialize_weather_scenario = func {
|
||||||
|
getprop( "/environment/params/metar-updates-environment", 0 ) == 0 and return;
|
||||||
|
getprop( "/environment/realwx/enabled", 0 ) and return;
|
||||||
|
getprop( "/environment/metar/data", "" ) != "" and return;
|
||||||
|
|
||||||
|
# preset configured scenario
|
||||||
|
var scn = getprop("/environment/weather-scenario", "");
|
||||||
|
var wsn = props.globals.getNode( "/environment/weather-scenarios" );
|
||||||
|
if( wsn != nil ) {
|
||||||
|
var scenarios = wsn.getChildren("scenario");
|
||||||
|
forindex (var i; scenarios ) {
|
||||||
|
if( scenarios[i].getNode("name").getValue() == scn ) {
|
||||||
|
setprop("/environment/metar/data", scenarios[i].getNode("metar").getValue() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
|
initialize_weather_scenario();
|
||||||
|
delete(globals, "weather_scenario");
|
||||||
|
});
|
||||||
|
|
|
@ -27,16 +27,20 @@
|
||||||
<layout>hbox</layout>
|
<layout>hbox</layout>
|
||||||
<default-padding>1</default-padding>
|
<default-padding>1</default-padding>
|
||||||
|
|
||||||
<empty><stretch>true</stretch></empty>
|
<empty>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
<label>About FlightGear</label>
|
<label>About FlightGear</label>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
<empty><stretch>true</stretch></empty>
|
<empty>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
<button>
|
<button>
|
||||||
<legend></legend>
|
<legend/>
|
||||||
<key>Esc</key>
|
<key>Esc</key>
|
||||||
<pref-width>16</pref-width>
|
<pref-width>16</pref-width>
|
||||||
<pref-height>16</pref-height>
|
<pref-height>16</pref-height>
|
||||||
|
@ -48,51 +52,101 @@
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<hrule/>
|
<hrule/>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>vbox</layout>
|
||||||
|
<halign>left</halign>
|
||||||
<text>
|
<text>
|
||||||
<label>FlightGear Flight Simulator</label>
|
<halign>left</halign>
|
||||||
</text>
|
<label>MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM</label>
|
||||||
<text>
|
<format>This is FlightGear Flight Simulator V%s</format>
|
||||||
<label>MMMMMMMMMMMMM</label>
|
|
||||||
<format>Version: %s</format>
|
|
||||||
<property>/sim/version/flightgear</property>
|
<property>/sim/version/flightgear</property>
|
||||||
</text>
|
</text>
|
||||||
<text>
|
|
||||||
<label>(c) 1996-2011, the FlightGear contributors</label>
|
|
||||||
</text>
|
|
||||||
<text>
|
|
||||||
<label>http://www.flightgear.org/</label>
|
|
||||||
</text>
|
|
||||||
<text>
|
|
||||||
<label>License: GNU General Public License Version 2</label>
|
|
||||||
</text>
|
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>FlightGear is free and open source software, licensed</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>under the GNU General Public License Version 2.</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>Get new versions, add-ons, forum, wiki and more</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>from the web-site at http://www.flightgear.org/ for free.</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>Have a nice flight!</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<empty>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>Version information</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>MMMMMMMMMM</label>
|
||||||
|
<format>SimGear Version: %s</format>
|
||||||
|
<property>/sim/version/flightgear</property>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
<label>MMMMMMMMMM</label>
|
<label>MMMMMMMMMM</label>
|
||||||
<format>SimGear Version: %s</format>
|
<format>SimGear Version: %s</format>
|
||||||
<property>/sim/version/simgear</property>
|
<property>/sim/version/simgear</property>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
<label>MMMMMMMMMMMMMMMMMM</label>
|
<label>MMMMMMMMMMMMMMMMMM</label>
|
||||||
<format>OpenSceneGraph Version: %s</format>
|
<format>OpenSceneGraph Version: %s</format>
|
||||||
<property>/sim/version/openscenegraph</property>
|
<property>/sim/version/openscenegraph</property>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
<label>MMMMMMMMMMMMMMMMMM</label>
|
<label>MMMMMMMMMMMMMMMMMM</label>
|
||||||
<format>Build Id: %s</format>
|
<format>Build Id: %s</format>
|
||||||
<property>/sim/version/build-id</property>
|
<property>/sim/version/build-id</property>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
<label>MMMMMM</label>
|
<label>MMMMMM</label>
|
||||||
<format>Build Number: %d</format>
|
<format>Build Number: %d</format>
|
||||||
<property>/sim/version/build-number</property>
|
<property>/sim/version/build-number</property>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
<text>
|
<text>
|
||||||
|
<halign>left</halign>
|
||||||
<label>MMMMMM</label>
|
<label>MMMMMM</label>
|
||||||
<format>Revision: %s</format>
|
<format>Revision: %s</format>
|
||||||
<property>/sim/version/revision</property>
|
<property>/sim/version/revision</property>
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
|
<hrule/>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>(c) 1996-2011, the FlightGear contributors</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
</group>
|
||||||
|
|
||||||
<nasal>
|
<nasal>
|
||||||
<open><![CDATA[
|
<open><![CDATA[
|
||||||
]]></open>
|
]]></open>
|
||||||
|
@ -102,4 +156,3 @@
|
||||||
|
|
||||||
</nasal>
|
</nasal>
|
||||||
</PropertyList>
|
</PropertyList>
|
||||||
|
|
||||||
|
|
261
gui/dialogs/screenshot.xml
Normal file
261
gui/dialogs/screenshot.xml
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Ctrl-click on "." toggles display of hidden Unix filex (dotfiles)
|
||||||
|
Ctrl-click on ".." enters $FG_ROOT
|
||||||
|
Shift-click on ".." enters $FG_HOME
|
||||||
|
Alt-click on ".." enters current working directory
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PropertyList>
|
||||||
|
<name>screenshot</name>
|
||||||
|
<dialog-name>screenshot</dialog-name>
|
||||||
|
<layout>vbox</layout>
|
||||||
|
<resizable>true</resizable>
|
||||||
|
<pref-width>450</pref-width>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty><stretch>1</stretch></empty>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>Select directory</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<empty><stretch>1</stretch></empty>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<pref-width>16</pref-width>
|
||||||
|
<pref-height>16</pref-height>
|
||||||
|
<legend></legend>
|
||||||
|
<default>1</default>
|
||||||
|
<keynum>27</keynum>
|
||||||
|
<border>2</border>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>close()</script>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<hrule/>
|
||||||
|
|
||||||
|
<input>
|
||||||
|
<name>dir-input</name>
|
||||||
|
<pref-width>442</pref-width>
|
||||||
|
<halign>fill</halign>
|
||||||
|
<property>/sim/gui/dialogs/screenshot/directory</property>
|
||||||
|
<live>1</live>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>dir-input</object-name>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>dir_input()</script>
|
||||||
|
</binding>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
<list>
|
||||||
|
<name>list</name>
|
||||||
|
<halign>fill</halign>
|
||||||
|
<valign>fill</valign>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
<pref-height>300</pref-height>
|
||||||
|
<property>/sim/gui/dialogs/screenshot/selection</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>list</object-name>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>select()</script>
|
||||||
|
</binding>
|
||||||
|
</list>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
|
||||||
|
<checkbox>
|
||||||
|
<halign>left</halign>
|
||||||
|
<label>Hide menubar from screenshot</label>
|
||||||
|
<name>hide-menubar</name>
|
||||||
|
<property>/sim/gui/dialogs/screenshot/hide-menubar</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>hide-menubar</object-name>
|
||||||
|
</binding>
|
||||||
|
</checkbox>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>OK</legend>
|
||||||
|
<live>1</live>
|
||||||
|
<pref-width>200</pref-width>
|
||||||
|
<default>true</default>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>ok()</script>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<nasal>
|
||||||
|
<open>
|
||||||
|
var self = cmdarg();
|
||||||
|
var list = self.getNode("list");
|
||||||
|
|
||||||
|
# cloning
|
||||||
|
var dlgname = self.getNode("name").getValue();
|
||||||
|
self.getNode("input/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/directory");
|
||||||
|
self.getNode("list/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/selection");
|
||||||
|
# self.getNode("group[1]/input/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/selection");
|
||||||
|
|
||||||
|
var dlg = props.globals.getNode("/sim/gui/dialogs/" ~ dlgname, 1);
|
||||||
|
var selection = dlg.getNode("selection", 1);
|
||||||
|
var title = dlg.getNode("title", 1);
|
||||||
|
var button = dlg.getNode("button", 1);
|
||||||
|
var dir = dlg.getNode("directory", 1);
|
||||||
|
var file = dlg.getNode("file", 1);
|
||||||
|
var path = dlg.getNode("path", 1);
|
||||||
|
var dotfiles = dlg.getNode("dotfiles", 1);
|
||||||
|
dotfiles.setBoolValue(dotfiles.getValue());
|
||||||
|
|
||||||
|
var kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
|
||||||
|
var kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
|
||||||
|
var kbdalt = props.globals.getNode("/devices/status/keyboard/alt", 1);
|
||||||
|
var current = { dir : "", file : "" };
|
||||||
|
var pattern = [];
|
||||||
|
foreach (var p; dlg.getChildren("pattern"))
|
||||||
|
append(pattern, p.getValue());
|
||||||
|
|
||||||
|
var matches = func(s) {
|
||||||
|
foreach (var p; pattern)
|
||||||
|
if (string.match(s, p))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var update = func(d) {
|
||||||
|
var entries = directory(d);
|
||||||
|
if (entries == nil) # dir doesn't exist or no permissions
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
var files = [];
|
||||||
|
var dirs = [];
|
||||||
|
var hide = !dotfiles.getValue();
|
||||||
|
foreach (var e; entries) {
|
||||||
|
if (e == ".") {
|
||||||
|
append(dirs, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (e == "..") {
|
||||||
|
if (d != "/")
|
||||||
|
append(dirs, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (hide and e[0] == `.`)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var stat = io.stat(d ~ "/" ~ e);
|
||||||
|
if (stat == nil) # dead link
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (stat[11] == "dir")
|
||||||
|
append(dirs, e ~ "/");
|
||||||
|
elsif (!size(pattern) or matches(e))
|
||||||
|
append(files, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
list.removeChildren("value");
|
||||||
|
var entries = sort(dirs, cmp) ~ sort(files, cmp);
|
||||||
|
forindex (var i; entries)
|
||||||
|
list.getChild("value", i, 1).setValue(entries[i]);
|
||||||
|
|
||||||
|
dir.setValue(d);
|
||||||
|
gui.dialog_update(dlgname, "dir-input", "list");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var select = func {
|
||||||
|
var e = selection.getValue();
|
||||||
|
current.file = "";
|
||||||
|
var new = nil;
|
||||||
|
if (e == ".") {
|
||||||
|
new = current.dir;
|
||||||
|
if (kbdctrl.getValue())
|
||||||
|
dotfiles.setBoolValue(!dotfiles.getValue());
|
||||||
|
} elsif (e == "..") {
|
||||||
|
if (kbdctrl.getValue())
|
||||||
|
new = getprop("/sim/fg-root");
|
||||||
|
elsif (kbdshift.getValue())
|
||||||
|
new = getprop("/sim/fg-home");
|
||||||
|
elsif (kbdalt.getValue())
|
||||||
|
new = getprop("/sim/fg-current");
|
||||||
|
else
|
||||||
|
new = current.dir ~ "/..";
|
||||||
|
} elsif (e[size(e) - 1] == `/`) {
|
||||||
|
new = current.dir ~ "/" ~ e;
|
||||||
|
} else {
|
||||||
|
current.file = e;
|
||||||
|
gui.dialog_update(dlgname, "screenshot");
|
||||||
|
}
|
||||||
|
if (new != nil) {
|
||||||
|
var p = string.normpath(new);
|
||||||
|
if (update(p))
|
||||||
|
current.dir = p;
|
||||||
|
selection.setValue("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_input = func {
|
||||||
|
current.file = selection.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
var dir_input = func {
|
||||||
|
var p = string.normpath(dir.getValue());
|
||||||
|
if (update(p))
|
||||||
|
current.dir = p;
|
||||||
|
gui.dialog_update(dlgname, "list");
|
||||||
|
}
|
||||||
|
|
||||||
|
var close = func {
|
||||||
|
call(func { gui.Dialog.instance[dlgname].close() }, nil, var err = []);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ok = func {
|
||||||
|
dir_input();
|
||||||
|
file_input();
|
||||||
|
var p = string.normpath(current.dir ~ "/" ~ current.file);
|
||||||
|
var stat = io.stat(p);
|
||||||
|
path.setValue(stat != nil and stat[11] == "dir" ? p ~ "/" : p);
|
||||||
|
file.setValue(current.file);
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
var op = button.getValue();
|
||||||
|
if (op == nil or op == "")
|
||||||
|
op = "OK";
|
||||||
|
self.getNode("group[1]/button/legend").setValue(op);
|
||||||
|
|
||||||
|
var t = title.getValue();
|
||||||
|
if (t == nil or t == "")
|
||||||
|
t = "Select File";
|
||||||
|
self.getNode("group[0]/text/label").setValue(t);
|
||||||
|
|
||||||
|
current.dir = (var d = dir.getValue()) != nil and d != "" ? d : getprop("/sim/fg-current");
|
||||||
|
current.file = (var d = file.getValue()) != nil and d != "" ? d : "";
|
||||||
|
gui.dialog_update(dlgname, "screenshot"); ## dir-input ?
|
||||||
|
update(string.normpath(current.dir));
|
||||||
|
dir.setValue(current.dir);
|
||||||
|
</open>
|
||||||
|
</nasal>
|
||||||
|
</PropertyList>
|
|
@ -1599,6 +1599,22 @@
|
||||||
} else if( getprop( "environment/realwx/enabled" ) ) {
|
} else if( getprop( "environment/realwx/enabled" ) ) {
|
||||||
setprop( me.base ~ "/source-selection", "Live data" );
|
setprop( me.base ~ "/source-selection", "Live data" );
|
||||||
} else {
|
} else {
|
||||||
|
# preset configured scenario
|
||||||
|
var wsn = props.globals.getNode( "/environment/weather-scenarios" );
|
||||||
|
var found = 0;
|
||||||
|
if( wsn != nil ) {
|
||||||
|
var scenarios = wsn.getChildren("scenario");
|
||||||
|
forindex (var i; scenarios ) {
|
||||||
|
var metarN = scenarios[i].getNode("metar");
|
||||||
|
metarN == nil and continue;
|
||||||
|
if( metarN.getValue() == getprop("/environment/metar/data","") ) {
|
||||||
|
setprop( me.base ~ "/source-selection", scenarios[i].getNode("name").getValue() );
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( found == 0 )
|
||||||
setprop( me.base ~ "/source-selection", "Manual input" );
|
setprop( me.base ~ "/source-selection", "Manual input" );
|
||||||
}
|
}
|
||||||
setprop( me.base ~ "/metar", normalize_string(getprop("environment/metar/data")) );
|
setprop( me.base ~ "/metar", normalize_string(getprop("environment/metar/data")) );
|
||||||
|
|
|
@ -67,6 +67,13 @@
|
||||||
</script>
|
</script>
|
||||||
</binding>
|
</binding>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<label>Screesnhot (set directory)</label>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>gui.save_screenshot()</script>
|
||||||
|
</binding>
|
||||||
|
</item>
|
||||||
<!--
|
<!--
|
||||||
<item>
|
<item>
|
||||||
<label>Last snapshot</label>
|
<label>Last snapshot</label>
|
||||||
|
|
|
@ -246,7 +246,7 @@ Started September 2000 by David Megginson, david@megginson.com
|
||||||
</current-view>
|
</current-view>
|
||||||
<panel>
|
<panel>
|
||||||
<path>Aircraft/Generic/Panels/generic-vfr-panel.xml</path>
|
<path>Aircraft/Generic/Panels/generic-vfr-panel.xml</path>
|
||||||
<visibility type="bool">false</visibility>
|
<visibility type="bool" userarchive="y">false</visibility>
|
||||||
<jitter type="bool">false</jitter>
|
<jitter type="bool">false</jitter>
|
||||||
</panel>
|
</panel>
|
||||||
<panel_2>
|
<panel_2>
|
||||||
|
@ -574,8 +574,8 @@ Started September 2000 by David Megginson, david@megginson.com
|
||||||
</gui>
|
</gui>
|
||||||
|
|
||||||
<mouse>
|
<mouse>
|
||||||
<hide-cursor>true</hide-cursor>
|
<hide-cursor type="bool" userarchive="y">true</hide-cursor>
|
||||||
<cursor-timeout-sec>10.0</cursor-timeout-sec>
|
<cursor-timeout-sec type="int" userarchive="y">10.0</cursor-timeout-sec>
|
||||||
</mouse>
|
</mouse>
|
||||||
|
|
||||||
<replay>
|
<replay>
|
||||||
|
|
Loading…
Add table
Reference in a new issue