Compare commits
1 Commits
master
...
testDontMe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da8cd5992a |
@ -10,7 +10,7 @@ ColumnLimit: 0
|
|||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
ConstructorInitializerIndentWidth: 8
|
ConstructorInitializerIndentWidth: 8
|
||||||
ContinuationIndentWidth: 8
|
ContinuationIndentWidth: 8
|
||||||
ForEachMacros: [ 'for_each_dc', 'for_each_relevant_dc', 'for_each_dive', 'for_each_line' ]
|
ForEachMacros: [ 'foreach', 'for_each_dc', 'for_each_dive', 'for_each_line', 'Q_FOREACH', 'BOOST_FOREACH' ]
|
||||||
IndentFunctionDeclarationAfterType: false #personal taste, good for long methods
|
IndentFunctionDeclarationAfterType: false #personal taste, good for long methods
|
||||||
IndentWidth: 8
|
IndentWidth: 8
|
||||||
MaxEmptyLinesToKeep: 2
|
MaxEmptyLinesToKeep: 2
|
||||||
|
|||||||
2
.github/FUNDING.yml
vendored
@ -1,2 +0,0 @@
|
|||||||
github: subsurface
|
|
||||||
ko_fi: dirkhh
|
|
||||||
56
.github/actions/manage-version/action.yml
vendored
@ -1,56 +0,0 @@
|
|||||||
name: Manage the Subsurface CICD versioning
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
no-increment:
|
|
||||||
description: 'Only get the current version, do not increment it even for push events (Caution: not actually a boolean)'
|
|
||||||
default: false
|
|
||||||
nightly-builds-secret:
|
|
||||||
description: The secret to access the nightly builds repository
|
|
||||||
default: ''
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
version:
|
|
||||||
description: The long form version number
|
|
||||||
value: ${{ steps.version_number.outputs.version }}
|
|
||||||
buildnr:
|
|
||||||
description: The build number
|
|
||||||
value: ${{ steps.version_number.outputs.buildnr }}
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: atomically create or retrieve the build number and assemble release notes for a push (i.e. merging of a pull request)
|
|
||||||
if: github.event_name == 'push' && inputs.no-increment == 'false'
|
|
||||||
env:
|
|
||||||
NIGHTLY_BUILDS_SECRET: ${{ inputs.nightly-builds-secret }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ -z "$NIGHTLY_BUILDS_SECRET" ]; then
|
|
||||||
echo "Need to supply the secret for the nightly-builds repository to increment the version number, aborting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
scripts/get-atomic-buildnr.sh $GITHUB_SHA $NIGHTLY_BUILDS_SECRET "CICD-release"
|
|
||||||
|
|
||||||
- name: retrieve the current version number in all other cases
|
|
||||||
if: github.event_name != 'push' || inputs.no-increment != 'false'
|
|
||||||
env:
|
|
||||||
PULL_REQUEST_BRANCH: ${{ github.event.pull_request.head.ref }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "pull-request-$PULL_REQUEST_BRANCH" > latest-subsurface-buildnumber-extension
|
|
||||||
|
|
||||||
- name: store version number for the build
|
|
||||||
id: version_number
|
|
||||||
env:
|
|
||||||
PULL_REQUEST_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
||||||
# For a pull request we need the information from the pull request branch
|
|
||||||
# and not from the merge branch on the pull request
|
|
||||||
git checkout $PULL_REQUEST_HEAD_SHA
|
|
||||||
version=$(scripts/get-version.sh)
|
|
||||||
echo "version=$version" >> $GITHUB_OUTPUT
|
|
||||||
buildnr=$(scripts/get-version.sh 1)
|
|
||||||
echo "buildnr=$buildnr" >> $GITHUB_OUTPUT
|
|
||||||
git checkout $GITHUB_SHA
|
|
||||||
42
.github/workflows/android-dockerimage.yml
vendored
@ -1,36 +1,48 @@
|
|||||||
name: Android Docker Image CI
|
name: Android Docker Image CI
|
||||||
|
|
||||||
|
# -- disabled for now, as the resulting image is HUGE and causes our
|
||||||
|
# Android builds to fail
|
||||||
|
#on:
|
||||||
|
# push:
|
||||||
|
# paths:
|
||||||
|
# - scripts/docker/android-build-container/Dockerfile
|
||||||
|
# - .github/workflows/android-docker*
|
||||||
|
|
||||||
|
# this is here to prevent errors about not having an on: clause
|
||||||
on:
|
on:
|
||||||
push:
|
repository_dispatch:
|
||||||
branches:
|
types:
|
||||||
- master
|
- unused
|
||||||
paths:
|
|
||||||
- scripts/docker/android-build-container/**
|
|
||||||
- .github/workflows/android-dockerimage.yml
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android-build-container:
|
android-build-container:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
VERSION: ${{ '5.15.2' }} # the version numbers here is based on the Qt version, the third digit is the rev of the docker image
|
VERSION: ${{ '5.13.10' }} # the version numbers here is based on the Qt version, the third digit is the rev of the docker image
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
- name: Build the name for the docker image
|
- name: Get our pre-reqs
|
||||||
id: build_name
|
|
||||||
run: |
|
run: |
|
||||||
v=$VERSION
|
cd scripts/docker/android-build-container
|
||||||
b=$GITHUB_REF # -BRANCH suffix, unless the branch is master
|
bash download.sh
|
||||||
|
sed -ie 's/^sudo/#sudo/' setup-docker.sh
|
||||||
|
bash setup-docker.sh
|
||||||
|
|
||||||
|
- name: set env
|
||||||
|
run: |
|
||||||
|
v=${{ env.VERSION }}
|
||||||
|
b=${{ github.ref }} # -BRANCH suffix, unless the branch is master
|
||||||
b=${b/refs\/heads\//}
|
b=${b/refs\/heads\//}
|
||||||
b=${b,,} # the name needs to be all lower case
|
b=${b,,} # the name needs to be all lower case
|
||||||
if [ $b = "master" ] ; then b="" ; else b="-$b" ; fi
|
if [ $b = "master" ] ; then b="" ; else b="-$b" ; fi
|
||||||
echo "NAME=$GITHUB_REPOSITORY_OWNER/android-build${b}:${v}" >> $GITHUB_OUTPUT
|
echo "::set-env name=NAME::subsurface/android-build-container${b}:${v}"
|
||||||
|
|
||||||
- name: Build and Publish Linux Docker image to Dockerhub
|
- name: Build and Publish Linux Docker image to Dockerhub
|
||||||
uses: elgohr/Publish-Docker-Github-Action@v5
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.build_name.outputs.NAME }}
|
name: ${{ env.NAME }}
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
dockerfile: 'Dockerfile'
|
dockerfile: 'Dockerfile'
|
||||||
|
|||||||
87
.github/workflows/android.yml
vendored
@ -1,91 +1,42 @@
|
|||||||
name: Android
|
name: Android
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
buildInContainer:
|
||||||
env:
|
|
||||||
KEYSTORE_FILE: ${{ github.workspace }}/../subsurface.keystore
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: docker://subsurface/android-build:5.15.2
|
image: docker://subsurface/android-build-container:5.13.12
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: checkout sources
|
- name: checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v1
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: set up the keystore
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
|
||||||
run: |
|
|
||||||
echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > $KEYSTORE_FILE
|
|
||||||
|
|
||||||
- name: run build
|
- name: run build
|
||||||
id: build
|
|
||||||
env:
|
|
||||||
KEYSTORE_PASSWORD: pass:${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
|
|
||||||
KEYSTORE_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }}
|
|
||||||
BUILDNR: ${{ steps.version_number.outputs.buildnr }}
|
|
||||||
run: |
|
run: |
|
||||||
# this is rather awkward, but it allows us to use the preinstalled
|
|
||||||
# Android and Qt versions with relative paths
|
|
||||||
cd ..
|
cd ..
|
||||||
ln -s /android/5.15.* .
|
ln -s /android/Qt .
|
||||||
ln -s /android/build-tools .
|
ln -s /android/android-ndk-r18b .
|
||||||
ln -s /android/cmdline-tools .
|
ln -s /android/android-sdk-linux .
|
||||||
ln -s /android/ndk .
|
ls -l
|
||||||
ln -s /android/platform-tools .
|
bash -x subsurface/packaging/android/android-build-wrapper.sh
|
||||||
ln -s /android/platforms .
|
cp /__w/subsurface/subsurface-mobile-build-arm64/*mobile*/build/outputs/apk/debug/subsurface-mobile-arm64-v8a-debug.apk ${GITHUB_WORKSPACE}/Subsurface-mobile.arm64.apk
|
||||||
ln -s /android/tools .
|
cp /__w/subsurface/subsurface-mobile-build-arm/*mobile*/build/outputs/apk/debug/subsurface-mobile-armeabi-v7a-debug.apk ${GITHUB_WORKSPACE}/Subsurface-mobile.apk
|
||||||
git config --global user.email "ci@subsurface-divelog.org"
|
|
||||||
git config --global user.name "Subsurface CI"
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
|
||||||
# get the build number via curl so this works both for a pull request as well as a push
|
|
||||||
export OUTPUT_DIR="$GITHUB_WORKSPACE"
|
|
||||||
bash -x ./subsurface/packaging/android/qmake-build.sh -buildnr $BUILDNR
|
|
||||||
|
|
||||||
- name: delete the keystore
|
- name: prepare PR artifacts
|
||||||
if: github.event_name == 'push'
|
|
||||||
run: |
|
|
||||||
rm $KEYSTORE_FILE
|
|
||||||
|
|
||||||
- name: publish pull request artifacts
|
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
uses: actions/upload-artifact@v4
|
run: |
|
||||||
with:
|
mkdir -p Android-artifacts
|
||||||
name: Subsurface-Android-${{ steps.version_number.outputs.version }}
|
mv Subsurface-mobile.apk Subsurface-mobile.arm64.apk Android-artifacts
|
||||||
path: Subsurface-mobile-*.apk
|
|
||||||
|
|
||||||
# only publish a 'release' on push events (those include merging a PR)
|
- name: PR artifacts
|
||||||
- name: upload binaries
|
if: github.event_name == 'pull_request'
|
||||||
if: github.event_name == 'push'
|
uses: actions/upload-artifact@master
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
with:
|
||||||
tag_name: v${{ steps.version_number.outputs.version }}
|
name: Android-artifacts
|
||||||
repository: ${{ github.repository_owner }}/nightly-builds
|
path: Android-artifacts
|
||||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
prerelease: false
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
files: |
|
|
||||||
Subsurface-mobile-${{ steps.version_number.outputs.version }}.apk
|
|
||||||
|
|||||||
24
.github/workflows/artifact-links.yml
vendored
@ -1,24 +0,0 @@
|
|||||||
name: Add artifact links to pull request
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows: ["Ubuntu 16.04 / Qt 5.15-- for AppImage", "Mac", "Windows", "Android", "iOS"]
|
|
||||||
types: [completed]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
artifacts-url-comments:
|
|
||||||
name: Add artifact links to PR and issues
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Add artifact links to PR and issues
|
|
||||||
if: github.event.workflow_run.event == 'pull_request'
|
|
||||||
uses: tonyhallett/artifacts-url-comments@v1.1.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
prefix: "**Artifacts:**"
|
|
||||||
suffix: "_**WARNING:** Use at your own risk._"
|
|
||||||
format: name
|
|
||||||
addTo: pull
|
|
||||||
errorNoArtifacts: false
|
|
||||||
69
.github/workflows/codeql-analysis.yml
vendored
@ -1,69 +0,0 @@
|
|||||||
# Modified from the sample workflow suggested by GitHub/Semmle
|
|
||||||
#
|
|
||||||
name: "CodeQL"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
# once this works, this should be
|
|
||||||
# branches: [master]
|
|
||||||
branches: [master, codeQL]
|
|
||||||
|
|
||||||
pull_request:
|
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [master]
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * 6'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
name: Analyze
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
# Override automatic language detection by changing the below list
|
|
||||||
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
|
|
||||||
language: ['c-cpp', 'javascript-typescript']
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: get container ready for build
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y -q \
|
|
||||||
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
|
||||||
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
|
||||||
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
||||||
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
||||||
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
||||||
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \
|
|
||||||
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
|
||||||
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
|
||||||
qtquickcontrols2-5-dev xvfb libbluetooth-dev libmtp-dev
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v3
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
|
||||||
bash -e -x subsurface/scripts/build.sh -desktop -build-with-webkit
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v3
|
|
||||||
69
.github/workflows/coverity-scan.yml
vendored
@ -1,56 +1,57 @@
|
|||||||
name: Coverity Scan Linux Qt 5.9
|
name: Coverity Scan Linux Qt 5.9
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 18 * * *' # Daily at 18:00 UTC
|
- cron: '0 18 * * *' # Daily at 18:00 UTC
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
CoverityScanBuildOnUbuntu:
|
CoverityScanBuildOnBionic:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
container:
|
container:
|
||||||
image: ubuntu:22.04
|
image: ubuntu:18.04 # yes, this looks redundant, but something is messed up with their Ubuntu image that causes our builds to fail
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: checkout sources
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
- name: add build dependencies
|
- name: add build dependencies
|
||||||
run: |
|
run: |
|
||||||
apt-get update
|
apt update
|
||||||
apt-get dist-upgrade -y
|
apt install -y \
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
|
||||||
wget curl \
|
|
||||||
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
||||||
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
||||||
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
||||||
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
||||||
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
||||||
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser qtconnectivity5-dev \
|
||||||
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
||||||
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
||||||
qtquickcontrols2-5-dev libbluetooth-dev libmtp-dev
|
qtquickcontrols2-5-dev wget curl
|
||||||
|
|
||||||
- name: checkout sources
|
- name: Download Coverity Build Tool
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: configure environment
|
|
||||||
run: |
|
run: |
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
cd ..
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=Subsurface-divelog%2Fsubsurface" -O cov-analysis-linux64.tar.gz
|
||||||
|
mkdir cov-analysis-linux64
|
||||||
|
tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
|
||||||
|
|
||||||
- name: get the version information
|
- name: run build
|
||||||
id: version_number
|
run: |
|
||||||
uses: ./.github/actions/manage-version
|
cd ..
|
||||||
with:
|
export PATH=`pwd`/cov-analysis-linux64/bin:$PATH
|
||||||
no-increment: true
|
cov-build --dir cov-int bash -x subsurface/scripts/build.sh -desktop -build-with-webkit
|
||||||
|
|
||||||
- name: run coverity scan
|
- name: Submit the result to Coverity Scan
|
||||||
uses: vapier/coverity-scan-action@v1
|
run: |
|
||||||
with:
|
cd ..
|
||||||
project: Subsurface-divelog/subsurface
|
tar czvf subsurface.tgz cov-int
|
||||||
token: ${{ secrets.COVERITY_SCAN_TOKEN }}
|
curl \
|
||||||
email: glance@acc.umu.se
|
--form token=$TOKEN \
|
||||||
command: subsurface/scripts/build.sh -desktop -build-with-webkit
|
--form email=glance@acc.umu.se \
|
||||||
working-directory: ${{ github.workspace }}/..
|
--form file=@subsurface.tgz \
|
||||||
version: ${{ steps.version_number.outputs.version }}
|
--form version=$(/scripts/get-version linux) \
|
||||||
description: Automatic scan on github actions
|
--form description="Automatic scan on github actions" \
|
||||||
|
https://scan.coverity.com/builds?project=Subsurface-divelog%2Fsubsurface
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
|
||||||
|
|||||||
36
.github/workflows/documentation.yml
vendored
@ -1,36 +0,0 @@
|
|||||||
name: Documentation
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- Documentation
|
|
||||||
- .github/workflows/documentation.yml
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- Documentation
|
|
||||||
- .github/workflows/documentation.yml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
documentation:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Install Packages
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y update
|
|
||||||
sudo apt-get -y install asciidoc docbook-xml w3m
|
|
||||||
|
|
||||||
- name: Checkout Sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Process the Documentation
|
|
||||||
id: process_documentation
|
|
||||||
working-directory: Documentation
|
|
||||||
run: make
|
|
||||||
59
.github/workflows/fedora-copr-build.yml
vendored
@ -1,59 +0,0 @@
|
|||||||
name: Fedora Copr Build
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- current
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup-build:
|
|
||||||
name: Submit build to Fedora COPR
|
|
||||||
# this seems backwards, but we want to run under Fedora, but Github doesn' support that
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: fedora:latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Setup build dependencies in the Fedora container
|
|
||||||
run: |
|
|
||||||
dnf -y install @development-tools @rpm-development-tools
|
|
||||||
dnf -y install copr-cli make
|
|
||||||
|
|
||||||
- name: Check out sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: setup git
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory /__w/subsurface/subsurface
|
|
||||||
git config --global --add safe.directory /__w/subsurface/subsurface/libdivecomputer
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: Setup API token for copr-cli
|
|
||||||
env:
|
|
||||||
API_TOKEN: ${{ secrets.COPR_TOKEN }}
|
|
||||||
API_LOGIN: ${{ secrets.COPR_LOGIN }}
|
|
||||||
run: |
|
|
||||||
mkdir -p "$HOME/.config"
|
|
||||||
cp packaging/copr/config.copr "$HOME/.config/copr"
|
|
||||||
sed -i "s/API_TOKEN/$API_TOKEN/;s/API_LOGIN/$API_LOGIN/" "$HOME/.config/copr"
|
|
||||||
|
|
||||||
- name: Checkout googlemaps
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
git clone https://github.com/subsurface/googlemaps
|
|
||||||
|
|
||||||
- name: run the copr build script
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
bash -x subsurface/packaging/copr/make-package.sh $GITHUB_REF_NAME
|
|
||||||
|
|
||||||
64
.github/workflows/ios.yml
vendored
@ -1,61 +1,33 @@
|
|||||||
name: iOS
|
name: iOS
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
mobileBuild:
|
||||||
runs-on: macOS-11
|
runs-on: macOS-latest
|
||||||
steps:
|
steps:
|
||||||
- name: switch to Xcode 11
|
|
||||||
run: sudo xcode-select -s "/Applications/Xcode_11.7.app"
|
|
||||||
|
|
||||||
- name: checkout sources
|
- name: checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v1
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: setup Homebrew
|
- name: setup Homebrew
|
||||||
run: brew install autoconf automake libtool pkg-config
|
run: brew install autoconf automake libtool pkg-config
|
||||||
|
- name: set our Qt build
|
||||||
- name: checkout Qt resources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: subsurface/qt-ios
|
|
||||||
ref: main
|
|
||||||
path: qt-ios
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: build Subsurface-mobile for iOS
|
|
||||||
env:
|
|
||||||
VERSION: ${{ steps.version_number.outputs.version }}
|
|
||||||
run: |
|
run: |
|
||||||
cd ..
|
env
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
curl -L --output Qt-5.14.1-ios.tar.xz https://f002.backblazeb2.com/file/Subsurface-Travis/Qt-5.14.1-ios.tar.xz
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
mkdir -p $HOME/Qt
|
||||||
export IOS_QT=$GITHUB_WORKSPACE/qt-ios
|
xzcat Qt-5.14.1-ios.tar.xz | tar -x -C $HOME/Qt -f -
|
||||||
echo "build for simulator"
|
- name: build Subsurface-mobile for iOS
|
||||||
bash -x $GITHUB_WORKSPACE/packaging/ios/build.sh -simulator
|
run: |
|
||||||
# We need this in order to be able to access the file and publish it
|
cd packaging/ios
|
||||||
mv build-Subsurface-mobile-Qt_5_14_1_for_iOS-Release/Release-iphonesimulator/Subsurface-mobile.app $GITHUB_WORKSPACE/Subsurface-mobile-$VERSION.app
|
ln -s $HOME/Qt Qt
|
||||||
|
echo "build dependencies"
|
||||||
- name: publish artifacts
|
bash -x build.sh -simulator
|
||||||
uses: actions/upload-artifact@v4
|
echo "Subsurface-mobile for iOS"
|
||||||
with:
|
cd build-Subsurface-mobile-*for_iOS-Release
|
||||||
name: Subsurface-iOS-${{ steps.version_number.outputs.version }}
|
sed -i.bak 's/-Wall/-Wno-everything/' Makefile # make the build far less verbose
|
||||||
path: Subsurface-mobile-*.app
|
make -j2
|
||||||
|
|||||||
45
.github/workflows/linux-bionic-5.9.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
name: Ubuntu 18.04 / Qt 5.9
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildOnBionic:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
container:
|
||||||
|
image: ubuntu:18.04 # yes, this looks redundant, but something is messed up with their Ubuntu image that causes our builds to fail
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: checkout sources
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: add build dependencies
|
||||||
|
run: |
|
||||||
|
apt update
|
||||||
|
apt install -y \
|
||||||
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
||||||
|
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
||||||
|
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
||||||
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
||||||
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
||||||
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser qtconnectivity5-dev \
|
||||||
|
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
||||||
|
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
||||||
|
qtquickcontrols2-5-dev xvfb
|
||||||
|
|
||||||
|
- name: build Subsurface
|
||||||
|
run: |
|
||||||
|
cd ..
|
||||||
|
bash -x subsurface/scripts/build.sh -desktop -build-with-webkit
|
||||||
|
|
||||||
|
- name: test desktop build
|
||||||
|
run: |
|
||||||
|
# and now run the tests - with Qt 5.9 we can only run the desktop flavor
|
||||||
|
echo "------------------------------------"
|
||||||
|
echo "run tests"
|
||||||
|
cd build
|
||||||
|
xvfb-run --auto-servernum make check
|
||||||
100
.github/workflows/linux-debian-generic.yml
vendored
@ -1,100 +0,0 @@
|
|||||||
name: Generic workflow for Debian and derivatives
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
container-image:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: ${{ inputs.container-image }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: get container ready for build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "update distro and install dependencies"
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get dist-upgrade -y
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
|
||||||
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
|
||||||
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
|
||||||
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
||||||
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
||||||
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
||||||
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \
|
|
||||||
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
|
||||||
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
|
||||||
qtquickcontrols2-5-dev xvfb libbluetooth-dev libmtp-dev \
|
|
||||||
mdbtools-dev
|
|
||||||
|
|
||||||
git config --global user.email "ci@subsurface-divelog.org"
|
|
||||||
git config --global user.name "Subsurface CI"
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
|
||||||
# needs git from the previous step
|
|
||||||
- name: checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
no-increment: true
|
|
||||||
|
|
||||||
- name: build subsurface-mobile
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building mobile"
|
|
||||||
cd ..
|
|
||||||
bash -e -x subsurface/scripts/build.sh -mobile
|
|
||||||
|
|
||||||
- name: test mobile build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "running tests for mobile"
|
|
||||||
|
|
||||||
cd build-mobile/tests
|
|
||||||
# xvfb-run --auto-servernum ./TestGitStorage -v2
|
|
||||||
xvfb-run --auto-servernum make check
|
|
||||||
|
|
||||||
- name: build subsurface
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building desktop"
|
|
||||||
|
|
||||||
# now build for the desktop version (including WebKit)
|
|
||||||
cd ..
|
|
||||||
bash -e -x subsurface/scripts/build.sh -desktop -build-with-webkit
|
|
||||||
|
|
||||||
- name: test desktop build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "running tests for desktop"
|
|
||||||
cd build/tests
|
|
||||||
# xvfb-run --auto-servernum ./TestGitStorage -v2
|
|
||||||
xvfb-run --auto-servernum make check
|
|
||||||
|
|
||||||
- name: build subsurface-downloader
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building downloader"
|
|
||||||
cd ..
|
|
||||||
bash -e -x subsurface/scripts/build.sh -downloader
|
|
||||||
|
|
||||||
- name: build smtk2ssrf
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building smtk2ssrf"
|
|
||||||
|
|
||||||
# build smtk2ssrf (needs the artefacts generated by the subsurface build
|
|
||||||
cd ..
|
|
||||||
bash -e -x subsurface/scripts/smtk2ssrf-build.sh -y
|
|
||||||
19
.github/workflows/linux-debian-trixie-5.15.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
name: Debian trixie / Qt 5.15--
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
do-build-test:
|
|
||||||
uses: ./.github/workflows/linux-debian-generic.yml
|
|
||||||
with:
|
|
||||||
container-image: debian:trixie
|
|
||||||
39
.github/workflows/linux-dockerimage.yml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
name: Linux Qt 5.12 Docker Image CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- scripts/docker/trusty-qt512/Dockerfile
|
||||||
|
- .github/workflows/linux-docker*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
trusty-qt512:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
VERSION: ${{ '1.0' }} # 'official' images should have a dot-zero version
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Get our pre-reqs
|
||||||
|
run: |
|
||||||
|
cd scripts/docker/trusty-qt512
|
||||||
|
bash getpackages.sh
|
||||||
|
|
||||||
|
- name: set env
|
||||||
|
run: |
|
||||||
|
v=${{ env.VERSION }}
|
||||||
|
b=${{ github.ref }} # -BRANCH suffix, unless the branch is master
|
||||||
|
b=${b/refs\/heads\//}
|
||||||
|
b=${b,,} # the name needs to be all lower case
|
||||||
|
if [ $b = "master" ] ; then b="" ; else b="-$b" ; fi
|
||||||
|
echo "::set-env name=NAME::subsurface/trusty-qt512${b}:${v}"
|
||||||
|
|
||||||
|
- name: Build and Publish Linux Docker image to Dockerhub
|
||||||
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
|
with:
|
||||||
|
name: ${{ env.NAME }}
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
dockerfile: 'Dockerfile'
|
||||||
|
workdir: './scripts/docker/trusty-qt512/'
|
||||||
69
.github/workflows/linux-eoan-5.12.yml
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
name: Ubuntu 19.10 / Qt 5.12
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildInContainer:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ubuntu:19.10
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: checkout sources
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: get container ready for build
|
||||||
|
run: |
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "update distro and install dependencies"
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get upgrade -y
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y -q --force-yes \
|
||||||
|
autoconf automake cmake g++ git libcrypto++-dev libcurl4-gnutls-dev \
|
||||||
|
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
||||||
|
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
||||||
|
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
||||||
|
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
||||||
|
qml-module-qtquick2 qt5-default qt5-qmake qtchooser qtconnectivity5-dev \
|
||||||
|
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
||||||
|
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
||||||
|
qtquickcontrols2-5-dev xvfb
|
||||||
|
|
||||||
|
- name: build Subsurface-mobile
|
||||||
|
run: |
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "building mobile"
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
bash -e -x subsurface/scripts/build.sh -mobile
|
||||||
|
|
||||||
|
- name: test mobile build
|
||||||
|
run: |
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "running tests for mobile"
|
||||||
|
|
||||||
|
cd build-mobile
|
||||||
|
xvfb-run --auto-servernum make check
|
||||||
|
|
||||||
|
- name: build Subsurface
|
||||||
|
run: |
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "building desktop"
|
||||||
|
|
||||||
|
# now build for the desktop version (including WebKit)
|
||||||
|
cd ..
|
||||||
|
bash -e -x subsurface/scripts/build.sh -desktop -build-with-webkit
|
||||||
|
|
||||||
|
- name: test desktop build
|
||||||
|
run: |
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "running tests for desktop"
|
||||||
|
cd build
|
||||||
|
xvfb-run --auto-servernum make check
|
||||||
|
|
||||||
68
.github/workflows/linux-fedora-35-qt6.yml
vendored
@ -1,68 +0,0 @@
|
|||||||
name: Fedora 35 / Qt 6--
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: fedora:35
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: get container ready for build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "update distro and install dependencies"
|
|
||||||
|
|
||||||
dnf update -y
|
|
||||||
dnf install -y autoconf automake bluez-libs-devel cmake gcc-c++ git-core \
|
|
||||||
libcurl-devel libsqlite3x-devel libssh2-devel libtool libudev-devel \
|
|
||||||
libusbx-devel libxml2-devel libxslt-devel make \
|
|
||||||
qt6-qtbase-devel qt6-qtconnectivity-devel qt6-qtdeclarative-devel \
|
|
||||||
qt6-qtlocation-devel qt6-qtsvg-devel \
|
|
||||||
qt6-qttools-devel redhat-rpm-config \
|
|
||||||
libxkbcommon-devel qt6-qt5compat-devel \
|
|
||||||
bluez-libs-devel libgit2-devel libzip-devel libmtp-devel \
|
|
||||||
xorg-x11-server-Xvfb
|
|
||||||
|
|
||||||
- name: checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
no-increment: true
|
|
||||||
|
|
||||||
- name: build Subsurface
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building desktop"
|
|
||||||
|
|
||||||
# now build for the desktop version (without WebKit)
|
|
||||||
cd ..
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
||||||
git config --global --add safe.directory $GITHUB_WORKSPACE/libdivecomputer
|
|
||||||
git config --global --get-all safe.directory
|
|
||||||
bash -e -x subsurface/scripts/build.sh -desktop -build-with-qt6
|
|
||||||
|
|
||||||
- name: test desktop build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "running tests for desktop"
|
|
||||||
cd build/tests
|
|
||||||
xvfb-run --auto-servernum make check
|
|
||||||
|
|
||||||
80
.github/workflows/linux-snap.yml
vendored
@ -1,80 +0,0 @@
|
|||||||
name: Snap
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Snap:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
timeout-minutes: 60
|
|
||||||
steps:
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: store dummy version and build number for pull request
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
run: |
|
|
||||||
echo "100" > latest-subsurface-buildnumber
|
|
||||||
echo "CICD-pull-request" > latest-subsurface-buildnumber-extension
|
|
||||||
|
|
||||||
- name: Set up LXD
|
|
||||||
uses: canonical/setup-lxd@main
|
|
||||||
|
|
||||||
- name: Set up CCache
|
|
||||||
id: setup-ccache
|
|
||||||
run: |
|
|
||||||
sudo apt-get install ccache
|
|
||||||
mkdir -p ${HOME}/.ccache
|
|
||||||
ccache --max-size=2G
|
|
||||||
/snap/bin/lxc profile device add default ccache disk source=${HOME}/.ccache/ path=/root/.ccache
|
|
||||||
|
|
||||||
# Patch snapcraft.yaml to enable ccache
|
|
||||||
patch -p1 < .github/workflows/scripts/linux-snap.patch
|
|
||||||
|
|
||||||
# Find common base between master and HEAD to use as cache key.
|
|
||||||
git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules origin master
|
|
||||||
echo "key=$( git merge-base origin/master $GITHUB_SHA )" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: CCache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
key: ccache-${{ runner.os }}-${{ steps.setup-ccache.outputs.key }}
|
|
||||||
restore-keys: |
|
|
||||||
ccache-${{ runner.os }}-
|
|
||||||
path: ~/.ccache/**
|
|
||||||
|
|
||||||
- name: Build and verify the snap
|
|
||||||
uses: canonical/actions/build-snap@release
|
|
||||||
id: build-snap
|
|
||||||
with:
|
|
||||||
setup-lxd: false
|
|
||||||
|
|
||||||
- name: Clear CCache stats
|
|
||||||
run: ccache --show-stats --zero-stats
|
|
||||||
|
|
||||||
- name: Upload the snap
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ steps.build-snap.outputs.snap-name }}
|
|
||||||
path: ${{ steps.build-snap.outputs.snap-path }}
|
|
||||||
if-no-files-found: error
|
|
||||||
37
.github/workflows/linux-trusty-5.12.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
name: Ubuntu 14.04 / Qt 5.12 for AppImage
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildInContainer:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: docker://subsurface/trusty-qt512:1.0
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: checkout sources
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: run build
|
||||||
|
run: |
|
||||||
|
cd ..
|
||||||
|
rm -rf /install-root/include/libdivecomputer
|
||||||
|
bash -x subsurface/.github/workflows/scripts/linux-in-container-build.sh
|
||||||
|
|
||||||
|
- name: prepare PR artifacts
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
run: |
|
||||||
|
mkdir -p Linux-artifacts
|
||||||
|
mv Subsurface.AppImage Linux-artifacts
|
||||||
|
|
||||||
|
- name: PR artifacts
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
uses: actions/upload-artifact@master
|
||||||
|
with:
|
||||||
|
name: Linux-artifacts
|
||||||
|
path: Linux-artifacts
|
||||||
@ -1,149 +0,0 @@
|
|||||||
name: Ubuntu 16.04 / Qt 5.15-- for AppImage
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: ubuntu:16.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: get container ready for build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "update distro and install dependencies"
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
|
||||||
software-properties-common
|
|
||||||
|
|
||||||
add-apt-repository -y ppa:savoury1/qt-5-15
|
|
||||||
add-apt-repository -y ppa:savoury1/kde-5-80
|
|
||||||
add-apt-repository -y ppa:savoury1/gpg
|
|
||||||
add-apt-repository -y ppa:savoury1/ffmpeg4
|
|
||||||
add-apt-repository -y ppa:savoury1/vlc3
|
|
||||||
add-apt-repository -y ppa:savoury1/gcc-9
|
|
||||||
add-apt-repository -y ppa:savoury1/display
|
|
||||||
add-apt-repository -y ppa:savoury1/apt-xenial
|
|
||||||
add-apt-repository -y ppa:savoury1/gtk-xenial
|
|
||||||
add-apt-repository -y ppa:savoury1/qt-xenial
|
|
||||||
add-apt-repository -y ppa:savoury1/kde-xenial
|
|
||||||
add-apt-repository -y ppa:savoury1/backports
|
|
||||||
add-apt-repository -y ppa:savoury1/build-tools
|
|
||||||
apt-get update
|
|
||||||
apt-get dist-upgrade -y
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
|
|
||||||
autoconf automake cmake g++ g++-9 git libcrypto++-dev libcurl4-gnutls-dev \
|
|
||||||
libgit2-dev libqt5qml5 libqt5quick5 libqt5svg5-dev \
|
|
||||||
libqt5webkit5-dev libsqlite3-dev libssh2-1-dev libssl-dev libssl-dev \
|
|
||||||
libtool libusb-1.0-0-dev libxml2-dev libxslt1-dev libzip-dev make \
|
|
||||||
pkg-config qml-module-qtlocation qml-module-qtpositioning \
|
|
||||||
qml-module-qtquick2 qt5-qmake qtchooser qtconnectivity5-dev \
|
|
||||||
qtdeclarative5-dev qtdeclarative5-private-dev qtlocation5-dev \
|
|
||||||
qtpositioning5-dev qtscript5-dev qttools5-dev qttools5-dev-tools \
|
|
||||||
qtquickcontrols2-5-dev xvfb libbluetooth-dev libmtp-dev liblzma-dev \
|
|
||||||
curl
|
|
||||||
|
|
||||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 \
|
|
||||||
--slave /usr/bin/g++ g++ /usr/bin/g++-9
|
|
||||||
|
|
||||||
- name: checkout sources
|
|
||||||
# We cannot update this as glibc on 16.04 is too old for node 20.
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: build Subsurface
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "building desktop"
|
|
||||||
|
|
||||||
# now build the appimage
|
|
||||||
cd ..
|
|
||||||
bash -e -x subsurface/scripts/build.sh -desktop -create-appdir -build-with-webkit
|
|
||||||
|
|
||||||
- name: test desktop build
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "running tests for desktop"
|
|
||||||
cd build/tests
|
|
||||||
# xvfb-run --auto-servernum ./TestGitStorage -v2
|
|
||||||
xvfb-run --auto-servernum make check
|
|
||||||
|
|
||||||
- name: build appimage
|
|
||||||
env:
|
|
||||||
VERSION: ${{ steps.version_number.outputs.version }}
|
|
||||||
run: |
|
|
||||||
echo "--------------------------------------------------------------"
|
|
||||||
echo "assembling AppImage"
|
|
||||||
|
|
||||||
export QT_PLUGIN_PATH=$QT_ROOT/plugins
|
|
||||||
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
|
||||||
export QT_DEBUG_PLUGINS=1
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# set up the appdir
|
|
||||||
mkdir -p appdir/usr/plugins/
|
|
||||||
|
|
||||||
# mv googlemaps plugins into place
|
|
||||||
mv appdir/usr/usr/lib/x86_64-linux-gnu/qt5/plugins/* appdir/usr/plugins # the usr/usr is not a typo, that's where it ends up
|
|
||||||
rm -rf appdir/usr/home/ appdir/usr/include/ appdir/usr/share/man/ # No need to ship developer and man files as part of the AppImage
|
|
||||||
rm -rf appdir/usr/usr appdir/usr/lib/x86_64-linux-gnu/cmake appdir/usr/lib/pkgconfig
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 appdir/usr/lib/
|
|
||||||
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 appdir/usr/lib/
|
|
||||||
|
|
||||||
# get the linuxdeployqt tool and run it to collect the libraries
|
|
||||||
curl -L -O "https://github.com/probonopd/linuxdeployqt/releases/download/7/linuxdeployqt-7-x86_64.AppImage"
|
|
||||||
chmod a+x linuxdeployqt*.AppImage
|
|
||||||
unset QTDIR
|
|
||||||
unset QT_PLUGIN_PATH
|
|
||||||
unset LD_LIBRARY_PATH
|
|
||||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -bundle-non-qt-libs -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
|
||||||
|
|
||||||
# create the AppImage
|
|
||||||
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -appimage -qmldir=./subsurface/stats -qmldir=./subsurface/map-widget/ -verbose=2
|
|
||||||
|
|
||||||
# copy AppImage to the calling VM
|
|
||||||
# with GitHub Actions the $GITHUB_WORKSPACE directory is the current working directory at the start of a step
|
|
||||||
cp Subsurface*.AppImage* $GITHUB_WORKSPACE/Subsurface-$VERSION.AppImage
|
|
||||||
|
|
||||||
- name: PR artifacts
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
# We cannot update this as glibc on 16.04 is too old for node 20.
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: Subsurface-Linux-AppImage-${{ steps.version_number.outputs.version }}
|
|
||||||
path: Subsurface-*.AppImage
|
|
||||||
compression-level: 0
|
|
||||||
|
|
||||||
# only publish a 'release' on push events (those include merging a PR)
|
|
||||||
- name: upload binaries
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
tag_name: v${{ steps.version_number.outputs.version }}
|
|
||||||
repository: ${{ github.repository_owner }}/nightly-builds
|
|
||||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
prerelease: false
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
files: |
|
|
||||||
./Subsurface-*.AppImage
|
|
||||||
19
.github/workflows/linux-ubuntu-20.04-5.15.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
name: Ubuntu 20.04 / Qt 5.12--
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
do-build-test:
|
|
||||||
uses: ./.github/workflows/linux-debian-generic.yml
|
|
||||||
with:
|
|
||||||
container-image: ubuntu:20.04
|
|
||||||
19
.github/workflows/linux-ubuntu-22.04-5.15.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
name: Ubuntu 22.04 / Qt 5.15--
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
do-build-test:
|
|
||||||
uses: ./.github/workflows/linux-debian-generic.yml
|
|
||||||
with:
|
|
||||||
container-image: ubuntu:22.04
|
|
||||||
19
.github/workflows/linux-ubuntu-24.04-5.15.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
name: Ubuntu 24.04 / Qt 5.15--
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
do-build-test:
|
|
||||||
uses: ./.github/workflows/linux-debian-generic.yml
|
|
||||||
with:
|
|
||||||
container-image: ubuntu:24.04
|
|
||||||
105
.github/workflows/mac.yml
vendored
@ -1,80 +1,69 @@
|
|||||||
name: Mac
|
name: Mac
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
desktopBuild:
|
||||||
runs-on: macOS-11
|
runs-on: macOS-latest
|
||||||
steps:
|
steps:
|
||||||
- name: checkout sources
|
- name: checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v1
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: setup Homebrew
|
- name: setup Homebrew
|
||||||
run: brew install hidapi libxslt libjpg libmtp create-dmg confuse
|
run: brew install autoconf automake libtool xz hidapi libusb libxml2 libxslt libzip openssl pkg-config libgit2 libssh2 libjpg libpng
|
||||||
|
- name: set our Qt build
|
||||||
- name: checkout Qt resources
|
run: |
|
||||||
uses: actions/checkout@v4
|
mkdir -p Qt/5.13.0
|
||||||
with:
|
curl --output Qt-5.13.0-mac.tar.xz https://f002.backblazeb2.com/file/Subsurface-Travis/Qt-5.13.0-mac.tar.xz
|
||||||
repository: subsurface/qt-mac
|
tar -xJ -C Qt/5.13.0 -f Qt-5.13.0-mac.tar.xz
|
||||||
ref: main
|
- name: build Subsurface-mobile
|
||||||
path: qt-mac
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: build Subsurface
|
|
||||||
id: build
|
|
||||||
run: |
|
run: |
|
||||||
cd ${GITHUB_WORKSPACE}/..
|
cd ${GITHUB_WORKSPACE}/..
|
||||||
export QT_ROOT=${GITHUB_WORKSPACE}/qt-mac/Qt5.15.13
|
export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
|
||||||
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
export PATH=$QT_ROOT/bin:$PATH
|
export PATH=$QT_ROOT/bin:$PATH
|
||||||
export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
|
export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
|
||||||
|
DIR=$(pwd)
|
||||||
|
|
||||||
# now setup Subsurface with WebKit and build the dependencies, using the generic build script
|
# first build Subsurface-mobile to ensure this didn't get broken
|
||||||
bash -e -x ./subsurface/scripts/build.sh -desktop -build-with-webkit -release -build-deps -ftdi -prep-only
|
bash -e -x ./subsurface/scripts/build.sh -mobile
|
||||||
|
|
||||||
echo "finished initial cmake setup of Subsurface - next build the package"
|
- name: test mobile build
|
||||||
cd subsurface/build
|
run: |
|
||||||
echo "run the packaging script"
|
echo "------------------------------------"
|
||||||
bash -e -x ../packaging/macosx/make-package.sh | tee mp.log 2>&1
|
echo "run tests for mobile build"
|
||||||
IMG=$(grep ^created: mp.log | tail -1 | cut -b10-)
|
export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
|
||||||
echo "Created $IMG"
|
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
echo "dmg=$IMG" >> $GITHUB_OUTPUT
|
cd ${GITHUB_WORKSPACE}/build-mobile/tests
|
||||||
|
make check
|
||||||
|
|
||||||
- name: publish pull request artifacts
|
- name: build Subsurface
|
||||||
if: github.event_name == 'pull_request'
|
run: |
|
||||||
uses: actions/upload-artifact@v4
|
cd ${GITHUB_WORKSPACE}/..
|
||||||
with:
|
export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
|
||||||
name: Subsurface-MacOS-${{ steps.version_number.outputs.version }}
|
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
path: ${{ steps.build.outputs.dmg }}
|
export PATH=$QT_ROOT/bin:$PATH
|
||||||
compression-level: 0
|
export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
|
||||||
|
DIR=$(pwd)
|
||||||
|
|
||||||
|
# now Subsurface with WebKit
|
||||||
|
bash -e -x ./subsurface/scripts/build.sh -desktop -build-with-webkit -release
|
||||||
|
|
||||||
|
cd ${GITHUB_WORKSPACE}/build
|
||||||
|
|
||||||
|
# build export-html to make sure that didn't get broken
|
||||||
|
make export-html
|
||||||
|
|
||||||
|
- name: test desktop build
|
||||||
|
run: |
|
||||||
|
echo "------------------------------------"
|
||||||
|
echo "run tests for desktop build"
|
||||||
|
export QT_ROOT=${GITHUB_WORKSPACE}/Qt/5.13.0/clang_64
|
||||||
|
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
|
cd ${GITHUB_WORKSPACE}/build/tests
|
||||||
|
make check
|
||||||
|
|
||||||
# only publish a 'release' on push events (those include merging a PR)
|
|
||||||
- name: upload binaries
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
tag_name: v${{ steps.version_number.outputs.version }}
|
|
||||||
repository: ${{ github.repository_owner }}/nightly-builds
|
|
||||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
prerelease: false
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
files: ${{ steps.build.outputs.dmg }}
|
|
||||||
|
|||||||
53
.github/workflows/mxe-dockerimage-stage1.yml
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
name: MXE Docker Image CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- scripts/docker/mxe-build-container/*
|
||||||
|
- .github/workflows/mxe-docker*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
mxe-build-container-stage1:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
# IMPORTANT: use the second digit to test new versions, each new official build should be n.0 with the first one being 1.0
|
||||||
|
# as you test changes toward a new release, call those 1.1, 1.2, 1.3, etc
|
||||||
|
# VERSION is just that version presented as a string constant
|
||||||
|
#
|
||||||
|
VERSION: ${{ '1.0' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
# Because, reasons, we can't really do anything in YAML, so do this crazy shell callout thingy in order to assemble
|
||||||
|
# sane variables to use later in this job - if someone knows an easier way to do this, please let me know!
|
||||||
|
# This abomination below assembles the docker image NAME and appends ".stage1" to the VERSION
|
||||||
|
- name: set env
|
||||||
|
run: |
|
||||||
|
v=${{ env.VERSION }}
|
||||||
|
s=".stage1"
|
||||||
|
b=${{ github.ref }} # -BRANCH suffix, unless the branch is master
|
||||||
|
b=${b/refs\/heads\//}
|
||||||
|
b=${b,,} # the name needs to be all lower case
|
||||||
|
if [ $b = "master" ] ; then b="" ; else b="-$b" ; fi
|
||||||
|
echo "::set-env name=NAME::subsurface/mxe-build-container${b}:${v}${s}"
|
||||||
|
|
||||||
|
- name: Build and Publish stage 1 Docker image to Dockerhub
|
||||||
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
|
with:
|
||||||
|
name: ${{ env.NAME }}
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
dockerfile: 'Dockerfile-stage1'
|
||||||
|
workdir: './scripts/docker/mxe-build-container/'
|
||||||
|
|
||||||
|
- name: Trigger stage 2 to run
|
||||||
|
# this triggers a dispatch event in our own repository - this allows us to work around the
|
||||||
|
# 6h runtime max (as on a two core system the total build time of this container is closer to 7h)
|
||||||
|
# we use the event_type to pass the version that we are building to the second stage
|
||||||
|
run: |
|
||||||
|
curl -XPOST -H 'authorization: token ${{ secrets.ACCESS_TOKEN }}' \
|
||||||
|
-H "Accept: application/vnd.github.everest-preview+json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
https://api.github.com/repos/subsurface-divelog/subsurface/dispatches \
|
||||||
|
--data '{"event_type": "${{ env.VERSION }}", "client_payload": { "target_branch": "${{ github.ref }}" } }'
|
||||||
40
.github/workflows/mxe-dockerimage-stage2.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
name: MXE stage 2 Docker Image CI
|
||||||
|
|
||||||
|
# trigger this second stage via a repository dispaych event
|
||||||
|
# the version that we are building is passed in via the event type that is available to us here
|
||||||
|
# as github.event.action
|
||||||
|
|
||||||
|
on: repository_dispatch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
mxe-build-container-stage2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.client_payload.target_branch }}
|
||||||
|
|
||||||
|
# Grab the version from the event name that we were triggered by and add ".stage1" to find the docker image to start FROM
|
||||||
|
# And create the NAME of the final docker image (including the branch if not master)
|
||||||
|
- name: set env
|
||||||
|
run: |
|
||||||
|
v=${{ github.event.action }}
|
||||||
|
s=".stage1"
|
||||||
|
b=${{ github.event.client_payload.target_branch }} # -BRANCH suffix, unless the branch is master
|
||||||
|
b=${b/refs\/heads\//}
|
||||||
|
b=${b,,} # the name needs to be all lower case
|
||||||
|
if [ "$b" = "master" ] || [ "$b" = "" ] ; then b="" ; else b="-$b" ; fi
|
||||||
|
echo "::set-env name=VERSION::${v}${s}"
|
||||||
|
echo "::set-env name=NAME::subsurface/mxe-build-container${b}:${v}"
|
||||||
|
|
||||||
|
- name: Build and Publish stage 2 Docker image to Dockerhub
|
||||||
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
|
with:
|
||||||
|
name: ${{ env.NAME }}
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
dockerfile: 'Dockerfile-stage2'
|
||||||
|
workdir: './scripts/docker/mxe-build-container/'
|
||||||
|
buildargs: VERSION
|
||||||
|
|
||||||
45
.github/workflows/post-releasenotes.yml
vendored
@ -1,45 +0,0 @@
|
|||||||
name: Post Release Notes
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
postRelease:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
# since we are running this step on a pull request, we will skip build numbers in releases
|
|
||||||
- name: assemble release notes
|
|
||||||
env:
|
|
||||||
EVENT_HEAD_COMMIT_ID: ${{ github.event.head_commit.id }}
|
|
||||||
# Required because we are using the GitHub CLI in 'create-releasenotes.sh'
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
scripts/create-releasenotes.sh $EVENT_HEAD_COMMIT_ID
|
|
||||||
|
|
||||||
# add a file containing the release title so it can be picked up and listed on the release page on our web server
|
|
||||||
- name: publish release
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
tag_name: v${{ steps.version_number.outputs.version }}
|
|
||||||
repository: ${{ github.repository_owner }}/nightly-builds
|
|
||||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
prerelease: false
|
|
||||||
files: release_content_title.txt
|
|
||||||
body_path: gh_release_notes.md
|
|
||||||
169
.github/workflows/scripts/check_usns.py
vendored
@ -1,169 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# coding: utf-8
|
|
||||||
|
|
||||||
import json
|
|
||||||
import logging
|
|
||||||
import multiprocessing
|
|
||||||
import os
|
|
||||||
import pathlib
|
|
||||||
import pprint
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from launchpadlib import errors as lp_errors # fades
|
|
||||||
from launchpadlib.credentials import RequestTokenAuthorizationEngine, UnencryptedFileCredentialStore
|
|
||||||
from launchpadlib.launchpad import Launchpad
|
|
||||||
import requests # fades
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("subsurface.check_usns")
|
|
||||||
logger.addHandler(logging.StreamHandler())
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
|
|
||||||
APPLICATION = "subsurface-ci"
|
|
||||||
LAUNCHPAD = "production"
|
|
||||||
TEAM = "subsurface"
|
|
||||||
SOURCE_NAME = "subsurface"
|
|
||||||
SNAPS = {
|
|
||||||
"subsurface": {
|
|
||||||
"stable": {"recipe": "subsurface-stable"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
STORE_URL = "https://api.snapcraft.io/api/v1/snaps" "/details/{snap}?channel={channel}"
|
|
||||||
STORE_HEADERS = {"X-Ubuntu-Series": "16", "X-Ubuntu-Architecture": "{arch}"}
|
|
||||||
|
|
||||||
CHECK_NOTICES_PATH = "/snap/bin/review-tools.check-notices"
|
|
||||||
CHECK_NOTICES_ARGS = ["--ignore-pockets", "esm-apps"]
|
|
||||||
|
|
||||||
|
|
||||||
def get_store_snap(processor, snap, channel):
|
|
||||||
logger.debug("Checking for snap %s on %s in channel %s", snap, processor, channel)
|
|
||||||
data = {
|
|
||||||
"snap": snap,
|
|
||||||
"channel": channel,
|
|
||||||
"arch": processor,
|
|
||||||
}
|
|
||||||
resp = requests.get(STORE_URL.format(**data), headers={k: v.format(**data) for k, v in STORE_HEADERS.items()})
|
|
||||||
logger.debug("Got store response: %s", resp)
|
|
||||||
|
|
||||||
try:
|
|
||||||
result = json.loads(resp.content)
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
logger.error("Could not parse store response: %s", resp.content)
|
|
||||||
else:
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_url(entry):
|
|
||||||
dest, uri = entry
|
|
||||||
r = requests.get(uri, stream=True)
|
|
||||||
logger.debug("Downloading %s to %s…", uri, dest)
|
|
||||||
if r.status_code == 200:
|
|
||||||
with open(dest, "wb") as f:
|
|
||||||
for chunk in r:
|
|
||||||
f.write(chunk)
|
|
||||||
return dest
|
|
||||||
|
|
||||||
|
|
||||||
def check_snap_notices(store_snaps):
|
|
||||||
with tempfile.TemporaryDirectory(dir=pathlib.Path.home()) as dir:
|
|
||||||
snaps = multiprocessing.Pool(8).map(
|
|
||||||
fetch_url,
|
|
||||||
(
|
|
||||||
(pathlib.Path(dir) / f"{snap['package_name']}_{snap['revision']}.snap", snap["download_url"])
|
|
||||||
for snap in store_snaps
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
notices = subprocess.check_output([CHECK_NOTICES_PATH] + CHECK_NOTICES_ARGS + snaps, encoding="UTF-8")
|
|
||||||
logger.debug("Got check_notices output:\n%s", notices)
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
logger.error("Failed to check notices:\n%s", e.output)
|
|
||||||
sys.exit(2)
|
|
||||||
else:
|
|
||||||
notices = json.loads(notices)
|
|
||||||
return notices
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
check_notices = os.path.isfile(CHECK_NOTICES_PATH) and os.access(CHECK_NOTICES_PATH, os.X_OK)
|
|
||||||
|
|
||||||
if not check_notices:
|
|
||||||
raise RuntimeError("`review-tools` not found.")
|
|
||||||
|
|
||||||
try:
|
|
||||||
lp = Launchpad.login_with(
|
|
||||||
APPLICATION,
|
|
||||||
LAUNCHPAD,
|
|
||||||
version="devel",
|
|
||||||
authorization_engine=RequestTokenAuthorizationEngine(LAUNCHPAD, APPLICATION),
|
|
||||||
credential_store=UnencryptedFileCredentialStore(os.path.expanduser(sys.argv[1])),
|
|
||||||
)
|
|
||||||
except NotImplementedError:
|
|
||||||
raise RuntimeError("Invalid credentials.")
|
|
||||||
|
|
||||||
ubuntu = lp.distributions["ubuntu"]
|
|
||||||
logger.debug("Got ubuntu: %s", ubuntu)
|
|
||||||
|
|
||||||
team = lp.people[TEAM]
|
|
||||||
logger.debug("Got team: %s", team)
|
|
||||||
|
|
||||||
errors = []
|
|
||||||
|
|
||||||
for snap, channels in SNAPS.items():
|
|
||||||
for channel, snap_map in channels.items():
|
|
||||||
logger.info("Processing channel %s for snap %s…", channel, snap)
|
|
||||||
|
|
||||||
try:
|
|
||||||
snap_recipe = lp.snaps.getByName(owner=team, name=snap_map["recipe"])
|
|
||||||
logger.debug("Got snap: %s", snap_recipe)
|
|
||||||
except lp_errors.NotFound as ex:
|
|
||||||
logger.error("Snap not found: %s", snap_map["recipe"])
|
|
||||||
errors.append(ex)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if len(snap_recipe.pending_builds) > 0:
|
|
||||||
logger.info("Skipping %s: snap builds pending…", snap_recipe.web_link)
|
|
||||||
continue
|
|
||||||
|
|
||||||
store_snaps = tuple(
|
|
||||||
filter(
|
|
||||||
lambda snap: snap.get("result") != "error",
|
|
||||||
(get_store_snap(processor.name, snap, channel) for processor in snap_recipe.processors),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.debug("Got store versions: %s", {snap["architecture"][0]: snap["version"] for snap in store_snaps})
|
|
||||||
|
|
||||||
snap_notices = check_snap_notices(store_snaps)[snap]
|
|
||||||
|
|
||||||
for store_snap in store_snaps:
|
|
||||||
if str(store_snap["revision"]) not in snap_notices:
|
|
||||||
logger.error(
|
|
||||||
"Revision %s missing in result, see above for any review-tools errors.", store_snap["revision"]
|
|
||||||
)
|
|
||||||
errors.append(f"Revision {store_snap['revision']} missing in result:\n{store_snap}")
|
|
||||||
|
|
||||||
if any(snap_notices.values()):
|
|
||||||
logger.info("Found USNs:\n%s", pprint.pformat(snap_notices))
|
|
||||||
else:
|
|
||||||
logger.info("Skipping %s: no USNs found", snap)
|
|
||||||
continue
|
|
||||||
|
|
||||||
logger.info("Triggering %s…", snap_recipe.description or snap_recipe.name)
|
|
||||||
|
|
||||||
snap_recipe.requestBuilds(
|
|
||||||
archive=snap_recipe.auto_build_archive,
|
|
||||||
pocket=snap_recipe.auto_build_pocket,
|
|
||||||
channels=snap_recipe.auto_build_channels,
|
|
||||||
)
|
|
||||||
logger.debug("Triggered builds: %s", snap_recipe.web_link)
|
|
||||||
|
|
||||||
for error in errors:
|
|
||||||
logger.debug(error)
|
|
||||||
|
|
||||||
if errors:
|
|
||||||
sys.exit(1)
|
|
||||||
62
.github/workflows/scripts/linux-in-container-build.sh
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# this gets executed by the GitHub Action when building an AppImage for Linux
|
||||||
|
# inside of the trusty-qt512 container
|
||||||
|
|
||||||
|
export PATH=$QT_ROOT/bin:$PATH # Make sure correct qmake is found on the $PATH for linuxdeployqt
|
||||||
|
export CMAKE_PREFIX_PATH=$QT_ROOT/lib/cmake
|
||||||
|
export Grantlee5_ROOT=/__w/subsurface/subsurface/install-root
|
||||||
|
|
||||||
|
# the container currently has things under / that need to be under /__w/subsurface/subsurface instead
|
||||||
|
cp -a /appdir /__w/subsurface/
|
||||||
|
cp -a /install-root /__w/subsurface/
|
||||||
|
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "building mobile"
|
||||||
|
|
||||||
|
# first make sure that no one broke Subsurface-mobile
|
||||||
|
bash -e -x subsurface/scripts/build.sh -mobile -quick
|
||||||
|
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "building desktop"
|
||||||
|
|
||||||
|
# now build our AppImage
|
||||||
|
bash -e -x subsurface/scripts/build.sh -desktop -create-appdir -build-with-webkit -quick
|
||||||
|
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "assembling AppImage"
|
||||||
|
|
||||||
|
export QT_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
|
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
|
||||||
|
export QT_DEBUG_PLUGINS=1
|
||||||
|
|
||||||
|
# set up the appdir
|
||||||
|
mkdir -p appdir/usr/plugins/
|
||||||
|
|
||||||
|
# mv googlemaps and Grantlee plugins into place
|
||||||
|
mv appdir/usr/usr/local/Qt/5.12.4/gcc_64/plugins/* appdir/usr/plugins # the usr/usr is not a typo, that's where it ends up
|
||||||
|
mv appdir/usr/lib/grantlee/ appdir/usr/plugins/
|
||||||
|
rm -rf appdir/usr/home/ appdir/usr/include/ appdir/usr/share/man/ # No need to ship developer and man files as part of the AppImage
|
||||||
|
rm -rf appdir/usr/usr appdir/usr/lib/cmake appdir/usr/lib/pkgconfig
|
||||||
|
cp /ssllibs/libssl.so appdir/usr/lib/libssl.so.1.1
|
||||||
|
cp /ssllibs/libcrypto.so appdir/usr/lib/libcrypto.so.1.1
|
||||||
|
|
||||||
|
# get the linuxdeployqt tool and run it to collect the libraries
|
||||||
|
curl -L -O "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
||||||
|
chmod a+x linuxdeployqt*.AppImage
|
||||||
|
unset QTDIR
|
||||||
|
unset QT_PLUGIN_PATH
|
||||||
|
unset LD_LIBRARY_PATH
|
||||||
|
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -bundle-non-qt-libs -qmldir=./subsurface/map-widget/ -verbose=2
|
||||||
|
|
||||||
|
# create the AppImage
|
||||||
|
export VERSION=$(cd subsurface/scripts ; ./get-version linux) # linuxdeployqt uses this for naming the file
|
||||||
|
./linuxdeployqt*.AppImage --appimage-extract-and-run ./appdir/usr/share/applications/*.desktop -exclude-libs=libdbus-1.so.3 -appimage -qmldir=./subsurface/map-widget/ -verbose=2
|
||||||
|
|
||||||
|
# copy AppImage to the calling VM
|
||||||
|
# with GitHub Actions the /${GITHUB_WORKSPACE} directory is the current working directory at the start of a step
|
||||||
|
cp Subsurface*.AppImage* /${GITHUB_WORKSPACE}/Subsurface.AppImage
|
||||||
|
ls -l /${GITHUB_WORKSPACE}/Subsurface.AppImage
|
||||||
44
.github/workflows/scripts/linux-snap.patch
vendored
@ -1,44 +0,0 @@
|
|||||||
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
|
|
||||||
index 9f34d0169..0d5a89fd9 100644
|
|
||||||
--- a/snap/snapcraft.yaml
|
|
||||||
+++ b/snap/snapcraft.yaml
|
|
||||||
@@ -35,6 +35,7 @@ parts:
|
|
||||||
source: https://github.com/Subsurface/googlemaps.git
|
|
||||||
plugin: make
|
|
||||||
build-packages:
|
|
||||||
+ - ccache
|
|
||||||
- qtbase5-dev
|
|
||||||
- wget
|
|
||||||
override-pull: |
|
|
||||||
@@ -79,6 +80,7 @@ parts:
|
|
||||||
override-build: |
|
|
||||||
qmake \
|
|
||||||
INCLUDEPATH+=${CRAFT_PART_SRC}/QtHeaders \
|
|
||||||
+ CONFIG+=ccache \
|
|
||||||
${CRAFT_PART_SRC}
|
|
||||||
craftctl default
|
|
||||||
|
|
||||||
@@ -111,7 +113,11 @@ parts:
|
|
||||||
source: .
|
|
||||||
source-type: git
|
|
||||||
source-subdir: libdivecomputer
|
|
||||||
+ autotools-configure-parameters:
|
|
||||||
+ - CC="ccache gcc"
|
|
||||||
+ - CXX="ccache g++"
|
|
||||||
build-packages:
|
|
||||||
+ - ccache
|
|
||||||
- libbluetooth-dev
|
|
||||||
- libhidapi-dev
|
|
||||||
- libusb-dev
|
|
||||||
@@ -134,8 +140,11 @@ parts:
|
|
||||||
- -DFTDISUPPORT=ON
|
|
||||||
- -DLIBDIVECOMPUTER_LIBRARIES=../../../stage/usr/local/lib/libdivecomputer.so
|
|
||||||
- -DLIBDIVECOMPUTER_INCLUDE_DIR=../../../stage/usr/local/include
|
|
||||||
+ - -DCMAKE_C_COMPILER_LAUNCHER=ccache
|
|
||||||
+ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
||||||
build-packages:
|
|
||||||
- build-essential
|
|
||||||
+ - ccache
|
|
||||||
- libcurl4-gnutls-dev
|
|
||||||
- libftdi1-dev
|
|
||||||
- libgit2-dev
|
|
||||||
2
.github/workflows/scripts/requirements.txt
vendored
@ -1,2 +0,0 @@
|
|||||||
launchpadlib
|
|
||||||
requests
|
|
||||||
14
packaging/windows/in-container-build.sh → .github/workflows/scripts/windows-in-container-build.sh
vendored
Executable file → Normal file
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# this gets executed inside the container when building a Windows
|
# this gets executed inside the container when building a Windows
|
||||||
# installer as GitHub Action
|
# installer on Travis
|
||||||
#
|
#
|
||||||
# working directory is assumed to be the directory including all the
|
# working directory is assumed to be the directory including all the
|
||||||
# source directories (subsurface, googlemaps, grantlee, etc)
|
# source directories (subsurface, googlemaps, grantlee, etc)
|
||||||
@ -14,19 +14,17 @@ mkdir -p win32
|
|||||||
cd win32
|
cd win32
|
||||||
|
|
||||||
# build Subsurface and then smtk2ssrf
|
# build Subsurface and then smtk2ssrf
|
||||||
export MXEBUILDTYPE=x86_64-w64-mingw32.shared
|
export MXEBUILDTYPE=i686-w64-mingw32.shared
|
||||||
bash -ex ../subsurface/packaging/windows/mxe-based-build.sh installer
|
bash -ex ../subsurface/packaging/windows/mxe-based-build.sh installer
|
||||||
|
|
||||||
# the strange two step move is in order to get predictable names to use
|
# the strange two step move is in order to get predictable names to use
|
||||||
# in the publish step of the GitHub Action
|
# in the publish step of the GitHub Action
|
||||||
mv subsurface/subsurface.exe* ${OUTPUT_DIR}/
|
mv subsurface/subsurface.exe* ${GITHUB_WORKSPACE}/
|
||||||
fullname=$(cd subsurface ; ls subsurface-*.exe)
|
mv subsurface/subsurface-*.exe ${GITHUB_WORKSPACE}/subsurface-installer.exe
|
||||||
mv subsurface/"$fullname" ${OUTPUT_DIR}/"${fullname%.exe}-installer.exe"
|
|
||||||
|
|
||||||
bash -ex ../subsurface/packaging/windows/smtk2ssrf-mxe-build.sh -a -i
|
bash -ex ../subsurface/packaging/windows/smtk2ssrf-mxe-build.sh -a -i
|
||||||
|
|
||||||
# the strange two step move is in order to get predictable names to use
|
# the strange two step move is in order to get predictable names to use
|
||||||
# in the publish step of the GitHub Action
|
# in the publish step of the GitHub Action
|
||||||
mv smtk-import/smtk2ssrf.exe ${OUTPUT_DIR}/
|
mv smtk-import/smtk2ssrf.exe ${GITHUB_WORKSPACE}/
|
||||||
fullname=$(cd smtk-import ; ls smtk2ssrf*.exe)
|
mv smtk-import/smtk2ssrf*.exe ${GITHUB_WORKSPACE}/smtk2ssrf-installer.exe
|
||||||
mv smtk-import/smtk2ssrf*.exe ${OUTPUT_DIR}/"${fullname%.exe}-installer.exe"
|
|
||||||
37
.github/workflows/snap_usns.yml
vendored
@ -1,37 +0,0 @@
|
|||||||
name: SnapUSNs
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
CheckUSNs:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
|
||||||
uses: insightsengineering/pip-action@v2.0.0
|
|
||||||
with:
|
|
||||||
requirements: .github/workflows/scripts/requirements.txt
|
|
||||||
|
|
||||||
- name: Install Snap dependencies
|
|
||||||
run: |
|
|
||||||
sudo snap install review-tools --edge
|
|
||||||
|
|
||||||
- name: Set up Launchpad credentials
|
|
||||||
uses: DamianReeves/write-file-action@v1.2
|
|
||||||
with:
|
|
||||||
path: lp_credentials
|
|
||||||
contents: ${{ secrets.LAUNCHPAD_CREDENTIALS }}
|
|
||||||
|
|
||||||
- name: Check for USNs
|
|
||||||
run: .github/workflows/scripts/check_usns.py lp_credentials
|
|
||||||
55
.github/workflows/ubuntu-launchpad-build.yml
vendored
@ -1,55 +0,0 @@
|
|||||||
name: Ubuntu Launchpad Build
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- current
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
push-to-ppa:
|
|
||||||
|
|
||||||
name: Submit build to Ubuntu Launchpad
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Check out sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: Setup build dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y devscripts dput gpg debhelper qt5-qmake cmake
|
|
||||||
|
|
||||||
- name: Setup gpg key token for launchpad
|
|
||||||
env:
|
|
||||||
GPG_PRIVATE_KEY: ${{ secrets.PPA_SECRET_KEY }}
|
|
||||||
run: |
|
|
||||||
echo "$GPG_PRIVATE_KEY" > ~/.key
|
|
||||||
gpg --import ~/.key
|
|
||||||
|
|
||||||
- name: setup git
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory /__w/subsurface/subsurface
|
|
||||||
git config --global --add safe.directory /__w/subsurface/subsurface/libdivecomputer
|
|
||||||
|
|
||||||
- name: Checkout googlemaps
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
git clone https://github.com/subsurface/googlemaps
|
|
||||||
|
|
||||||
- name: run the launchpad make-package script
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
bash -x subsurface/packaging/ubuntu/make-package.sh $GITHUB_REF_NAME
|
|
||||||
|
|
||||||
38
.github/workflows/windows-mxe-dockerimage.yml
vendored
@ -1,38 +0,0 @@
|
|||||||
name: Windows (MXE) Docker Image
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- scripts/docker/mxe-build-container/**
|
|
||||||
- .github/workflows/windows-mxe-dockerimage.yml
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
windows-mxe:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
VERSION: ${{ '3.1.0' }} # 'official' images should have a dot-zero version
|
|
||||||
mxe_sha: 'c0bfefc57a00fdf6cb5278263e21a478e47b0bf5'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Build the name for the docker image
|
|
||||||
id: build_name
|
|
||||||
run: |
|
|
||||||
v=$VERSION
|
|
||||||
b=$GITHUB_REF # -BRANCH suffix, unless the branch is master
|
|
||||||
b=${b/refs\/heads\//}
|
|
||||||
b=${b,,} # the name needs to be all lower case
|
|
||||||
if [ $b = "master" ] ; then b="" ; else b="-$b" ; fi
|
|
||||||
echo "NAME=$GITHUB_REPOSITORY_OWNER/mxe-build${b}:${v}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build and Publish Linux Docker image to Dockerhub
|
|
||||||
uses: elgohr/Publish-Docker-Github-Action@v5
|
|
||||||
with:
|
|
||||||
name: ${{ steps.build_name.outputs.NAME }}
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
workdir: './scripts/docker/mxe-build-container/'
|
|
||||||
buildargs: mxe_sha
|
|
||||||
68
.github/workflows/windows.yml
vendored
@ -1,73 +1,53 @@
|
|||||||
name: Windows
|
name: Windows
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
|
||||||
- scripts/docker/**
|
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
buildInContainer:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: docker://subsurface/mxe-build:3.1.0
|
image: docker://subsurface/mxe-build-container:1.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: checkout sources
|
- name: checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v1
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: set the version information
|
|
||||||
id: version_number
|
|
||||||
uses: ./.github/actions/manage-version
|
|
||||||
with:
|
|
||||||
nightly-builds-secret: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
|
|
||||||
- name: get other dependencies
|
- name: get other dependencies
|
||||||
env:
|
|
||||||
SUBSURFACE_REPO_PATH: ${{ github.workspace }}
|
|
||||||
run: |
|
run: |
|
||||||
echo "Running script to install additional dependancies into container"
|
echo "creating the link from /win/subsurface"
|
||||||
git config --global --add safe.directory ${SUBSURFACE_REPO_PATH}
|
|
||||||
git config --global --add safe.directory ${SUBSURFACE_REPO_PATH}/libdivecomputer
|
|
||||||
cd /win
|
cd /win
|
||||||
ln -s /__w/subsurface/subsurface .
|
ln -s /__w/subsurface/subsurface .
|
||||||
bash -x subsurface/packaging/windows/container-prep.sh 2>&1 | tee pre-build.log
|
ls -l
|
||||||
|
ls -l subsurface/scripts
|
||||||
|
echo "installing missing container components"
|
||||||
|
apt-get install -y ca-certificates libtool
|
||||||
|
echo "downloading sources for fresh build"
|
||||||
|
bash subsurface/scripts/get-dep-lib.sh single . libzip
|
||||||
|
bash subsurface/scripts/get-dep-lib.sh single . hidapi
|
||||||
|
bash subsurface/scripts/get-dep-lib.sh single . googlemaps
|
||||||
|
bash subsurface/scripts/get-dep-lib.sh single . grantlee
|
||||||
|
bash subsurface/scripts/get-dep-lib.sh single . mdbtools
|
||||||
|
|
||||||
- name: run build
|
- name: run build
|
||||||
run: |
|
run: |
|
||||||
export OUTPUT_DIR="$GITHUB_WORKSPACE"
|
|
||||||
cd /win
|
cd /win
|
||||||
bash -x subsurface/packaging/windows/in-container-build.sh 2>&1 | tee build.log
|
bash -x subsurface/.github/workflows/scripts/windows-in-container-build.sh 2>&1 | tee build.log
|
||||||
grep "Built target installer" build.log
|
grep "Built target installer" build.log
|
||||||
|
|
||||||
- name: publish pull request artifacts
|
- name: prepare PR artifacts
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
uses: actions/upload-artifact@v4
|
run: |
|
||||||
with:
|
mkdir -p Windows-artifacts
|
||||||
name: Subsurface-Windows-${{ steps.version_number.outputs.version }}
|
mv ./subsurface-installer.exe ./subsurface.exe ./subsurface.exe.debug ./smtk2ssrf-installer.exe ./smtk2ssrf.exe Windows-artifacts
|
||||||
path: |
|
|
||||||
subsurface*.exe*
|
|
||||||
smtk2ssrf*.exe
|
|
||||||
|
|
||||||
# only publish a 'release' on push events (those include merging a PR)
|
- name: PR artifacts
|
||||||
- name: upload binaries
|
if: github.event_name == 'pull_request'
|
||||||
if: github.event_name == 'push'
|
uses: actions/upload-artifact@master
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
with:
|
||||||
tag_name: v${{ steps.version_number.outputs.version }}
|
name: Windows-artifacts
|
||||||
repository: ${{ github.repository_owner }}/nightly-builds
|
path: Windows-artifacts
|
||||||
token: ${{ secrets.NIGHTLY_BUILDS }}
|
|
||||||
prerelease: false
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
files: |
|
|
||||||
./subsurface*.exe*
|
|
||||||
./smtk2ssrf*.exe
|
|
||||||
|
|||||||
9
.gitignore
vendored
@ -35,18 +35,9 @@ Subsurface.app
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
!android/**/*.xml
|
!android/**/*.xml
|
||||||
build*
|
build*
|
||||||
nightly-builds/
|
|
||||||
mobile-widgets/qml/kirigami
|
mobile-widgets/qml/kirigami
|
||||||
mobile-widgets/3rdparty/ECM/
|
|
||||||
mobile-widgets/3rdparty/breeze-icons/
|
|
||||||
mobile-widgets/3rdparty/extra-cmake-modules/
|
|
||||||
mobile-widgets/3rdparty/kirigami/
|
|
||||||
packaging/ios/install-root
|
packaging/ios/install-root
|
||||||
packaging/ios/Info.plist
|
packaging/ios/Info.plist
|
||||||
packaging/ios/Qt
|
packaging/ios/Qt
|
||||||
packaging/ios/asset_catalog_compiler.Info.plist
|
packaging/ios/asset_catalog_compiler.Info.plist
|
||||||
appdata/subsurface.appdata.xml
|
appdata/subsurface.appdata.xml
|
||||||
android-mobile/Roboto-Regular.ttf
|
|
||||||
gh_release_notes.md
|
|
||||||
release_content_title.txt
|
|
||||||
/output/
|
|
||||||
|
|||||||
2
.gitmodules
vendored
@ -1,4 +1,4 @@
|
|||||||
[submodule "libdivecomputer"]
|
[submodule "libdivecomputer"]
|
||||||
path = libdivecomputer
|
path = libdivecomputer
|
||||||
url = https://github.com/Subsurface/libdc.git
|
url = git://github.com/Subsurface/libdc.git
|
||||||
branch = Subsurface-NG
|
branch = Subsurface-NG
|
||||||
|
|||||||
1
.mailmap
@ -4,7 +4,6 @@
|
|||||||
<dirk@hohndel.org> <hohndel@mail.gr8dns.org>
|
<dirk@hohndel.org> <hohndel@mail.gr8dns.org>
|
||||||
Dirk Hohndel <dirk@hohndel.org> Dirk Hohndel (Intel) <dhohndel@dhohndel-mac02.jf.intel.com>
|
Dirk Hohndel <dirk@hohndel.org> Dirk Hohndel (Intel) <dhohndel@dhohndel-mac02.jf.intel.com>
|
||||||
Dirk Hohndel <dirk@hohndel.org> Subsurface <dirk@subsurface-divelog.org>
|
Dirk Hohndel <dirk@hohndel.org> Subsurface <dirk@subsurface-divelog.org>
|
||||||
Dirk Hohndel <dirk@hohndel.org> Subsurface CI <dirk@hohndel.org>
|
|
||||||
<guido.lerch@gmail.com> <glerch@Guidos-MacBook-Air.local>
|
<guido.lerch@gmail.com> <glerch@Guidos-MacBook-Air.local>
|
||||||
<jacco.van.koll@gmail.com> <jko@haringstad.com>
|
<jacco.van.koll@gmail.com> <jko@haringstad.com>
|
||||||
<jlmulder@xs4all.nl> <jlmulder@planet.nl>
|
<jlmulder@xs4all.nl> <jlmulder@planet.nl>
|
||||||
|
|||||||
@ -11,4 +11,3 @@ type = TS
|
|||||||
source_file = terms
|
source_file = terms
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = txt
|
type = txt
|
||||||
|
|
||||||
|
|||||||
91
CHANGELOG.md
@ -1,46 +1,51 @@
|
|||||||
statistics: show proper dates in January
|
Desktop: add support for dive mode on CSV import and export
|
||||||
desktop: add country to the fields indexed for full text search
|
Desktop: fix profile display of planned dives with surface segments
|
||||||
import: update libdivecomputer version, add support for the Scubapro G3 / Luna and Shearwater Tern
|
maps: show the dive site as marker when opening Google Maps
|
||||||
desktop: add a button linking to the 'Contribute' page
|
Mobile: fix false rejection of Subsurface cloud SSL certificate
|
||||||
mobile: fix configuration of decompression ceiling and gradient factors
|
Mobile: fix misdetection of Shearwater Petrel 2 on iOS
|
||||||
desktop: fix gas switches in UDDF exports
|
Desktop: fix creation of new cylinder types (names couldn't be the start of already existing names)
|
||||||
core: allow of up to 6 O2 sensors (and corresponding voting logic)
|
Mobile: fix no-cloud to cloud transition
|
||||||
desktop: add divemode as a possible dive list column
|
Mobile: remove locking of data storage access
|
||||||
profile-widget: Now zomed in profiles can be panned with horizontal scroll.
|
Mobile: performance improvements for dive list
|
||||||
desktop: hide only events with the same severity when 'Hide similar events' is used
|
Mobile: user notification of progress during startup
|
||||||
equipment: mark gas mixes reported by the dive computer as 'inactive' as 'not used'
|
Mobile: ensure filter text field has focus when opened
|
||||||
equipment: include unused cylinders in merged dive if the preference is enabled
|
Mobile: dive summary: make time drop downs smaller
|
||||||
equipment: fix bug showing the first diluent in the gas list as 'used' for CCR dives
|
Mobile: close menus with Android back button on dive details
|
||||||
desktop: added button to hide the infobox in the dive profile
|
Mobile: add ability to toggle dive invalid flag from dive details context menu
|
||||||
desktop: use persisted device information for the dive computer configuration
|
Mobile: calculate dive summary statistics in 64 bit values even on 32bit ARM
|
||||||
core: fix bug using salinity and pressure values in mbar <-> depth conversion
|
Mobile: fix strange issue where sometimes the keyboard would pop up in dive view mode
|
||||||
export: fix bug resulting in invalid CSV for '""' in 'CSV summary dive details'
|
Mobile: remove 'map it' button on dive view page - it was redundant and took space from location field
|
||||||
desktop: add support for multiple tanks to the profile ruler
|
Mobile: show better placeholder text while processing dive list
|
||||||
export: change format produced by 'CSV summary dive details' from TSV (tab separated) to CSV
|
Mobile: Android: don't quit the app when trying to close a drawer/menu with back button
|
||||||
desktop: add function to merge dive site into site selected in list
|
Mobile: make sure filter header and virtual keyboard are shown when tapping on filter icon
|
||||||
import: add option to synchronise dive computer time when downloading dives
|
Mobile: fix issue where in some circumstances changes weren't written to storage
|
||||||
desktop: fix salinity combo/icon when DC doesnt have salinity info
|
Mobile: fix issues with filtering while editing dives
|
||||||
core: fix bug when save sea water salinity given by DC
|
Desktop: implement dive invalidation
|
||||||
desktop: add option to force firmware update on OSTC4
|
Undo: implement undo of event handling (viz. bookmarks, setpoints, gas switches)
|
||||||
desktop: add column for dive notes to the dive list table
|
Desktop: fix tab-order in filter widget
|
||||||
desktop: Add an option for printing in landscape mode
|
Desktop: implement fulltext search
|
||||||
desktop: fix bug when printing a dive plan with multiple segments
|
Desktop: add starts-with and exact filter modes for textual search
|
||||||
desktop: fix remembering of bluetooth address for remembered dive computers (not MacOS)
|
Desktop: ignore dive sites without location in proximity search
|
||||||
desktop: fix bug in bailout gas selection for CCR dives
|
Desktop: add the ability to modify dive salinity
|
||||||
desktop: fix crash on cylinder update of multiple dives
|
Profile: Add current GF to infobox
|
||||||
desktop: use dynamic tank use drop down in equipment tab and planner
|
Desktop: increase speed of multi-trip selection
|
||||||
desktop: fix brightness configuration for OSTC4
|
Desktop/Linux: fix issue with Linux AppImage failing to communicate with Bluetooth dive computers [#2370]
|
||||||
equipment: Use 'diluent' as default gas use type if the dive mode is 'CCR'
|
Desktop: allow copy&pasting of multiple cylinders [#2386]
|
||||||
htmlexport: fix search in HTML export
|
Desktop: don't output random SAC values for cylinders without data [#2376]
|
||||||
htmlexport: fix diveguide display
|
Planner: Add checkbox on considering oxygen narcotic
|
||||||
statistics: fix value axis for degenerate value ranges
|
Planner: Improve rounding of stop durations in planner notes
|
||||||
profile: Show correct gas density when in CCR mode
|
Desktop: register changes when clicking "done" on dive-site edit screen
|
||||||
statistics: show correct color of selected scatter items when switching to unbinned mode
|
Core: support dives with no cylinders
|
||||||
statistics: fix display of month number in continuous date axis
|
Core: remove restriction on number of cylinders
|
||||||
statistics: fix range of continuous date axis
|
Desktop: make dive replanning undoable
|
||||||
desktop: fix dive time display in time shift dialog
|
Desktop: update statistics tab on undo or redo
|
||||||
libdivecomputer: garmin: relax string parsing sanity checks
|
Planner: update dive details when replanning dive [#2280]
|
||||||
libdivecomputer: add Cressi Donatello, Scubapro G2 TEK, Oceanic Geo Air, Scorpena Alpha
|
Export: when exporting dive sites in dive site mode, export selected dive sites [#2275]
|
||||||
|
libdivecomputer:
|
||||||
|
- Add support for the Oceanic Geo 4.0
|
||||||
|
- clean up Shearwater tank pressure handling
|
||||||
|
- minor fixlets
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
* Always add new entries at the very top of this file above other existing entries and this note.
|
* Always add new entries at the very top of this file above other existing entries and this note.
|
||||||
|
|||||||
401
CMakeLists.txt
@ -20,7 +20,6 @@ endif ()
|
|||||||
|
|
||||||
set(CMAKE_MODULE_PATH
|
set(CMAKE_MODULE_PATH
|
||||||
${${PROJECT_NAME}_SOURCE_DIR}/cmake/Modules
|
${${PROJECT_NAME}_SOURCE_DIR}/cmake/Modules
|
||||||
${${PROJECT_NAME}_SOURCE_DIR}/../install-root/lib/cmake
|
|
||||||
${CMAKE_MODULE_PATH}
|
${CMAKE_MODULE_PATH}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,15 +29,13 @@ MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
|
|||||||
"We don't support building in source, please create a build folder elsewhere and remember to run git clean -xdf to remove temporary files created by CMake."
|
"We don't support building in source, please create a build folder elsewhere and remember to run git clean -xdf to remove temporary files created by CMake."
|
||||||
)
|
)
|
||||||
|
|
||||||
#Option for memory debugging
|
|
||||||
option(SUBSURFACE_ASAN_BUILD "enable memory debugging of Subsurface binary" OFF)
|
|
||||||
|
|
||||||
#Option for profiling
|
#Option for profiling
|
||||||
option(SUBSURFACE_PROFILING_BUILD "enable profiling of Subsurface binary" OFF)
|
option(SUBSURFACE_PROFILING_BUILD "enable profiling of Subsurface binary" OFF)
|
||||||
|
|
||||||
#Options regarding usage of pkgconfig
|
#Options regarding usage of pkgconfig
|
||||||
option(LIBGIT2_FROM_PKGCONFIG "use pkg-config to retrieve libgit2" OFF)
|
option(LIBGIT2_FROM_PKGCONFIG "use pkg-config to retrieve libgit2" OFF)
|
||||||
option(LIBDC_FROM_PKGCONFIG "use pkg-config to retrieve libdivecomputer" OFF)
|
option(LIBDC_FROM_PKGCONFIG "use pkg-config to retrieve libdivecomputer" OFF)
|
||||||
|
option(LIBGRANTLEE_FROM_PKGCONFIG "use pkg-config to retrieve grantlee" OFF)
|
||||||
|
|
||||||
#Library Handling
|
#Library Handling
|
||||||
option(FORCE_LIBSSH "force linking with libssh to workaround libgit2 bug" ON)
|
option(FORCE_LIBSSH "force linking with libssh to workaround libgit2 bug" ON)
|
||||||
@ -50,17 +47,14 @@ option(NO_PRINTING "disable the printing support" OFF)
|
|||||||
option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
|
option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
|
||||||
|
|
||||||
#Options regarding enabling parts of subsurface
|
#Options regarding enabling parts of subsurface
|
||||||
option(BTSUPPORT "enable support for QtBluetooth" ON)
|
option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
|
||||||
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
|
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
|
||||||
|
|
||||||
# Options regarding What should we build on subsurface
|
# Options regarding What should we build on subsurface
|
||||||
option(MAKE_TESTS "Make the tests" ON)
|
option(MAKE_TESTS "Make the tests" ON)
|
||||||
|
|
||||||
# Option whether we should try to build against Qt6, if it is available
|
SET(SUBSURFACE_TARGET_EXECUTABLE "DesktopExecutable" CACHE STRING "The type of application, DesktopExecutable or MobileExecutable")
|
||||||
option(BUILD_WITH_QT6 "try to build against Qt6 (incomplete)" OFF)
|
LIST(APPEND SUBSURFACE_ACCEPTED_EXECUTABLES "DesktopExecutable" "MobileExecutable")
|
||||||
|
|
||||||
SET(SUBSURFACE_TARGET_EXECUTABLE "DesktopExecutable" CACHE STRING "The type of application, DesktopExecutable, MobileExecutable, or DownloaderExecutable")
|
|
||||||
LIST(APPEND SUBSURFACE_ACCEPTED_EXECUTABLES "DesktopExecutable" "MobileExecutable" "DownloaderExecutable")
|
|
||||||
SET_PROPERTY(CACHE SUBSURFACE_TARGET_EXECUTABLE PROPERTY STRINGS ${SUBSURFACE_ACCEPTED_EXECUTABLES})
|
SET_PROPERTY(CACHE SUBSURFACE_TARGET_EXECUTABLE PROPERTY STRINGS ${SUBSURFACE_ACCEPTED_EXECUTABLES})
|
||||||
|
|
||||||
#verify if Platform is correct and warn on wxit with example.
|
#verify if Platform is correct and warn on wxit with example.
|
||||||
@ -80,7 +74,7 @@ add_definitions(-DSUBSURFACE_SOURCE="${SUBSURFACE_SOURCE}")
|
|||||||
|
|
||||||
set(CMAKE_C_STANDARD 99)
|
set(CMAKE_C_STANDARD 99)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED TRUE)
|
set(CMAKE_C_STANDARD_REQUIRED TRUE)
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -117,15 +111,10 @@ if (SUBSURFACE_PROFILING_BUILD)
|
|||||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
|
||||||
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
|
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
|
||||||
endif()
|
endif()
|
||||||
# set up ASan
|
|
||||||
if (SUBSURFACE_ASAN_BUILD)
|
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# every compiler understands -Wall
|
# every compiler understands -Wall
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror=format")
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror=format")
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||||
|
|
||||||
# by detault optimize with -O2 even for debug builds
|
# by detault optimize with -O2 even for debug builds
|
||||||
set (GCC_OPTIMIZATION_FLAGS "-O2" CACHE STRING "GCC optimization flags")
|
set (GCC_OPTIMIZATION_FLAGS "-O2" CACHE STRING "GCC optimization flags")
|
||||||
@ -145,6 +134,10 @@ include(pkgconfig_helper)
|
|||||||
# module file.
|
# module file.
|
||||||
include(HandleFindGit2)
|
include(HandleFindGit2)
|
||||||
include(HandleFindLibDiveComputer)
|
include(HandleFindLibDiveComputer)
|
||||||
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
||||||
|
include(HandleFindGrantlee)
|
||||||
|
include(HandleUserManual)
|
||||||
|
endif()
|
||||||
include(HandleFtdiSupport)
|
include(HandleFtdiSupport)
|
||||||
include(HandleVersionGeneration)
|
include(HandleVersionGeneration)
|
||||||
include(RunOnBuildDir)
|
include(RunOnBuildDir)
|
||||||
@ -152,7 +145,7 @@ include(cmake_variables_helper)
|
|||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
include_directories(${CMAKE_OSX_SYSROOT}/usr/include/libxml2)
|
include_directories(${CMAKE_OSX_SYSROOT}/usr/include/libxml2)
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -lxml2 -lxslt -lsqlite3)
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lxml2 -lxslt -lsqlite3)
|
||||||
else()
|
else()
|
||||||
pkg_config_library(LIBXML libxml-2.0 REQUIRED)
|
pkg_config_library(LIBXML libxml-2.0 REQUIRED)
|
||||||
pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
|
pkg_config_library(LIBSQLITE3 sqlite3 REQUIRED)
|
||||||
@ -161,11 +154,7 @@ endif()
|
|||||||
pkg_config_library(LIBZIP libzip REQUIRED)
|
pkg_config_library(LIBZIP libzip REQUIRED)
|
||||||
|
|
||||||
if(NOT ANDROID)
|
if(NOT ANDROID)
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
||||||
pkg_config_library(BLUEZ bluez REQUIRED)
|
|
||||||
endif()
|
|
||||||
pkg_config_library(LIBUSB libusb-1.0 QUIET)
|
pkg_config_library(LIBUSB libusb-1.0 QUIET)
|
||||||
pkg_config_library(LIBMTP libmtp QUIET)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include_directories(.
|
include_directories(.
|
||||||
@ -174,67 +163,6 @@ include_directories(.
|
|||||||
${CMAKE_BINARY_DIR}/desktop-widgets
|
${CMAKE_BINARY_DIR}/desktop-widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
# decide what to do about Qt
|
|
||||||
# this is messy because we want to support older Qt5 versions, newer Qt5 versions,
|
|
||||||
# and Qt6 when enabled / available.
|
|
||||||
if(BUILD_WITH_QT6)
|
|
||||||
set(CHECK_QT6 "Qt6")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# figure out which version of Qt we are building against
|
|
||||||
# in theory this should get us all the variables set up correctly, but that
|
|
||||||
# ended up failing in subtle ways to do what was advertized; in the Qt5 case
|
|
||||||
# some of the variables didn't get set up, so we'll immediately call it again
|
|
||||||
# for Qt5
|
|
||||||
find_package(QT NAMES ${CHECK_QT6} Qt5 REQUIRED COMPONENTS Core Widgets)
|
|
||||||
|
|
||||||
# right now there are a few things that don't work with Qt6
|
|
||||||
# let's disable them right here and remember our Qt version
|
|
||||||
if(QT_VERSION_MAJOR STREQUAL "6")
|
|
||||||
set(USINGQT6 ON)
|
|
||||||
set(QT5OR6 "")
|
|
||||||
# for Qt6 we want the Qt5 compatibility package
|
|
||||||
LIST(APPEND QT_EXTRA_COMPONENTS Core5Compat)
|
|
||||||
LIST(APPEND QT_TEST_LIBRARIES Qt::Core5Compat)
|
|
||||||
|
|
||||||
# QtWebKit doesn't work with Qt6, so no printing, no manual
|
|
||||||
set(NO_PRINTING ON)
|
|
||||||
set(NO_USERMANUAL ON)
|
|
||||||
|
|
||||||
# as of Qt 6.3 by default QtLocation isn't included, but one can
|
|
||||||
# build the module from source; so let's look if the user has installed
|
|
||||||
# it (or if a newer version is out that includes it, anyway)
|
|
||||||
find_package(Qt6 COMPONENTS Location)
|
|
||||||
if(Qt6Location_FOUND)
|
|
||||||
message(STATUS "Found Qt6Location")
|
|
||||||
LIST(APPEND QT_EXTRA_COMPONENTS Location)
|
|
||||||
add_definitions(-DMAP_SUPPORT)
|
|
||||||
set(MAPSUPPORT ON)
|
|
||||||
|
|
||||||
# at least on macOS something goes sideways and we fail to load the
|
|
||||||
# QML files with a weird error about Qml.WorkerScript missing
|
|
||||||
# linking Subsurface against that component appears enough to hack
|
|
||||||
# around that, but that feels... wrong
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
||||||
find_package(Qt6 COMPONENTS QmlWorkerScript)
|
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES Qt6::QmlWorkerScript)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# as mentioned above, since some variables appear to fail to populate
|
|
||||||
# on some platforms, simply run this again the 'old' way
|
|
||||||
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
|
|
||||||
set(USINGQT6 OFF)
|
|
||||||
set(QT5OR6 "5")
|
|
||||||
set(QT_VERSION ${Qt5_VERSION})
|
|
||||||
set(QT_INSTALL_PREFIX ${_qt5Core_install_prefix})
|
|
||||||
# for Qt5 we want the Location component (which is missing so far in Qt6)
|
|
||||||
LIST(APPEND QT_EXTRA_COMPONENTS Location)
|
|
||||||
add_definitions(-DMAP_SUPPORT)
|
|
||||||
set(MAPSUPPORT ON)
|
|
||||||
endif()
|
|
||||||
message(STATUS "building with Qt ${QT_VERSION}")
|
|
||||||
|
|
||||||
# Project Target specific configuration should go here,
|
# Project Target specific configuration should go here,
|
||||||
# if the configuration is too big or would disrupt the normal code flux,
|
# if the configuration is too big or would disrupt the normal code flux,
|
||||||
# move it somewhere else (another file) and include it.
|
# move it somewhere else (another file) and include it.
|
||||||
@ -246,33 +174,6 @@ if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
|||||||
endif()
|
endif()
|
||||||
list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
|
list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
|
||||||
remove_definitions(-DSUBSURFACE_MOBILE)
|
remove_definitions(-DSUBSURFACE_MOBILE)
|
||||||
if(NO_USERMANUAL)
|
|
||||||
message(STATUS "building without built-in user manual support")
|
|
||||||
add_definitions(-DNO_USERMANUAL)
|
|
||||||
else()
|
|
||||||
set(REQUEST_WEBKIT ON)
|
|
||||||
endif()
|
|
||||||
if(NO_PRINTING)
|
|
||||||
message(STATUS "building without printing support")
|
|
||||||
add_definitions(-DNO_PRINTING)
|
|
||||||
else()
|
|
||||||
set(REQUEST_WEBKIT ON)
|
|
||||||
endif()
|
|
||||||
if(REQUEST_WEBKIT)
|
|
||||||
# Because Qt5WebKitWidgets isn't a part of the "regular" Qt5, we can't get it the normal way
|
|
||||||
find_package(Qt5WebKitWidgets QUIET)
|
|
||||||
if(Qt5WebKitWidgets_FOUND STREQUAL "1")
|
|
||||||
LIST(APPEND QT_EXTRA_COMPONENTS PrintSupport WebKitWidgets)
|
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES Qt5::WebKitWidgets)
|
|
||||||
message(STATUS "building with QtWebKit")
|
|
||||||
else()
|
|
||||||
message(STATUS "didn't find QtWebKit, building without user manual and printing support")
|
|
||||||
add_definitions(-DNO_PRINTING)
|
|
||||||
add_definitions(-DNO_USERMANUAL)
|
|
||||||
set(NO_PRINTING ON)
|
|
||||||
set(NO_USERMANUAL ON)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
set(SUBSURFACE_TARGET Subsurface-mobile)
|
set(SUBSURFACE_TARGET Subsurface-mobile)
|
||||||
@ -280,7 +181,6 @@ elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
|||||||
set(SUBSURFACE_TARGET subsurface-mobile)
|
set(SUBSURFACE_TARGET subsurface-mobile)
|
||||||
endif()
|
endif()
|
||||||
list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
|
list(APPEND QT_EXTRA_COMPONENTS QuickControls2)
|
||||||
list(APPEND QT_EXTRA_COMPONENTS QuickWidgets)
|
|
||||||
add_definitions(-DSUBSURFACE_MOBILE)
|
add_definitions(-DSUBSURFACE_MOBILE)
|
||||||
|
|
||||||
# add definition to seperate mobile for devices and for desktop
|
# add definition to seperate mobile for devices and for desktop
|
||||||
@ -288,15 +188,6 @@ elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
|||||||
|
|
||||||
message(STATUS "Building Subsurface-mobile requires BT support")
|
message(STATUS "Building Subsurface-mobile requires BT support")
|
||||||
set(BTSUPPORT ON)
|
set(BTSUPPORT ON)
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
||||||
set(SUBSURFACE_TARGET Subsurface-downloader)
|
|
||||||
else()
|
|
||||||
set(SUBSURFACE_TARGET subsurface-downloader)
|
|
||||||
endif()
|
|
||||||
set(BTSUPPORT ON)
|
|
||||||
add_definitions(-DSUBSURFACE_DOWNLOADER)
|
|
||||||
message(STATUS "building the embedded Subsurface-downloader app")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
@ -304,32 +195,33 @@ if(ANDROID)
|
|||||||
set(NO_USERMANUAL ON)
|
set(NO_USERMANUAL ON)
|
||||||
set(MAKE_TESTS OFF)
|
set(MAKE_TESTS OFF)
|
||||||
list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
|
list(APPEND QT_EXTRA_COMPONENTS AndroidExtras)
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -llog)
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -llog)
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
# add pthread to the end of the library list on Linux
|
# add pthread to the end of the library list on Linux
|
||||||
# this is only needed on Ubuntu
|
# this is only needed on Ubuntu
|
||||||
# but shouldn't hurt on other Linux versions
|
# but shouldn't hurt on other Linux versions
|
||||||
# in some builds we appear to be missing libz for some strange reason...
|
# in some builds we appear to be missing libz for some strange reason...
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -lz -lpthread)
|
# Add ssh2 at the end for openSUSE builds (for recent cmake?)
|
||||||
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lssh2 -lz -lpthread)
|
||||||
|
|
||||||
# Test for ARM processor (Raspberry Pi) and add libGLESv2 if found
|
# Test for ARM processor (Raspberry Pi) and add libGLESv2 if found
|
||||||
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv6l")
|
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv6l")
|
||||||
message (STATUS "Found ARM processor. Adding libGLESv2")
|
message (STATUS "Found ARM processor. Adding libGLESv2")
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -lGLESv2)
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lGLESv2)
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
endif()
|
endif()
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND bash scripts/get-version.sh
|
COMMAND sh scripts/get-version linux
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
OUTPUT_VARIABLE SSRF_VERSION_STRING
|
OUTPUT_VARIABLE SSRF_VERSION_STRING
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
)
|
)
|
||||||
find_library(APP_SERVICES_LIBRARY ApplicationServices)
|
find_library(APP_SERVICES_LIBRARY ApplicationServices)
|
||||||
find_library(HID_LIB HidApi)
|
find_library(HID_LIB HidApi)
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES ${HID_LIB})
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${HID_LIB})
|
||||||
set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
|
set(EXTRA_LIBS ${APP_SERVICES_LIBRARY})
|
||||||
set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
|
set(ICON_FILE ${CMAKE_SOURCE_DIR}/packaging/macosx/Subsurface.icns)
|
||||||
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
||||||
set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
|
set(MACOSX_BUNDLE_INFO_STRING "Subsurface-mobile")
|
||||||
set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
|
set(MACOSX_BUNDLE_BUNDLE_NAME "Subsurface-mobile")
|
||||||
@ -339,16 +231,16 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|||||||
endif()
|
endif()
|
||||||
set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
|
set(MACOSX_BUNDLE_ICON_FILE Subsurface.icns)
|
||||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.subsurface-divelog")
|
||||||
set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
|
set(MACOSX_BUNDLE_BUNDLE_VERSION "${SSRF_VERSION_STRING}")
|
||||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${SSRF_VERSION_STRING}")
|
||||||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${SSRF_VERSION_STRING}")
|
||||||
set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, Berthold Stoeger and others")
|
set(MACOSX_BUNDLE_COPYRIGHT "Linus Torvalds, Dirk Hohndel, Tomaz Canabrava, and others")
|
||||||
set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
||||||
set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
|
set(SUBSURFACE_PKG MACOSX_BUNDLE ${ICON_FILE})
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -lwsock32 -lws2_32)
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lwsock32 -lws2_32)
|
||||||
remove_definitions(-DUNICODE)
|
remove_definitions(-DUNICODE)
|
||||||
add_definitions(-mwindows -D_WIN32)
|
add_definitions(-mwindows -D_WIN32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BTSUPPORT)
|
if(BTSUPPORT)
|
||||||
@ -364,64 +256,41 @@ if(ANDROID)
|
|||||||
# our Qt installation. This is ugly, but it works.
|
# our Qt installation. This is ugly, but it works.
|
||||||
set(CMAKE_FIND_ROOT_PATH "/;${CMAKE_FIND_ROOT_PATH}")
|
set(CMAKE_FIND_ROOT_PATH "/;${CMAKE_FIND_ROOT_PATH}")
|
||||||
endif()
|
endif()
|
||||||
set(QT_FIND_COMPONENTS Core Concurrent Widgets Network Svg Positioning Quick ${QT_EXTRA_COMPONENTS})
|
set(QT_FIND_COMPONENTS Core Concurrent Widgets Network Svg Positioning Quick Location ${QT_EXTRA_COMPONENTS})
|
||||||
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools Test QuickTest)
|
find_package(Qt5 5.9.1 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools Test QuickTest)
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
else()
|
||||||
# Kirigami 5.62 and newer require at least Qt 5.12
|
# Kirigami 5.62 and newer require at least Qt 5.12
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} 5.12 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools)
|
find_package(Qt5 5.12 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools)
|
||||||
else()
|
else()
|
||||||
find_package(Qt${QT_VERSION_MAJOR} 5.12 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools Test QuickTest)
|
find_package(Qt5 5.12 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS} LinguistTools Test QuickTest)
|
||||||
endif()
|
endif()
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|
||||||
# let's pick a version that's not ancient
|
|
||||||
find_package(Qt${QT_VERSION_MAJOR} 5.11 REQUIRED COMPONENTS ${QT_FIND_COMPONENTS})
|
|
||||||
set(MAKE_TESTS OFF)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(_QT_COMPONENT ${QT_FIND_COMPONENTS})
|
foreach(_QT_COMPONENT ${QT_FIND_COMPONENTS})
|
||||||
list(APPEND QT_LIBRARIES Qt${QT5OR6}::${_QT_COMPONENT})
|
list(APPEND QT_LIBRARIES Qt5::${_QT_COMPONENT})
|
||||||
endforeach()
|
endforeach()
|
||||||
if(NOT ANDROID)
|
if(NOT ANDROID)
|
||||||
LIST(APPEND QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt${QT5OR6}::Test Qt${QT5OR6}::QuickTest)
|
set(QT_TEST_LIBRARIES ${QT_LIBRARIES} Qt5::Test Qt5::QuickTest)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#set up the subsurface_link_libraries variable
|
#set up the subsurface_link_libraries variable
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES} ${LIBMTP_LIBRARIES})
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} ${LIBDIVECOMPUTER_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LIBUSB_LIBRARIES})
|
||||||
if (NOT SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc map-widget/qml/map-widget.qrc)
|
||||||
if(USINGQT6)
|
|
||||||
if(MAPSUPPORT)
|
|
||||||
qt_add_resources(SUBSURFACE_RESOURCES map-widget/qml/map-widget.qrc)
|
|
||||||
set(SUBSURFACE_MAPWIDGET subsurface_mapwidget)
|
|
||||||
endif()
|
|
||||||
qt_add_resources(SUBSURFACE_RESOURCES subsurface.qrc profile.qrc stats/statsicons.qrc desktop-widgets/qml/statsview2.qrc)
|
|
||||||
else()
|
|
||||||
qt5_add_resources(SUBSURFACE_RESOURCES subsurface.qrc profile.qrc stats/statsicons.qrc map-widget/qml/map-widget.qrc desktop-widgets/qml/statsview2.qrc)
|
|
||||||
set(SUBSURFACE_MAPWIDGET subsurface_mapwidget)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# hack to build successfully on LGTM
|
# hack to build successfully on LGTM
|
||||||
if(DEFINED ENV{LGTM_SRC})
|
if(DEFINED ENV{LGTM_SRC})
|
||||||
LIST(APPEND SUBSURFACE_LINK_LIBRARIES -lgssapi_krb5 -lhttp_parser)
|
set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lgssapi_krb5 -lhttp_parser)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# include translations
|
# include translations
|
||||||
if (NOT SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|
||||||
add_subdirectory(translations)
|
add_subdirectory(translations)
|
||||||
endif()
|
|
||||||
add_subdirectory(core)
|
add_subdirectory(core)
|
||||||
add_subdirectory(qt-models)
|
add_subdirectory(qt-models)
|
||||||
add_subdirectory(commands)
|
add_subdirectory(commands)
|
||||||
if (NOT SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|
||||||
add_subdirectory(profile-widget)
|
add_subdirectory(profile-widget)
|
||||||
if(MAPSUPPORT)
|
|
||||||
add_subdirectory(map-widget)
|
add_subdirectory(map-widget)
|
||||||
endif()
|
|
||||||
add_subdirectory(mobile-widgets)
|
add_subdirectory(mobile-widgets)
|
||||||
add_subdirectory(stats)
|
|
||||||
endif()
|
|
||||||
add_subdirectory(backend-shared)
|
add_subdirectory(backend-shared)
|
||||||
|
|
||||||
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
||||||
@ -430,50 +299,34 @@ endif()
|
|||||||
|
|
||||||
# create the executables
|
# create the executables
|
||||||
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
||||||
# set up Kirigami using KDE ECM
|
|
||||||
# that's available as kde-extra-cmake-modules on Homebrew, on all Linux flavors
|
|
||||||
# Android and iOS are built via qmake, Windows build of Subsurface-mobile isn't supported
|
|
||||||
find_package(ECM REQUIRED CONFIG PATHS ${CMAKE_CURRENT_SOURCE_DIR}/mobile-widgets/3rdparty/ECM)
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
|
|
||||||
set(BREEZEICONS_DIR mobile-widgets/3rdparty/breeze-icons/)
|
|
||||||
|
|
||||||
SET(QML_IMPORT_PATH ${QML_IMPORT_PATH} ${CMAKE_SOURCE_DIR}/mobile-widgets/3rdparty/kirigami/src ${CMAKE_SOURCE_DIR}/mobile-widgets/qml)
|
|
||||||
add_subdirectory(mobile-widgets/3rdparty)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/mobile-widgets/3rdparty/kirigami/src)
|
|
||||||
include(${CMAKE_SOURCE_DIR}/mobile-widgets/3rdparty/kirigami/KF5Kirigami2Macros.cmake)
|
|
||||||
|
|
||||||
set(MOBILE_SRC
|
set(MOBILE_SRC
|
||||||
subsurface-mobile-main.cpp
|
subsurface-mobile-main.cpp
|
||||||
subsurface-helper.cpp
|
subsurface-helper.cpp
|
||||||
)
|
)
|
||||||
if(USINGQT6)
|
include_directories(${CMAKE_SOURCE_DIR}/mobile-widgets/qml/kirigami/src/libkirigami)
|
||||||
qt_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
|
add_definitions(-DKIRIGAMI_BUILD_TYPE_STATIC)
|
||||||
qt_add_resources(MOBILE_RESOURCES profile.qrc)
|
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
|
||||||
qt_add_resources(MOBILE_RESOURCES mobile-widgets/3rdparty/icons.qrc)
|
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/kirigami/kirigami.qrc)
|
||||||
qt_add_resources(MOBILE_RESOURCES mobile-widgets/3rdparty/kirigami/src/scenegraph/shaders/shaders.qrc)
|
# When building the mobile application in Android, link it and Qt will do the rest, when doing the mobile application on Desktop, create an executable.
|
||||||
|
if(ANDROID)
|
||||||
|
qt5_add_resources(MOBILE_RESOURCES android-mobile/font.qrc)
|
||||||
|
add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${MOBILE_SRC} ${SUBSURFACE_RESOURCES} ${MOBILE_RESOURCES})
|
||||||
else()
|
else()
|
||||||
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/qml/mobile-resources.qrc)
|
# the following is split across two commands since in cmake 3.12 this would result
|
||||||
qt5_add_resources(MOBILE_RESOURCES profile.qrc)
|
# in a non-sensical "no sources given to target" error if done all as one set of
|
||||||
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/3rdparty/icons.qrc)
|
# arguments to the add_executable() call
|
||||||
qt5_add_resources(MOBILE_RESOURCES mobile-widgets/3rdparty/kirigami/src/scenegraph/shaders/shaders.qrc)
|
add_executable(${SUBSURFACE_TARGET} ${SUBSURFACE_PKG} ${SUBSURFACE_RESOURCES})
|
||||||
|
target_sources(${SUBSURFACE_TARGET} PUBLIC ${MOBILE_SRC} ${MOBILE_RESOURCES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# the following is split across two commands since in cmake 3.12 this would result
|
|
||||||
# in a non-sensical "no sources given to target" error if done all as one set of
|
|
||||||
# arguments to the add_executable() call
|
|
||||||
add_executable(${SUBSURFACE_TARGET} ${SUBSURFACE_PKG} ${SUBSURFACE_RESOURCES})
|
|
||||||
target_sources(${SUBSURFACE_TARGET} PUBLIC ${MOBILE_SRC} ${MOBILE_RESOURCES})
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
${SUBSURFACE_TARGET}
|
${SUBSURFACE_TARGET}
|
||||||
subsurface_mobile
|
subsurface_mobile
|
||||||
subsurface_profile
|
subsurface_profile
|
||||||
${SUBSURFACE_MAPWIDGET}
|
subsurface_mapwidget
|
||||||
subsurface_backend_shared
|
subsurface_backend_shared
|
||||||
subsurface_models_mobile
|
subsurface_models_mobile
|
||||||
subsurface_commands
|
subsurface_commands
|
||||||
subsurface_corelib
|
subsurface_corelib
|
||||||
subsurface_stats
|
|
||||||
kirigamiplugin
|
|
||||||
${SUBSURFACE_LINK_LIBRARIES}
|
${SUBSURFACE_LINK_LIBRARIES}
|
||||||
)
|
)
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
||||||
@ -482,45 +335,31 @@ elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable")
|
|||||||
subsurface-helper.cpp
|
subsurface-helper.cpp
|
||||||
)
|
)
|
||||||
source_group("Subsurface App" FILES ${SUBSURFACE_APP})
|
source_group("Subsurface App" FILES ${SUBSURFACE_APP})
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
|
add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
|
||||||
else()
|
else()
|
||||||
add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
|
add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
${SUBSURFACE_TARGET}
|
${SUBSURFACE_TARGET}
|
||||||
subsurface_generated_ui
|
subsurface_generated_ui
|
||||||
subsurface_interface
|
subsurface_interface
|
||||||
subsurface_profile
|
subsurface_profile
|
||||||
${SUBSURFACE_MAPWIDGET}
|
subsurface_statistics
|
||||||
|
subsurface_mapwidget
|
||||||
subsurface_backend_shared
|
subsurface_backend_shared
|
||||||
subsurface_models_desktop
|
subsurface_models_desktop
|
||||||
subsurface_commands
|
subsurface_commands
|
||||||
subsurface_corelib
|
subsurface_corelib
|
||||||
subsurface_stats
|
|
||||||
${SUBSURFACE_LINK_LIBRARIES}
|
${SUBSURFACE_LINK_LIBRARIES}
|
||||||
)
|
)
|
||||||
add_dependencies(subsurface_desktop_preferences subsurface_generated_ui)
|
add_dependencies(subsurface_desktop_preferences subsurface_generated_ui)
|
||||||
|
add_dependencies(subsurface_statistics subsurface_generated_ui)
|
||||||
add_dependencies(subsurface_interface subsurface_generated_ui)
|
add_dependencies(subsurface_interface subsurface_generated_ui)
|
||||||
add_dependencies(subsurface_profile subsurface_generated_ui)
|
add_dependencies(subsurface_profile subsurface_generated_ui)
|
||||||
add_dependencies(subsurface_models_desktop subsurface_generated_ui)
|
add_dependencies(subsurface_models_desktop subsurface_generated_ui)
|
||||||
add_dependencies(subsurface_generated_ui version)
|
add_dependencies(subsurface_generated_ui version)
|
||||||
elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|
||||||
set(DOWNLOADER_APP
|
|
||||||
subsurface-downloader-main.cpp
|
|
||||||
cli-downloader.cpp
|
|
||||||
)
|
|
||||||
source_group("Downloader App" FILES ${DOWNLOADER_APP})
|
|
||||||
add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 ${SUBSURFACE_PKG} ${DOWNLOADER_APP} ${SUBSURFACE_RESOURCES})
|
|
||||||
target_link_libraries(
|
|
||||||
${SUBSURFACE_TARGET}
|
|
||||||
subsurface_backend_shared
|
|
||||||
subsurface_models_downloader
|
|
||||||
subsurface_commands
|
|
||||||
subsurface_corelib
|
|
||||||
${SUBSURFACE_LINK_LIBRARIES}
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_dependencies(subsurface_corelib version)
|
add_dependencies(subsurface_corelib version)
|
||||||
@ -545,17 +384,14 @@ set(DOCFILES
|
|||||||
${CMAKE_BINARY_DIR}/Documentation/user-manual.html
|
${CMAKE_BINARY_DIR}/Documentation/user-manual.html
|
||||||
${CMAKE_BINARY_DIR}/Documentation/user-manual_es.html
|
${CMAKE_BINARY_DIR}/Documentation/user-manual_es.html
|
||||||
${CMAKE_BINARY_DIR}/Documentation/user-manual_fr.html
|
${CMAKE_BINARY_DIR}/Documentation/user-manual_fr.html
|
||||||
|
${CMAKE_BINARY_DIR}/Documentation/user-manual_ru.html
|
||||||
)
|
)
|
||||||
|
|
||||||
# add all the translations that we may need
|
# add all the translations that we may need
|
||||||
FILE(STRINGS "subsurface_enabled_translations" QTTRANSLATIONS_BASE)
|
FILE(STRINGS "subsurface_enabled_translations" QTTRANSLATIONS_BASE)
|
||||||
|
|
||||||
if(NOT DEFINED QT_TRANSLATION_DIR OR QT_TRANSLATION_DIR STREQUAL "")
|
if(NOT DEFINED QT_TRANSLATION_DIR OR QT_TRANSLATION_DIR STREQUAL "")
|
||||||
if(USINGQT6)
|
set(QT_TRANSLATION_DIR ${Qt5Core_DIR}/../../../translations)
|
||||||
set(QT_TRANSLATION_DIR ${QtCore_DIR}/../../../translations)
|
|
||||||
else()
|
|
||||||
set(QT_TRANSLATION_DIR ${Qt5Core_DIR}/../../../translations)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
set(QTTRANSLATIONS "")
|
set(QTTRANSLATIONS "")
|
||||||
foreach(QTTRANSLATION ${QTTRANSLATIONS_BASE})
|
foreach(QTTRANSLATION ${QTTRANSLATIONS_BASE})
|
||||||
@ -582,10 +418,8 @@ if(ANDROID)
|
|||||||
endif()
|
endif()
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
set(APP_BUNDLE_DIR "${SUBSURFACE_TARGET}.app")
|
set(APP_BUNDLE_DIR "${SUBSURFACE_TARGET}.app")
|
||||||
# macdeployqt simplifies a lot of this process, but still doesn't get everything right
|
set(EXTRA_MACDEPLOY_ARGS "-qmldir=${APP_BUNDLE_DIR}/Contents/Resources/qml ")
|
||||||
# - it misses a couple of resources and frameworks
|
set(MACDEPLOY_ARGS "${EXTRA_MACDEPLOY_ARGS}-executable=${APP_BUNDLE_DIR}/Contents/MacOS/${SUBSURFACE_TARGET} -always-overwrite -libpath=${CMAKE_SOURCE_DIR}/../install-root/lib")
|
||||||
# - it seems to always deploy the SQL plugins (even though they aren't needed)
|
|
||||||
set(MACDEPLOY_ARGS "-qmldir=${APP_BUNDLE_DIR}/Contents/Resources/qml -appstore-compliant -verbose=0 -executable=${APP_BUNDLE_DIR}/Contents/MacOS/${SUBSURFACE_TARGET} -always-overwrite -libpath=${CMAKE_SOURCE_DIR}/../install-root/lib")
|
|
||||||
set(RESOURCEDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources)
|
set(RESOURCEDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources)
|
||||||
set(PLUGINDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns)
|
set(PLUGINDIR ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns)
|
||||||
install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
|
install(DIRECTORY Documentation/images DESTINATION ${RESOURCEDIR}/share/Documentation)
|
||||||
@ -596,58 +430,34 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|||||||
install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
|
install(FILES ${QTTRANSLATIONS} DESTINATION ${RESOURCEDIR}/translations)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
|
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt DESTINATION ${RESOURCEDIR})
|
||||||
install(CODE "execute_process(COMMAND mkdir -p ${RESOURCEDIR}/qml)")
|
install(CODE "execute_process(COMMAND mkdir -p ${RESOURCEDIR}/qml)")
|
||||||
if(USINGQT6)
|
# this is a HACK
|
||||||
set(QT_INSTALL_PREFIX ${QT6_INSTALL_PREFIX})
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DesktopExecutable" AND NOT NO_PRINTING)
|
||||||
else()
|
install(DIRECTORY ${Grantlee5_DIR}/../../grantlee DESTINATION ${PLUGINDIR})
|
||||||
set(QT_INSTALL_PREFIX ${_qt5Core_install_prefix})
|
|
||||||
endif()
|
endif()
|
||||||
if(MAPSUPPORT)
|
install(CODE "execute_process(COMMAND mkdir -p ${PLUGINDIR}/geoservices)")
|
||||||
install(CODE "execute_process(COMMAND mkdir -p ${PLUGINDIR}/geoservices)")
|
install(CODE "execute_process(COMMAND cp ${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
|
||||||
# this is really weird. We first try a plugin that ended up in the Qt install prefix
|
install(CODE "execute_process(COMMAND cp ${CMAKE_SOURCE_DIR}/../install-root/${_qt5Core_install_prefix}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
|
||||||
# then we try one that's in that odd broken install location that the qmake file results in (that includes the QT_INSTALL_PREFIX after our INSTALL_ROOT
|
# this is a hack - but I don't know how else to find the macdeployqt program if it's not in the PATH
|
||||||
# and finally, for fat binaries, we copy the one that's in the 'logical' spot under the INSTALL_ROOT
|
string(REPLACE moc macdeployqt MACDEPLOYQT ${QT_MOC_EXECUTABLE})
|
||||||
# this should cover all cases and always get us the correct library
|
install(CODE "execute_process(COMMAND ${MACDEPLOYQT} ${APP_BUNDLE_DIR} -no-strip ${MACDEPLOY_ARGS})")
|
||||||
install(CODE "execute_process(COMMAND cp ${QT_INSTALL_PREFIX}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
|
|
||||||
install(CODE "execute_process(COMMAND cp ${CMAKE_SOURCE_DIR}/../install-root/${QT_INSTALL_PREFIX}/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
|
|
||||||
install(CODE "execute_process(COMMAND cp ${CMAKE_SOURCE_DIR}/../install-root/plugins/geoservices/libqtgeoservices_googlemaps.dylib ${PLUGINDIR}/geoservices ERROR_QUIET)")
|
|
||||||
endif()
|
|
||||||
# this will fail is macdeployqt isn't in the PATH - that seemed to happen in the past, but not recently
|
|
||||||
# also, on M1 macOS systems macdeployqt throws a ton of (apparently harmless) errors. Warn the unsuspecting developer
|
|
||||||
install(CODE "execute_process(COMMAND macdeployqt ${APP_BUNDLE_DIR} -no-strip ${MACDEPLOY_ARGS})")
|
|
||||||
# the next hack is here to delete the sqlite plugin that get's installed even though it isn't needed
|
|
||||||
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/PlugIns/sqldrivers)")
|
|
||||||
# and another hack to get the QML Components in the right place
|
# and another hack to get the QML Components in the right place
|
||||||
if(MAPSUPPORT)
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick.2 ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
if (USINGQT6)
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtLocation ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml/{QtQuick,QtLocation,QtPositioning})")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtQuick ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
if(NOT Qt5Core_VERSION VERSION_LESS 5.11.0)
|
||||||
else()
|
|
||||||
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml/{QtQuick.2,QtLocation,QtPositioning})")
|
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtQuick.2 ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
|
||||||
endif()
|
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtLocation ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
|
||||||
endif()
|
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
|
||||||
if(NOT QT_VERSION VERSION_LESS 5.11.0)
|
|
||||||
# and with Qt 5.11 we need another library that isn't copied by macdeployqt
|
# and with Qt 5.11 we need another library that isn't copied by macdeployqt
|
||||||
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtPositioningQuick.framework)")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/lib/QtPositioningQuick.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/lib/QtPositioningQuick.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
|
|
||||||
endif()
|
|
||||||
if(NOT QT_VERSION VERSION_LESS 5.14.0)
|
|
||||||
# and with Qt 5.14 we need another library that isn't always copied by macdeployqt
|
|
||||||
install(CODE "execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks/QtQmlWorkerScript.framework)")
|
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/lib/QtQmlWorkerScript.framework ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Frameworks)")
|
|
||||||
endif()
|
endif()
|
||||||
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
if (SUBSURFACE_TARGET_EXECUTABLE MATCHES "MobileExecutable")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtQuick ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQuick ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtGraphicalEffects ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtGraphicalEffects ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtQml ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtQml ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
install(CODE "execute_process(COMMAND cp -a ${QT_INSTALL_PREFIX}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
install(CODE "execute_process(COMMAND cp -a ${_qt5Core_install_prefix}/qml/QtPositioning ${CMAKE_BINARY_DIR}/${APP_BUNDLE_DIR}/Contents/Resources/qml)")
|
||||||
endif()
|
endif()
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||||||
if(NOT DEFINED OBJCOPY)
|
if(NOT DEFINED OBJCOPY)
|
||||||
set(OBJCOPY x86_64-w64-mingw32.shared-objcopy)
|
set(OBJCOPY i686-w64-mingw32.shared-objcopy)
|
||||||
endif()
|
endif()
|
||||||
find_program(OBJCOPY_FOUND ${OBJCOPY})
|
find_program(OBJCOPY_FOUND ${OBJCOPY})
|
||||||
if (OBJCOPY_FOUND)
|
if (OBJCOPY_FOUND)
|
||||||
@ -675,11 +485,12 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|||||||
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
|
install(FILES ${CMAKE_SOURCE_DIR}/gpl-2.0.txt ${CMAKE_SOURCE_DIR}/packaging/windows/subsurface.ico DESTINATION ${WINDOWSSTAGING})
|
||||||
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
|
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION ${WINDOWSSTAGING})
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
|
install(FILES ${CMAKE_BINARY_DIR}/qt.conf DESTINATION ${WINDOWSSTAGING})
|
||||||
|
install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib/grantlee DESTINATION ${WINDOWSSTAGING})
|
||||||
|
|
||||||
if(NOT QT_VERSION VERSION_LESS 5.11.0)
|
if(NOT Qt5Core_VERSION VERSION_LESS 5.11.0)
|
||||||
# hack to work around the fact that we don't process the dependencies of plugins
|
# hack to work around the fact that we don't process the dependencies of plugins
|
||||||
# as of Qt 5.11 this additional DLL is needed and it's only referenced in the qml DLLs
|
# as of Qt 5.11 this additional DLL is needed and it's only referenced in the qml DLLs
|
||||||
install(FILES ${QT_INSTALL_PREFIX}/bin/Qt5PositioningQuick.dll DESTINATION ${WINDOWSSTAGING})
|
install(FILES ${_qt5Core_install_prefix}/bin/Qt5PositioningQuick.dll DESTINATION ${WINDOWSSTAGING})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED MAKENSIS)
|
if(NOT DEFINED MAKENSIS)
|
||||||
@ -720,15 +531,15 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|||||||
endif()
|
endif()
|
||||||
install(FILES subsurface.debug DESTINATION bin)
|
install(FILES subsurface.debug DESTINATION bin)
|
||||||
install(FILES subsurface.desktop DESTINATION share/applications)
|
install(FILES subsurface.desktop DESTINATION share/applications)
|
||||||
install(CODE "execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/scripts/add-version-to-metainfo.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})")
|
install(CODE "execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/scripts/add-version-to-appdata.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})")
|
||||||
install(FILES metainfo/subsurface.metainfo.xml DESTINATION share/metainfo)
|
install(FILES appdata/subsurface.appdata.xml DESTINATION share/metainfo)
|
||||||
install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
|
install(FILES icons/subsurface-icon.svg DESTINATION share/icons/hicolor/scalable/apps)
|
||||||
install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
|
install(DIRECTORY Documentation/images DESTINATION share/subsurface/Documentation)
|
||||||
install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
|
install(FILES ${DOCFILES} DESTINATION share/subsurface/Documentation)
|
||||||
install(DIRECTORY theme DESTINATION share/subsurface)
|
install(DIRECTORY theme DESTINATION share/subsurface)
|
||||||
install(DIRECTORY printing_templates DESTINATION share/subsurface)
|
install(DIRECTORY printing_templates DESTINATION share/subsurface)
|
||||||
install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
|
install(FILES ${TRANSLATIONS} DESTINATION share/subsurface/translations)
|
||||||
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
|
install(TARGETS ${SUBSURFACE_TARGET} DESTINATION bin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MAKE_TESTS)
|
if (MAKE_TESTS)
|
||||||
|
|||||||
225
CODINGSTYLE.md
@ -6,11 +6,11 @@ not yet fully consistent to these rules, but following these rules will make
|
|||||||
sure that no one yells at you about your patches.
|
sure that no one yells at you about your patches.
|
||||||
|
|
||||||
We have a script that can be used to reformat code to be reasonably close
|
We have a script that can be used to reformat code to be reasonably close
|
||||||
to these rules; it's in `scripts/whitespace.pl` – this script requires
|
to these rules; it's in scripts/whitespace.pl - this script requires
|
||||||
clang-format to be installed (which sadly isn't installed by default on
|
clang-format to be installed (which sadly isn't installed by default on
|
||||||
any of our platforms; even on Mac where clang is the default compiler).
|
any of our platforms; even on Mac where clang is the default compiler).
|
||||||
|
|
||||||
At the end of this file are some ideas for your `.emacs` file (if that's
|
At the end of this file are some ideas for your .emacs file (if that's
|
||||||
your editor of choice) as well as for QtCreator. If you have settings for
|
your editor of choice) as well as for QtCreator. If you have settings for
|
||||||
other editors that implement this coding style, please add them here.
|
other editors that implement this coding style, please add them here.
|
||||||
|
|
||||||
@ -21,14 +21,14 @@ other editors that implement this coding style, please add them here.
|
|||||||
|
|
||||||
* all keywords followed by a '(' have a space in between
|
* all keywords followed by a '(' have a space in between
|
||||||
```
|
```
|
||||||
if (condition)
|
if (condition)
|
||||||
|
|
||||||
for (i = 0; i < 5; i++)
|
for (i = 0; i < 5; i++)
|
||||||
```
|
```
|
||||||
|
|
||||||
* function calls do NOT have a space between their name and argument
|
* function calls do NOT have a space between their name and argument
|
||||||
```
|
```
|
||||||
i = some_function(argument);
|
i = some_function(argument);
|
||||||
```
|
```
|
||||||
|
|
||||||
* usually there is no space on the inside of parenthesis (see examples
|
* usually there is no space on the inside of parenthesis (see examples
|
||||||
@ -40,81 +40,69 @@ other editors that implement this coding style, please add them here.
|
|||||||
* all other opening curly braces follow at the end of the line, with a
|
* all other opening curly braces follow at the end of the line, with a
|
||||||
space separating them:
|
space separating them:
|
||||||
```
|
```
|
||||||
if (condition) {
|
if (condition) {
|
||||||
dosomething();
|
dosomething();
|
||||||
dosomethingelse();
|
dosomethingelse();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
* both sides of an `if` / `else` clause either use or do not use curly braces:
|
* both sides of an if / else clause either use or do not use curly braces:
|
||||||
```
|
```
|
||||||
if (condition)
|
if (condition)
|
||||||
i = 4;
|
i = 4;
|
||||||
else
|
else
|
||||||
j = 6;
|
j = 6;
|
||||||
|
|
||||||
if (condition) {
|
if (condition) {
|
||||||
i = 6;
|
i = 6;
|
||||||
} else {
|
} else {
|
||||||
i = 4;
|
i = 4;
|
||||||
j = 6;
|
j = 6;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
* use space to make visual separation easier
|
* use space to make visual separation easier
|
||||||
```
|
```
|
||||||
a = b + 3 + e / 4;
|
a = b + 3 + e / 4;
|
||||||
```
|
```
|
||||||
|
|
||||||
* continuation lines have the operator / comma at the end
|
* continuation lines have the operator / comma at the end
|
||||||
```
|
```
|
||||||
if (very_long_condition_1 ||
|
if (very_long_condition_1 ||
|
||||||
condition_2)
|
condition_2)
|
||||||
|
|
||||||
b = a + (c + d +
|
b = a + (c + d +
|
||||||
f + z);
|
f + z);
|
||||||
```
|
```
|
||||||
|
|
||||||
* in a C++ constructor initialization list, the colon is on the same line and
|
* in a C++ constructor initialization list, the colon is on the same line and
|
||||||
continuation lines are aligned as the rule above:
|
continuation lines are aligned as the rule above:
|
||||||
```
|
```
|
||||||
ClassName::ClassName() : x(1),
|
ClassName::ClassName() : x(1),
|
||||||
y(2),
|
y(2),
|
||||||
z(3)
|
z(3)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
* unfortunate inconsistency
|
* unfortunate inconsistency
|
||||||
|
|
||||||
- C code usually uses underscores to structure names
|
- C code usually uses underscores to structure names
|
||||||
```
|
```
|
||||||
variable_in_C
|
variable_in_C
|
||||||
```
|
```
|
||||||
- In contrast, C++ code usually uses camelCase
|
- In contrast, C++ code usually uses camelCase
|
||||||
```
|
```
|
||||||
variableInCPlusPlus
|
variableInCPlusPlus
|
||||||
```
|
```
|
||||||
for variable names and PascalCase
|
for variable names and PascalCase
|
||||||
```
|
```
|
||||||
ClassInCPlusPlus
|
ClassInCPlusPlus
|
||||||
```
|
```
|
||||||
for names of classes and other types
|
for names of classes and other types
|
||||||
|
|
||||||
where the two meet, use your best judgment and go for best consistency
|
where the two meet, use your best judgment and go for best consistency
|
||||||
(i.e., where does the name "originate")
|
(i.e., where does the name "originate")
|
||||||
|
|
||||||
* macro names should be capitalized; e.g., prefer
|
|
||||||
```
|
|
||||||
#define FROB 17
|
|
||||||
#define FROBULATE(x) (x)+FROB
|
|
||||||
```
|
|
||||||
to
|
|
||||||
```
|
|
||||||
#define frob 17
|
|
||||||
#define frobulate(x) (x)+frob
|
|
||||||
```
|
|
||||||
|
|
||||||
* there is a strong preference for lower case file names; sometimes conventions
|
* there is a strong preference for lower case file names; sometimes conventions
|
||||||
or outside requirements make camelCase filenames the better (or only) choice,
|
or outside requirements make camelCase filenames the better (or only) choice,
|
||||||
but absent such an outside reason all file names should be lower case
|
but absent such an outside reason all file names should be lower case
|
||||||
@ -125,34 +113,33 @@ other editors that implement this coding style, please add them here.
|
|||||||
case. Where it seems appropriate, multiple, closely related classes can be
|
case. Where it seems appropriate, multiple, closely related classes can be
|
||||||
in a single file with a more generic name.
|
in a single file with a more generic name.
|
||||||
|
|
||||||
* `switch` statements with blocks are a little bit special (to avoid indenting
|
* switch statements with blocks are a little bit special (to avoid indenting
|
||||||
too far)
|
too far)
|
||||||
```
|
```
|
||||||
switch (foo) {
|
switch (foo) {
|
||||||
case FIRST:
|
case FIRST:
|
||||||
whatever();
|
whatever();
|
||||||
break;
|
break;
|
||||||
case SECOND: {
|
case SECOND: {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 5; i++)
|
for (i = 0; i < 5; i++)
|
||||||
do_something(i);
|
do_something(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Coding conventions
|
## Coding conventions
|
||||||
|
|
||||||
* variable declarations
|
* variable declarations
|
||||||
|
|
||||||
In C code we really like them to be at the beginning of a code block,
|
In C code we really like them to be at the beginning of a code block,
|
||||||
not interspersed in the middle.
|
not interspersed in the middle.
|
||||||
in C++ we are a bit less strict about this – but still, try not to go
|
in C++ we are a bit less strict about this - but still, try not to go
|
||||||
crazy. Notably, in C++ the lifetime of a variable often coincides with the
|
crazy. Notably, in C++ the lifetime of a variable often coincides with the
|
||||||
lifetime of a resource (e.g. file) and therefore the variable is defined
|
lifetime of a resource (e.g. file) and therefore the variable is defined
|
||||||
at the place where the resource is needed.
|
at the place where the resource is needed.
|
||||||
|
|
||||||
* The `*`, `&` and `&&` declarators are grouped with the name, not the type
|
* The `*`, `&` and `&&` declarators are grouped with the name, not the type
|
||||||
(classical C-style) as in `char *string` instead of `char* string`. This
|
(classical C-style) as in `char *string` instead of `char* string`. This
|
||||||
reflects the precedence rules of the language: `int &i` means that the name
|
reflects the precedence rules of the language: `int &i` means that the name
|
||||||
`i` stands for a reference [to an object with type `int`], not that
|
`i` stands for a reference [to an object with type `int`], not that
|
||||||
`i` stands for an object of the type [reference to `int`].
|
`i` stands for an object of the type [reference to `int`].
|
||||||
@ -160,85 +147,84 @@ other editors that implement this coding style, please add them here.
|
|||||||
have the same effect) it is crucial in the
|
have the same effect) it is crucial in the
|
||||||
definition of multiple variables, such
|
definition of multiple variables, such
|
||||||
as
|
as
|
||||||
```
|
```
|
||||||
struct dive *next, **pprev;
|
struct dive *next, **pprev;
|
||||||
```
|
```
|
||||||
|
|
||||||
* In C++ code, we generally use explicit types in variable declarations for clarity.
|
* In C++ code, we generally use explicit types in variable declarations for clarity.
|
||||||
Use `auto` sparingly and only in cases where code readability improves.
|
Use `auto` sparingly and only in cases where code readability improves.
|
||||||
Two classical examples are:
|
Two classical examples are:
|
||||||
- Iterators, whose type names often are verbose:
|
- Iterators, whose type names often are verbose:
|
||||||
```
|
```
|
||||||
auto it = m_trackers.find(when);
|
auto it = m_trackers.find(when);
|
||||||
```
|
```
|
||||||
is not only distinctly shorter than
|
is not only distinctly shorter than
|
||||||
```
|
```
|
||||||
QMap<qint64, gpsTracker>::iterator it = m_trackers.find(when);
|
QMap<qint64, gpsTracker>::iterator it = m_trackers.find(when);
|
||||||
```
|
```
|
||||||
it will also continue working if a different data structure is chosen.
|
it will also continue working if a different data structure is chosen.
|
||||||
- If the type is given in the same line anyway. Thus,
|
- If the type is given in the same line anyway. Thus,
|
||||||
```
|
```
|
||||||
auto service = qobject_cast<QLowEnergyService*>(sender());
|
auto service = qobject_cast<QLowEnergyService*>(sender());
|
||||||
```
|
```
|
||||||
is easier to read than and conveys the same information as
|
is easier to read than and conveys the same information as
|
||||||
```
|
```
|
||||||
QLowEnergyService *service = qobject_cast<QLowEnergyService*>(sender());
|
QLowEnergyService *service = qobject_cast<QLowEnergyService*>(sender());
|
||||||
```
|
```
|
||||||
- If the variable is a container that is only assigned to a local variable to
|
- If the variable is a container that is only assigned to a local variable to
|
||||||
be able to use it in a range-based `for` loop
|
be able to use it in a range-based for loop
|
||||||
```
|
```
|
||||||
const auto serviceUuids = device.serviceUuids();
|
const auto l = device.serviceUuids();
|
||||||
for (QBluetoothUuid id: serviceUuids) {
|
for (QBluetoothUuid id: serviceUuids) {
|
||||||
```
|
```
|
||||||
The variable has also to be const to avoid that Qt containers will do a
|
The variable has also to be const to avoid that Qt containers will do a
|
||||||
deep copy when the range bases `for` loop will call the `begin()` method
|
deep copy when the range bases for loop will call the begin() method
|
||||||
internally.
|
internally.
|
||||||
|
|
||||||
* text strings
|
* text strings
|
||||||
|
|
||||||
The default language of subsurface is US English so please use US English
|
The default language of subsurface is US English so please use US English
|
||||||
spelling and terminology.
|
spelling and terminology.
|
||||||
User-visible strings should be passed to the `tr()` function to enable
|
User-visible strings should be passed to the tr() function to enable
|
||||||
translation into other languages.
|
translation into other languages.
|
||||||
- like this
|
- like this
|
||||||
```
|
```
|
||||||
QString msgTitle = tr("Check for updates.");
|
QString msgTitle = tr("Check for updates.");
|
||||||
```
|
```
|
||||||
- rather than
|
- rather than
|
||||||
```
|
```
|
||||||
QString msgTitle = "Check for updates.";
|
QString msgTitle = "Check for updates.";
|
||||||
```
|
```
|
||||||
|
|
||||||
This works by default in classes (indirectly) derived from `QObject`. Each
|
This works by default in classes (indirectly) derived from QObject. Each
|
||||||
string to be translated is associated with a context, which corresponds
|
string to be translated is associated with a context, which corresponds
|
||||||
to the class name. Classes that are not derived from `QObject` can generate
|
to the class name. Classes that are not derived from QObject can generate
|
||||||
the `tr()` functions by using the `Q_DECLARE_TR_FUNCTIONS` macro:
|
the tr() functions by using the `Q_DECLARE_TR_FUNCTIONS` macro:
|
||||||
```
|
```
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
|
||||||
class myClass {
|
class myClass {
|
||||||
Q_DECLARE_TR_FUNCTIONS(gettextfromC)
|
Q_DECLARE_TR_FUNCTIONS(gettextfromC)
|
||||||
...
|
...
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
As an alternative, which also works outside of class context, the `tr()`
|
As an alternative, which also works outside of class context, the tr()
|
||||||
function of a different class can be called. This avoids creating multiple
|
function of a different class can be called. This avoids creating multiple
|
||||||
translations for the same string:
|
translations for the same string:
|
||||||
```
|
```
|
||||||
gettextFromC::tr("%1km")
|
gettextFromC::tr("%1km")
|
||||||
```
|
```
|
||||||
|
|
||||||
The `gettextFromC` class in the above example was created as a catch-all
|
The gettextFromC class in the above example was created as a catch-all
|
||||||
context for translations accessed in C code. But it can also be used
|
context for translations accessed in C code. But it can also be used
|
||||||
from C++ helper functions. To use it from C, include the `"core/gettext.h"`
|
from C++ helper functions. To use it from C, include the "core/gettext.h"
|
||||||
header and invoke the `translate()` macro:
|
header and invoke the translate() macro:
|
||||||
```
|
```
|
||||||
#include "core/gettext.h"
|
#include "core/gettext.h"
|
||||||
|
|
||||||
report_error(translate("gettextFromC", "Remote storage and local data diverged"));
|
report_error(translate("gettextFromC", "Remote storage and local data diverged"));
|
||||||
```
|
```
|
||||||
It is crucial to pass `"gettextFromC"` as a first macro argument so that Qt
|
It is crucial to pass "gettextFromC" as a first macro argument so that Qt
|
||||||
is able to associate the string with the correct context.
|
is able to associate the string with the correct context.
|
||||||
The translate macro returns a cached C-style string, which is generated at runtime
|
The translate macro returns a cached C-style string, which is generated at runtime
|
||||||
when the particular translation string is encountered for the first time.
|
when the particular translation string is encountered for the first time.
|
||||||
@ -247,20 +233,19 @@ other editors that implement this coding style, please add them here.
|
|||||||
Outside of function context, the `QT_TRANSLATE_NOOP` macro can be used as in
|
Outside of function context, the `QT_TRANSLATE_NOOP` macro can be used as in
|
||||||
```
|
```
|
||||||
struct ws_info_t ws_info[100] = {
|
struct ws_info_t ws_info[100] = {
|
||||||
{ QT_TRANSLATE_NOOP("gettextFromC", "integrated"), 0 },
|
{ QT_TRANSLATE_NOOP("gettextFromC", "integrated"), 0 },
|
||||||
{ QT_TRANSLATE_NOOP("gettextFromC", "belt"), 0 },
|
{ QT_TRANSLATE_NOOP("gettextFromC", "belt"), 0 },
|
||||||
{ QT_TRANSLATE_NOOP("gettextFromC", "ankle"), 0 },
|
{ QT_TRANSLATE_NOOP("gettextFromC", "ankle"), 0 },
|
||||||
{ QT_TRANSLATE_NOOP("gettextFromC", "backplate"), 0 },
|
{ QT_TRANSLATE_NOOP("gettextFromC", "backplate"), 0 },
|
||||||
{ QT_TRANSLATE_NOOP("gettextFromC", "clip-on"), 0 },
|
{ QT_TRANSLATE_NOOP("gettextFromC", "clip-on"), 0 },
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
Note that here, the texts will be scheduled for translation with the `"gettextFromC"`
|
Note that here, the texts will be scheduled for translation with the "gettextFromC"
|
||||||
context, but the array is only initialized with the original text. The actual
|
context, but the array is only initialized with the original text. The actual
|
||||||
translation has to be performed later in code. For C-code, the `QT_TRANSLATE_NOOP`
|
translation has to be performed later in code. For C-code, the `QT_TRANSLATE_NOOP`
|
||||||
macro is defined in the `"core/gettext.h"` header.
|
macro is defined in the "core/gettext.h" header.
|
||||||
|
|
||||||
* UI text style
|
* UI text style
|
||||||
|
|
||||||
These guidelines are designed to ensure consistency in presentation within
|
These guidelines are designed to ensure consistency in presentation within
|
||||||
Subsurface.
|
Subsurface.
|
||||||
Only the first word of multi-word text strings should be capitalized unless
|
Only the first word of multi-word text strings should be capitalized unless
|
||||||
@ -279,14 +264,10 @@ other editors that implement this coding style, please add them here.
|
|||||||
|
|
||||||
|
|
||||||
* string manipulation
|
* string manipulation
|
||||||
|
|
||||||
* user interface
|
* user interface
|
||||||
|
In UI part of the code use of QString methods is preferred, see this pretty
|
||||||
In UI part of the code use of `QString` methods is preferred, see this pretty
|
good guide in [QString documentation][1]
|
||||||
good guide in [`QString` documentation][1]
|
|
||||||
|
|
||||||
* core components
|
* core components
|
||||||
|
|
||||||
In the core part of the code, C-string should be used.
|
In the core part of the code, C-string should be used.
|
||||||
C-string manipulation is not always straightforward specifically when
|
C-string manipulation is not always straightforward specifically when
|
||||||
it comes to memory allocation, a set of helper functions has been developed
|
it comes to memory allocation, a set of helper functions has been developed
|
||||||
@ -297,8 +278,8 @@ other editors that implement this coding style, please add them here.
|
|||||||
|
|
||||||
### Emacs
|
### Emacs
|
||||||
|
|
||||||
These lines in your `.emacs` file should get you fairly close when it comes
|
These lines in your .emacs file should get you fairly close when it comes
|
||||||
to indentation – many of the other rules you have to follow manually
|
to indentation - many of the other rules you have to follow manually
|
||||||
|
|
||||||
```
|
```
|
||||||
;; indentation
|
;; indentation
|
||||||
@ -393,7 +374,7 @@ style that you can select which should work well for our coding style.
|
|||||||
### Vim
|
### Vim
|
||||||
|
|
||||||
As everybody knows vim is a way better editor than emacs and thus needs to be
|
As everybody knows vim is a way better editor than emacs and thus needs to be
|
||||||
in this file too. Put this into your `.vimrc` and this should produce something
|
in this file too. Put this into your .vimrc and this should produce something
|
||||||
close to our coding standards.
|
close to our coding standards.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
123
CONTRIBUTING.md
@ -1,96 +1,68 @@
|
|||||||
# Contributing to Subsurface
|
[Source](https://subsurface-divelog.org/documentation/contributing/ "Permalink to Contributing | Subsurface")
|
||||||
|
|
||||||
## Ways to Contribute
|
# Contributing | Subsurface
|
||||||
|
|
||||||
There are many ways in which you can contribute. We are always looking for testers who are willing to test the code while it is being developed. We especially need people running Windows and Mac (as the majority of the active developers are Linux people). We are also always looking for volunteers who help reviewing and improving the documentation. And very importantly we are looking for translators willing to translate the software into different languages. Our translations are centrally handled at [Transifex][4] – please sign up for an account there and then request to join the [Subsurface Team][5].
|
It might be a good idea to join our [mailing list][1]. Conversation there is in English -- even though this site (and Subsurface itself) are available in many languages, the shared language we all communicate in is English. Actually "Broken English" is just fine… :-)
|
||||||
|
|
||||||
If you would like to contribute financially to help us cover the cost of running a free cloud synchronisation service for dive logs, you can do so by sponsoring this project.
|
We also tend to have some developers hanging out in the `#subsurface` channel on [Freenode][2].
|
||||||
|
|
||||||
|
There are many ways in which you can contribute. We are always looking for testers who are willing to test the code while it is being developed. We especially need people running Windows and Mac (as the majority of the active developers are Linux people). We are also always looking for volunteers who help reviewing and improving the documentation. And very importantly we are looking for translators willing to translate the software into different languages. Our translations are centrally handled at [Transifex][3] \-- please sign up for an account there and then request to join the [Subsurface Team][4].
|
||||||
|
|
||||||
## Joining the Subsurface Contributors' Community
|
If you would like to contribute patches that fix bugs or add new features, that is of course especially welcome. If you are looking for places to start, look at the open bugs in our [bug tracker][5].
|
||||||
|
|
||||||
To get 'into the loop' for what is going on in Subsurface you should join our [mailing list][1], and start watching the [subsurface/subsurface repository on GitHub][2]. Conversation in the mailing list is in English – even though Subsurface itself and the website and documentation are available in many languages, the shared language the contributors communicate in is English. Actually "Broken English" is just fine… :-)
|
Here is a very brief introduction on creating commits that you can either send as [pull requests][6] on our main GitHub repository or send as emails to the mailing list. Much more details on how to use git can be found at the [git user manual][7].
|
||||||
|
|
||||||
Of course it is also a good idea to join our [User Forum][3], to be able to see feedback and bug reports from our users.
|
|
||||||
|
|
||||||
|
|
||||||
## Tips for Code Contributions
|
|
||||||
|
|
||||||
### Code Change Submissions
|
|
||||||
|
|
||||||
If you would like to contribute patches that fix bugs or add new features, that is of course especially welcome. If you are looking for places to start, look at the open bugs in our [bug tracker][6].
|
|
||||||
|
|
||||||
Here is a very brief introduction on creating commits that you can either send as [pull requests][7] on our main GitHub repository or send as emails to the mailing list. Much more details on how to use Git can be found at the [Git user manual][8].
|
|
||||||
|
|
||||||
Start with getting the latest source.
|
Start with getting the latest source.
|
||||||
|
`cd subsurface`
|
||||||
cd subsurface
|
`git checkout master`
|
||||||
git checkout master
|
`git pull`
|
||||||
git pull
|
|
||||||
|
|
||||||
ok, now we know you're on the latest version. Create a working branch to keep your development in:
|
ok, now we know you're on the latest version. Create a working branch to keep your development in:
|
||||||
|
`git checkout -b devel`
|
||||||
git checkout -b devel
|
|
||||||
|
|
||||||
Edit the code (or documentation), compile, test… then create a commit:
|
Edit the code (or documentation), compile, test… then create a commit:
|
||||||
|
`git commit -s -a`
|
||||||
git commit -s -a
|
Depending on your OS this will open a default editor -- usually you can define which by setting the environment variable `GIT_EDITOR`. Here you enter your commit message. The first line is the title of your commit. Keep it brief and to the point. Then a longer explanation (more on this and the fact that we insist on all contributions containing a Signed-off-by: line below).
|
||||||
|
If you want to change the commit message, "git commit --amend" is the way to go. Feel free to break your changes into multiple smaller commits. Then, when you are done there are two directions to go, which one you find easier depends a bit on how familiar you are with GitHub. You can either push your branch to GitHub and create a [pull requests on GitHub][6], or you run
|
||||||
Depending on your OS this will open a default editor – usually you can define which by setting the environment variable `GIT_EDITOR`. Here you enter your commit message. The first line is the title of your commit. Keep it brief and to the point. Then a longer explanation (more on this and the fact that we insist on all contributions containing a Signed-off-by: line below).
|
`git format-patch master..devel`
|
||||||
|
Which creates a number of files that have names like 0001-Commit-title.patch, which you can then send to our developer mailing list.
|
||||||
If you want to change the commit message, `git commit --amend` is the way to go. Feel free to break your changes into multiple smaller commits. Then, when you are done there are two directions to go, which one you find easier depends a bit on how familiar you are with GitHub. You can either push your branch to GitHub and create a [pull requests on GitHub][7], or you run:
|
|
||||||
|
|
||||||
git format-patch master..devel
|
|
||||||
|
|
||||||
Which creates a number of files that have names like `0001-Commit-title.patch`, which you can then send to our developer mailing list.
|
|
||||||
|
|
||||||
|
|
||||||
### Developer Certificate of Origin (DCO)
|
|
||||||
|
|
||||||
When sending code, please either send signed-off patches or a pull request with signed-off commits. If you don't sign off on them, we will not accept them. This means adding a line that says "Signed-off-by: Name \<Email\>" at the end of each commit, indicating that you wrote the code and have the right to pass it on as an open source patch.
|
When sending code, please either send signed-off patches or a pull request with signed-off commits. If you don't sign off on them, we will not accept them. This means adding a line that says "Signed-off-by: Name \<Email\>" at the end of each commit, indicating that you wrote the code and have the right to pass it on as an open source patch.
|
||||||
|
|
||||||
See: [Signed-off-by Lines][9]
|
See: [Signed-off-by Lines][8]
|
||||||
|
|
||||||
|
Also, please write good git commit messages. A good commit message looks like this:
|
||||||
|
|
||||||
### Commit Messages
|
Header line: explaining the commit in one line
|
||||||
|
|
||||||
Also, please write good Git commit messages. A good commit message looks like this:
|
Body of commit message is a few lines of text, explaining things
|
||||||
|
in more detail, possibly giving some background about the issue
|
||||||
|
being fixed, etc etc.
|
||||||
|
|
||||||
Header line: explaining the commit in one line
|
The body of the commit message can be several paragraphs, and
|
||||||
|
please do proper word-wrap and keep columns shorter than about
|
||||||
|
74 characters or so. That way "git log" will show things
|
||||||
|
nicely even when it's indented.
|
||||||
|
|
||||||
Body of commit message is a few lines of text, explaining things
|
Reported-by: whoever-reported-it
|
||||||
in more detail, possibly giving some background about the issue
|
Signed-off-by: Your Name \<you@example.com\>
|
||||||
being fixed, etc etc.
|
|
||||||
|
|
||||||
The body of the commit message can be several paragraphs, and
|
|
||||||
please do proper word-wrap and keep columns shorter than about
|
|
||||||
74 characters or so. That way "git log" will show things
|
|
||||||
nicely even when it's indented.
|
|
||||||
|
|
||||||
Reported-by: whoever-reported-it
|
|
||||||
Signed-off-by: Your Name <you@example.com>
|
|
||||||
|
|
||||||
That header line really should be meaningful, and really should be just one line. The header line is what is shown by tools like gitk and shortlog, and should summarize the change in one readable line of text, independently of the longer explanation.
|
That header line really should be meaningful, and really should be just one line. The header line is what is shown by tools like gitk and shortlog, and should summarize the change in one readable line of text, independently of the longer explanation.
|
||||||
|
|
||||||
The preferred way to write a commit message is using [imperative mood][12], e.g. "Make foo do xyz" instead of "This patch makes foo do xyz" or "I made foo do xyz", as if you are giving commands or requests to the code base.
|
The preferred way to write a commit message is using imperative mood, e.g. "Make foo do xyz" instead of "This patch makes foo do xyz" or "I made foo do xyz", as if you are giving commands or requests to the code base.
|
||||||
|
https://en.wikipedia.org/wiki/Imperative_mood
|
||||||
|
|
||||||
![gitk sample][10]
|
![gitk sample][9]
|
||||||
|
|
||||||
_Example with gitk_
|
Example with gitk
|
||||||
|
|
||||||
|
Additionally when important changes to behaviors, fixes or new feature are introduced an entry must be added to CHANGELOG.md file. Always add new entries at the very top of the file above other existing entries. Use this layout for new entries:
|
||||||
|
|
||||||
### Changelog
|
Area: Details about the change [reference thread / issue]
|
||||||
|
|
||||||
Additionally when important changes to behaviors, fixes or new feature are introduced an entry must be added to `CHANGELOG.md` file. Always add new entries at the very top of the file above other existing entries. Use this layout for new entries:
|
|
||||||
|
|
||||||
Area: Details about the change [reference thread / issue]
|
|
||||||
|
|
||||||
When multiple areas are affected list the areas separated with a /:
|
When multiple areas are affected list the areas separated with a /:
|
||||||
|
|
||||||
Area1/Area2: Detail about the change [reference thread / issue]
|
Area1/Area2: Detail about the change [reference thread / issue]
|
||||||
|
|
||||||
Here is a (non exhaustive) list of Areas that can be used:
|
Here is a (non exhaustive) list of Areas that can be used:
|
||||||
|
|
||||||
* Bluetooth
|
* Bluetooth
|
||||||
* Cloud-storage
|
* Cloud-storage
|
||||||
* Desktop
|
* Desktop
|
||||||
@ -103,20 +75,15 @@ Here is a (non exhaustive) list of Areas that can be used:
|
|||||||
* Printing
|
* Printing
|
||||||
* Profile
|
* Profile
|
||||||
|
|
||||||
|
In order to make reviews simpler and have contributions merged faster in the code base, please follow Subsurface project's coding style and coding conventions described in the [CodingStyle][10] file.
|
||||||
### Coding Style
|
|
||||||
|
|
||||||
In order to make reviews simpler and have contributions merged faster in the code base, please follow Subsurface project's coding style and coding conventions described in the [CodingStyle][11] file.
|
|
||||||
|
|
||||||
[1]: http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
|
[1]: http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
|
||||||
[2]: https://github.com/subsurface/subsurface
|
[2]: http://freenode.net/
|
||||||
[3]: https://groups.google.com/g/subsurface-divelog
|
[3]: https://www.transifex.com/
|
||||||
[4]: https://www.transifex.com/
|
[4]: https://www.transifex.com/projects/p/subsurface/
|
||||||
[5]: https://explore.transifex.com/subsurface/subsurface/
|
[5]: https://github.com/Subsurface/subsurface/issues
|
||||||
[6]: https://github.com/Subsurface/subsurface/issues
|
[6]: https://github.com/Subsurface/subsurface/pulls
|
||||||
[7]: https://github.com/Subsurface/subsurface/pulls
|
[7]: https://www.kernel.org/pub/software/scm/git/docs/user-manual.html
|
||||||
[8]: https://www.kernel.org/pub/software/scm/git/docs/user-manual.html
|
[8]: https://gerrit-review.googlesource.com/Documentation/user-signedoffby.html
|
||||||
[9]: https://gerrit-review.googlesource.com/Documentation/user-signedoffby.html
|
[9]: https://subsurface-divelog.org/wp-content/uploads/2011/10/Screenshot-gitk-subsurface-1.png "Example with gitk"
|
||||||
[10]: https://github.com/subsurface/subsurface/Documentation/images/Screenshot-gitk-subsurface-1.png "Example with gitk"
|
[10]: https://github.com/Subsurface/subsurface/blob/master/CodingStyle
|
||||||
[11]: https://github.com/Subsurface/subsurface/blob/master/CODINGSTYLE.md
|
|
||||||
[12]: https://en.wikipedia.org/wiki/Imperative_mood
|
|
||||||
|
|||||||
@ -135,7 +135,7 @@ msgid ""
|
|||||||
"mailto:subsurface@subsurface-divelog.org[our mailing list] and report bugs "
|
"mailto:subsurface@subsurface-divelog.org[our mailing list] and report bugs "
|
||||||
"at https://github.com/Subsurface/subsurface/issues[our bugtracker]. "
|
"at https://github.com/Subsurface/subsurface/issues[our bugtracker]. "
|
||||||
"For instructions on how to build the software and (if needed) its "
|
"For instructions on how to build the software and (if needed) its "
|
||||||
"dependencies please consult the INSTALL.md file included with the source code."
|
"dependencies please consult the INSTALL file included with the source code."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. type: Plain text
|
#. type: Plain text
|
||||||
@ -9076,9 +9076,6 @@ msgid ""
|
|||||||
"reconnect it. You can now retry (or start a new download session) and the "
|
"reconnect it. You can now retry (or start a new download session) and the "
|
||||||
"download will continue where it stopped previously. You may have to do this "
|
"download will continue where it stopped previously. You may have to do this "
|
||||||
"more than once, depending on how many dives are stored on the dive computer."
|
"more than once, depending on how many dives are stored on the dive computer."
|
||||||
"You may define a dive number offset by setting environment variable "
|
|
||||||
"UEMIS_DIVE_OFFSET (e.g. export UEMIS_DIVE_OFFSET=300), "
|
|
||||||
"if subsurface starts downloading dives that are already synced."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. type: Title ===
|
#. type: Title ===
|
||||||
|
|||||||
163
Documentation/FAQ.wordpress
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<!-- when editing please don't break the formatting... WordPress is a bit silly about this
|
||||||
|
- I need the empty lines after the [expand...] and before the [/expand]
|
||||||
|
- Every paragraph is a single line (how stupid is that!) with an empty line in between -->
|
||||||
|
<h2>Here are some Frequently Asked Questions by our users</h2>
|
||||||
|
<span class="expandall">Expand All</span> --- <span class="collapseall">Collapse All</span>
|
||||||
|
[expand title="Which operating system does Subsurface support?"]
|
||||||
|
|
||||||
|
Subsurface runs on Windows (32 and 64bit, Windows XP and newer), MacOS (Intel, 10.7 and newer) and many flavors of Linux. We provide Linux packages for Ubuntu, Linux Mint, Debian, openSUSE and Fedora. Details on where to find Subsurface for your OS are on our <a title="Downloads" href="http://subsurface-divelog.org/download/">Downloads</a> page.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I install Subsurface on Windows?"]
|
||||||
|
|
||||||
|
<a href="http://subsurface-divelog.org/download/">Download the installer</a> and double-click on it. You will get a warning that the installer is from an unknown publisher. Please click Yes to allow installation. Next you are presented with the license for Subsurface, after that you can choose where you would like to install Subsurface (the default should be reasonable in most cases) and the <em>Start Menu Folder</em> where a shortcut to call Subsurface and an entry to uninstall Subsurface will be installed.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I install Subsurface on MacOS?"]
|
||||||
|
|
||||||
|
<a href="http://subsurface-divelog.org/download/">Download the installer DMG</a> and open it. Drag the Subsurface icon on to the Applications icon.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I install Subsurface on Ubuntu?"]
|
||||||
|
|
||||||
|
Simply add the following PPA to your system:
|
||||||
|
<pre><code style="font-size: 8pt;">ppa:subsurface/subsurface</code></pre>
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I install Subsurface on Debian?"]
|
||||||
|
|
||||||
|
We currently only support Debian Jessie; you need to add the Ubuntu repository:
|
||||||
|
<pre><code style="font-size: 8pt;">echo "deb http://ppa.launchpad.net/subsurface/subsurface/ubuntu trusty main" \
|
||||||
|
| sudo tee /etc/apt/sources.lists.d/subsurface.list
|
||||||
|
gpg --keyserver subkeys.pgp.net --recv-keys A8BC9756EE61D9C6
|
||||||
|
gpg -a --export A8BC9756EE61D9C6 | sudo apt-key add -
|
||||||
|
sudo apt-get update</code></pre>
|
||||||
|
Now you can install Subsurface from that repository:
|
||||||
|
<pre><code style="font-size: 8pt;">sudo apt-get install subsurface</code></pre>
|
||||||
|
Make sure you are getting a current version with all its Qt5 dependencies.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I install Subsurface on openSUSE?"]
|
||||||
|
|
||||||
|
Go to <a href="http://software.opensuse.org/download.html?project=home:Subsurface-Divelog&package=subsurface">our build service project page</a> and follow the simple instructions there -- it’s as easy as two clicks.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="The shortcut keys don't work on Ubuntu"]
|
||||||
|
|
||||||
|
Please uninstall <code style="font-size: 9pt;">appmenu-qt5</code> and the shortcuts will work.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How can I post my dive on Facebook?"]
|
||||||
|
|
||||||
|
Go to the preferences and select the Facebook section. There you can log in to your Facebook account. You have to do this every time you want to post to Facebook, for privacy reasons Subsurface does not stay logged in to Facebook between sessions.
|
||||||
|
|
||||||
|
Once you are logged into Facebook you can close the preferences. You will now see a Facebook button next to the Notes section towards the center of the Subsurface window. Clicking on that opens a dialog that allows you to control which parts of the current dive are posted to your timeline. The post is always "private" - you need to connect to Facebook and change the audience for that post in order for others to see it (we do this so you get to review what is posted before it becomes public).
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How can I post my dives on the web?"]
|
||||||
|
|
||||||
|
Currently Subsurface integrates with two different online logbooks: <a href="http://divelogs.de">divelogs.de</a> and <a href="http://dive-share.appspot.com/">DiveShare</a>. You can export dives to either of those two services from the File➝Export menu.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I use the companion apps?"]
|
||||||
|
|
||||||
|
There are companion apps available for both Android and IOS. You can find them in the respective stores. Once you install them on your mobile device you can either mark dive sites and name them (e.g., right before or after a dive), or you can run a "service" in the background that periodically records your position. Don't forget to turn the service off when you are done as it may increase your battery consumption.
|
||||||
|
|
||||||
|
Once you have uploaded the dive site data from the companion app to our web service, you can then download the data from within Subsurface. Do this <em>after</em> you have downloaded the dives from that day from your divecomputer (or manually added the dives) so that Subsurface can match the dive data (and their time stamps) with the data stored by the companion app. Subsurface will then add GPS data to those dives that didn't have GPS information and are reasonably close in time to to markers saved by the companion app.
|
||||||
|
|
||||||
|
Please note that the companion apps by themselves do <em>not</em> add dives to your dive list. The dive needs to exist before GPS data is added to it.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How can I use more than one tank with the same gas?"]
|
||||||
|
|
||||||
|
This is a typical question for side mount divers or some tec divers. Subsurface supports having more than one tank with the same gas, even if some dive computers don't. Simply add a gas change to your second tank of the same gas as both tanks will be included in the gas use calculations. In order to add gas changes simply right-click on the profile at the appropriate spot and you will be offered to add such an event.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Why is Subsurface not able to download my dives?"]
|
||||||
|
|
||||||
|
Clean the contacts. Clean the contacts again. Make sure the connector is firmly connected. Wiggle it. Seriously. Make sure the dive computer is in transfer mode (this isn't necessary for all dive computers but for many common ones). Check with other software that the download works in general. Try another cable. See our user manual for pairing with BT and the general use case.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Why is the CSV import failing?"]
|
||||||
|
|
||||||
|
The CSV import has a couple of caveats. You should avoid some special characters like ampersand (&), less than (<), greater than (>) and double quotes ("), the latter if quoting text cells. The file should use UTF-8 character set, if having non-ASCII characters. Also the size of the CSV file might cause problems. Importing 100 dives at a time (without dive profile) has worked previously, but larger files might exceed limits of the parser used. When having problems with CSV imports, try first with a smaller sample to make sure everything works.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How can I use Subsurface for multiple users?"]
|
||||||
|
|
||||||
|
Store logs of different users to separate log files. From Subsurface, you can open individual files for different divers and multiple users are supported quite well.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How can I load pictures and associate them with my dive?"]
|
||||||
|
|
||||||
|
Select the dives you want to load and associate the pictures with. Then right click on one of the selected dives and select "Load images" from the
|
||||||
|
popup menu. This will bring in a file selection dialog where you can select one or multiple pictures. When the selection is done and you hit Open, you get a new dialog where you can shift the times of the images. This is described in more detail in our user manual.
|
||||||
|
|
||||||
|
If you are having trouble with loading the images, check that you have at least one of the following tags in the Exif headers DateTimeOriginal or
|
||||||
|
DateTime. We take the time from these fields to detect if the image was shot during the dive or not. If the picture is edited, you should store the original Exif information on the new/edited image for it to be loaded properly.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Can I import my dives from my old log software?"]
|
||||||
|
|
||||||
|
Many common programs are already supported and we are always happy to try to add new ones. If your old log software supports exporting the log book, we might well be able to import that (for example via CSV files or UDDF). However, usually support for importing the native format will help you to get more complete information into Subsurface. To implement support for the log format, we will need a sample log file. It would be great to have also a screenshot from the original log software or description of the dive that is shown on the sample log. Preferably we would like to have a reasonably simple dive to get basic support and another dive that has as many features enabled as possible (e.g. gas changes during the dive). Please post this information to the user forum or send it to the developer mailing list subsurface@subsurface-divelog.org. Unfortunately some of the log formats we have not been able to decipher (as some vendors have decided to encrypt their log files to increase the degree of lock-in of their customers), so there are no guarantees that this will bring support for your old log software, but it is worth a try.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Can you add support for dive computer X?"]
|
||||||
|
|
||||||
|
We support a large number of dive computers already and are always happy to add support for more. Please contact us via the user forums so we can try to help. Some vendors have actively helped us in our work and adding support for new models from those vendors is usually easy. Other vendors are more neutral, some are actively hostile. Without help from the vendor it can be rather challenging to reverse engineer the transfer protocol and the dive encoding, but with sufficient help from you it is often possible to do so.
|
||||||
|
|
||||||
|
A good starting point is often to send us a libdivecomputer log and dump (you can pick those in the dive computer download dialog) when connecting to the dive computer using a similar existing model (if possible).
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Is there a virus in the Subsurface installer?"]
|
||||||
|
|
||||||
|
If you get a warning message or if Subsurface is blocked by your anti virus software, that is almost certainly a false positive. Subsurface is not built on a Windows machine, it is cross built from source on Linux on a well maintained and clean server.
|
||||||
|
|
||||||
|
Most/all Windows AV software packages support an "add exception" feature, which skips an executable from being scanned. Try adding Subsurface to the list of non-harmful software. If the Subsurface installer download is detected as malware, please temporary disable your AV software until Subsurface is installed
|
||||||
|
|
||||||
|
In either case, please inform your AV software vendor of a "false positive" as we assure your that Subsurface is not malware
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="I cannot download all my dives, only the most recent ones even though my dive computer's manual states that it records history of e.g. 999 dives."]
|
||||||
|
|
||||||
|
Dive history is different than the dive profiles on the log. The history only keeps track of the total number of dives and total amount of time spent below surface. The logs, on the other hand, store the dive profile, but they have limited amount of memory to do so. The exact amount of dive profiles that can be stored on the device depend on sample interval and duration of the dives. Once the memory is full the oldest dives get overwritten with new dives. Thus we are only able to download the last 13, 30 or 199 dives.
|
||||||
|
|
||||||
|
If you have downloaded your dives to different dive logging software before they were overwritten, there is a high change that Subsurface can import these. However, if the logs are only on your dive computer, they cannot be salvaged after being over written by new dives.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I download dives from my Bluetooth dive computer (e.g. Shearwater, OSTC) on Linux?"]
|
||||||
|
|
||||||
|
Downloading dives over Bluetooth on all platforms is done using the "Choose Bluetooth download mode" option when downloading dives, and pairing with the detected dive computer. This is further explained in the <a href="https://subsurface-divelog.org/documentation/subsurface-4-user-manual/">Subsurface User Manual</a>.
|
||||||
|
|
||||||
|
Previous versions of Subsurface required setting up an RFCOMM connection from the command line before downloading dives from a Bluetooth enabled dive computer. This is no longer the case.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I fix permission errors when trying to download from my Atomics Aquatics Cobalt under Linux?"]
|
||||||
|
|
||||||
|
Sadly this is a somewhat difficult process on some versions of Linux. By default new devices are sometimes given permissions that prevent a regular user from accessing them. If you get a permission error when trying to download from a Cobalt or Cobalt 2 under Linux, please try these steps.
|
||||||
|
|
||||||
|
This should work on most Linux flavors. We'd appreciate feedback if this doesn't work for you. Open a terminal window and cut and paste the following command. It may ask you to enter your password in order to allow access as super user (which is required to set up the udev rule that changes the device permissions as you plug in your Cobalt).
|
||||||
|
|
||||||
|
<pre><code style="font-size: 8pt;">(MYGRP=$(id | sed "s/^.*gid=.*(\(.*\)) .*$/\1/") ; \
|
||||||
|
echo -n 'SUBSYSTEM=="usb", ATTR{idVendor}=="0471", ATTR{idProduct}=="0888", MODE="0660", GROUP="' ; \
|
||||||
|
echo -n $MYGRP ; echo '"') | sudo tee /etc/udev/rules.d/99-cobalt.rules </code></pre>
|
||||||
|
|
||||||
|
If you disconnect and reconnect your Cobalt it should now get the correct access permissions.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="How do I fix permission errors when trying to download from my Suunto EON Steel under Linux?"]
|
||||||
|
|
||||||
|
By default new devices are sometimes given permissions that prevent a regular user from accessing them. If you get a permission error when trying to download from an EON Steel under Linux, please try these steps.
|
||||||
|
|
||||||
|
This should work on most Linux flavors. We'd appreciate feedback if this doesn't work for you. Open a terminal window and cut and paste the following command. It may ask you to enter your password in order to allow access as super user (which is required to set up the udev rule that changes the device permissions as you plug in your EON Steel).
|
||||||
|
|
||||||
|
<pre><code style="font-size: 8pt;">echo 'SUBSYSTEM=="usb",ATTR{idVendor}=="1493",ATTR{idProduct}=="0030", MODE="0666"' |
|
||||||
|
sudo tee /etc/udev/rules.d/99-cobalt.rules </code></pre>
|
||||||
|
|
||||||
|
If you disconnect and reconnect your DC it should now get the correct access permissions.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
|
[expand title="Why is my IRDA based dive computer not working on a MAC?"]
|
||||||
|
|
||||||
|
Subsurface on the Mac does not currently support IRDA based dive computers. This is an issue of missing support libraries for us to use - other dive log software may have implemented their own IRDA stack on the Mac, we have not. Subsurface on Windows and Linux does support IRDA based dive computers just fine.
|
||||||
|
|
||||||
|
[/expand]
|
||||||
@ -7,7 +7,7 @@
|
|||||||
# submitting patches to the user manual, only submit the changes to the .txt
|
# submitting patches to the user manual, only submit the changes to the .txt
|
||||||
# file - the maintainer will recreate the .html.git file
|
# file - the maintainer will recreate the .html.git file
|
||||||
|
|
||||||
DOCNAMES = user-manual user-manual_es user-manual_fr user-manual_nl mobile-manual-v3
|
DOCNAMES = user-manual user-manual_es user-manual_fr user-manual_ru user-manual_nl mobile-manual mobile-manual-v3
|
||||||
|
|
||||||
HTMLDOCS = $(patsubst %,$(OUT)%.html,$(DOCNAMES))
|
HTMLDOCS = $(patsubst %,$(OUT)%.html,$(DOCNAMES))
|
||||||
TEXTDOCS = $(patsubst %,$(OUT)%.text,$(DOCNAMES))
|
TEXTDOCS = $(patsubst %,$(OUT)%.text,$(DOCNAMES))
|
||||||
@ -19,7 +19,7 @@ BROWSER = firefox
|
|||||||
THEME = compact_subsurface
|
THEME = compact_subsurface
|
||||||
PWD = $(realpath .)
|
PWD = $(realpath .)
|
||||||
|
|
||||||
all: $(HTMLDOCS) $(TEXTDOCS) $(PDFDOCS)
|
all: $(HTMLEDOCS) $(TEXTDOCS) $(PDFDOCS)
|
||||||
|
|
||||||
doc: $(HTMLDOCS)
|
doc: $(HTMLDOCS)
|
||||||
|
|
||||||
@ -30,21 +30,10 @@ $(OUT)%.pdf: %.txt
|
|||||||
-$(A2X) --dblatex-opts "-P latex.output.revhistory=0" -f pdf $<
|
-$(A2X) --dblatex-opts "-P latex.output.revhistory=0" -f pdf $<
|
||||||
|
|
||||||
$(OUT)%.html: %.txt
|
$(OUT)%.html: %.txt
|
||||||
$(ASCIIDOC) --version > /dev/null 2>&1 || echo "if asciidoc isn't found the html file included in the sources is copied"
|
@echo "if asciidoc isn't found the html file included in the sources is copied"
|
||||||
$(ASCIIDOC) -a toc -a toclevels=3 -a themedir=$(PWD) -a theme=$(THEME) -o $@ $< || \
|
$(ASCIIDOC) -a toc -a toclevels=3 -a themedir=$(PWD) -a theme=$(THEME) -o $@ $< || \
|
||||||
cp $(<:%.txt=%.html.git) $@
|
cp $(<:%.txt=%.html.git) $@
|
||||||
|
|
||||||
# for the web facing version of the desktop manual, just use the post-processing script
|
|
||||||
user-manual.html.wp: user-manual.html
|
|
||||||
bash ../scripts/prep-manual.sh $<
|
|
||||||
|
|
||||||
# for the web facing version of the mobile manual, re-create the HTML with only one level in
|
|
||||||
# the table of context and then post process
|
|
||||||
mobile-manual-v3.html.wp: mobile-manual-v3.txt
|
|
||||||
$(ASCIIDOC) -a toc -a toclevels=1 -a themedir=$(PWD) -a theme=$(THEME) -o $(<:%.txt=%.html.tmp) $< && \
|
|
||||||
bash ../scripts/prep-manual.sh $(<:%.txt=%.html.tmp) && \
|
|
||||||
mv $(<:%.txt=%.html.tmp.wp) $@
|
|
||||||
|
|
||||||
# Alternatively::
|
# Alternatively::
|
||||||
$(OUT)$(DOCNAME).xhtml: $(DOCSOURCE)
|
$(OUT)$(DOCNAME).xhtml: $(DOCSOURCE)
|
||||||
$(A2X) --icons -f xhtml $<
|
$(A2X) --icons -f xhtml $<
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
* { padding: 0; margin: 0; }
|
* { padding: 0; margin: 0; }
|
||||||
img { border: 0; margin: 15px; max-width:90% }
|
img { border: 0; margin: 15px; }
|
||||||
|
|
||||||
/*** Layout ***/
|
/*** Layout ***/
|
||||||
|
|
||||||
@ -69,12 +69,12 @@ body { font-family: Verdana, sans-serif; }
|
|||||||
#footer { font-size: 0.8em; }
|
#footer { font-size: 0.8em; }
|
||||||
|
|
||||||
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
||||||
h2 { font-size: 160%; }
|
h2 { font-size: 1.5em; }
|
||||||
.sectionbody { font-size: 0.85em; }
|
.sectionbody { font-size: 0.85em; }
|
||||||
.sectionbody .sectionbody { font-size: inherit; }
|
.sectionbody .sectionbody { font-size: inherit; }
|
||||||
h3 { font-size: 150%; } /* 1.35em */
|
h3 { font-size: 159%; } /* 1.35em */
|
||||||
h4 { font-size: 140%; } /* 1.2em */
|
h4 { font-size: 141%; } /* 1.2em */
|
||||||
h5 { font-size: 130%; } /* 1em */
|
h5 { font-size: 118%; } /* 1em */
|
||||||
.title { font-size: 106%; /* 0.9em */
|
.title { font-size: 106%; /* 0.9em */
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -175,7 +175,7 @@ msgid ""
|
|||||||
"an email to mailto:subsurface@subsurface-divelog.org[our mailing list] and "
|
"an email to mailto:subsurface@subsurface-divelog.org[our mailing list] and "
|
||||||
"report bugs at https://github.com/Subsurface-divelog/subsurface/issues[our "
|
"report bugs at https://github.com/Subsurface-divelog/subsurface/issues[our "
|
||||||
"bugtracker]. For instructions on how to build the software and (if needed) "
|
"bugtracker]. For instructions on how to build the software and (if needed) "
|
||||||
"its dependencies please consult the INSTALL.md file included with the source "
|
"its dependencies please consult the INSTALL file included with the source "
|
||||||
"code."
|
"code."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ce manuel explique comment utiliser le programme _Subsurface_. Pour "
|
"Ce manuel explique comment utiliser le programme _Subsurface_. Pour "
|
||||||
@ -184,7 +184,7 @@ msgstr ""
|
|||||||
"pouvez envoyer un e-mail sur mailto:subsurface@subsurface-divelog.org[notre "
|
"pouvez envoyer un e-mail sur mailto:subsurface@subsurface-divelog.org[notre "
|
||||||
"liste de diffusion] et rapportez les bogues sur http://trac.hohndel."
|
"liste de diffusion] et rapportez les bogues sur http://trac.hohndel."
|
||||||
"org[notre bugtracker]. Pour des instructions de compilation du logiciel et "
|
"org[notre bugtracker]. Pour des instructions de compilation du logiciel et "
|
||||||
"(si besoin) de ses dépendances, merci de consulter le fichier INSTALL.md inclus "
|
"(si besoin) de ses dépendances, merci de consulter le fichier INSTALL inclus "
|
||||||
"dans les sources logicielles."
|
"dans les sources logicielles."
|
||||||
|
|
||||||
#. type: Plain text
|
#. type: Plain text
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 45 KiB |
BIN
Documentation/images/FilterOptions.jpg
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
Documentation/images/FilterPanel.jpg
Normal file
|
After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 90 KiB |
@ -2,8 +2,8 @@
|
|||||||
// Subsurface-mobile User Manual
|
// Subsurface-mobile User Manual
|
||||||
// =============================
|
// =============================
|
||||||
// :author: Manual authors: Willem Ferguson, Dirk Hohndel
|
// :author: Manual authors: Willem Ferguson, Dirk Hohndel
|
||||||
// :revnumber: 3.1.3
|
// :revnumber: 3.0.0
|
||||||
// :revdate: February 2021
|
// :revdate: March 2020
|
||||||
:icons:
|
:icons:
|
||||||
:toc:
|
:toc:
|
||||||
:toc-placement: manual
|
:toc-placement: manual
|
||||||
@ -18,9 +18,10 @@ image::mobile-images/Banner.jpg["Banner",align="center"]
|
|||||||
|
|
||||||
// toc::[]
|
// toc::[]
|
||||||
|
|
||||||
[blue]#_Version 3.4, October 2021_#
|
[blue]#_Version 3.0.0, March 2020_#
|
||||||
|
|
||||||
toc::[]
|
Introducing _Subsurface-mobile_
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
Welcome to _Subsurface-mobile_, the mobile version of _Subsurface_, advanced dive logging
|
Welcome to _Subsurface-mobile_, the mobile version of _Subsurface_, advanced dive logging
|
||||||
software with extensive infrastructure to display, organize, and interpret scuba
|
software with extensive infrastructure to display, organize, and interpret scuba
|
||||||
@ -30,20 +31,22 @@ open-source software (in simple terms that means that there is no commercial int
|
|||||||
them, all the source code needed to build them is available, there are no ads, no one is
|
them, all the source code needed to build them is available, there are no ads, no one is
|
||||||
monetizing your data, etc).
|
monetizing your data, etc).
|
||||||
|
|
||||||
_Subsurface-mobile_ is a limited mobile version of the desktop software _Subsurface_,
|
_Subsurface-mobile_ is a limited mobile version of _Subsurface_,
|
||||||
aimed at Android and iOS smartphone and tablet devices.
|
aimed at Android and iOS smartphone and tablet devices.
|
||||||
While the desktop version of _Subsurface_ shows much more detailed information
|
While the desktop version of _Subsurface_ shows much more detailed information
|
||||||
for each dive, the mobile version allows a more accessible dive log on the go. For example,
|
for each dive, the mobile version allows a more accessible dive log on the go. For example,
|
||||||
you can prove dive experience on a dive trip to dive shops or review
|
you can prove dive experience on a dive trip to dive shops or review
|
||||||
previous dives while on a dive boat.
|
previous dives while on a dive boat. _Subsurface-mobile_ also allows
|
||||||
|
the gathering of GPS locations where dives are performed.
|
||||||
Assuming you have a dive computer that is supported by the mobile OS of
|
Assuming you have a dive computer that is supported by the mobile OS of
|
||||||
your choice, _Subsurface-mobile_ supports the downloading of dives from your dive computer.
|
your choice, _Subsurface-mobile_ even supports the downloading of dives from your dive computer.
|
||||||
|
|
||||||
Users of _Subsurface-mobile_ often use the
|
Users of _Subsurface-mobile_ typically use the
|
||||||
mobile app together with the desktop version of _Subsurface_, sharing dive information
|
mobile app together with the desktop version of _Subsurface_, sharing dive information
|
||||||
between the mobile and the desktop versions using a free _Subsurface Cloud_ account.
|
between the mobile and the desktop versions using a free _Subsurface Cloud_ account.
|
||||||
However _Subsurface-mobile_ is a fully fledged application in its own right that can
|
However _Subsurface-mobile_ can
|
||||||
also be used independently of the desktop version with or without the use of cloud storage.
|
also be used independently of the desktop version and does not require the use of cloud storage.
|
||||||
|
|
||||||
_Subsurface-mobile_ allows:
|
_Subsurface-mobile_ allows:
|
||||||
|
|
||||||
- Download and storage of dive log information using the _Subsurface_ cloud.
|
- Download and storage of dive log information using the _Subsurface_ cloud.
|
||||||
@ -52,56 +55,61 @@ _Subsurface-mobile_ allows:
|
|||||||
- Download dive data directly from some dive computers.
|
- Download dive data directly from some dive computers.
|
||||||
- Editing most of the dive log data, e.g. dive-master, buddy,
|
- Editing most of the dive log data, e.g. dive-master, buddy,
|
||||||
equipment or notes relating to a dive.
|
equipment or notes relating to a dive.
|
||||||
- Viewing the localities of recorded GPS positions and of dives
|
- Recording, storing and applying GPS positions to dives.
|
||||||
|
- Viewing the locations of recorded GPS positions and of dives
|
||||||
on a map.
|
on a map.
|
||||||
|
|
||||||
These items are discussed in greater detail below.
|
These items are discussed in greater detail in the following chapters.
|
||||||
|
|
||||||
_Subsurface-mobile_ has some limitations compared to _Subsurface_:
|
_Subsurface-mobile_ has some limitations compared to _Subsurface_:
|
||||||
|
|
||||||
- Only a subset of the dive computers supported for download by the desktop
|
- Only a subset of the dive computers supported for download by the desktop
|
||||||
version work with _Subsurface-mobile_, this being determined
|
version work with _Subsurface-mobile_. This limitation is
|
||||||
by hardware and OS limitations in the
|
mainly caused by hardware and OS limitations in the
|
||||||
two mobile platforms. On Android, a subset of
|
two mobile platforms. On Android, a subset of
|
||||||
dive computers that use USB serial cables or a Bluetooth / Bluetooth LE interface
|
dive computers that use USB serial cables or a Bluetooth / Bluetooth LE interface
|
||||||
are accessible. On iOS, only Bluetooth LE based
|
are accessible by _Subsurface-mobile_. On iOS, only Bluetooth LE based
|
||||||
dive computers are supported.
|
dive computers are supported.
|
||||||
- No dive planner.
|
- No dive planner.
|
||||||
- No printing.
|
- No printing.
|
||||||
- No support for media embedded in dive profiles (_Subsurface_ allows access to
|
- No support for media embedded in dive profiles (_Subsurface_ allows to reference images and video clips directly in the dive profile).
|
||||||
images and video clips directly from the dive profile).
|
|
||||||
|
|
||||||
== Installing _Subsurface-mobile_ on your mobile device
|
== Installing _Subsurface-mobile_ on your mobile device
|
||||||
|
|
||||||
Find _Subsurface-mobile_ in the _Google Play Store_ or the _Apple App Store_
|
Find _Subsurface-mobile_ in the _Google Play Store_ or the _Apple App Store_
|
||||||
and install it. For Android devices without access to the _Google Play Store_,
|
and install it. For Android devices without access to the _Google Play Store_
|
||||||
APKs can be found in the downloads folder on the _Subsurface_ website.
|
APKs can be found in the downloads folder on the _Subsurface_ website.
|
||||||
|
|
||||||
== Getting Support
|
== Getting Support
|
||||||
|
|
||||||
The best place to get support is the https://subsurface-divelog.org/user-forum[_Subsurface_ User Forum]. Additionally, _Subsurface-mobile_ allows
|
The best place to get support is the https://subsurface-divelog.org/user-forum[_Subsurface_ User Forum]. Additionally, _Subsurface-mobile_ allows
|
||||||
you to send a support request by tapping on _Ask for support_ in the _Help_ menu. This will open an
|
you to send a support email by tapping on _Ask for support_ in the _Help_ menu. This will open an
|
||||||
email to our in-app-support address in the native email client, including the relevant logs.
|
email to our in-app-support address in the native email client, including the relevant logs.
|
||||||
|
|
||||||
== User Interface
|
== User Interface
|
||||||
|
|
||||||
_Subsurface-mobile_ uses the same user interface philosophy on both Android and iOS, based on an
|
_Subsurface-mobile_ uses the same user interface philosophy on both Android and iOS, based on an
|
||||||
open source project called _Kirigami_, maintained by the _KDE/Plasma_ development community.
|
open source project called _Kirigami_ that is maintained by the _KDE/Plasma_ development community.
|
||||||
It has a slightly different look and feel than many native Android and iOS apps,
|
This user interface has a slightly different look and feel than many native Android and iOS apps,
|
||||||
but we find it easy and intuitive to work with.
|
but we (the developers) feel that it is very easy and intuitive to work with.
|
||||||
|
|
||||||
You have access to the _Main menu_ through a _Hamburger_ button (three short
|
On every screen you have access to the _Main menu_ through a _Hamburger_ button (three short
|
||||||
horizontal lines) in the lower left corner of the screen. Additionally, the _Main menu_ can be opened by swiping
|
horizontal lines) in the lower left corner. Additionally, the _Main menu_ can be opened by swiping
|
||||||
towards the right from the very left edge of the screen.
|
towards the right from the very left edge of the screen. The entries in the main menu are all explained
|
||||||
In addition, many screens have a _Context menu_ available through a button with three vertical dots in
|
starting in section xref:S_Dive_Management[_Dive Management_].
|
||||||
the lower right corner and that can be opened by tapping and holding a dive or trip header in the dive list.
|
|
||||||
|
On many pages there is also a _Context menu_ available through a button with three vertical dots in
|
||||||
|
the lower right corner.
|
||||||
|
In the dive list this _Context menu_ can also be opened by tapping and holding a dive or trip header.
|
||||||
|
|
||||||
image::mobile-images/ActionButton2.jpg["FIGURE: Action Button",float="left"]
|
image::mobile-images/ActionButton2.jpg["FIGURE: Action Button",float="left"]
|
||||||
At the bottom of many _Subsurface-mobile_ screens is a round
|
Additionally, at the bottom of many _Subsurface-mobile_ screens is a round
|
||||||
_Action button_ that provides quick access to the most commonly needed
|
_Action button_ that provides quick access to the most commonly needed
|
||||||
actions on that screen (see image on the left). Some screens have only
|
actions on that screen (see image on the left). On some screens there is only
|
||||||
the round central button, others have one or two additional
|
the round center button enabled, on others there are one or two additional
|
||||||
actions on either side of the central button.
|
actions available on either side of that center button.
|
||||||
|
|
||||||
|
unfloat::[]
|
||||||
|
|
||||||
On Android devices, use the Android Back
|
On Android devices, use the Android Back
|
||||||
button for "cancel", "discard" or "back" actions. For example, when
|
button for "cancel", "discard" or "back" actions. For example, when
|
||||||
@ -110,7 +118,7 @@ Android back button can be used to cancel the edit without saving changes.
|
|||||||
|
|
||||||
The image below indicates some of the important features of the menu system.
|
The image below indicates some of the important features of the menu system.
|
||||||
On the left is the main menu, activated as described above. On the right of the image
|
On the left is the main menu, activated as described above. On the right of the image
|
||||||
are the sub-menus.
|
are the items of all the sub-menus available.
|
||||||
|
|
||||||
image::mobile-images/Subsurface-mobile-menu-system.jpg["FIGURE: Subsurface-mobile menu system",align="center"]
|
image::mobile-images/Subsurface-mobile-menu-system.jpg["FIGURE: Subsurface-mobile menu system",align="center"]
|
||||||
|
|
||||||
@ -129,16 +137,16 @@ image::mobile-images/Credentials.jpg["FIGURE: Mobile credentials screen",align="
|
|||||||
|
|
||||||
=== Using _Subsurface-mobile_ without Cloud Storage
|
=== Using _Subsurface-mobile_ without Cloud Storage
|
||||||
Tap the "No cloud mode" button. The app will only store dive log information locally
|
Tap the "No cloud mode" button. The app will only store dive log information locally
|
||||||
on your device. Following installation an empty dive log is created.
|
on your device. After the first start the dive log will therefore be empty.
|
||||||
|
|
||||||
=== Using Cloud Storage
|
=== Using Cloud Storage
|
||||||
The _Subsurface_ maintainer provides a dedicated and
|
The _Subsurface_ maintainer provides a dedicated and
|
||||||
free Internet cloud storage account for users of _Subsurface_ and _Subsurface-mobile_.
|
free Internet cloud storage account for users of _Subsurface_ and _Subsurface-mobile_.
|
||||||
You can use this to store your dive log and to share your data between several computers
|
You can use this to store your dive log and to share your data between various computers
|
||||||
and devices. The _Subsurface_ team never accesses your dive data without explicit
|
and devices. The _Subsurface_ team never accesses your dive data without explicit
|
||||||
permission to do so, the data are not used for any other purpose than providing them to the user who
|
permission to do so, the data are not used for any other purpose than providing them to the user who
|
||||||
created them. There are no ads and no harvesting / analysis of the data / monetization of data
|
created them. There are no ads and no harvesting / analysis of the data
|
||||||
on the _Subsurface Cloud_ storage.
|
stored in the _Subsurface Cloud_ storage. There is no monetization whatsoever.
|
||||||
|
|
||||||
_Subsurface-mobile_ is sufficient to fully maintain a dive log. In addition you can use the
|
_Subsurface-mobile_ is sufficient to fully maintain a dive log. In addition you can use the
|
||||||
more advanced features in _Subsurface_ when you have access to a computer while still
|
more advanced features in _Subsurface_ when you have access to a computer while still
|
||||||
@ -148,7 +156,7 @@ The dive data in the cloud are cached locally on any device or computer that is
|
|||||||
the _Subsurface Cloud_ account.
|
the _Subsurface Cloud_ account.
|
||||||
It is easy to create backups of the data (for example in XML format) on the desktop: both the mobile
|
It is easy to create backups of the data (for example in XML format) on the desktop: both the mobile
|
||||||
device and the desktop keep a local copy of the data so that the dive log is always accessible, even
|
device and the desktop keep a local copy of the data so that the dive log is always accessible, even
|
||||||
without an Internet connection.
|
without Internet connection.
|
||||||
|
|
||||||
To create a _Subsurface Cloud_ account follow these steps:
|
To create a _Subsurface Cloud_ account follow these steps:
|
||||||
|
|
||||||
@ -162,8 +170,8 @@ If you have already set
|
|||||||
up an account on a different computer or device, simply enter the same credentials here.
|
up an account on a different computer or device, simply enter the same credentials here.
|
||||||
_Subsurface-mobile_ will now download your existing dive log data. Once the dive
|
_Subsurface-mobile_ will now download your existing dive log data. Once the dive
|
||||||
list has been downloaded from the cloud, _Subsurface-mobile_ usually works only with the the local
|
list has been downloaded from the cloud, _Subsurface-mobile_ usually works only with the the local
|
||||||
copy on the mobile device. This avoids long delays or even failure of operations if there is poor
|
copy on the mobile device. This avoids long delays or even failure of operations if there is a bad
|
||||||
internet connectivity. Remember to manually sync
|
(or no) internet connection, a situation fairly common at many dive sites. Remember to manually sync
|
||||||
with the server after making local changes (either by pulling down on the dive list, or by using the
|
with the server after making local changes (either by pulling down on the dive list, or by using the
|
||||||
manual sync entry in the Dive management menu entry).
|
manual sync entry in the Dive management menu entry).
|
||||||
|
|
||||||
@ -172,9 +180,6 @@ to the email address entered in the previous step. Enter this PIN into the field
|
|||||||
and tap the _Register_ button. After the PIN has been entered it
|
and tap the _Register_ button. After the PIN has been entered it
|
||||||
is no longer needed - it just proves that this is indeed your email account.
|
is no longer needed - it just proves that this is indeed your email account.
|
||||||
|
|
||||||
A https://www.youtube.com/watch?v=Vp_bEm5ZDRA[*video-tutorial*] is available that demonstrates
|
|
||||||
how to connect to the cloud.
|
|
||||||
|
|
||||||
At this point a new account has been created for you on the cloud server and access to the cloud is
|
At this point a new account has been created for you on the cloud server and access to the cloud is
|
||||||
enabled. In this case the dive list is initially empty. Start entering dives in the dive
|
enabled. In this case the dive list is initially empty. Start entering dives in the dive
|
||||||
log or download dive information from a supported dive computer.
|
log or download dive information from a supported dive computer.
|
||||||
@ -189,50 +194,72 @@ provide these again when launching the program.
|
|||||||
|
|
||||||
[blue]#After filling in the correct information and submitting it, I did not receive a PIN by email#
|
[blue]#After filling in the correct information and submitting it, I did not receive a PIN by email#
|
||||||
|
|
||||||
1. Check *carefully* for spelling mistakes in the email address you provided. This is a common problem since autocorrect often mangles email addresses.
|
1. Check *carefully* that you didn't make a spelling mistake in the email address you provided. You would be surprised how often this is the problem that people encounter, as autocorrect often mangles email addresses.
|
||||||
2. Check that the return email containing the PIN is not in the SPAM/Junk folder of your email client.
|
2. Check that the return email containing the PIN is not in the SPAM/Junk folder of your email client.
|
||||||
3. Wait for a few hours and check again for an email with a PIN.
|
3. Wait for a few hours and check again for an email with a PIN.
|
||||||
4. If there is still no email containing a PIN, send mail to in-app-support@subsurface-divelog.org
|
4. If there is still no email containing a PIN, send mail to in-app-support@subsurface-divelog.org
|
||||||
|
|
||||||
[blue]#I want to access the _Subsurface Cloud_ storage but I have forgotten my password. How can I reset my password?#
|
[blue]#I want to access the _Subsurface Cloud_ storage but I have forgotten my password. How can I reset my password?#
|
||||||
|
|
||||||
The _Help menu_ has an option _Reset forgotten Subsurface Cloud password_. Use that or go to the https://cloud.subsurface-divelog.org/passwordreset[password reset website]
|
There is a _Reset forgotten Subsurface Cloud password_ entry in the _Help_ menu in
|
||||||
|
_Subsurface-mobile_, or you can go to the https://cloud.subsurface-divelog.org/passwordreset[password reset website]
|
||||||
|
|
||||||
Simply enter the same email address that you used during cloud registration and follow the indicated steps.
|
Simply enter the same email address that you used during cloud registration and follow the indicated steps. A confirmation email will be sent to your account to prevent abuse of this system.
|
||||||
To prevent abuse of this system a confirmation email will be sent to your account.
|
|
||||||
|
|
||||||
****
|
****
|
||||||
|
|
||||||
The dive log can be updated automatically. If there is Internet connectivity, _Subsurface-mobile_ accesses
|
|
||||||
the cloud-based dive log to verify that the local copy of the dive log is still the
|
|
||||||
same as the log in the cloud server. If not, the local copy and the copy on
|
|
||||||
the server are synchronized.
|
|
||||||
|
|
||||||
== The Dive List
|
== The Dive List
|
||||||
|
|
||||||
The _Dive List_ is the heart of _Subsurface-mobile_ because most of the actions
|
Most of the actions of _Subsurface-mobile_ center around the dives in the
|
||||||
center around the dives on the dive list. While the dive list is loading from the cloud,
|
dive list. While the dive list is loading from the cloud,
|
||||||
a message appears at the bottom of the screen, indicating that the cloud is
|
a message appears at the bottom of the screen, indicating that the cloud is
|
||||||
being accessed, after which the dive list is shown. Once the list is loaded you can scroll up
|
being accessed, after which the dive list is shown. Once the list is loaded you can scroll up
|
||||||
and down through your dive history.
|
and down through your dive history.
|
||||||
|
_Subsurface_ typically structures your dive list by dive trips, but using those is optional
|
||||||
|
(and for divers who are lucky enough to be able to dive all the time at local dive sites,
|
||||||
|
trips might only make sense for dive vacations).
|
||||||
|
|
||||||
The Dive List consists of two types of entries:
|
Two xref:S_Dive_Management[_Dive Management_] actions are available by tapping on the
|
||||||
|
action buttons at the bottom of the _Dive List_ page:
|
||||||
|
To xref:S_Download[_Download dives from a dive computer_], tap the main action button. If you wish
|
||||||
|
to xref:S_Add_Dive[_Manually add a dive_], tap the + button in the action bar. Both of these
|
||||||
|
actions are described in detail below.
|
||||||
|
|
||||||
1. *Trip headers*. A trip header is a line describing the year and month during which a dive trip
|
Tapping an existing dive on the list brings up a display of the xref:S_ViewDive[_Details View_]
|
||||||
took place, as well as the geographical area of the trip. The second line in the lefthand image below indicates that a 10-dive trip
|
for that dive including the dive profile, notes, and additional information.
|
||||||
was made to Guinjata, Moçambique during December 2016.
|
|
||||||
|
|
||||||
2. *Individual dive records*. Tapping a trip header expands the dive list to show (or hide) the individual dives performed during the trip. Each dive is represented by a dive record. By default the dives during the last trip are listed with older dives at the bottom and recent dives at the top of the list. In the lefthand image below the last dive during
|
image::mobile-images/DiveListAndDetails.jpg["FIGURE: Dive list screen",align="center"]
|
||||||
the Guinjata trip was in the Inhambane Estuary.
|
|
||||||
|
|
||||||
image::mobile-images/Divelist2.jpg["FIGURE: Dive list screen",align="center"]
|
A tap and hold on a dive or a trip header opens the context menu for that entry.
|
||||||
|
|
||||||
|
For a dive this allows moving the dive into or out of trips or between trips, deleting
|
||||||
|
the dive or showing the dive on an integrated map viewer (assuming the dive has the
|
||||||
|
necessary GPS information). The context menu also allows access to the undo and redo
|
||||||
|
system that allows you to step backwards and forwards through recent changes.
|
||||||
|
|
||||||
|
For a trip header the context menu gives you an option to edit the trip title (typically
|
||||||
|
the trip location) and some quick notes for the trip.
|
||||||
|
|
||||||
|
=== Filter the dive list
|
||||||
|
|
||||||
|
unfloat::[]
|
||||||
|
|
||||||
|
image::mobile-images/FilterButton.jpg["FIGURE: Filter button",float="right"]
|
||||||
|
The left action button shows three horizontal lines of declining length, symbolizing a filter.
|
||||||
|
When you tap this button, a text entry line appears at the top of screen which will allow you to
|
||||||
|
enter a filter search term that is either used in a full text search, a search just of the people
|
||||||
|
involved in a dive (in the Divemaster and Buddy fields), or a search of the tags you have used
|
||||||
|
to classify your dives. Tapping the filter button again clears the filter and shows the full
|
||||||
|
dive list.
|
||||||
|
|
||||||
|
image::mobile-images/FilteredDivelist.jpg["FIGURE: Filter tool",align="center"]
|
||||||
|
|
||||||
[[S_View_Dive]]
|
[[S_View_Dive]]
|
||||||
=== View a dive: the Details view
|
=== View a dive
|
||||||
|
|
||||||
When you tap on a dive in the _Dive List_, a _Dive Details_ page with the dive profile
|
When you tap on a dive in the _Dive List_, a _Dive Details_ page with the dive profile
|
||||||
and many important details about the dive is opened (image on right above). You can use a pinch gesture
|
and many important details about the dive is opened. You can use a pinch gesture
|
||||||
to zoom into the profile. Tapping and holding with one finger (until
|
to zoom into the profile. Tapping and holding with one finger (until
|
||||||
the profile becomes translucent) allows you
|
the profile becomes translucent) allows you
|
||||||
to pan the profile and see more details in specific parts of the profile.
|
to pan the profile and see more details in specific parts of the profile.
|
||||||
@ -257,51 +284,81 @@ to open a map with the dive site in an integrated map viewer.
|
|||||||
This of course is only possible if the dive site is associated with GPS
|
This of course is only possible if the dive site is associated with GPS
|
||||||
information.
|
information.
|
||||||
|
|
||||||
[[S_Filter]]
|
[[S_Edit_Dive]]
|
||||||
=== Filter the dive list
|
=== Edit a dive
|
||||||
|
|
||||||
By default, all the dives in the dive log are shown in the dive list. After several years your dive
|
image::mobile-images/DiveDetailsEdit.jpg["FIGURE: Dive edit screen",align="center"]
|
||||||
log can become quite long and, sometimes, you might like to list only the dives of a particular
|
At the bottom of the _Dive Details_ screen, the action button is a pencil.
|
||||||
type, e.g. those at a particular dive site or those with a specific buddy or dive master. Use the
|
Tapping the pencil button changes the page and enables editing
|
||||||
Filter to achieve this. The filter mechanism searches through all the information for each dive,
|
the dive details, e.g. adding text to the dive notes
|
||||||
looking for one or more key words. Only the dives containing these key words are listed in the dive
|
or changing the names or values of some of the information (see image on left).
|
||||||
list. To Filter the dive list, tap the Filter action button:
|
It may be necessary to scroll the window to access all the available fields.
|
||||||
|
At the bottom of the edit screen is a _Save_ action button. Tap this to save
|
||||||
|
the new information, after which the dive list screen is
|
||||||
|
updated and displayed. To cancel any edits, tap the Android _Back_ Button or
|
||||||
|
the application back button at the top left of the screen on iOS.
|
||||||
|
|
||||||
image::mobile-images/FilterButton.jpg["FIGURE: Filter button",align="center"]
|
|
||||||
|
|
||||||
at the bottom of the dive list. A text box appears at the top of the screen (image below). Type the
|
// == Copy dive information from one dive to another
|
||||||
word(s) that you would like to use as a filter.
|
//
|
||||||
|
// When editing dives it is possible to transfer information from one dive to another. For instance,
|
||||||
|
// when diving with the same buddy and the same equipment configuration during a particular dive trip
|
||||||
|
// it can be efficient to simply copy all this information from the previous dive into the dive that
|
||||||
|
// is being edited. Currently a standard list of dive information is copied to the clipboard:
|
||||||
|
//
|
||||||
|
// Divemaster, Buddy, Suit, Tags, Cylinders, Weights.
|
||||||
|
//
|
||||||
|
// Copy and paste dive information is performed on the Dive List. Long-press on a dive. A panel
|
||||||
|
// with three icons appears on top the selected dive :
|
||||||
|
//
|
||||||
|
// image::mobile-images/CopyDeleteDive.jpg["FIGURE: Copy/Delete dive information",align="center"]
|
||||||
|
//
|
||||||
|
// To copy the above information to the clipboard, select the leftmost of the three icons. A "Copy"
|
||||||
|
// notification briefly appears on the screen. Now long-press the dive into which the copied information
|
||||||
|
// needs to be pasted. The same three icons appear on the target dive. Select the middle icon. A "Paste"
|
||||||
|
// notification briefly appears on the screen. This completes the copy-and-paste action. Continue by
|
||||||
|
// reviewing this new (pasted) information by manually editing the target dive.
|
||||||
|
//
|
||||||
|
// To choose what dive details to copy, long-press the copy button. This will open
|
||||||
|
// up a configuration page where you can toggle the details you want to copy over
|
||||||
|
// to the destination.
|
||||||
|
|
||||||
image::mobile-images/Filter.jpg["FIGURE: Filter tool",align="center"]
|
=== Deleting a dive
|
||||||
|
|
||||||
Three filter modes exist. "Fulltext" searches all text strings. Selecting "People" lists buddies and
|
You can delete a dive from the dive list by long-pressing a dive and selecting delete in the context menu.
|
||||||
dive masters, while "Tags" only filters for tags containing the given text. Filters are not case-sensitive.
|
You can also delete a dive from the _Details View_ by tapping on the trash can icon on the right
|
||||||
To clear the filter, remove the key words from the text box and select the Filter action button to
|
side of the _Action Button_
|
||||||
switch off filtering. The image above represents a full-text search for dives with the word "nitrox".
|
|
||||||
|
If you deleted the wrong dive by mistake you can easily undo the operation in the context menu.
|
||||||
|
|
||||||
|
image::mobile-images/UndoDelete.jpg["FIGURE: Undo delete dive",align="center"]
|
||||||
|
|
||||||
|
|
||||||
[[S_Dive_Management]]
|
[[S_Dive_Management]]
|
||||||
== Dive List Management and adding dive information
|
== Dive Management
|
||||||
|
|
||||||
|
A central part of _Subsurface-mobile_ is the ability to store the dive
|
||||||
|
log using the _Subsurface_ cloud storage.
|
||||||
|
This provides security against loss or damage of the dive information in a local copy
|
||||||
|
and allows the desktop version of _Subsurface_ to
|
||||||
|
access changes made using the mobile device. This feature is accessed
|
||||||
|
through the _Dive management_ option in the main menu.
|
||||||
|
|
||||||
[[S_Add_Dive]]
|
[[S_Add_Dive]]
|
||||||
=== Manually adding a new dive to the dive list
|
=== Manually adding a new dive to the dive list
|
||||||
|
|
||||||
This https://www.youtube.com/watch?v=sF8KB_r0rFw[*video-tutorial*] explains how to add information to a
|
|
||||||
manually-entered dive.
|
|
||||||
|
|
||||||
You can manually add a dive to the existing dive list. On the dive list
|
You can manually add a dive to the existing dive list. On the dive list
|
||||||
tap the "plus" sign in the action bar, or use the
|
tap the "plus"-icon in the action bar, or use the
|
||||||
main menu and tap _Dive management -> Add dive manually_. This opens a screen that is
|
main menu and tap _Dive management -> Add dive manually_. This opens a screen that is
|
||||||
identical to the editing screen discussed above. When a dive is added manually, you
|
identical to the editing screen described above. When a dive is added manually, you
|
||||||
cannot directly add a dive profile from a dive computer. However, if you do not use a
|
cannot directly add a dive profile from a dive computer. However, if you do not use a
|
||||||
dive computer, the duration, depth and several other bits of information about
|
dive computer, the duration, depth and several other bits of information about
|
||||||
the new dive can be entered. The _Action button_ at the bottom of the screen
|
the new dive can be entered. The _Action button_ at the bottom of the screen
|
||||||
contains a disk symbol. Tap this to save the new dive. To cancel any edits, tap the _Back_ button.
|
contains a disk symbol. Tap this to save the new dive. To cancel any edits, tap the _Back_ button.
|
||||||
The left-hand image below shows a screenshot of a dive being created and the right-hand image shows
|
The left-hand image below shows a screenshot of a dive being created and the right-hand image shows
|
||||||
the same dive in _Details View_. After editing the dive information, the dive trip information
|
the same dive in _Details View_.
|
||||||
needs to be edited as described in the section above on xref:S_Divetrip[Dive trip editing].
|
|
||||||
|
|
||||||
image::mobile-images/Manualdive.jpg["FIGURE: Manual dive entry screen",align="center"]
|
image::mobile-images/ManualAddDive.jpg["FIGURE: Manual dive entry screen",align="center"]
|
||||||
|
|
||||||
[[S_Download]]
|
[[S_Download]]
|
||||||
=== Download dives from a dive computer
|
=== Download dives from a dive computer
|
||||||
@ -309,24 +366,23 @@ image::mobile-images/Manualdive.jpg["FIGURE: Manual dive entry screen",align="ce
|
|||||||
There are several ways to get to the _Download Page_. You can either tap on the main _Action Button_ on
|
There are several ways to get to the _Download Page_. You can either tap on the main _Action Button_ on
|
||||||
the bottom of the _Dive List_, or you can select _Dive management -> Download from DC_ in the main menu.
|
the bottom of the _Dive List_, or you can select _Dive management -> Download from DC_ in the main menu.
|
||||||
On Android devices, when you plug in a USB serial cable for a dive computer, the _Download Page_ will be
|
On Android devices, when you plug in a USB serial cable for a dive computer, the _Download Page_ will be
|
||||||
opened automatically. A screen is shown requiring that the user specify
|
opened automatically.
|
||||||
the names of the vendor and model of the dive computer. For instance, when using a Shearwater Petrel dive
|
|
||||||
computer, the vendor is _Shearwater_ and the Dive computer name is _Petrel_ (see image on the left, below).
|
The download feature on smartphones supports only a limited number of dive computers. On
|
||||||
*Caveats:* The download feature in smartphones supports only a limited number of dive computers. On
|
|
||||||
Android devices these are typically dive computers using a serial USB interface
|
Android devices these are typically dive computers using a serial USB interface
|
||||||
using a USB OTG cable or a simple USB C-A adapter on newer devices.
|
using a USB OTG cable or a simple USB C-A adapter on newer devices.
|
||||||
Android devices also support Bluetooth dive computers that
|
Android devices also support Bluetooth dive computers that
|
||||||
are supported in _Subsurface_ on the desktop. Both Android and iOS devices allow direct
|
are supported in _Subsurface_ on the desktop. Both Android and iOS devices allow direct
|
||||||
download of dive data from a handful of Bluetooth LE enabled dive
|
download of dive data from a handful of Bluetooth LE enabled dive
|
||||||
computers. Use the _Vendor name_ and _Dive Computer_ drop-downs to pick the correct
|
computers.
|
||||||
dive computer. When downloading from multiple different dive computers, shortcut
|
|
||||||
buttons appear below the drop-downs to easily switch between them. In the xref:S_Settings[_Settings_] menu
|
|
||||||
you can remove these buttons, a useful feature for removing buttons of dive
|
|
||||||
computers that are not used any more. Achieve this by selecting the option
|
|
||||||
_Forget remembered dive computers_ in the xref:S_Settings[_Settings_] menu.
|
|
||||||
After all these caveats, let us proceed with download.
|
|
||||||
|
|
||||||
*TODO: image of DL missing - or link to the 7.2.3 Start the download*
|
Use the _Vendor name_ and _Dive Computer_ drop-downs to pick the correct
|
||||||
|
dive computer.
|
||||||
|
For instance, when using a Shearwater Petrel dive
|
||||||
|
computer, the vendor is _Shearwater_ and the product is _Petrel_(see left image below -
|
||||||
|
section Start the download).
|
||||||
|
|
||||||
|
TODO: image of DL missing - or link to the 7.2.3 Start the download
|
||||||
|
|
||||||
When downloading from multiple different dive computers, shortcut
|
When downloading from multiple different dive computers, shortcut
|
||||||
buttons appear below the drop-downs to easily switch between them. In the xref:S_Settings[_Settings_] menu
|
buttons appear below the drop-downs to easily switch between them. In the xref:S_Settings[_Settings_] menu
|
||||||
@ -337,9 +393,9 @@ _Forget remembered dive computers_ in the xref:S_Settings[_Settings_] menu.
|
|||||||
==== Download from USB serial dive computers
|
==== Download from USB serial dive computers
|
||||||
This feature is not supported on iOS.
|
This feature is not supported on iOS.
|
||||||
|
|
||||||
[width="100%"]
|
[width="100%", frame="None"]
|
||||||
|=======
|
|=======
|
||||||
a|image:mobile-images/USB-OTG.jpg["FIGURE: USB-OTG cable",align="center"] |
|
a|image::mobile-images/USB-OTG.jpg["FIGURE: USB-OTG cable",align="center"] |
|
||||||
Most current Android devices now have a USB
|
Most current Android devices now have a USB
|
||||||
Type C port and come with a simple A-to-C adapter plug, which lets you plug in
|
Type C port and come with a simple A-to-C adapter plug, which lets you plug in
|
||||||
the dive computer cable into the phone or tablet.
|
the dive computer cable into the phone or tablet.
|
||||||
@ -358,116 +414,71 @@ have been successfully used (image on right, below). These appear
|
|||||||
as buttons under a heading "_Previously used dive computers_".
|
as buttons under a heading "_Previously used dive computers_".
|
||||||
Select the appropriate button. Having connected the USB dive computer to the
|
Select the appropriate button. Having connected the USB dive computer to the
|
||||||
_Subsurface_ computer and having selected the appropriate vendor and dive computer,
|
_Subsurface_ computer and having selected the appropriate vendor and dive computer,
|
||||||
ensure that the _Connection_ text box shows the corresponding connection. For a small number of dive
|
ensure that the Connection text box shows the corresponding connection. For a small number of dive
|
||||||
computers the connection name shows the dive computer vendor, for most only the cable chipset vendor
|
computers the connection name shows the dive computer vendor, for most only the cable chipset vendor
|
||||||
(and USB connection number) is shown. Most users only connect one USB dive computer to
|
(and USB connection number) is shown. Most users of course only connect one USB dive computer to
|
||||||
their Android device and then things are fairly straightforward. A dialog appears asking if
|
their Android device and then things are fairly straightforward. A dialog will pop up and ask if
|
||||||
you want to use _Subsurface-mobile_ to connect to the device. If you confirm, then _Subsurface-mobile_
|
you want to use _Subsurface-mobile_ to connect to the device. If you confirm, then _Subsurface-mobile_ will
|
||||||
opens the dive computer download screen with the correct connection selected (and if it can deduce
|
open to the dive computer download screen with the correct connection selected (and if it can deduce
|
||||||
the correct dive computer based on the cable used, even that information is already pre-filled).
|
the correct dive computer based on the cable used, even that information is already pre-filled).
|
||||||
|
|
||||||
==== Download from Bluetooth and Bluetooth LE dive computers
|
==== Download from BT/BLW dive computers
|
||||||
|
|
||||||
This https://www.youtube.com/watch?v=DCi70WZMTws[*video-tutorial*] demonstrates downloading dives from a
|
The process for Bluetooth download is slightly different between Android and iOS.
|
||||||
Bluetooth-equipped dive computer.
|
|
||||||
|
|
||||||
The process for Bluetooth download differs between Android and iOS. In *iOS* the best
|
In our testing we got the best results on iOS when the dive computer was
|
||||||
results are obtained when the dive computer was
|
in Bluetooth mode before _Subsurface-mobile_ is started. On most dive
|
||||||
in Bluetooth LE mode before _Subsurface-mobile_ is started. On most dive
|
computers this is done through a menu entry, others (like the Suunto
|
||||||
computers this is done through a menu entry, others (e.g. Suunto) always respond to Bluetooth LE requests.
|
models) always respond to Bluetooth LE requests. However, on Android devices,
|
||||||
|
you should first establish a link between the
|
||||||
|
Bluetooth or Bluetooth LE dive computer and the mobile device using
|
||||||
|
Android utilities. See below for more details.
|
||||||
|
|
||||||
In contrast, for Bluetooth-equipped dive computers and *Android* devices, first establish a Bluetooth connection
|
For Bluetooth-equipped dive computers and Android devices, establish a Bluetooth connection between the dive computer and the
|
||||||
between the dive computer and the
|
|
||||||
mobile device using Android system tools to achieve pairing.
|
mobile device using Android system tools to achieve pairing.
|
||||||
For many Android devices,
|
For many Android devices,
|
||||||
the Settings -> Bluetooth tool of Android is probably appropriate.
|
the Settings -> Bluetooth tool of Android is probably appropriate.
|
||||||
_Subsurface-mobile_ performs communication using both Bluetooth and Bluetooth LE (BLE).
|
_Subsurface-mobile_ performs communication using both Bluetooth and Bluetooth-low-energy (BLE).
|
||||||
The best choice of Bluetooth communication is often made by the software and the user need not be concerned
|
The best choice of Bluetooth communication is often made by the software and the user need not be concerned with this.
|
||||||
with this.
|
For dive computers with both Bluetooth and BLE, a separate button is presented on the download
|
||||||
For dive computers with both Bluetooth and BLE, a separate dive computer button is presented on the download
|
|
||||||
screen for each mode of communication, allowing a choice. Use the _Connection_ value to distinguish between the
|
screen for each mode of communication, allowing a choice. Use the _Connection_ value to distinguish between the
|
||||||
two options. In the image on the right, below, there are three buttons labeled "Shearwater Petrel 2".
|
two options. In the image on the below right, there are three buttons labeled "Shearwater Petrel 2". These represent two Shearwater Petrel dive computers, one of which can communicate in both Bluetooth as well as BLE. The _Connection_
|
||||||
These represent two Shearwater Petrel dive computers, one of which can communicate in both Bluetooth as well as BLE.
|
information indicates that the Petrel with no BLE is selected.
|
||||||
The _Connection_ information in the image below indicates that the Petrel with no BLE is selected. For
|
|
||||||
Bluetooth LE dive computers, the _Connection_ value has an "LE" prefix.
|
|
||||||
|
|
||||||
This https://www.youtube.com/watch?v=4MtQqm4o7bw[*video-tutorial*] demonstrates setting up a
|
|
||||||
Bluetooth connection with an Android device.
|
|
||||||
|
|
||||||
==== Start the download
|
==== Start the download
|
||||||
|
|
||||||
With communication between dive computer and _Subsurface-mobile_
|
With communication between dive computer and _Subsurface-mobile_
|
||||||
having been set up, tap the _Download_ button. Be patient because the download can take a while - with many
|
having been set up, tap the _Download_ button. Be patient because the download can take a while - with many
|
||||||
long dives and a slow Bluetooth LE connection we have seen download times of 45 minutes or longer. But usually
|
long dives and a slow BLE connection we have seen download times of 45 minutes or longer. But usually downloading
|
||||||
downloading
|
|
||||||
a day's worth of diving happens reasonably quickly.
|
a day's worth of diving happens reasonably quickly.
|
||||||
The downloaded dives appear in the bottom part of the screen,
|
The downloaded dives appear in the bottom part of the screen,
|
||||||
the most recent dive at the top (see right image below).
|
the most recent dive at the top (see right image below).
|
||||||
|
|
||||||
Each dive has a check-box on the left hand side, used for selecting which dives you want to add to the
|
Each dive has a check-box on the left hand side, used for selecting which dives you want to add to the
|
||||||
_Subsurface-mobile_ dive list: dives that are not checked are ignored. Once you have picked the dives
|
_Subsurface-mobile_ dive list: dives that are not checked are ignored. Once you picked the dives
|
||||||
you want to add to the dive list, tap the button at the bottom left labeled _Accept_. The selected dives will
|
you want to add to the dive list, tap the button at the bottom left labeled _Accept_. The selected dives will
|
||||||
now appear as part of
|
now appear as part of
|
||||||
the _Subsurface-mobile_ dive list.
|
the _Subsurface-mobile_ dive list. The downloaded dive information can be edited as described in the section
|
||||||
|
above xref:S_Edit_Dive[Edit a dive].
|
||||||
|
|
||||||
image::mobile-images/DC-Download.jpg["FIGURE: DC download screen",align="center"]
|
image::mobile-images/DC-Download.jpg["FIGURE: DC download screen",align="center"]
|
||||||
|
|
||||||
[[S_Edit_Dive]]
|
|
||||||
=== Edit the dive information
|
|
||||||
|
|
||||||
This https://www.youtube.com/watch?v=pE3ujzGw_7o[*video-tutorial*] explains how to add information about a dive.
|
|
||||||
|
|
||||||
image::mobile-images/Editdive.jpg["FIGURE: Dive edit screen",align="center"]
|
|
||||||
|
|
||||||
At the bottom of the _Dive Details_ screen the action button is a pencil.
|
|
||||||
Tapping the pencil button changes the page and enables edit boxes that allow
|
|
||||||
modifying the existing dive information, e.g. adding text to the dive notes
|
|
||||||
or changing the names or values of some of the information (see image above).
|
|
||||||
It may be necessary to scroll the window to access all the information.
|
|
||||||
At the bottom of the edit screen is a _Save_ action button. Tap this to save
|
|
||||||
the new information, after which the dive list screen is
|
|
||||||
updated and shown. To cancel any edits, tap the Android _Back_ Button or
|
|
||||||
the application back button at the top left of the screen on iOS.
|
|
||||||
|
|
||||||
[[S_Divetrip]]
|
|
||||||
== Edit the dive trip information
|
|
||||||
|
|
||||||
When a new dive(s) is entered manually or downloaded from dive computer, a trip header is created at the
|
|
||||||
top of the dive list only showing the month and the year of the dive trip as well as the number of dives
|
|
||||||
during the trip (image on left below, showing a trip header with "May 2018", the trip comprising two dives).
|
|
||||||
You would probably like to include information about the place
|
|
||||||
where the trip took place, e.g. "Channel Islands" or the dive charter company used. In this case long-press
|
|
||||||
the dive trip header to activate the context menu. Select the option "Edit trip details" to open a panel
|
|
||||||
for typing information about the trip (image on right, below). Having provided the required information,
|
|
||||||
tap the _Save_ action button at the bottom of the screen. This returns you to the dive list, showing some of
|
|
||||||
the dive trip information that has just been provided.
|
|
||||||
|
|
||||||
image::mobile-images/TripDetails.jpg["FIGURE: Edit trip details",align="center"]
|
|
||||||
|
|
||||||
=== Deleting a dive
|
|
||||||
|
|
||||||
Delete a dive from the dive list by long-pressing a dive and selecting delete in the context menu.
|
|
||||||
If the wrong dive was deleted by mistake you can easily undo the operation by using the context menu.
|
|
||||||
|
|
||||||
image::mobile-images/Delete_undo.jpg["FIGURE: Undo delete dive",align="center"]
|
|
||||||
|
|
||||||
== Interacting with the cloud storage
|
|
||||||
|
|
||||||
=== Manually sync the dive log with the _Subsurface Cloud_
|
=== Manually sync the dive log with the _Subsurface Cloud_
|
||||||
|
|
||||||
As the name indicates, this ensures that the local changes on the mobile device and changes
|
As the name indicates, this ensures that the local changes on the mobile device and changes
|
||||||
made by other devices and computers to the data stored in the _Subsurface Cloud_ are synchronized.
|
made by other devices and computers to the data stored in the _Subsurface Cloud_ are synchronized.
|
||||||
It is highly recommended to sync with cloud storage after downloading new dives from a dive computer
|
It is highly recommended to sync with cloud storage after downloading new dives from a dive computer
|
||||||
or after manually adding or editing dive information on the mobile device.
|
or manually adding or editing dive information on the mobile device.
|
||||||
This can also be triggered by pulling down (and briefly holding) the topmost entry of the _Dive List_.
|
|
||||||
|
This can also be triggered by pulling down (and briefly holding) the _Dive List_.
|
||||||
|
|
||||||
=== Enable cloud auto sync
|
=== Enable cloud auto sync
|
||||||
|
|
||||||
By default _Subsurface-mobile_ runs offline and only syncs the dive list
|
By default _Subsurface-mobile_ runs offline and only syncs the dive list
|
||||||
with cloud storage when explicitly told to do so (see the previous entry above).
|
with cloud storage when explicitly told to do so (see the previous entry above).
|
||||||
You can choose to always sync with the cloud server. This is not
|
You can choose to always sync with the cloud servers. This is not
|
||||||
recommended unless you are in
|
recommended unless you are in
|
||||||
an area with a fast and reliable Internet connection, as otherwise
|
an area with a fast and reliable internet connection, as otherwise
|
||||||
_Subsurface-mobile_ might appear to hang between operations as it tries to
|
_Subsurface-mobile_ might appear to hang between operations as it tries to
|
||||||
connect to the cloud server. Selecting _Enable cloud auto sync_ causes
|
connect to the cloud server. Selecting _Enable cloud auto sync_ causes
|
||||||
the local dive log to be synchronized with the copy in the cloud after most changes as well
|
the local dive log to be synchronized with the copy in the cloud after most changes as well
|
||||||
@ -476,7 +487,7 @@ of closing an app (you can just kill it, which doesn't allow for a final sync wi
|
|||||||
In general it is safer to manually sync with the cloud once you are done making changes in
|
In general it is safer to manually sync with the cloud once you are done making changes in
|
||||||
_Subsurface-mobile_.
|
_Subsurface-mobile_.
|
||||||
|
|
||||||
== Dive Summary
|
=== Dive Summary
|
||||||
|
|
||||||
The _Dive Summary_ page provides a very simple overview of your diving activities - which can for example
|
The _Dive Summary_ page provides a very simple overview of your diving activities - which can for example
|
||||||
be useful when documenting total dive experience and recent dive activity for a dive center at
|
be useful when documenting total dive experience and recent dive activity for a dive center at
|
||||||
@ -486,232 +497,73 @@ The summary page lists the date of your first dive in the dive list as well as y
|
|||||||
It also provides two columns of data for selectable time ranges (by default all dives in the dive list
|
It also provides two columns of data for selectable time ranges (by default all dives in the dive list
|
||||||
and the dives during the last six months.
|
and the dives during the last six months.
|
||||||
|
|
||||||
|
=== Export
|
||||||
[[S_Stats]]
|
|
||||||
== Dive Statistics
|
|
||||||
|
|
||||||
[width="100%", cols="2,3"]
|
|
||||||
|===
|
|
||||||
a|image:mobile-images/StatsPanel.jpg["Image: Statistics panel",float="left"] |
|
|
||||||
Creating meaningful statistics that convey the information you are looking for is surprisingly hard.
|
|
||||||
Different users have very different needs and very different expectations. Subsurface-Mobile provides
|
|
||||||
a rather detailed set of statistics features to summarize information from the dive log in a graphical
|
|
||||||
way. To access the dive statistics tool, select _Main Menu_ -> _Statistics_. The statistics tool is
|
|
||||||
so flexible that it is impossible to cover every possible use case. Rather, we provide a conceptual
|
|
||||||
introduction, followed by specific examples. The tool can be closed using the _Back_ button (bottom
|
|
||||||
right in Android).
|
|
||||||
|
|
||||||
The Statistics tool has two panels (image on left):
|
|
||||||
|
|
||||||
1. A setup panel containing comboboxes for requesting a graph (top).
|
|
||||||
|
|
||||||
2. The graph that has been requested (bottom).
|
|
||||||
|
|
||||||
|===
|
|
||||||
|
|
||||||
[[S_Stats_Intro]]
|
|
||||||
****
|
|
||||||
*A diver's introduction to statistical graphs*
|
|
||||||
[icon="images/icons/important.png"]
|
|
||||||
[IMPORTANT]
|
|
||||||
|
|
||||||
The extreme flexibility of the Statistics tool means that you need to provide detailed information about
|
|
||||||
what information Subsurface should provide. It helps to have a clear objective, i.e. a solid understanding of
|
|
||||||
what you want Subsurface to show you. In other words, you need to formulate the correct question. There
|
|
||||||
are so many graphical display options that, if you do not formulate the question correctly, the information
|
|
||||||
is unlikely to be presented in a valid or appropriate way. Because all statistical results in Subsurface
|
|
||||||
are shown as graphs, formulating an appropriate specification requires four steps:
|
|
||||||
|
|
||||||
a) Which dives do you wish to graph? If required, use the xref:S_Filter[Filter button] for selecting specific dives to be analyzed.
|
|
||||||
|
|
||||||
b) Which variable should be displayed along the bottom horizontal axis of the graph?
|
|
||||||
Let's say you wish to see how many dives you performed each year. In this case the variable along the bottom
|
|
||||||
horizontal axis would be "Year". Alternatively, if you wished to compare the mean depth of your dives using
|
|
||||||
different suit types, then "Suit type" would be selected as the variable for the bottom horizontal axis.
|
|
||||||
Alternatively, if you wished to visualize the water temperature for dives of different dive depths,
|
|
||||||
then you would select "Max. depth" as the variable on the horizontal axis (see image below). The variable
|
|
||||||
along the horizontal axis is also called the "base variable", the "X-axis variable" or the "independent
|
|
||||||
variable": it defines the basic units or categories used for analysis.
|
|
||||||
|
|
||||||
image::mobile-images/StatsGraphAxes.jpg["Example: Statistics graph axes",align="left"]
|
|
||||||
|
|
||||||
c) Which variable should be displayed along the left-hand vertical axis of the graph? This is the variable
|
|
||||||
that you are primarily interested in. In some cases this could just be a count such as "No. of dives".
|
|
||||||
However, if you are interested in water temperature at different dive depths, you would select "Water
|
|
||||||
temperature" as the variable along the vertical axis (see image above). In this case you are primarily
|
|
||||||
interested in water temperature, not in dive depth (which would be the variable along the horizontal
|
|
||||||
axis). The variable along the vertical axis is also called the "data variable" or the "dependent variable":
|
|
||||||
it is the variable affected by (or dependent on) the values of the variable along the horizontal axis, as
|
|
||||||
in the graph above.
|
|
||||||
|
|
||||||
*NB:* Since, in Subsurface-Mobile, the graphs can be rotated to be horizontally-oriented or vertically oriented,
|
|
||||||
the terms "horizontal axis variable" and "vertical axis variable" are not appropriate. We use the term *Base
|
|
||||||
variable* to denote the conventional horizontal axis variable and the *Data variable* to denote the conventional
|
|
||||||
vertical axis variable.
|
|
||||||
|
|
||||||
d) Which chart type do you require? By default Subsurface selects the most appropriate graph type, but this
|
|
||||||
is a user-selectable option. Taking the example of water temperature at various depths above, the image below
|
|
||||||
shows three of the possible chart types of the same data: Image A shows the raw data by plotting the exact
|
|
||||||
temperature and depth for each dive. Image B, however, groups the dives in 5m depth intervals within which the
|
|
||||||
temperature for each dive is indicated (the red marks are explained below). Image C also groups the dives in 5m
|
|
||||||
depth intervals. However, in this case the minimum, maximum, mean, upper quartile and lower quartile are shown
|
|
||||||
for each depth class.
|
|
||||||
|
|
||||||
image::mobile-images/StatsGraphOptions.jpg["Statistics graph options",align="left"]
|
|
||||||
|
|
||||||
The point of the discussion above is to show that, _before initiating a graph, you need to think carefully
|
|
||||||
about what you want Subsurface to show_, at least keeping the above four aspects in consideration.
|
|
||||||
|
|
||||||
*A more technical note on the valid use of statistical graphs*
|
|
||||||
|
|
||||||
When graphing variables from a dive log, there is an important distinction between _continuous variables_ and
|
|
||||||
_categorical variables_. These two data types are typically graphed in different ways. A continuous variable
|
|
||||||
can theoretically have any value. For instance dive depth can have any value greater than zero (theoretically
|
|
||||||
negative depths indicate height above the water but this is not a practical possibility). Consequently, depths
|
|
||||||
of 21.63857 meters or 44.7653 feet are entirely realistic. Dates are also continuous since the annual value
|
|
||||||
of any particular instant in time can be presented. For instance a dive at 12 noon on April 1st 2020 can be
|
|
||||||
presented by a value of 2020.24726 (90.5/366 days in that leap year). On the other hand dive mode is a
|
|
||||||
categorical variable: there are no values between "Freedive" and "Open circuit" or between "Open Circuit"
|
|
||||||
and "CCR". Other categorical variables include Buddy, Visibility, Rating and Suit type. Different methods
|
|
||||||
are used to represent these two types of variables, evident from the way in which the axes are organized.
|
|
||||||
It is perfectly valid to create a
|
|
||||||
graph with a continuous Base variable and a categorical Data variable and _vice versa_. However, when using
|
|
||||||
a continuous Base variable, use a
|
|
||||||
histogram, NOT a bar-chart. The images below show counts of dives at different depths. Image A is a histogram
|
|
||||||
showing that no dives were conducted between 55m and 60m depth. However two dives were performed between 60m
|
|
||||||
and 65m: these two bars (55-60m and 60-65m) have equally important information. Image B shows the bar-chart
|
|
||||||
of the same dataset where depth has been converted to a categorical type. Notice that the two bars with no
|
|
||||||
dives (55-60m and 75-80m) are omitted. Important information is lost because of the use of a bar-chart to
|
|
||||||
represent continuous data. It is easy to determine whether a specific graph is a barchart or a histogram:
|
|
||||||
when selecting "Chart type" the heading of the submenu should show either _Barchart_ or _Categorical_
|
|
||||||
in the case of categorical variables, and _histogram_ or _scattergraph_ in the case of continuous variables.
|
|
||||||
Subsurface-Mobile helps by showing a yellow triangle for graph types likely to be inappropriate (Image C).
|
|
||||||
|
|
||||||
image::mobile-images/StatsDataTypes.jpg["Statistics: bar-charts of continuous and categorical data types",align="left"]
|
|
||||||
|
|
||||||
****
|
|
||||||
|
|
||||||
=== Graph orientation
|
|
||||||
|
|
||||||
In many cases the values of the Base Variable along the horizontal axis are shown by dots, not numbers or names (Image B above).
|
|
||||||
This is because the screen of a mobile device often is not wide enough to show all the values, especially prevalent
|
|
||||||
in bar charts where the labels along the bottom axis are long. There are two ways of addressing this problem:
|
|
||||||
|
|
||||||
|
|
||||||
1. Turn the mobile device through 90 degrees so that the screen display is in landscape (wide) mode.
|
|
||||||
|
|
||||||
|
|
||||||
2. Rotate the bar chart through 90 degrees by selecting a horizontal bar chart (in the
|
|
||||||
Chart type combobox, select a horizontal chart type). In this case the bars are shown horizontally in both portrait and landscape orientation. For instance,
|
|
||||||
the image below shows the horizontal bar-chart produced when selecting "Categorical/Horizontal" in the Chart type combobox and
|
|
||||||
using the same dataset as in graph B in the image above. With the axes rotated there is much more horizontal space for showing
|
|
||||||
the relatively long label for each bar in the chart.
|
|
||||||
|
|
||||||
image::mobile-images/StatsBarchartRotated.jpg["Stats rotated barchart",align="left"]
|
|
||||||
|
|
||||||
=== Graphs of counts data
|
|
||||||
|
|
||||||
By default, when the Statistics panel is opened, a histogram is shown of the number of dives performed each year.
|
|
||||||
This is an example of *counts* data. To request a graph representing counts, three comboboxes need to be set:
|
|
||||||
|
|
||||||
a) The top left combobox of the Base variable needs to be specified. Which variable should be along the horizontal
|
|
||||||
axis? Examples are Year, Buddy, Rating, Max. depth.
|
|
||||||
|
|
||||||
b) The binning combobox (top right) for the Base variable needs to be specified. This represents the increment
|
|
||||||
for each bar along the horizontal axis. For instance, when counts of number of dives are extracted for years,
|
|
||||||
this could be in increments of a year, a quarter (3 month period) or a month. For some variables, e.g. Buddy
|
|
||||||
or Rating, a binning value is not relevant and cannot be selected. However, for others, e.g. Year or Max.
|
|
||||||
depth, selecting the appropriate binning is important.
|
|
||||||
|
|
||||||
c) For simple counts data, the left combobox of the Data variable needs to be set to "none". This is because
|
|
||||||
a data variable is not involved in this type of graph. Divers used to spreadsheets may prefer a *pie chart*
|
|
||||||
for these data, achieved by selecting "piechart" from the Chart type combobox. It is possible to
|
|
||||||
simultaneously provide counts for two variables. In this case one could specify a Data variable which
|
|
||||||
results in the counts being subdivided according to the data variable. This option does not have a piechart
|
|
||||||
equivalent.
|
|
||||||
|
|
||||||
For simple histograms, the default height of each bar is determined by the mean value for the observations
|
|
||||||
included in each bar. However, this can be manipulated using the Operation combobox to show the mean,
|
|
||||||
maximum, minimum, median and sum applicable to each bar. Image A below shows quarterly count data of
|
|
||||||
dives while image B shows quarterly count data, subdivided by dive mode (some dives open circuit,
|
|
||||||
other dives rebreather). The legend can be dragged around so that it does not obscure part of the graph.
|
|
||||||
|
|
||||||
image::mobile-images/StatsCountsData.jpg["Counts data example",align="center"]
|
|
||||||
|
|
||||||
=== Counts comprising more than one category in a bar
|
|
||||||
|
|
||||||
As mentioned in the section above, bar-charts showing a breakdown of each category for a number of
|
|
||||||
subcategories are easily created.
|
|
||||||
|
|
||||||
a) Select a variable with categories (along the horizontal axis) as a Base variable (e.g. dive mode or suite type).
|
|
||||||
|
|
||||||
b) Select another category of data as a Data variable (e.g. gas type or cylinder type).
|
|
||||||
|
|
||||||
The images below show two alternative bar-chart representations. If, in the Chart type combobox, one selects
|
|
||||||
"Barchart/stacked vertical", a graph similar to image A below is generated, summarizing a log of technical
|
|
||||||
dives where, for each cylinder gas type, the bar is subdivided into a count for open-circuit dives and for
|
|
||||||
rebreather dives. On the other hand, if "Barchart/grouped horizontal" is selected in the Chart type combobox, a graph
|
|
||||||
similar to image B, below, is produced. Here the subdivision within each gas type is shown as adjacent bars.
|
|
||||||
|
|
||||||
image::mobile-images/StatsBarchartSubdivided.jpg["Stats subdivided barchart",align="center"]
|
|
||||||
|
|
||||||
=== Scattergraphs
|
|
||||||
|
|
||||||
[width="100%", cols="2,3"]
|
|
||||||
|=======
|
|
||||||
a|image:mobile-images/StatsRegression.jpg["Regression data example",align="center"] |
|
|
||||||
Sometimes you might wish to investigate the relationship between two dive variables. Has my SAC rate decreased over
|
|
||||||
the years? Is the water temperature colder at greater dive depth? One of the ways of investigating these questions
|
|
||||||
is to draw a scattergraph where the values of one variable is plotted against the other variable (see image on the left).
|
|
||||||
|=======
|
|
||||||
|
|
||||||
|
|
||||||
For the dataset in the image above the SAC rate appears to have decreased over time. If the relationship between the two variables
|
|
||||||
is statistically significant, a red line is shown that summarizes the best estimate of the relationship between SAC rate and year.
|
|
||||||
In this graph it appears that SAC rate has decreased from around 21 l/min to around 14 l/min between 2013 and 2021. The pink area
|
|
||||||
around the red line indicates the uncertainty of the precise orientation of the line. The line is expected to lie somewhere within
|
|
||||||
the pink area with a certainty of 95%. The intensity of the pink color also indicates the relative reliability of these estimates.
|
|
||||||
The procedure for obtaining a scattergrapth is:
|
|
||||||
|
|
||||||
a) Specify the Base variable: Which variable should be along the horizontal axis? Examples are Date, Temperature, Max. depth, SAC rate.
|
|
||||||
|
|
||||||
b) Set the binning value for the Base variable (top right) to "none".
|
|
||||||
|
|
||||||
c) Specify the Data variable: Which variable should be along the vertical axis?
|
|
||||||
|
|
||||||
|
|
||||||
=== Comparisons between categories of dives
|
|
||||||
|
|
||||||
You might wish to compare different categories of dives. Is the (5-star) Rating of a dive related to water temperature?
|
|
||||||
Is my SAC rate related to diving with different dive suits? Since dive suit and Rating are categories, a scattergraph is not
|
|
||||||
appropriate. The default is a categorical dot graph, which, in the case of image A below, shows the precise water temperatures
|
|
||||||
for each Rating. The red lines indicate the top quartile, the mean and the lower quartile of temperature for each rating. The
|
|
||||||
column with no star indicates dives for which a Rating has not been selected. It appears that dives with a 5-star rating have
|
|
||||||
higher temperatures than the other ratings. To obtain a categorical graph:
|
|
||||||
|
|
||||||
a) Select a variable with categories (along the horizontal axis) as a Base variable (Top left).
|
|
||||||
|
|
||||||
b) Select the data variable and set binning to "none" (middle right combobox).
|
|
||||||
|
|
||||||
c) By default the Chart type combobox shows "Categorical/data points". If this is not the case, select this value.
|
|
||||||
|
|
||||||
image::mobile-images/StatsCategoricalData.jpg["Stats: Comparison of categories",align="center"]
|
|
||||||
|
|
||||||
Alternatively you could create a Box-whisker graph for the same data. In the Chart type combobox, select Categorical/"box-whisker".
|
|
||||||
This creates a graph indicating the maximum, top quartile (Q3), median, bottom quartile (Q1) and minimum for each category or
|
|
||||||
class. Image B above shows a box-whisker graph for the same data as image A above. You can see that the values for a Rating
|
|
||||||
of 5 stars tend to be higher than for other ratings.
|
|
||||||
|
|
||||||
|
|
||||||
== Export
|
|
||||||
|
|
||||||
The _Export_ feature is somewhat experimental. On Android it only allows the upload of your dive list
|
The _Export_ feature is somewhat experimental. On Android it only allows the upload of your dive list
|
||||||
to two websites (_divelogs.de_ and _diveshare_). On iOS it also allows local file based exports as _Subsurface_
|
to two websites (divelogs.de and diveshare). On iOS it also allows local file based exports as _Subsurface_
|
||||||
specific XML files (both for dives and dive sites) as well as _UDDF_.
|
specific XML files (both for dives and dive sites) as well as _UDDF_.
|
||||||
|
|
||||||
Tapping on _Next_ opens an additional page for login information for the destination website (or a file selection dialog).
|
Tapping on _Next_ opens an additional page for login information (or a file selection dialog).
|
||||||
|
|
||||||
== Viewing the locations of all dives in the dive list
|
== Location
|
||||||
|
|
||||||
|
The fact that almost all smartphones have GPS facilities allows
|
||||||
|
_Subsurface-mobile_ to record
|
||||||
|
the locations of dives. *IMPORTANT: GPS-derived coordinates on a smartphone
|
||||||
|
are not always accurate and can have an error greater than 1 km. GPS accuracy
|
||||||
|
is determined by the hardware and software of the
|
||||||
|
smartphone as well as by the GPS settings selected within Android/iOS.
|
||||||
|
As of Android V6 select Android _Settings -> Communication -> Location -> High accuracy._*
|
||||||
|
If the smartphone is taken on the boat
|
||||||
|
during a dive, locations will be automatically recorded at regular intervals.
|
||||||
|
These locations can then be applied to dives in the dive list as described in following chapters.
|
||||||
|
|
||||||
|
[[S_ConfigureGPS]]
|
||||||
|
=== Configuring the GPS service
|
||||||
|
|
||||||
|
For most users, the defaults for tracking GPS locations will be
|
||||||
|
appropriate. If you would like to change them, go to
|
||||||
|
the _Main Menu_, select the xref:S_Settings[_Settings_] screen, and open
|
||||||
|
the _Advanced_ area on that page. Here you will find the section for
|
||||||
|
configuring the GPS service (see image below). GPS location data
|
||||||
|
are collected at regular intervals, e.g. every 5 minutes, or at regular
|
||||||
|
distances, e.g. after the boat has moved more than 200m, or a combination of
|
||||||
|
both of these approaches. Provide the appropriate information and
|
||||||
|
tap the _Back_ button. The program is now ready to collect GPS positions.
|
||||||
|
|
||||||
|
image::mobile-images/GPSConfig.jpg["FIGURE: GPS configure",align="center"]
|
||||||
|
|
||||||
|
=== Collecting GPS positions
|
||||||
|
|
||||||
|
[width="100%", frame="None"]
|
||||||
|
|=======
|
||||||
|
a|image::mobile-images/LocationMenu.jpg["FIGURE: GPS start",align="center"] |
|
||||||
|
In the _Location_ menu select _Run location service_.
|
||||||
|
_Subsurface-mobile_ starts to collect GPS locations automatically,
|
||||||
|
following the preferences specified as described above. While the GPS
|
||||||
|
location service is running, all menus have a GPS symbol at the bottom
|
||||||
|
of the menu, indicating that the service is active. After returning from
|
||||||
|
the dive, deactivate the collection of GPS data by tapping
|
||||||
|
the option _GPS -> Disable location service_. The GPS symbol at the bottom
|
||||||
|
of all menus disappears.
|
||||||
|
|
||||||
|
Collecting GPS fixes like this is relatively battery intensive and unfortunately
|
||||||
|
both Android and especially iOS have become increasingly aggressive in killing
|
||||||
|
applications that are running while the screen is turned off. It may make sense
|
||||||
|
to check between dives that the location service is still running.
|
||||||
|
|=======
|
||||||
|
|
||||||
|
=== Applying GPS data to dives in the dive log
|
||||||
|
|
||||||
|
After running the location service during a dive trip, first either download
|
||||||
|
the dives from your dive computer or manually enter the dives into the dive list.
|
||||||
|
Now you can apply the GPS positions to these dives.
|
||||||
|
From the _Dive management_ menu, tap _Apply GPS fixes_. The dive list contains the start
|
||||||
|
and end times of each dive. Now, _Subsurface-mobile_ applies the first
|
||||||
|
GPS position that falls within the dive period of each dive. This results
|
||||||
|
in a GPS position for each dive that is saved as part of the dive log.
|
||||||
|
|
||||||
|
=== Viewing the locations of all dives in the dive list
|
||||||
|
|
||||||
image::mobile-images/DivesMap.jpg["FIGURE: Map of all dive sites",align="center"]
|
image::mobile-images/DivesMap.jpg["FIGURE: Map of all dive sites",align="center"]
|
||||||
|
|
||||||
@ -721,50 +573,49 @@ of the world the dive sites appear, indicated by red flags. Zooming in even clos
|
|||||||
of the different dive sites.
|
of the different dive sites.
|
||||||
|
|
||||||
[[S_Settings]]
|
[[S_Settings]]
|
||||||
== Specifying the settings for _Subsurface-mobile_
|
== Settings
|
||||||
|
|
||||||
The _Settings_ page allows the customization of _Subsurface-mobile_.
|
The _Settings_ page allows the customization of _Subsurface-mobile_.
|
||||||
It is grouped into four sections. Many of the settings involve dragging a slider switch to activate or deactivate a particular setting.
|
It is grouped into four sections.
|
||||||
|
|
||||||
=== _General settings_ section
|
=== _General settings_ section
|
||||||
|
|
||||||
image::mobile-images/GeneralSettings.jpg["FIGURE: General Settings",align="center"]
|
image::mobile-images/GeneralSettings.jpg["FIGURE: General Settings",align="center"]
|
||||||
|
|
||||||
[[S_ChangeCloudAccount]]
|
[[S_ChangeCloudAccount]]
|
||||||
==== Cloud status: Changing to a different _Subsurface_ cloud account
|
==== Changing to a different _Subsurface_ cloud account
|
||||||
|
|
||||||
Some users have more than one _Subsurface_ cloud account and need to switch between accounts.
|
Some users have more than one _Subsurface_ cloud account and have a need to switch between accounts.
|
||||||
Tap on the _Change_ button next to the _Email address_ in the _General settings_ on the _Settings_ page (see image above).
|
Tap on the _Change_ button next to the _Email address_ in the _General settings_ on the _Settings_ page.
|
||||||
This opens the _Cloud credentials_ page.
|
This opens the _Cloud credentials_ page.
|
||||||
Here you can change the email address and password used and then tap the button _Sign-in or register_.
|
Here you can change the email address and password used and then tap the button _Sign-in or register_.
|
||||||
The dive list of the newly-opened account is shown.
|
The appropriate dive list is shown.
|
||||||
|
|
||||||
==== Default cylinder
|
==== Default cylinder
|
||||||
|
|
||||||
When manually entering a dive or when downloading from a dive computer that doesn't explicitly
|
When manually entering a dive or when downloading from a dive computer that doesn't explicitly
|
||||||
include cylinder size information (very few dive computers support that feature), _Subsurface-mobile_
|
include cylinder size information (very few dive computers support that feature), _Subsurface-mobile_
|
||||||
uses the cylinder that you select here as the default, useful for divers that mostly use a particular
|
uses the cylinder that you select here as the default. If you don't set this entry, no default
|
||||||
type of cylinder. If you don't set this entry, no default
|
|
||||||
cylinder is used.
|
cylinder is used.
|
||||||
|
|
||||||
==== Forget the remembered dive computers used during dive download
|
==== Forget the remembered dive computers
|
||||||
|
|
||||||
Tap the _Forget_ button to reset the dive computers that are stored in the shortcut
|
Tap the _Forget_ button to reset the dive computers that are stored in the up to four shortcut
|
||||||
buttons on the _Download from dive computer_ page.
|
buttons on the _Download from dive computer_ page.
|
||||||
|
|
||||||
=== _Theme_ section
|
=== _Theme_ section
|
||||||
|
|
||||||
==== Color theme
|
==== Color theme
|
||||||
|
|
||||||
[width="100%"]
|
[width="100%", frame="None"]
|
||||||
|=======
|
|=======
|
||||||
a|image:mobile-images/ThemeSettings.jpg["FIGURE: Theme Settings",align="center"] |
|
a|image::mobile-images/ThemeSettings.jpg["FIGURE: Theme Settings",align="center"] |
|
||||||
Besides the default blue color scheme, _Subsurface-mobile_ supports two additional color schemes
|
Besides the default blue color scheme, _Subsurface-mobile_ supports two additional color schemes
|
||||||
for users with different tastes (see image on left). All screenshots shown in this user manual are
|
for users with different tastes (see image on left). All screenshots shown in this user manual are
|
||||||
based on the blue default color scheme. You can pick the _pink_ or _dark_ color theme from
|
based on the blue default color scheme. You can pick the _pink_ or _dark_ color scheme from
|
||||||
the drop down menu.
|
the drop down menu.
|
||||||
|
|
||||||
The boxes in the image on the left show the various color choices in the theme of your choice.
|
The boxes below show the various color choices in the theme of your choice.
|
||||||
|=======
|
|=======
|
||||||
|
|
||||||
==== Font size
|
==== Font size
|
||||||
@ -780,11 +631,16 @@ your location.
|
|||||||
|
|
||||||
=== _Advanced_ section
|
=== _Advanced_ section
|
||||||
|
|
||||||
As the name indicates, most users do not need to make changes here.
|
As the name indicates, most users will not need to make changes here.
|
||||||
|
|
||||||
|
==== GPS location service thresholds
|
||||||
|
|
||||||
|
As indicated above in the _Location_ section of this manual, here you can set the distance and time
|
||||||
|
thresholds for the _location service_
|
||||||
|
|
||||||
==== Bluetooth
|
==== Bluetooth
|
||||||
|
|
||||||
Since most mobile devices tend to find a _LOT_ of BT/BLE devices that aren't dive computers, by
|
Since most devices tend to find a _LOT_ of BT/BLE devices that aren't dive computers, by
|
||||||
default _Subsurface-mobile_ only shows known dive computers to make the connection list
|
default _Subsurface-mobile_ only shows known dive computers to make the connection list
|
||||||
easier to use.
|
easier to use.
|
||||||
|
|
||||||
@ -807,7 +663,7 @@ feature.
|
|||||||
==== Activating the Developer sub-menu
|
==== Activating the Developer sub-menu
|
||||||
|
|
||||||
This enables an additional menu item in the _Main_ menu which contains options which are almost
|
This enables an additional menu item in the _Main_ menu which contains options which are almost
|
||||||
never useful for a regular user. Here you can find the detailed app log file as well as several
|
never useful for a regular users. Here you can find the detailed app log file as well as several
|
||||||
test screens that help the developers track down issues you might encounter.
|
test screens that help the developers track down issues you might encounter.
|
||||||
|
|
||||||
== Help
|
== Help
|
||||||
@ -820,7 +676,7 @@ a convenient way to copy the application logs to the clipboard.
|
|||||||
=== Show user manual
|
=== Show user manual
|
||||||
|
|
||||||
This menu entry opens the online version of this user manual in the native browser of your
|
This menu entry opens the online version of this user manual in the native browser of your
|
||||||
device. Unfortunately this option is not available without Internet access.
|
device. Unfortunately this option isn't available if your device is offline.
|
||||||
|
|
||||||
=== Ask for support
|
=== Ask for support
|
||||||
|
|
||||||
|
|||||||
962
Documentation/mobile-manual.html.git
Normal file
@ -0,0 +1,962 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
|
<meta name="generator" content="AsciiDoc 8.6.10" />
|
||||||
|
<title></title>
|
||||||
|
<style type="text/css">
|
||||||
|
/*
|
||||||
|
* compact_subsurface.css, a special style sheet for Subsurface,
|
||||||
|
* modified by Willem Ferguson and derived from:
|
||||||
|
* compact.css, version 1.3 by Alex Efros <powerman@powerman.name>
|
||||||
|
* Licence: Public Domain
|
||||||
|
*
|
||||||
|
* Usage: asciidoc -a theme=compact_subsurface ...
|
||||||
|
*/
|
||||||
|
|
||||||
|
* { padding: 0; margin: 0; }
|
||||||
|
img { border: 0; }
|
||||||
|
|
||||||
|
/*** Layout ***/
|
||||||
|
|
||||||
|
body { margin: 10px 20px; }
|
||||||
|
#header br { display: none; }
|
||||||
|
#revnumber { display: block; }
|
||||||
|
#toc { margin: 1em 0; }
|
||||||
|
.toclevel2 { margin-left: 1em; }
|
||||||
|
.toclevel3 { margin-left: 2em; }
|
||||||
|
#footer { margin-top: 2em; }
|
||||||
|
|
||||||
|
#preamble .sectionbody,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 { margin: 1em 0 0 0; }
|
||||||
|
|
||||||
|
.admonitionblock,
|
||||||
|
.listingblock,
|
||||||
|
.sidebarblock,
|
||||||
|
.exampleblock,
|
||||||
|
.tableblock,
|
||||||
|
.literalblock { margin: 1em 0; }
|
||||||
|
.admonitionblock td.icon { padding-right: 0.5em; }
|
||||||
|
.admonitionblock td.content { padding-left: 0.5em; }
|
||||||
|
.listingblock .content { padding: 0.5em; }
|
||||||
|
.sidebarblock > .content { padding: 0.5em; }
|
||||||
|
.exampleblock > .content { padding: 0 0.5em; }
|
||||||
|
.tableblock caption { padding: 0 0 0.5em 0; }
|
||||||
|
.tableblock thead th,
|
||||||
|
.tableblock tbody td,
|
||||||
|
.tableblock tfoot td { padding: 0 0.5em; }
|
||||||
|
.quoteblock { padding: 0 2.0em; }
|
||||||
|
|
||||||
|
.paragraph { margin: 1em 0 0 0; }
|
||||||
|
.sidebarblock .paragraph:first-child,
|
||||||
|
.exampleblock .paragraph:first-child,
|
||||||
|
.admonitionblock .paragraph:first-child { margin: 0; }
|
||||||
|
|
||||||
|
.ulist, .olist, .dlist, .hdlist, .qlist { margin: 1em 0; }
|
||||||
|
li .ulist, li .olist, li .dlist, li .hdlist, li .qlist,
|
||||||
|
dd .ulist, dd .olist, dd .dlist, dd .hdlist, dd .qlist { margin: 0; }
|
||||||
|
ul { margin-left: 1.5em; }
|
||||||
|
ol { margin-left: 2em; }
|
||||||
|
dd { margin-left: 3em; }
|
||||||
|
td.hdlist1 { padding-right: 1em; }
|
||||||
|
|
||||||
|
/*** Fonts ***/
|
||||||
|
|
||||||
|
body { font-family: Verdana, sans-serif; }
|
||||||
|
#header { font-family: Arial, sans-serif; }
|
||||||
|
#header h1 { font-family: Arial, sans-serif; }
|
||||||
|
#footer { font-family: Georgia, serif; }
|
||||||
|
#email { font-size: 0.85em; }
|
||||||
|
#revnumber { font-size: 0.75em; }
|
||||||
|
#toc { font-size: 0.9em; }
|
||||||
|
#toctitle { font-weight: bold; }
|
||||||
|
#footer { font-size: 0.8em; }
|
||||||
|
|
||||||
|
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
||||||
|
h2 { font-size: 1.5em; }
|
||||||
|
.sectionbody { font-size: 0.85em; }
|
||||||
|
.sectionbody .sectionbody { font-size: inherit; }
|
||||||
|
h3 { font-size: 159%; } /* 1.35em */
|
||||||
|
h4 { font-size: 141%; } /* 1.2em */
|
||||||
|
h5 { font-size: 118%; } /* 1em */
|
||||||
|
.title { font-size: 106%; /* 0.9em */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, .monospaced { font-family: monospace; font-size: 106%; } /* 0.9em */
|
||||||
|
dt, td.hdlist1, .qlist em { font-family: Times New Roman, serif;
|
||||||
|
font-size: 118%; /* 1em */
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.tableblock tfoot td { font-weight: bold; }
|
||||||
|
|
||||||
|
/*** Colors and Backgrounds ***/
|
||||||
|
|
||||||
|
h1 { color: #527bbd; border-bottom: 2px solid silver; }
|
||||||
|
#footer { border-top: 2px solid silver; }
|
||||||
|
|
||||||
|
h2 { color: #527bbd; border-bottom: 2px solid silver; }
|
||||||
|
h3 { color: #5D7EAE; border-bottom: 2px solid silver; }
|
||||||
|
h3 { display: inline-block; }
|
||||||
|
h4,h5 { color: #5D7EAE; }
|
||||||
|
|
||||||
|
.admonitionblock td.content { border-left: 2px solid silver; }
|
||||||
|
.listingblock .content { background: #f4f4f4; border: 1px solid silver; border-left: 5px solid #e0e0e0; }
|
||||||
|
.sidebarblock > .content { background: #ffffee; border: 1px solid silver; border-left: 5px solid #e0e0e0; }
|
||||||
|
.exampleblock > .content { border-left: 2px solid silver; }
|
||||||
|
.quoteblock { border-left: 5px solid #e0e0e0; }
|
||||||
|
.tableblock table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-width: 3px;
|
||||||
|
border-color: #527bbd;
|
||||||
|
}
|
||||||
|
.tableblock table[frame=hsides] { border-style: solid none; }
|
||||||
|
.tableblock table[frame=border] { border-style: solid; }
|
||||||
|
.tableblock table[frame=void] { border-style: none; }
|
||||||
|
.tableblock table[frame=vsides] { border-style: none solid; }
|
||||||
|
.tableblock table[rules=all] tbody tr *,
|
||||||
|
.tableblock table[rules=rows] tbody tr * {
|
||||||
|
border-top: 1px solid #527bbd;
|
||||||
|
}
|
||||||
|
.tableblock table[rules=all] tr *,
|
||||||
|
.tableblock table[rules=cols] tr * {
|
||||||
|
border-left: 1px solid #527bbd;
|
||||||
|
}
|
||||||
|
.tableblock table tbody tr:first-child * {
|
||||||
|
border-top: 1px solid white; /* none don't work here... %-[] */
|
||||||
|
}
|
||||||
|
.tableblock table tr *:first-child {
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
.tableblock table[frame] thead tr *,
|
||||||
|
.tableblock table[frame] thead tr * {
|
||||||
|
border-top: 1px solid white;
|
||||||
|
border-bottom: 2px solid #527bbd;
|
||||||
|
}
|
||||||
|
.tableblock table tr td p.table,
|
||||||
|
.tableblock table tr td p.table * {
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, .monospaced { color: navy; }
|
||||||
|
|
||||||
|
li { color: #a0a0a0; }
|
||||||
|
li > * { color: black; }
|
||||||
|
|
||||||
|
span.aqua { color: aqua; }
|
||||||
|
span.black { color: black; }
|
||||||
|
span.blue { color: blue; }
|
||||||
|
span.fuchsia { color: fuchsia; }
|
||||||
|
span.gray { color: gray; }
|
||||||
|
span.green { color: green; }
|
||||||
|
span.lime { color: lime; }
|
||||||
|
span.maroon { color: maroon; }
|
||||||
|
span.navy { color: navy; }
|
||||||
|
span.olive { color: olive; }
|
||||||
|
span.purple { color: purple; }
|
||||||
|
span.red { color: red; }
|
||||||
|
span.silver { color: silver; }
|
||||||
|
span.teal { color: teal; }
|
||||||
|
span.white { color: white; }
|
||||||
|
span.yellow { color: yellow; }
|
||||||
|
|
||||||
|
span.aqua-background { background: aqua; }
|
||||||
|
span.black-background { background: black; }
|
||||||
|
span.blue-background { background: blue; }
|
||||||
|
span.fuchsia-background { background: fuchsia; }
|
||||||
|
span.gray-background { background: gray; }
|
||||||
|
span.green-background { background: green; }
|
||||||
|
span.lime-background { background: lime; }
|
||||||
|
span.maroon-background { background: maroon; }
|
||||||
|
span.navy-background { background: navy; }
|
||||||
|
span.olive-background { background: olive; }
|
||||||
|
span.purple-background { background: purple; }
|
||||||
|
span.red-background { background: red; }
|
||||||
|
span.silver-background { background: silver; }
|
||||||
|
span.teal-background { background: teal; }
|
||||||
|
span.white-background { background: white; }
|
||||||
|
span.yellow-background { background: yellow; }
|
||||||
|
|
||||||
|
span.big { font-size: 2em; }
|
||||||
|
span.small { font-size: 0.6em; }
|
||||||
|
|
||||||
|
span.underline { text-decoration: underline; }
|
||||||
|
span.overline { text-decoration: overline; }
|
||||||
|
span.line-through { text-decoration: line-through; }
|
||||||
|
|
||||||
|
/*** Misc ***/
|
||||||
|
|
||||||
|
.admonitionblock td.icon { vertical-align: top; }
|
||||||
|
.attribution { text-align: right; }
|
||||||
|
|
||||||
|
ul { list-style-type: disc; }
|
||||||
|
ol.arabic { list-style-type: decimal; }
|
||||||
|
ol.loweralpha { list-style-type: lower-alpha; }
|
||||||
|
ol.upperalpha { list-style-type: upper-alpha; }
|
||||||
|
ol.lowerroman { list-style-type: lower-roman; }
|
||||||
|
ol.upperroman { list-style-type: upper-roman; }
|
||||||
|
.hdlist td { vertical-align: top; }
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*<+'])');
|
||||||
|
// Function that scans the DOM tree for header elements (the DOM2
|
||||||
|
// nodeIterator API would be a better technique but not supported by all
|
||||||
|
// browsers).
|
||||||
|
var iterate = function (el) {
|
||||||
|
for (var i = el.firstChild; i != null; i = i.nextSibling) {
|
||||||
|
if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
|
||||||
|
var mo = re.exec(i.tagName);
|
||||||
|
if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
|
||||||
|
result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
|
||||||
|
}
|
||||||
|
iterate(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iterate(el);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
var toc = document.getElementById("toc");
|
||||||
|
if (!toc) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete existing TOC entries in case we're reloading the TOC.
|
||||||
|
var tocEntriesToRemove = [];
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < toc.childNodes.length; i++) {
|
||||||
|
var entry = toc.childNodes[i];
|
||||||
|
if (entry.nodeName.toLowerCase() == 'div'
|
||||||
|
&& entry.getAttribute("class")
|
||||||
|
&& entry.getAttribute("class").match(/^toclevel/))
|
||||||
|
tocEntriesToRemove.push(entry);
|
||||||
|
}
|
||||||
|
for (i = 0; i < tocEntriesToRemove.length; i++) {
|
||||||
|
toc.removeChild(tocEntriesToRemove[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rebuild TOC entries.
|
||||||
|
var entries = tocEntries(document.getElementById("content"), toclevels);
|
||||||
|
for (var i = 0; i < entries.length; ++i) {
|
||||||
|
var entry = entries[i];
|
||||||
|
if (entry.element.id == "")
|
||||||
|
entry.element.id = "_toc_" + i;
|
||||||
|
var a = document.createElement("a");
|
||||||
|
a.href = "#" + entry.element.id;
|
||||||
|
a.appendChild(document.createTextNode(entry.text));
|
||||||
|
var div = document.createElement("div");
|
||||||
|
div.appendChild(a);
|
||||||
|
div.className = "toclevel" + entry.toclevel;
|
||||||
|
toc.appendChild(div);
|
||||||
|
}
|
||||||
|
if (entries.length == 0)
|
||||||
|
toc.parentNode.removeChild(toc);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
// Footnotes generator
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/* Based on footnote generation code from:
|
||||||
|
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
footnotes: function () {
|
||||||
|
// Delete existing footnote entries in case we're reloading the footnodes.
|
||||||
|
var i;
|
||||||
|
var noteholder = document.getElementById("footnotes");
|
||||||
|
if (!noteholder) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var entriesToRemove = [];
|
||||||
|
for (i = 0; i < noteholder.childNodes.length; i++) {
|
||||||
|
var entry = noteholder.childNodes[i];
|
||||||
|
if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
|
||||||
|
entriesToRemove.push(entry);
|
||||||
|
}
|
||||||
|
for (i = 0; i < entriesToRemove.length; i++) {
|
||||||
|
noteholder.removeChild(entriesToRemove[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rebuild footnote entries.
|
||||||
|
var cont = document.getElementById("content");
|
||||||
|
var spans = cont.getElementsByTagName("span");
|
||||||
|
var refs = {};
|
||||||
|
var n = 0;
|
||||||
|
for (i=0; i<spans.length; i++) {
|
||||||
|
if (spans[i].className == "footnote") {
|
||||||
|
n++;
|
||||||
|
var note = spans[i].getAttribute("data-note");
|
||||||
|
if (!note) {
|
||||||
|
// Use [\s\S] in place of . so multi-line matches work.
|
||||||
|
// Because JavaScript has no s (dotall) regex flag.
|
||||||
|
note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
|
||||||
|
spans[i].innerHTML =
|
||||||
|
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
|
||||||
|
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
||||||
|
spans[i].setAttribute("data-note", note);
|
||||||
|
}
|
||||||
|
noteholder.innerHTML +=
|
||||||
|
"<div class='footnote' id='_footnote_" + n + "'>" +
|
||||||
|
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
|
||||||
|
n + "</a>. " + note + "</div>";
|
||||||
|
var id =spans[i].getAttribute("id");
|
||||||
|
if (id != null) refs["#"+id] = n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n == 0)
|
||||||
|
noteholder.parentNode.removeChild(noteholder);
|
||||||
|
else {
|
||||||
|
// Process footnoterefs.
|
||||||
|
for (i=0; i<spans.length; i++) {
|
||||||
|
if (spans[i].className == "footnoteref") {
|
||||||
|
var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
|
||||||
|
href = href.match(/#.*/)[0]; // Because IE return full URL.
|
||||||
|
n = refs[href];
|
||||||
|
spans[i].innerHTML =
|
||||||
|
"[<a href='#_footnote_" + n +
|
||||||
|
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
install: function(toclevels) {
|
||||||
|
var timerId;
|
||||||
|
|
||||||
|
function reinstall() {
|
||||||
|
asciidoc.footnotes();
|
||||||
|
if (toclevels) {
|
||||||
|
asciidoc.toc(toclevels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function reinstallAndRemoveTimer() {
|
||||||
|
clearInterval(timerId);
|
||||||
|
reinstall();
|
||||||
|
}
|
||||||
|
|
||||||
|
timerId = setInterval(reinstall, 500);
|
||||||
|
if (document.addEventListener)
|
||||||
|
document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
|
||||||
|
else
|
||||||
|
window.onload = reinstallAndRemoveTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
asciidoc.install(3);
|
||||||
|
/*]]>*/
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body class="article">
|
||||||
|
<div id="header">
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Banner.jpg" alt="Banner" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p><span class="big">Subsurface-mobile USER MANUAL</span></p></div>
|
||||||
|
<div class="paragraph"><p><strong>Manual authors</strong>: Willem Ferguson, Dirk Hohndel</p></div>
|
||||||
|
<div class="paragraph"><p><span class="blue"><em>Version 2, December 2017</em></span></p></div>
|
||||||
|
<div class="paragraph"><p>Welcome as a user of <em>Subsurface</em> and <em>Subsurface-mobile</em>, advanced dive logging
|
||||||
|
software with extensive infrastructure to describe, organize, and interpret scuba
|
||||||
|
and free dives. <em>Subsurface</em> offers many advantages over other similar
|
||||||
|
software solutions, including compatibility with Windows, macOS, Linux (many
|
||||||
|
distributions), Android and iOS. In addition, <em>Subsurface</em> is
|
||||||
|
open-source software that allows downloading dive
|
||||||
|
information from many dive computers.</p></div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_introducing_subsurface_mobile">1. Introducing Subsurface-mobile</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p><em>Subsurface-mobile</em> is a more limited mobile version of <em>Subsurface</em>
|
||||||
|
aimed at Android and iOS smartphone and tablet devices, allowing viewing, entering, sharing, and storage of dive information at dive sites where a larger
|
||||||
|
computer is not useful. While the desktop version of <em>Subsurface</em> shows much more detailed information
|
||||||
|
for each dive, the mobile version allows a more accessible dive log
|
||||||
|
on a dive trip, useful for proving dive experience to dive shops or to review
|
||||||
|
previous dives. <em>Subsurface-mobile</em> also allows
|
||||||
|
the gathering of GPS locations where dives are performed.</p></div>
|
||||||
|
<div class="paragraph"><p>Users of <em>Subsurface-mobile</em> typically use the
|
||||||
|
mobile app as a companion to the laptop/desktop version of <em>Subsurface</em>, sharing dive information
|
||||||
|
between the mobile and the desktop versions. However <em>Subsurface-mobile</em> can
|
||||||
|
also be used independently of the desktop version and does not require the use of
|
||||||
|
cloud storage.</p></div>
|
||||||
|
<div class="paragraph"><p><em>Subsurface-mobile</em> allows:</p></div>
|
||||||
|
<div class="ulist"><ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Download and storage of dive log information using the <em>Subsurface</em> cloud.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Viewing this information on a mobile device.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Manually creating and adding new dive records to your dive log.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Download dive data directly from many dive computers.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Editing many of the dive log data fields, e.g. divemaster, buddy,
|
||||||
|
equipment or notes relating to a dive.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Recording, storing and applying GPS positions of dives.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Viewing the localities of recorded GPS positions and of dives
|
||||||
|
on a map.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
<div class="paragraph"><p>These items are discussed in greater detail in the following text.
|
||||||
|
<em>Subsurface-mobile</em> does not support download of dive data from all the
|
||||||
|
dive computers that the desktop/laptop version can. This limitation is
|
||||||
|
mainly caused by the ability to access different type of devices on the
|
||||||
|
two mobile platforms. On Android, a subset of
|
||||||
|
dive computers that use a FTDI USB interface or a Bluetooth / Bluetooth LE interface
|
||||||
|
are accessible by <em>Subsurface-mobile</em>. On iOS, only Bluetooth LE based
|
||||||
|
dive computers are supported.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_installing_em_subsurface_mobile_em_on_your_mobile_device">2. Installing <em>Subsurface-mobile</em> on your mobile device</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>Find <em>Subsurface-mobile</em> in the <em>Google Play Store</em> or the <em>iTunes Store</em>
|
||||||
|
and install it. Please note that both stores also contain the older <em>Subsurface</em> companion app (used only for tracking GPS positions) - make sure you actually install <em>Subsurface-mobile</em>.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_using_em_subsurface_mobile_em_for_the_first_time">3. Using <em>Subsurface-mobile</em> for the first time</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>When you start <em>Subsurface-mobile</em> for the first time, a Subsurface
|
||||||
|
splash screen is shown while the program loads. On some devices this
|
||||||
|
may take several seconds. After loading, the <em>Cloud Credentials screen</em> appears
|
||||||
|
(see image below on left).</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Credentials.jpg" alt="FIGURE: Mobile credentials screen" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_when_not_using_cloud_storage">3.1. When NOT Using Cloud Storage</h3>
|
||||||
|
<div class="paragraph"><p>Tap the "No cloud mode" button. The app will not access the <em>Subsurface</em>
|
||||||
|
cloud storage server
|
||||||
|
to obtain dive log information. This means that dive log information is
|
||||||
|
stored on the mobile device only. If no dives have been entered into the dive log
|
||||||
|
yet (the usual case), an empty dive log is created.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_using_cloud_storage">3.2. Using Cloud Storage</h3>
|
||||||
|
<div class="paragraph"><p>The <em>Subsurface</em> developers provide a custom
|
||||||
|
free Internet cloud storage account that can be used for
|
||||||
|
storing dive log information. This cloud storage account can be created either from <em>Subsurface</em> on the desktop or <em>Subsurface-mobile</em>
|
||||||
|
using a mobile device; you can
|
||||||
|
do full maintenance of a dive log from <em>Subsurface-mobile</em> alone. By using the same
|
||||||
|
credentials wirh <em>Subsurface-mobile</em> and <em>Subsurface</em> for desktop, the <em>Subsurface</em> cloud storage allows you to share your dive
|
||||||
|
log between both (or even more than two) devices.</p></div>
|
||||||
|
<div class="paragraph"><p>The dive data are cached both on the mobile device as well as on the desktop - it is easy to create backups of the data (for example in XML format) on the desktop, and both mobile device and desktop keep a local copy of the data so that the dive log is always accessible, even without Internet connection. The Subsurface team never accesses a user’s dive data without explicit permission to do so, the data are not used for any purpose other than providing them to the user who created them. There are no ads and no harvesting / analysis of the data stored in the Subsurface cloud storage.</p></div>
|
||||||
|
<div class="paragraph"><p>1) Enter an e-mail address and a password in the fields indicated on the screen.
|
||||||
|
The e-mail address should be in lower case and the password should contain a combination of
|
||||||
|
letters from the alphabet (upper and lower case) and/or numbers.
|
||||||
|
Tap the "Sign-in or Register" button. If you have already set
|
||||||
|
up an account from the <em>Subsurface</em> desktop application, enter the same credentials here.
|
||||||
|
Once the dive
|
||||||
|
list has been downloaded from the cloud, <em>Subsurface-mobile</em> usually works only with the the local
|
||||||
|
copy on the mobile device. This avoids long delays or even failure of operations if there is a bad (or no) internet connection, a situation fairly common at many dive sites.</p></div>
|
||||||
|
<div class="paragraph"><p>3) If this is a new account, a PIN screen will open (see image on right, above). A PIN is e-mailed
|
||||||
|
to the email address entered in the previous step. Enter this PIN into the field indicated
|
||||||
|
and tap the <em>Register</em> button. The user
|
||||||
|
information is stored on the cloud server and access to the cloud is enabled. In this case
|
||||||
|
the dive list is initially empty. Start entering dives in the dive
|
||||||
|
log or download dive information from a supported dive computer.</p></div>
|
||||||
|
<div class="paragraph"><p>The dive log can be updated automatically. If there is Internet connectivity, <em>Subsurface-mobile</em> accesses
|
||||||
|
the cloud-based dive log to verify that the local copy of the dive log is still the
|
||||||
|
same as the log in the cloud server. If not, the local copy and the copy on
|
||||||
|
the server are synchronized.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_changing_the_existing_login_credentials_on_the_em_subsurface_em_cloud">3.3. Changing the existing login credentials on the <em>Subsurface</em> cloud</h3>
|
||||||
|
<div class="paragraph"><p>The login credentials can be changed, for an example in order to work with
|
||||||
|
multiple accounts. See the section on <a href="#S_ChangeCloudAccount">Changing to a different <em>Subsurface</em> cloud account</a>.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_menu_structure_and_user_interface">4. Menu Structure and User Interface</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>At the bottom of many Subsurface-mobile screens is a round button that provides for
|
||||||
|
several actions (see image below). The most common choice is indicated in a round colored <em>action button</em> (in the case below, edit a dive). Alternative actions are indicated in a white <em>action bar</em>.
|
||||||
|
On Android devices, use the Android Back
|
||||||
|
button for "cancel", "discard" or "back" actions. For example, when
|
||||||
|
editing dive information, tapping the action button saves the changes while the
|
||||||
|
Android back button can be used to cancel the edit without saving changes.</p></div>
|
||||||
|
<div class="paragraph"><p>On iOS devices, on screens where a "back" action is enabled, a back arrow
|
||||||
|
is shown in the top left corner of the screen.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Actionbutton.jpg" alt="FIGURE: Action Button" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>In order to have a consistent experience between iOS and Android,
|
||||||
|
<em>Subsurface-mobile</em> on Android does not use the traditional "hamburger"
|
||||||
|
menu button in the top left or right corner of the screen to open menus.
|
||||||
|
Instead, <em>Subsurface-mobile</em> uses a
|
||||||
|
different user interaction philosophy based on the Kirigami framework
|
||||||
|
developed by the Plasma developers. There are three ways to open the main menu:</p></div>
|
||||||
|
<div class="ulist"><ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Tap the "hamburger" symbol in the lower left corner of the screen
|
||||||
|
(easy to reach for hand held devices)
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Swipe towards the right across the left edge of the screen
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Drag the action button visible on most screens to
|
||||||
|
the right
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Menusystem.jpg" alt="FIGURE: Dive management sub-panel" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>The image above indicates some of the important features of the menu system.
|
||||||
|
On the left is the main menu, activated as described above. On the right of the image
|
||||||
|
are the items of all the submenus accessible.</p></div>
|
||||||
|
<div class="paragraph"><p>All screenshots in this user manual are currently from the Android
|
||||||
|
version. The iOS screens look fairly similar.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_the_dive_list">5. The Dive List</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>Most of the actions of <em>Subsurface-mobile</em> center around the dives on the
|
||||||
|
dive list. While the dive list is loading from the cloud,
|
||||||
|
a message appears at the bottom of the screen, indicating that the cloud is
|
||||||
|
being accessed, after which the dive list is shown. Once the list is loaded you can scroll up and down
|
||||||
|
through your dive history.
|
||||||
|
To upload dives from a dive computer, tap the blue action button. If you wish
|
||||||
|
to add a dive manually, tap the + button in the action bar (described below).
|
||||||
|
Tapping an existing dive on the list brings up a display of <em>Details View</em> for that dive
|
||||||
|
(see image on right below). This includes the dive profile as well as
|
||||||
|
additional information and notes.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Divelist2.jpg" alt="FIGURE: Dive list screen" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>You can view other dives by swiping the <em>Details view</em> to the right (for the
|
||||||
|
previous dive) or to the left (following dive).
|
||||||
|
Using the Action Bar, it is also possible to delete the dive (tap the dustbin
|
||||||
|
on the Action Bar) or to view the dive
|
||||||
|
location on a map viewer (Google Maps on Android, the Google Maps web site
|
||||||
|
on iOS; tap the GPS icon on the Action Bar.).</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="S_Edit_Dive">6. Editing dive details</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>At the bottom of the dive details screen the action button is a pencil (image on right, above).
|
||||||
|
Tapping the pencil button changes the page and enables edit boxes that allow
|
||||||
|
modifying the existing dive information, e.g. adding text to the dive notes
|
||||||
|
or changing the names or values of some of the information (see image below).
|
||||||
|
It may be necessary to scroll the window to access all the information.
|
||||||
|
At the bottom of the edit screen is a <em>Save</em> action button. Tap this to save
|
||||||
|
the new information, after which the dive list screen is
|
||||||
|
updated and shown. To cancel any edits, tap the Android <em>Back</em> Button or
|
||||||
|
the application back button at the top left of the screen on iOS.</p></div>
|
||||||
|
<div class="paragraph"><p>When the virtual keyboard is shown, to avoid screen clutter, the action button is hidden.
|
||||||
|
Once you close the keyboard it is drawn again.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Editdive.jpg" alt="FIGURE: Dive edit screen" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="S_Add_Dive">7. Manually adding a new dive to the dive list</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>One can manually add a dive to the existing dive list. On the dive list
|
||||||
|
tap the "plus" sign in the action bar, or use the
|
||||||
|
main menu and tap <em>Manage dives → Add dive manually</em>. This opens a screen that is
|
||||||
|
identical to the editing screen discussed above. When a dive is added manually, you
|
||||||
|
cannot directly add a dive profile from a dive computer. However, if you do not use a
|
||||||
|
dive computer, the duration, depth and several other bits of information about
|
||||||
|
the new dive can be entered. The <em>Action button</em> at the bottom of the screen
|
||||||
|
contains a disk symbol. Tap this to save the new dive. To cancel any edits, tap the Android Back Button.
|
||||||
|
The left-hand image below shows a screenshot of a dive being created and the right-hand image shows
|
||||||
|
the same dive in <em>Details View</em>.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Manualdive.jpg" alt="FIGURE: Manual dive entry screen" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_deleting_a_dive">8. Deleting a dive</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>The <em>Details View</em> of a dive has an Action Bar, including a dustbin. If this is tapped,
|
||||||
|
the dive shown in the <em>Details View</em> is deleted. You have a brief opportunity to undo
|
||||||
|
the delete by tapping the grey <em>Undo</em> button in the message that appears at the bottom of
|
||||||
|
the screen (see image below).</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Delete_undo.jpg" alt="FIGURE: Undo delete dive" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>You can also delete a dive from the dive list by long-pressing a dive
|
||||||
|
until a red dustbin appears on the right-hand side (see image below). Tap the dustbin. The dive is
|
||||||
|
deleted without asking any confirmation because <em>Subsurface-mobile</em> assumes that the
|
||||||
|
combination of a long tap on the dive with another tap on the red dustbin is an unambiguous
|
||||||
|
instruction to delete the dive.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/RedDustbin.jpg" alt="FIGURE: delete dive from list" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="S_Download">9. Download dives from a dive computer</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>The download deature supports only a limited number of dive computers. On
|
||||||
|
Android devices these are typically dive computers using an FTDI interface
|
||||||
|
using a USB OTG cable (but this is blocked on some Android devices by OS
|
||||||
|
settings). Android devices also support all Bluetooth dive computers that
|
||||||
|
are supported in Subsurface. And both Android and iOS devices allow direct
|
||||||
|
download of dive data from a hand full of Bluetooth LE enabled dive
|
||||||
|
computers.</p></div>
|
||||||
|
<div class="paragraph"><p>Use the <em>Vendor name</em> and <em>Dive Computer</em> drop-downs to pick the correct
|
||||||
|
dive computer. When downloading from multiple different dive computers, shortcut
|
||||||
|
buttons to easily switch between them will appear below the drop-downs.</p></div>
|
||||||
|
<div class="paragraph"><p>The process for download is slightly different between the two OSs.
|
||||||
|
In our testing we got the best results on iOS when the dive computer was
|
||||||
|
in Bluetooth mode before <em>Subsurface-mobile</em> is started. On most dive
|
||||||
|
computers this is done through a menu entry, others (like the Suunto
|
||||||
|
models) always respond to BLE requests.</p></div>
|
||||||
|
<div class="paragraph"><p>On Android devices, you should first establish a link between the
|
||||||
|
Bluetooth or Bluetooth LE dive computer and the mobile device using
|
||||||
|
Android utilities. See below for more details.</p></div>
|
||||||
|
<div class="paragraph"><p>For USB dive computers, USB cables "normally" used
|
||||||
|
for uploading dives to a desktop/laptop computer do NOT work: these cables usually have a full-sized ("Type A") male USB plug
|
||||||
|
on one end which plugs into the USB port of a desktop/laptop computer. For downloads to a mobile device
|
||||||
|
one needs a USB OTG (USB On-The-Go) cable. In most cases it is required to plug the USB
|
||||||
|
cable "normally" used with the dive computer into a USB OTG cable which, in turn, plugs into the mini-USB (or sometimes a USB "Type C")
|
||||||
|
receptacle of the mobile device. The
|
||||||
|
OTG cable usually has a full-size ("Type A") female receptacle at one end which accommodates the full-sized male plug
|
||||||
|
of the USB cable "normally" used (see image below). This means that two cables are used to connect the dive computer to the mobile device.</p></div>
|
||||||
|
<div class="paragraph"><p>Please note that not all Android devices support OTG cables. And even on some devices that do support those cables in general, <em>Subsurface-mobile</em> still in some cases cannot access a dive computer through a serial port.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/USB-OTG.jpg" alt="FIGURE: USB-OTG cable" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>For Bluetooth-equipped dive computers and Android devices, establish a Bluetooth connection between the dive computer and the
|
||||||
|
mobile device. Use the tools on the mobile device to achieve pairing between the Bluetooth dice computer
|
||||||
|
and the mobile device. For of Android devices,
|
||||||
|
the Settings → Bluetooth tool is probably appropriate. Ensure pairing of the dive computer and mobile device.
|
||||||
|
<em>Subsurface-mobile</em> performs communication using both Bluetooth and Bluetooth-low-energy (BTLE).
|
||||||
|
The appropriate choice of Bluetooth communication is made by the software and the user need not be concerned with this.</p></div>
|
||||||
|
<div class="paragraph"><p>With pairing between dive computer and <em>Subsurface-mobile</em> having been set up, dive download is simple.
|
||||||
|
From the main menu, tap <em>Manage dives → Download from DC</em>. A screen is shown requiring that the user specify
|
||||||
|
the names of the vendor and model of the dive computer. For instance, when using a Shearwater Petrel 2 dive
|
||||||
|
computer, the vendor is <em>Shearwater</em> and the Dive computer name is <em>Petrel 2</em>. From the two dropdown lists
|
||||||
|
at the top of the screen, select the correct vendor and dive computer names (see image on the left, below).</p></div>
|
||||||
|
<div class="paragraph"><p>Now tap the button labeled <em>Download</em>. The downloaded dives appear in the bottom part of the screen, the
|
||||||
|
most recent dive at the top (see image on right, below). Be patient because the download can take a few minutes.
|
||||||
|
As a matter of fact, a complete first download from some dive computers has been shown to take 45 minutes and longer.</p></div>
|
||||||
|
<div class="paragraph"><p>After the download, each dive has a check-box on the left hand side, used for selecting which dives you want to be added to the
|
||||||
|
<em>Subsurface-mobile</em> dive list: dives that are not checked are ignored. With the appropriate downloaded dives
|
||||||
|
having been checked, tap the button at the bottom left labeled <em>Accept</em>. All the selected dives appear on
|
||||||
|
the <em>Subsurface-mobile</em> dive list. The downloaded dive information can now be edited as described in the section
|
||||||
|
above <a href="#S_Edit_Dive">Edit a dive</a>.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/DC-Download.jpg" alt="FIGURE: DC download screen" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_viewing_the_dive_location_on_google_maps">10. Viewing the dive location on Google Maps</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>In the <em>Details View</em>, the Action Bar at the bottom has a GPS pin on the
|
||||||
|
left hand side. Tap that pin and the dive site is shown in Google Maps. Close Google Maps by using the Android <em>Back</em> button
|
||||||
|
or tapping on the <em>Subsurface-mobile</em> link in the top left corner on iOS.</p></div>
|
||||||
|
<div class="paragraph"><p>Alternatively, the <em>Details View</em> has a button at the top right hand marked
|
||||||
|
<em>Map it</em>. Tap this button to open Google Maps showing the dive site (image below).</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/Map.jpg" alt="FIGURE: Map of dive site" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_dive_log_management">11. Dive log management</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>A central part of <em>Subsurface-mobile</em> is the ability to store the dive
|
||||||
|
log using the <em>Subsurface</em> cloud storage.
|
||||||
|
This provides security against loss or damage to the dive information in a local copy
|
||||||
|
and allows the desktop version of <em>Subsurface</em> to
|
||||||
|
access changes made using the mobile device. This ability is accessed
|
||||||
|
through the main menu (by dragging the Action Button to the right, or
|
||||||
|
by tapping the "Hamburger" icon at the bottom left of the screen).
|
||||||
|
Tap the option <em>Dive management</em>, enabling a number of options:</p></div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_add_new_dive_manually">11.1. Add new dive manually</h3>
|
||||||
|
<div class="paragraph"><p>This is described above under the section dealing with <a href="#S_Add_Dive">Manually adding a new dive to the dive list</a>.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_download_from_dc">11.2. Download from DC</h3>
|
||||||
|
<div class="paragraph"><p>This is described above under the section dealing with <a href="#S_Download">Download dives from a dive computer</a>.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_apply_gps_fixes">11.3. Apply GPS fixes</h3>
|
||||||
|
<div class="paragraph"><p>This is described in the following main section, below.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_manually_sync_the_dive_log_with_the_em_subsurface_em_cloud_storage">11.4. Manually sync the dive log with the <em>Subsurface</em> cloud storage</h3>
|
||||||
|
<div class="paragraph"><p>Upload the dives contained on the mobile device
|
||||||
|
to the <em>Subsurface</em> cloud storage by tapping the option <em>Manual sync with cloud</em>.
|
||||||
|
This synchronizes the local changes to
|
||||||
|
the dive log with the cloud storage. It also downloads changes made to
|
||||||
|
the dive log using another device or computer and stored in shared cloud storage.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_enable_cloud_auto_sync">11.5. Enable cloud auto sync</h3>
|
||||||
|
<div class="paragraph"><p>By default <em>Subsurface-mobile</em> runs offline and only syncs the dive list
|
||||||
|
with cloud storage when explicitly told to do so (see above).
|
||||||
|
You can choose to always sync with the cloud servers after every
|
||||||
|
modification of the dive list. This is not recommended unless you are in
|
||||||
|
an area with fast and reliable internet connection, as otherwise
|
||||||
|
<em>Subsurface-mobile</em> might appear to hang between operations as it tries to
|
||||||
|
connect to the cloud server. Selecting <em>Enable cloud auto sync</em> causes
|
||||||
|
the local dive log to be synchronized with the copy in the cloud every time that
|
||||||
|
<em>Subsurface-mobile</em> is closed. This option is a switch that allows auto
|
||||||
|
sync to be either activated or to be switched off.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_recording_dive_locations_using_gps">12. Recording dive locations using GPS</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>The fact that most smartphones have GPS facilities allows
|
||||||
|
<em>Subsurface-mobile</em> to record
|
||||||
|
the locations of dives. If the smartphone is taken on the dive boat
|
||||||
|
during a dive, locations will be automatically recorded at regular intervals.
|
||||||
|
These locations can then be applied to dives in the dive list. Here is how it’s done:</p></div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_ConfigureGPS">12.1. Configuring the GPS service</h3>
|
||||||
|
<div class="paragraph"><p>From the Main menu, select <em>Settings</em>. The Settings screen has a section for
|
||||||
|
configuring the GPS service (image below). GPS location data
|
||||||
|
are collected at regular intervals, e.g. every 5 minutes, or at regular
|
||||||
|
distances, e.g. after the boat has moved more than 200m, or a combination of
|
||||||
|
both of these approaches. Provide the appropriate information and
|
||||||
|
tap the <em>Back</em> button. The program is now ready to collect GPS positions.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/GPS-config.jpg" alt="FIGURE: GPS configure" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_collecting_gps_positions">12.2. Collecting GPS positions</h3>
|
||||||
|
<div class="paragraph"><p>Ensure that the GPS on the mobile device has been activated and that you
|
||||||
|
have given the app permission to access your location data.
|
||||||
|
Open the Main Menu and select <em>GPS → Run location service</em>. This activates the
|
||||||
|
recording of GPS locations.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/GPSstart.jpg" alt="FIGURE: GPS start" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p><em>Subsurface-mobile</em> starts to collect GPS locations automatically,
|
||||||
|
following the preferences specified as described above. While the GPS
|
||||||
|
location service is running, all menus have a GPS symbol at the bottom
|
||||||
|
of the menu, indicating that the service is active. After return from
|
||||||
|
the dive trip, deactivate the collection of GPS data by tapping
|
||||||
|
the option <em>Disable location service</em>. The GPS symbol at the bottom
|
||||||
|
of all manus disappears.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_storing_the_gps_data_on_the_em_subsurface_em_cloud">12.3. Storing the GPS data on the <em>Subsurface</em> cloud</h3>
|
||||||
|
<div class="paragraph"><p>Activate the main menu and select the <em>GPS</em> option that brings up the submenu
|
||||||
|
of GPS-related actions. Tap <em>Upload GPS data</em> that saves the GPS data
|
||||||
|
on the <em>Subsurface</em> cloud server. These GPS data are saved <strong>separately</strong>
|
||||||
|
from the other dive log data. All collected GPS data are kept on the
|
||||||
|
Android device, independent of whether they have been uploaded or not.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_downloading_gps_data_from_the_em_subsurface_em_cloud">12.4. Downloading GPS data from the <em>Subsurface</em> cloud</h3>
|
||||||
|
<div class="paragraph"><p>Download the GPS data that have been saved on the cloud (possibly by a
|
||||||
|
different device) by
|
||||||
|
selecting <em>Download GPS Data</em> from the GPS sub-panel.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_viewing_gps_data">12.5. Viewing GPS data</h3>
|
||||||
|
<div class="paragraph"><p>From the GPS submenu select <em>Show GPS fixes</em>. This brings
|
||||||
|
up a list of GPS positions obtained by the location service (image
|
||||||
|
below). Two actions are possible for each of the locations, enabled by
|
||||||
|
dragging the handle (the dotted matrix on the right below) to the left. This exposes two
|
||||||
|
options. Tapping the dustbin deletes this particular GPS location. Tapping the
|
||||||
|
teardrop-shaped icon (actually a Google Maps pin) opens up Google Maps with a pin
|
||||||
|
indicating the exact map position of the GPS record being viewed. The two above
|
||||||
|
options can be hidden by drawing the GPS record to the right, again using the handle.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/gpsmanagement.jpg" alt="FIGURE: GPS management" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_applying_gps_data_to_dives_in_the_dive_log">12.6. Applying GPS data to dives in the dive log</h3>
|
||||||
|
<div class="paragraph"><p>Assuming that all the dives have been entered into the dive log or have
|
||||||
|
been downloaded from the <em>Subsurface</em> cloud, apply the GPS positions to
|
||||||
|
these dives. GPS positions can therefore only be applied to dives in the dive list.
|
||||||
|
From the <em>Dive management</em> sub-panel, tap <em>Apply GPS fixes</em>. The dive list contains the start
|
||||||
|
and end times of each dive. Now, <em>Subsurface-mobile</em> applies the first
|
||||||
|
GPS position that falls within the dive period of each dive. This results
|
||||||
|
in a GPS position for each dive that is saved as part of the dive log.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_using_the_settings_for_em_subsurface_mobile_em">13. Using the settings for <em>Subsurface-mobile</em>.</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>The Settings screen allows the customization of <em>Subsurface-mobile</em>. Many of the settings involve dragging a slider switch to activate or deactivate a particular setting.</p></div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_ChangeCloudAccount">13.1. Changing to a different <em>Subsurface</em> cloud account</h3>
|
||||||
|
<div class="paragraph"><p>Some users have more than one <em>Subsurface</em> cloud account and with a need to switch between accounts. Tap <em>Settings</em> on the Main menu and scroll to the section titled <em>Cloud status</em> (see image below).
|
||||||
|
Tap the <em>Change</em> button. This opens the <em>Cloud credentials</em> screen.
|
||||||
|
change the credential information, then tap the button <em>Sign-in or register</em>. The appropriate dive list is shown.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="mobile-images/SettingsCloudTheme.jpg" alt="FIGURE: Settings: Cloud & Theme" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_changing_the_color_theme_of_em_subsurface_mobile_em">13.2. Changing the color theme of <em>Subsurface-mobile</em></h3>
|
||||||
|
<div class="paragraph"><p><em>Subsurface-mobile</em> has three color schemes to please users with different
|
||||||
|
tastes. This user manual shows the default color scheme, comprising blue
|
||||||
|
colors. Change to a pink or a dark color scheme by opening the main menu,
|
||||||
|
tap <em>Settings</em>, and scroll to the section with heading <em>Theme</em> (see image above).
|
||||||
|
Select the appropriate color theme by dragging the appropriate slider on the righthand.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_configuring_the_gps_webservice">13.3. Configuring the GPS webservice</h3>
|
||||||
|
<div class="paragraph"><p>The Settings screen allows one to set up the way in which GPS positions are collected during dives. See the section on <a href="#S_ConfigureGPS">Configuring the GPS service</a>.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_saving_a_detailed_dive_computer_dive_log">13.4. Saving a detailed dive computer dive log</h3>
|
||||||
|
<div class="paragraph"><p>Under the heading <em>Dive computer</em>, you will find a switch to save a detailed log each time dives are downloaded from a dive computer. This is important for solving problems in downloading dives from the dive computer. When contacting the developers with download problems, you will usually be asked to provide the information in this log, which can be found in the root folder of your local storage device as <code>libdivecomputer.log</code>. In the same location you can also find a <code>subsurfacel.log</code> which is always created and which include more information which can be helpful when debugging problems with Subsurface-mobile.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_activating_the_developer_submenu">13.5. Activating the Developer submenu</h3>
|
||||||
|
<div class="paragraph"><p>The information in subsurface.log plus some additional information for understanding the screen rendering of dive information as well as the way in which <em>Subsurface-mobile</em> processed information during a specific occasion while running the app (see section below) is available through a <em>Developer</em> menu at run time. Activate (or deactivate) this menu item on the Main Menu by dragging the slider switch in the Settings screen.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect1">
|
||||||
|
<h2 id="_developer_submenu">14. Developer submenu</h2>
|
||||||
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>If the Developer submenu has been activated in the Settings screen, the Main menu has a <em>Developer</em> item. By tapping this one has two options that are relevant within
|
||||||
|
the context of program development and debugging.</p></div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_app_log">14.1. App log</h3>
|
||||||
|
<div class="paragraph"><p>This option shows the messages that <em>Subsurface-mobile</em> generates while running. While
|
||||||
|
most users are not aware of these messages, they are often crucial in detecting any
|
||||||
|
abnormal behavior of the app. The App log can be found in the root directory of the local storage of the mobile device.</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_theme_information">14.2. Theme information</h3>
|
||||||
|
<div class="paragraph"><p>This option provides a wealth of information about the screen characteristics of the mobile
|
||||||
|
device and the font characteristics used by <em>Subsurface-mobile</em>.</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="footnotes"><hr /></div>
|
||||||
|
<div id="footer">
|
||||||
|
<div id="footer-text">
|
||||||
|
Last updated
|
||||||
|
2018-09-21 19:29:32 PDT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -2,8 +2,8 @@
|
|||||||
// Subsurface-mobile User Manual
|
// Subsurface-mobile User Manual
|
||||||
// =============================
|
// =============================
|
||||||
// :author: Manual authors: Willem Ferguson, Dirk Hohndel
|
// :author: Manual authors: Willem Ferguson, Dirk Hohndel
|
||||||
// :revnumber: 2.1.5
|
// :revnumber: 3.0.0
|
||||||
// :revdate: December 2018
|
// :revdate: March 2020
|
||||||
:icons:
|
:icons:
|
||||||
:toc:
|
:toc:
|
||||||
:toc-placement: manual
|
:toc-placement: manual
|
||||||
@ -16,9 +16,8 @@ image::mobile-images/Banner.jpg["Banner",align="center"]
|
|||||||
|
|
||||||
*Manual authors*: Willem Ferguson, Dirk Hohndel
|
*Manual authors*: Willem Ferguson, Dirk Hohndel
|
||||||
|
|
||||||
// toc::[]
|
|
||||||
|
|
||||||
[blue]#_Version 2.1.5, December 2018_#
|
[blue]#_Version 3.0.5, May 2020_#
|
||||||
|
|
||||||
Welcome as a user of _Subsurface_ and _Subsurface-mobile_, advanced dive logging
|
Welcome as a user of _Subsurface_ and _Subsurface-mobile_, advanced dive logging
|
||||||
software with extensive infrastructure to describe, organize, and interpret scuba
|
software with extensive infrastructure to describe, organize, and interpret scuba
|
||||||
@ -28,6 +27,9 @@ distributions), Android and iOS. In addition, _Subsurface_ is
|
|||||||
open-source software that allows downloading dive
|
open-source software that allows downloading dive
|
||||||
information from many dive computers.
|
information from many dive computers.
|
||||||
|
|
||||||
|
toc::[]
|
||||||
|
|
||||||
|
|
||||||
Introducing Subsurface-mobile
|
Introducing Subsurface-mobile
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
@ -50,7 +52,7 @@ _Subsurface-mobile_ allows:
|
|||||||
- Download and storage of dive log information using the _Subsurface_ cloud.
|
- Download and storage of dive log information using the _Subsurface_ cloud.
|
||||||
- Viewing this information on a mobile device.
|
- Viewing this information on a mobile device.
|
||||||
- Manually creating and adding new dive records to your dive log.
|
- Manually creating and adding new dive records to your dive log.
|
||||||
- Download dive data directly from many dive computers.
|
- Download dive data directly from some dive computers.
|
||||||
- Editing many of the dive log data fields, e.g. dive-master, buddy,
|
- Editing many of the dive log data fields, e.g. dive-master, buddy,
|
||||||
equipment or notes relating to a dive.
|
equipment or notes relating to a dive.
|
||||||
- Recording, storing and applying GPS positions of dives.
|
- Recording, storing and applying GPS positions of dives.
|
||||||
@ -62,14 +64,15 @@ _Subsurface-mobile_ does not support download of dive data from all the
|
|||||||
dive computers that the desktop/laptop version can. This limitation is
|
dive computers that the desktop/laptop version can. This limitation is
|
||||||
mainly caused by the inability of accessing some types of devices on the
|
mainly caused by the inability of accessing some types of devices on the
|
||||||
two mobile platforms. On Android, a subset of
|
two mobile platforms. On Android, a subset of
|
||||||
dive computers that use a FTDI USB interface or a Bluetooth / Bluetooth LE interface
|
dive computers that use USB serial cables or a Bluetooth / Bluetooth LE interface
|
||||||
are accessible by _Subsurface-mobile_. On iOS, only Bluetooth LE based
|
are accessible by _Subsurface-mobile_. On iOS, only Bluetooth LE based
|
||||||
dive computers are supported.
|
dive computers are supported.
|
||||||
|
|
||||||
== Installing _Subsurface-mobile_ on your mobile device
|
== Installing _Subsurface-mobile_ on your mobile device
|
||||||
|
|
||||||
Find _Subsurface-mobile_ in the _Google Play Store_ or the _iTunes Store_
|
Find _Subsurface-mobile_ in the _Google Play Store_ or the _iTunes Store_
|
||||||
and install it. Please note that both stores also contain the older _Subsurface_ companion app (used only for tracking GPS positions) - make sure you actually install _Subsurface-mobile_.
|
and install it. For Android devices without access to the _Google Play Store_
|
||||||
|
APKs can be found in the downloads folder on the Subsurface website.
|
||||||
|
|
||||||
== Using _Subsurface-mobile_ for the first time
|
== Using _Subsurface-mobile_ for the first time
|
||||||
|
|
||||||
@ -96,7 +99,13 @@ do full maintenance of a dive log from _Subsurface-mobile_ alone. By using the s
|
|||||||
credentials with _Subsurface-mobile_ and _Subsurface_ for desktop, the _Subsurface_ cloud storage allows sharing of a dive
|
credentials with _Subsurface-mobile_ and _Subsurface_ for desktop, the _Subsurface_ cloud storage allows sharing of a dive
|
||||||
log between both (or even more than two) devices.
|
log between both (or even more than two) devices.
|
||||||
|
|
||||||
The dive data on the cloud are cached locally both on the mobile device as well as on the desktop - it is easy to create backups of the data (for example in XML format) on the desktop: both mobile device and desktop keep a local copy of the data so that the dive log is always accessible, even without Internet connection. The Subsurface team never accesses a user's dive data without explicit permission to do so, the data are not used for any purpose other than providing them to the user who created them. There are no ads and no harvesting / analysis of the data stored in the Subsurface cloud storage.
|
The dive data in the cloud are cached locally both on the mobile device as well as on the desktop -
|
||||||
|
it is easy to create backups of the data (for example in XML format) on the desktop: both mobile
|
||||||
|
device and desktop keep a local copy of the data so that the dive log is always accessible, even
|
||||||
|
without Internet connection. The Subsurface team never accesses a user's dive data without explicit
|
||||||
|
permission to do so, the data are not used for any purpose other than providing them to the user who
|
||||||
|
created them. There are no ads and no harvesting / analysis of the data stored in the Subsurface
|
||||||
|
cloud storage.
|
||||||
|
|
||||||
1) Enter an e-mail address and a password in the fields indicated on the screen (see image above).
|
1) Enter an e-mail address and a password in the fields indicated on the screen (see image above).
|
||||||
The e-mail address should be in lower case and the password should contain a combination of
|
The e-mail address should be in lower case and the password should contain a combination of
|
||||||
@ -105,14 +114,21 @@ Tap the "Sign-in or Register" button. If you have already set
|
|||||||
up an account from the _Subsurface_ desktop application, enter the same credentials here.
|
up an account from the _Subsurface_ desktop application, enter the same credentials here.
|
||||||
Once the dive
|
Once the dive
|
||||||
list has been downloaded from the cloud, _Subsurface-mobile_ usually works only with the the local
|
list has been downloaded from the cloud, _Subsurface-mobile_ usually works only with the the local
|
||||||
copy on the mobile device. This avoids long delays or even failure of operations if there is a bad (or no) internet connection, a situation fairly common at many dive sites. Once registered, _Subsurface-mobile_ remembers the cloud credentials and it is not necessary to provide these again when launching the program.
|
copy on the mobile device. This avoids long delays or even failure of operations if there is a bad
|
||||||
|
(or no) internet connection, a situation fairly common at many dive sites. Once registered,
|
||||||
|
_Subsurface-mobile_ remembers the cloud credentials and it is not necessary to provide these again
|
||||||
|
when launching the program.
|
||||||
|
|
||||||
2) If this is a new cloud account, a PIN screen will open (see image on right, above). A PIN is e-mailed
|
2) If this is a new cloud account, a PIN screen will open (see image on right, above). A PIN is e-mailed
|
||||||
to the email address entered in the previous step. Enter this PIN into the field indicated
|
to the email address entered in the previous step. Enter this PIN into the field indicated
|
||||||
and tap the _Register_ button. The user
|
and tap the _Register_ button. The user
|
||||||
information is stored on the cloud server and access to the cloud is enabled. In this case
|
information is stored on the cloud server and access to the cloud is enabled. In this case
|
||||||
the dive list is initially empty. Start entering dives in the dive
|
the dive list is initially empty. Start entering dives in the dive
|
||||||
log or download dive information from a supported dive computer.
|
log or download dive information from a supported dive computer. After the PIN has been entered it
|
||||||
|
is no longer needed - it just proves that this is indeed your email account.
|
||||||
|
|
||||||
|
A https://www.youtube.com/watch?v=Vp_bEm5ZDRA[*video-tutorial*] is available that demonstrates
|
||||||
|
how to connect to the cloud.
|
||||||
|
|
||||||
****
|
****
|
||||||
[icon="images/icons/important.png"]
|
[icon="images/icons/important.png"]
|
||||||
@ -124,11 +140,11 @@ log or download dive information from a supported dive computer.
|
|||||||
1. Check *carefully* that there is not a spelling mistake in the email address you provided.
|
1. Check *carefully* that there is not a spelling mistake in the email address you provided.
|
||||||
2. Check that the return email containing the PIN is not in the SPAM folder of your email client.
|
2. Check that the return email containing the PIN is not in the SPAM folder of your email client.
|
||||||
3. Wait for 24 hours and check again for an email with a PIN.
|
3. Wait for 24 hours and check again for an email with a PIN.
|
||||||
4. If there is still no email containing a PIN, send mail to in-app-support@subsurface-divelog.org
|
4. If there is still no email containing a PIN, send mail to mailto:in-app-support@subsurface-divelog.org[our in-app-support address]
|
||||||
|
|
||||||
[blue]#I want to access the Subsurface cloud facility but I have forgotten my password. How can I reset my password?#
|
[blue]#I want to access the Subsurface cloud facility but I have forgotten my password. How can I reset my password?#
|
||||||
|
|
||||||
Open the following web address: https://cloud.subsurface-divelog.org/passwordreset
|
Use our https://cloud.subsurface-divelog.org/passwordreset[Internet-based password reset facility].
|
||||||
|
|
||||||
This will require that you enter the same email address that you used during cloud registration.
|
This will require that you enter the same email address that you used during cloud registration.
|
||||||
****
|
****
|
||||||
@ -145,12 +161,18 @@ multiple accounts. See the section on xref:S_ChangeCloudAccount[Changing to a di
|
|||||||
|
|
||||||
== Getting Support
|
== Getting Support
|
||||||
|
|
||||||
The best place to get support is the Subsurface User Forum. Additionally, Subsurface-mobile allows you to send a support email by tapping on _Ask for support_ in the main menu. This will open an email to our in app support address in the native email client, including the relevant logs.
|
The best place to get support is the Subsurface User Forum. Additionally, Subsurface-mobile allows
|
||||||
|
you to send a support email by tapping on _Ask for support_ in the main menu. This will open an
|
||||||
|
email to our in app support address in the native email client, including the relevant logs.
|
||||||
|
|
||||||
== Menu Structure and User Interface
|
== Menu Structure and User Interface
|
||||||
|
|
||||||
At the bottom of many _Subsurface-mobile_ screens is a round button that provides for
|
At the bottom of many _Subsurface-mobile_ screens is a round button that provides for
|
||||||
several actions (see image below). The most common choice is indicated in a round colored _action button_ (in the case below, edit a dive). Alternative actions are indicated in a white _action bar_.
|
several actions (see image below). The most common choice is indicated in a round colored _action button_ (in the case below, edit a dive). Alternative actions are indicated in a white _action bar_.
|
||||||
|
On some screen a context menu is available by tapping on the three dots in the lower right corner
|
||||||
|
of the screen. In the dive list this can also be opened by tapping and holding a dive ot trip
|
||||||
|
header.
|
||||||
|
|
||||||
On Android devices, use the Android Back
|
On Android devices, use the Android Back
|
||||||
button for "cancel", "discard" or "back" actions. For example, when
|
button for "cancel", "discard" or "back" actions. For example, when
|
||||||
editing dive information, tapping the action button saves the changes while the
|
editing dive information, tapping the action button saves the changes while the
|
||||||
@ -166,7 +188,7 @@ _Subsurface-mobile_ on Android does not use the traditional "hamburger"
|
|||||||
menu button in the top left or right corner of the screen to open menus.
|
menu button in the top left or right corner of the screen to open menus.
|
||||||
Instead, _Subsurface-mobile_ uses a
|
Instead, _Subsurface-mobile_ uses a
|
||||||
different user interaction philosophy based on the Kirigami framework
|
different user interaction philosophy based on the Kirigami framework
|
||||||
developed by the Plasma developers. There are three ways to open the main menu:
|
developed by the Plasma developers. There are two ways to open the main menu:
|
||||||
|
|
||||||
- Tap the "hamburger" symbol in the lower left corner of the screen
|
- Tap the "hamburger" symbol in the lower left corner of the screen
|
||||||
(easy to reach for hand held devices)
|
(easy to reach for hand held devices)
|
||||||
@ -183,23 +205,44 @@ version. The iOS screens look similar.
|
|||||||
|
|
||||||
== The Dive List
|
== The Dive List
|
||||||
|
|
||||||
Most of the actions of _Subsurface-mobile_ center around the dives on the
|
The _Dive List_ is the heart of _Subsurface-mobile_ because most of the actions
|
||||||
dive list. While the dive list is loading from the cloud,
|
center around the dives on the dive list. While the dive list is loading from the cloud,
|
||||||
a message appears at the bottom of the screen, indicating that the cloud is
|
a message appears at the bottom of the screen, indicating that the cloud is
|
||||||
being accessed, after which the dive list is shown. Once the list is loaded you can scroll up and down through your dive history.
|
being accessed, after which the dive list is shown. Once the list is loaded you can scroll up and down
|
||||||
To upload dives from a dive computer, tap the blue action button. If you wish
|
through your dive history.
|
||||||
to add a dive manually, tap the + button in the action bar (described below).
|
|
||||||
Tapping an existing dive on the list brings up a display of the _Details View_ for that dive
|
The Dive List consists of two types of entries:
|
||||||
including the dive profile, notes and additional information.
|
|
||||||
|
1. *Trip headers*. A trip header is a line describing the year and month during which a dive trip
|
||||||
|
took place, as wel as the geographical area of the trip. The second line in the lefthand image below indicates that a 10-dive trip
|
||||||
|
was made to Guinjata, Moçambique during December 2016.
|
||||||
|
|
||||||
|
2. *Individual dive records*. Tapping a trip header expands the dive list to show (or hide) the individual dives performed during the trip. Each dive is represented by a dive record. By default the dives during the last trip are listed with older dives at the bottom and recent dives at the top of the list. In the lefthand image below the last dive during
|
||||||
|
the Guinjata trip was in the Inhambane Estuary.
|
||||||
|
|
||||||
image::mobile-images/Divelist2.jpg["FIGURE: Dive list screen",align="center"]
|
image::mobile-images/Divelist2.jpg["FIGURE: Dive list screen",align="center"]
|
||||||
|
|
||||||
You can view other dives by swiping the _Details view_ to the right (for the
|
[[S_View_Dive]]
|
||||||
previous dive) or to the left (following dive).
|
== View a dive: the _Details View_
|
||||||
Using the Action Bar, it is also possible to delete the dive (tap the dustbin
|
|
||||||
on the Action Bar) or to view the dive
|
Tapping on a dive in the _Dive List_ brings up a screen with the dive profile
|
||||||
|
and many important details about the dive is opened (image on right, above). The dive details usually
|
||||||
|
do not fit in a single screen and one needs to scroll the screen to see all the information.
|
||||||
|
View other dives by swiping the _Details view_ to the right (for the
|
||||||
|
previous dive) or to the left (following dive). Alternatively use a pinch gesture
|
||||||
|
to zoom into the profile and tapping with one finger, waiting briefly until
|
||||||
|
the profile becomes translucent, and then dragging the finger around
|
||||||
|
to pan the profile so the interesting parts are shown.
|
||||||
|
To view the dive
|
||||||
location on a map viewer (Google Maps on Android, the Google Maps web site
|
location on a map viewer (Google Maps on Android, the Google Maps web site
|
||||||
on iOS; tap the GPS icon on the Action Bar.).
|
on iOS) tap the GPS icon on the Action Bar (to the left of the pencil action button in image on the right, above).
|
||||||
|
|
||||||
|
To upload dives from a dive computer, tap the blue action button. If you wish
|
||||||
|
to add a dive manually, tap the + button in the action bar (described below).
|
||||||
|
Using the Action Bar, it is also possible to delete the dive (tap the dustbin
|
||||||
|
on the Action Bar).
|
||||||
|
The context menu (accessible by tapping on the vertical three dots in the lower right corner of the
|
||||||
|
screen) offers additional options to move dives between trips and to undo and redo previous actions.
|
||||||
|
|
||||||
== Filter the dive list
|
== Filter the dive list
|
||||||
|
|
||||||
@ -211,7 +254,15 @@ at the bottom of the dive list to perform filtering of the dive list (see image
|
|||||||
|
|
||||||
image::mobile-images/Filter.jpg["FIGURE: Filter tool",align="center"]
|
image::mobile-images/Filter.jpg["FIGURE: Filter tool",align="center"]
|
||||||
|
|
||||||
By default, all the dives in the dive log are shown in the dive list. After several years your dive log can become quite long and, sometimes, you might like to list only the dives of a particular type, e.g. those at a particular dive site or those with a specific buddy or dive master. Use the Filter to achieve this. The filter mechanism searches through all the information for each dive, looking for one or more key words. Only the dives containing these key words are listed in the dive list. In the xref:S_Settings[_Settings_] screen there two options that affect the way the filter searches for appropriate information. Firstly, you can select _Match filter case sensitive_ which causes the search of key words to be case sensitive. Secondly, you can select _Include notes in full text filtering_. If this option is not selected, the filter does not search through the dive notes for key words. Selecting the _Filter_ action button brings up a text box at the top of the dive list. Type the key words to be searched for. In the image on the left, the dive list has been filtered for the word "Nitrox" and 265 dives were found containing this word as a tag. For each trip in the dive list the number of dives containing "Nitrox" as a tag is shown. To clear the filter, remove the key words from the text box and select the Filter action button to switch off filtering.
|
By default, all the dives in the dive log are shown in the dive list. After several years your dive
|
||||||
|
log can become quite long and, sometimes, you might like to list only the dives of a particular
|
||||||
|
type, e.g. those at a particular dive site or those with a specific buddy or dive master. Use the
|
||||||
|
Filter to achieve this. The filter mechanism searches through all the information for each dive,
|
||||||
|
looking for one or more key words. Only the dives containing these key words are listed in the dive
|
||||||
|
list. Three filter modes exist. "Fulltext" searches all text strings. Selecting "People" lists buddies and
|
||||||
|
dive masters, while "Tags" only filters for tags containing the given text. Filters are not case-sensitive.
|
||||||
|
To clear the filter, remove the key words from the text box and select the Filter action button to
|
||||||
|
switch off filtering. The image above represents a full-text search for dives with the word "nitrox".
|
||||||
|
|
||||||
== Viewing the locations of all dives in the dive list
|
== Viewing the locations of all dives in the dive list
|
||||||
|
|
||||||
@ -225,36 +276,10 @@ of the different dive sites.
|
|||||||
== Viewing the location of a dive on _Google Maps_
|
== Viewing the location of a dive on _Google Maps_
|
||||||
|
|
||||||
image::mobile-images/Map.jpg["FIGURE: Map of dive site",align="center"]
|
image::mobile-images/Map.jpg["FIGURE: Map of dive site",align="center"]
|
||||||
In the _Details View_, the Action Bar at the bottom has a GPS pin on the
|
In the _Details View_, the Action Bar at the bottom of the screen has a GPS pin on the
|
||||||
left hand side. Tap that pin and the dive site is shown in Google Maps. Close Google Maps by using the Android _Back_ button
|
left hand side. Tap that pin and the dive site is shown in Google Maps. Close Google Maps by using the Android _Back_ button
|
||||||
or tapping on the _Subsurface-mobile_ link in the top left corner on iOS.
|
or tapping on the _Subsurface-mobile_ link in the top left corner on iOS.
|
||||||
|
|
||||||
Alternatively, the _Details View_ has a button at the top right hand marked
|
|
||||||
_Map it_. Tap this button to open Google Maps showing the dive site (image on left).
|
|
||||||
|
|
||||||
[[S_View_Dive]]
|
|
||||||
== View a dive
|
|
||||||
|
|
||||||
When you tap on a dive in the _Dive List_, a new screen with the dive profile
|
|
||||||
and many important details about the dive is opened. You can use a pich gesture
|
|
||||||
to zoom into the profile, and tapping with one finger, waiting briefly until
|
|
||||||
the profile becomes translucent, and then dragging the finger around allows you
|
|
||||||
to pan the profile so the interesting parts are shown.
|
|
||||||
|
|
||||||
[[S_Edit_Dive]]
|
|
||||||
== Edit a particular dive
|
|
||||||
|
|
||||||
image::mobile-images/Editdive.jpg["FIGURE: Dive edit screen",align="center"]
|
|
||||||
At the bottom of the _Dive Details_ screen the action button is a pencil.
|
|
||||||
Tapping the pencil button changes the page and enables edit boxes that allow
|
|
||||||
modifying the existing dive information, e.g. adding text to the dive notes
|
|
||||||
or changing the names or values of some of the information (see image on left).
|
|
||||||
It may be necessary to scroll the window to access all the information.
|
|
||||||
At the bottom of the edit screen is a _Save_ action button. Tap this to save
|
|
||||||
the new information, after which the dive list screen is
|
|
||||||
updated and shown. To cancel any edits, tap the Android _Back_ Button or
|
|
||||||
the application back button at the top left of the screen on iOS.
|
|
||||||
|
|
||||||
[[S_Add_Dive]]
|
[[S_Add_Dive]]
|
||||||
== Manually adding a new dive to the dive list
|
== Manually adding a new dive to the dive list
|
||||||
|
|
||||||
@ -267,48 +292,14 @@ dive computer, the duration, depth and several other bits of information about
|
|||||||
the new dive can be entered. The _Action button_ at the bottom of the screen
|
the new dive can be entered. The _Action button_ at the bottom of the screen
|
||||||
contains a disk symbol. Tap this to save the new dive. To cancel any edits, tap the _Back_ button.
|
contains a disk symbol. Tap this to save the new dive. To cancel any edits, tap the _Back_ button.
|
||||||
The left-hand image below shows a screenshot of a dive being created and the right-hand image shows
|
The left-hand image below shows a screenshot of a dive being created and the right-hand image shows
|
||||||
the same dive in _Details View_.
|
the same dive in _Details View_. After editing the dive information, the dive trip information
|
||||||
|
needs to be edited as described in the section above on xref:S_Divetrip[Dive trip editing].
|
||||||
|
|
||||||
|
This https://www.youtube.com/watch?v=sF8KB_r0rFw[*video-tutorial*] explains how to add information to a
|
||||||
|
manually-entered dive.
|
||||||
|
|
||||||
image::mobile-images/Manualdive.jpg["FIGURE: Manual dive entry screen",align="center"]
|
image::mobile-images/Manualdive.jpg["FIGURE: Manual dive entry screen",align="center"]
|
||||||
|
|
||||||
== Copy dive information from one dive to another
|
|
||||||
|
|
||||||
When editing dives it is possible to transfer information from one dive to another. For instance,
|
|
||||||
when diving with the same buddy and the same equipment configuration during a particular dive trip
|
|
||||||
it can be efficient to simply copy all this information from the previous dive into the dive that
|
|
||||||
is being edited. Currently a standard list of dive information is copied to the clipboard:
|
|
||||||
|
|
||||||
Divemaster, Buddy, Suit, Tags, Cylinders, Weights.
|
|
||||||
|
|
||||||
Copy and paste dive information is performed on the Dive List. Long-press on a dive. A panel
|
|
||||||
with three icons appears on top the selected dive :
|
|
||||||
|
|
||||||
image::mobile-images/CopyDeleteDive.jpg["FIGURE: Copy/Delete dive information",align="center"]
|
|
||||||
|
|
||||||
To copy the above information to the clipboard, select the leftmost of the three icons. A "Copy"
|
|
||||||
notification briefly appears on the screen. Now long-press the dive into which the copied information
|
|
||||||
needs to be pasted. The same three icons appear on the target dive. Select the middle icon. A "Paste"
|
|
||||||
notification briefly appears on the screen. This completes the copy-and-paste action. Continue by
|
|
||||||
reviewing this new (pasted) information by manually editing the target dive.
|
|
||||||
|
|
||||||
To choose what dive details to copy, long-press the copy button. This will open
|
|
||||||
up a configuration page where you can toggle the details you want to copy over
|
|
||||||
to the destination.
|
|
||||||
|
|
||||||
== Deleting a dive
|
|
||||||
|
|
||||||
Delete a dive from the dive list by long-pressing a dive
|
|
||||||
until a red dustbin appears on the right-hand side (see image above). Tap the dustbin.
|
|
||||||
The dive is deleted without asking any confirmation because _Subsurface-mobile_ assumes that the
|
|
||||||
combination of a long tap on the dive with another tap on the red dustbin is an unambiguous
|
|
||||||
instruction to delete the dive.
|
|
||||||
|
|
||||||
To choose what dive details to copy, long-press the copy button. This will open
|
|
||||||
up a configuration page where you can toggle the details you want to copy over
|
|
||||||
to the destination. By default, the following fields are copied:
|
|
||||||
|
|
||||||
image::mobile-images/Delete_undo.jpg["FIGURE: Undo delete dive",align="center"]
|
|
||||||
|
|
||||||
[[S_Download]]
|
[[S_Download]]
|
||||||
== Download dives from a dive computer
|
== Download dives from a dive computer
|
||||||
|
|
||||||
@ -317,9 +308,9 @@ tap _Manage dives -> Download from DC_. A screen is shown requiring that the us
|
|||||||
the names of the vendor and model of the dive computer. For instance, when using a Shearwater Petrel dive
|
the names of the vendor and model of the dive computer. For instance, when using a Shearwater Petrel dive
|
||||||
computer, the vendor is _Shearwater_ and the Dive computer name is _Petrel_(see image on the left, below).
|
computer, the vendor is _Shearwater_ and the Dive computer name is _Petrel_(see image on the left, below).
|
||||||
*Caveats:* The download feature in smartphones supports only a limited number of dive computers. On
|
*Caveats:* The download feature in smartphones supports only a limited number of dive computers. On
|
||||||
Android devices these are typically dive computers using an FTDI interface
|
Android devices these are typically dive computers using a serial USB interface
|
||||||
using a USB OTG cable (but this is blocked on some Android devices by OS
|
using a USB OTG cable or a simple USB C-A adapter on newer devices.
|
||||||
settings). Android devices also support Bluetooth dive computers that
|
Android devices also support Bluetooth dive computers that
|
||||||
are supported in _Subsurface_ on the desktop. Both Android and iOS devices allow direct
|
are supported in _Subsurface_ on the desktop. Both Android and iOS devices allow direct
|
||||||
download of dive data from a handful of Bluetooth LE enabled dive
|
download of dive data from a handful of Bluetooth LE enabled dive
|
||||||
computers. Use the _Vendor name_ and _Dive Computer_ drop-downs to pick the correct
|
computers. Use the _Vendor name_ and _Dive Computer_ drop-downs to pick the correct
|
||||||
@ -330,14 +321,8 @@ computers that are not used any more. Achieve this by selecting the option
|
|||||||
_Forget remembered dive computers_ in the xref:S_Settings[_Settings_] menu.
|
_Forget remembered dive computers_ in the xref:S_Settings[_Settings_] menu.
|
||||||
After all these caveats, let us proceed with download.
|
After all these caveats, let us proceed with download.
|
||||||
|
|
||||||
*For USB FTDI dive computers:*
|
*For USB serial dive computers:*
|
||||||
This feature is not supported on iOS and on most newer Android devices. It still works on some older
|
This feature is not supported on iOS.
|
||||||
Android devices (typically Android 7 and older) and is kept enabled for this
|
|
||||||
reason. Note: USB cables "normally" used for uploading dives to a
|
|
||||||
desktop/laptop computer do NOT work; these
|
|
||||||
cables usually have a full-sized ("Type A") male USB plug
|
|
||||||
on one end which plugs into the USB port of a desktop/laptop computer. For downloads to a mobile device
|
|
||||||
one needs a USB OTG (USB On-The-Go) cable.
|
|
||||||
|
|
||||||
[width="100%", frame="None"]
|
[width="100%", frame="None"]
|
||||||
|=======
|
|=======
|
||||||
@ -350,8 +335,7 @@ OTG cable usually has a full-size ("Type A") female receptacle at one end which
|
|||||||
accommodates the full-sized male plug
|
accommodates the full-sized male plug
|
||||||
of the USB cable "normally" used (see image below). This means that two cables are used to connect
|
of the USB cable "normally" used (see image below). This means that two cables are used to connect
|
||||||
the dive computer to the mobile device. *Not all Android devices support OTG cables*
|
the dive computer to the mobile device. *Not all Android devices support OTG cables*
|
||||||
and even on some devices that do support those cables in general, as mentioned above _Subsurface-mobile_
|
but usually all modern Android devices with a USB C plug can be used with a USB A-C adapter.
|
||||||
does usually not support cable based downloads, except on some older Android devices.
|
|
||||||
|=======
|
|=======
|
||||||
|
|
||||||
_Subsurface_ remembers the settings for dive computers that
|
_Subsurface_ remembers the settings for dive computers that
|
||||||
@ -359,7 +343,13 @@ have been successfully used (image on right, below). These appear
|
|||||||
as buttons under a heading "_Previously used dive computers_".
|
as buttons under a heading "_Previously used dive computers_".
|
||||||
Select the appropriate button. Having connected the USB dive computer to the
|
Select the appropriate button. Having connected the USB dive computer to the
|
||||||
_Subsurface_ computer and having selected the appropriate vendor and dive computer,
|
_Subsurface_ computer and having selected the appropriate vendor and dive computer,
|
||||||
ensure that the Connection text box shows "FTDI".
|
ensure that the Connection text box shows the corresponding connection. For a small number of dive
|
||||||
|
computers the connection name shows the dive computer vendor, for most only the cable chipset vendor
|
||||||
|
(and USB connection number) is shown. Most users of course only connect one USB dive computer to
|
||||||
|
their Android device and then things are fairly straight forward. A dialog will pop up and ask if
|
||||||
|
you want to use Subsurface-mobile to connect to the device. If you confirm, then Subsurface will
|
||||||
|
open to the dive computer download screen with the correct connection selected (and if it can deduce
|
||||||
|
the correct dive computer based on the cable used, even that information is already pre-filled).
|
||||||
|
|
||||||
*For BLUETOOTH/BTLE dive computers:* The process for Bluetooth download is slightly different between Android and iOS.
|
*For BLUETOOTH/BTLE dive computers:* The process for Bluetooth download is slightly different between Android and iOS.
|
||||||
In our testing we got the best results on iOS when the dive computer was
|
In our testing we got the best results on iOS when the dive computer was
|
||||||
@ -381,6 +371,8 @@ screen for each mode of communication, allowing a choice. Use the _Connection_ v
|
|||||||
two options. In the image on the right, below, there are three buttons labeled "Shearwater Petrel 2". These represent two Shearwater Petrel dive computers, one of which can communicate in both Bluetooth as well as BTLE. The _Connection_
|
two options. In the image on the right, below, there are three buttons labeled "Shearwater Petrel 2". These represent two Shearwater Petrel dive computers, one of which can communicate in both Bluetooth as well as BTLE. The _Connection_
|
||||||
information indicates that the Petrel with no BTLE is selected.
|
information indicates that the Petrel with no BTLE is selected.
|
||||||
|
|
||||||
|
This https://www.youtube.com/watch?v=4MtQqm4o7bw[*video-tutorial*] demonstrates setting up a Bluetooth connection with an Android device.
|
||||||
|
|
||||||
*DOWNLOAD:* With communication between dive computer and _Subsurface-mobile_
|
*DOWNLOAD:* With communication between dive computer and _Subsurface-mobile_
|
||||||
having been set up, tap the _Download_ button. Be patient because the download can take a few minutes.
|
having been set up, tap the _Download_ button. Be patient because the download can take a few minutes.
|
||||||
As a matter of fact, a complete first download from some dive computers can take 45 minutes or longer.
|
As a matter of fact, a complete first download from some dive computers can take 45 minutes or longer.
|
||||||
@ -391,9 +383,72 @@ Each dive has a check-box on the left hand side, used for selecting which dives
|
|||||||
_Subsurface-mobile_ dive list: dives that are not checked are ignored. With the appropriate downloaded dives
|
_Subsurface-mobile_ dive list: dives that are not checked are ignored. With the appropriate downloaded dives
|
||||||
having been checked, tap the button at the bottom left labeled _Accept_. All the selected dives appear on
|
having been checked, tap the button at the bottom left labeled _Accept_. All the selected dives appear on
|
||||||
the _Subsurface-mobile_ dive list. The downloaded dive information can now be edited as described in the section
|
the _Subsurface-mobile_ dive list. The downloaded dive information can now be edited as described in the section
|
||||||
above xref:S_Edit_Dive[Edit a dive].
|
above xref:S_Edit_Dive[Edit the dive information]. After editing the dive information, the dive trip information
|
||||||
|
needs to be edited as described in the section above on xref:S_Divetrip[Edit the dive trip information].
|
||||||
|
|
||||||
image::mobile-images/DC-Download.jpg["FIGURE: DC download screen",align="center"]
|
This https://www.youtube.com/watch?v=DCi70WZMTws[*video-tutorial*] demonstrates downloading dives from a Bluetooth-equipped dive computer.
|
||||||
|
|
||||||
|
[[S_Edit_Dive]]
|
||||||
|
== Edit the dive information
|
||||||
|
|
||||||
|
image::mobile-images/Editdive.jpg["FIGURE: Dive edit screen",align="center"]
|
||||||
|
At the bottom of the _Dive Details_ screen the action button is a pencil.
|
||||||
|
Tapping the pencil button changes the page and enables edit boxes that allow
|
||||||
|
modifying the existing dive information, e.g. adding text to the dive notes
|
||||||
|
or changing the names or values of some of the information (see image on left).
|
||||||
|
It may be necessary to scroll the window to access all the information.
|
||||||
|
At the bottom of the edit screen is a _Save_ action button. Tap this to save
|
||||||
|
the new information, after which the dive list screen is
|
||||||
|
updated and shown. To cancel any edits, tap the Android _Back_ Button or
|
||||||
|
the application back button at the top left of the screen on iOS.
|
||||||
|
|
||||||
|
This https://www.youtube.com/watch?v=pE3ujzGw_7o[*video-tutorial*] explains how to add information about a dive.
|
||||||
|
|
||||||
|
[[S_Divetrip]]
|
||||||
|
== Edit the dive trip information
|
||||||
|
|
||||||
|
When a new dive(s) is entered manually or downloaded from dive computer, a trip header is created at the
|
||||||
|
top of the dive list only showing the month and the year of the dive trip as well as the number of dives
|
||||||
|
during the trip (image on left below, showing a trip header with "May 2018", the trip comprising two dives).
|
||||||
|
You would probably like to include information about the place
|
||||||
|
where the trip took place, e.g. "Channel Islands" or the dive charter company used. In this case long-press
|
||||||
|
the dive trip header to activate the context menu. Select the option "Edit trip details" to open a panel
|
||||||
|
for typing information about the trip (image on right, below). Having provided the required information,
|
||||||
|
tap the _Save_ action button at the bottom of the screen. This returns you to the dive list, showing some of
|
||||||
|
the dive trip information that has just been provided.
|
||||||
|
|
||||||
|
image::mobile-images/TripDetails.jpg["FIGURE: Edit trip details",align="center"]
|
||||||
|
|
||||||
|
// == Copy dive information from one dive to another
|
||||||
|
//
|
||||||
|
// When editing dives it is possible to transfer information from one dive to another. For instance,
|
||||||
|
// when diving with the same buddy and the same equipment configuration during a particular dive trip
|
||||||
|
// it can be efficient to simply copy all this information from the previous dive into the dive that
|
||||||
|
// is being edited. Currently a standard list of dive information is copied to the clipboard:
|
||||||
|
//
|
||||||
|
// Divemaster, Buddy, Suit, Tags, Cylinders, Weights.
|
||||||
|
//
|
||||||
|
// Copy and paste dive information is performed on the Dive List. Long-press on a dive. A panel
|
||||||
|
// with three icons appears on top the selected dive :
|
||||||
|
//
|
||||||
|
// image::mobile-images/CopyDeleteDive.jpg["FIGURE: Copy/Delete dive information",align="center"]
|
||||||
|
//
|
||||||
|
// To copy the above information to the clipboard, select the leftmost of the three icons. A "Copy"
|
||||||
|
// notification briefly appears on the screen. Now long-press the dive into which the copied information
|
||||||
|
// needs to be pasted. The same three icons appear on the target dive. Select the middle icon. A "Paste"
|
||||||
|
// notification briefly appears on the screen. This completes the copy-and-paste action. Continue by
|
||||||
|
// reviewing this new (pasted) information by manually editing the target dive.
|
||||||
|
//
|
||||||
|
// To choose what dive details to copy, long-press the copy button. This will open
|
||||||
|
// up a configuration page where you can toggle the details you want to copy over
|
||||||
|
// to the destination.
|
||||||
|
|
||||||
|
== Deleting a dive
|
||||||
|
|
||||||
|
Delete a dive from the dive list by long-pressing a dive and selecting delete in the context menu.
|
||||||
|
If the wrong dive was deleted by mistake you can easily undo the operation by using the context menu.
|
||||||
|
|
||||||
|
image::mobile-images/Delete_undo.jpg["FIGURE: Undo delete dive",align="center"]
|
||||||
|
|
||||||
== Dive log management
|
== Dive log management
|
||||||
|
|
||||||
@ -528,10 +583,6 @@ Select the appropriate color theme by dragging the appropriate slider on the rig
|
|||||||
On the left is the dive list after selecting the Pink theme.
|
On the left is the dive list after selecting the Pink theme.
|
||||||
|=======
|
|=======
|
||||||
|
|
||||||
=== Configuring the GPS webservice
|
|
||||||
|
|
||||||
The Settings screen allows one to set up the way in which GPS positions are collected during dives. See the section on xref:S_ConfigureGPS[Configuring the GPS service].
|
|
||||||
|
|
||||||
=== Activating the Developer sub-menu
|
=== Activating the Developer sub-menu
|
||||||
|
|
||||||
The information in the subsurface.log generated while running _Subsurface-mobile_, plus some additional information for understanding the screen rendering of dive information as well as the way in which _Subsurface-mobile_ processed information during a specific occasion while running the app (see section below) is available through a _Developer_ menu at run time. Activate (or deactivate) this menu item on the Main Menu by dragging the slider switch in the Settings screen.
|
The information in the subsurface.log generated while running _Subsurface-mobile_, plus some additional information for understanding the screen rendering of dive information as well as the way in which _Subsurface-mobile_ processed information during a specific occasion while running the app (see section below) is available through a _Developer_ menu at run time. Activate (or deactivate) this menu item on the Main Menu by dragging the slider switch in the Settings screen.
|
||||||
@ -4,7 +4,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
<meta name="generator" content="AsciiDoc 10.1.2" />
|
<meta name="generator" content="AsciiDoc 8.6.10" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
/*
|
/*
|
||||||
@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
* { padding: 0; margin: 0; }
|
* { padding: 0; margin: 0; }
|
||||||
img { border: 0; margin: 15px; max-width:90% }
|
img { border: 0; }
|
||||||
|
|
||||||
/*** Layout ***/
|
/*** Layout ***/
|
||||||
|
|
||||||
@ -78,12 +78,12 @@ body { font-family: Verdana, sans-serif; }
|
|||||||
#footer { font-size: 0.8em; }
|
#footer { font-size: 0.8em; }
|
||||||
|
|
||||||
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
||||||
h2 { font-size: 160%; }
|
h2 { font-size: 1.5em; }
|
||||||
.sectionbody { font-size: 0.85em; }
|
.sectionbody { font-size: 0.85em; }
|
||||||
.sectionbody .sectionbody { font-size: inherit; }
|
.sectionbody .sectionbody { font-size: inherit; }
|
||||||
h3 { font-size: 150%; } /* 1.35em */
|
h3 { font-size: 159%; } /* 1.35em */
|
||||||
h4 { font-size: 140%; } /* 1.2em */
|
h4 { font-size: 141%; } /* 1.2em */
|
||||||
h5 { font-size: 130%; } /* 1em */
|
h5 { font-size: 118%; } /* 1em */
|
||||||
.title { font-size: 106%; /* 0.9em */
|
.title { font-size: 106%; /* 0.9em */
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@ -446,7 +446,7 @@ asciidoc.install(3);
|
|||||||
<div class="paragraph"><p><strong>Autores</strong>: Willem Ferguson, Jacco van Koll, Dirk Hohndel, Reinout Hoornweg,
|
<div class="paragraph"><p><strong>Autores</strong>: Willem Ferguson, Jacco van Koll, Dirk Hohndel, Reinout Hoornweg,
|
||||||
Linus Torvalds, Miika Turkia, Amit Chaudhuri, Jan Schubert, Salvador Cuñat,
|
Linus Torvalds, Miika Turkia, Amit Chaudhuri, Jan Schubert, Salvador Cuñat,
|
||||||
Pedro Neves, Stefan Fuchs</p></div>
|
Pedro Neves, Stefan Fuchs</p></div>
|
||||||
<div class="paragraph"><p><span class="BLUE"><em>Versión 4.9, Febrero 2019</em></span></p></div>
|
<div class="paragraph"><p><span class="BLUE"><em>Versión 4.8, Septiembre 2018</em></span></p></div>
|
||||||
<div class="paragraph"><p>Bienvenido como usuario de <em>Subsurface</em>, un avanzado programa de registro de
|
<div class="paragraph"><p>Bienvenido como usuario de <em>Subsurface</em>, un avanzado programa de registro de
|
||||||
inmersiones con extensa infraestructura para describir, organizar e
|
inmersiones con extensa infraestructura para describir, organizar e
|
||||||
interpretar buceos en apnea o con botella. <em>Subsurface</em> ofrece muchas ventajas
|
interpretar buceos en apnea o con botella. <em>Subsurface</em> ofrece muchas ventajas
|
||||||
@ -515,9 +515,9 @@ y libdivecomputer.</p></div>
|
|||||||
el software, consulta la página Descargas en <a href="https://subsurface-divelog.org/">la
|
el software, consulta la página Descargas en <a href="https://subsurface-divelog.org/">la
|
||||||
web</a>. Por favor, comenta los problemas que tengas con este programa enviando un
|
web</a>. Por favor, comenta los problemas que tengas con este programa enviando un
|
||||||
mail a <a href="mailto:subsurface@subsurface-divelog.org">nuestra lista de correo</a> e informa de
|
mail a <a href="mailto:subsurface@subsurface-divelog.org">nuestra lista de correo</a> e informa de
|
||||||
fallos en <a href="https://github.com/Subsurface/subsurface/issues">nuestro bugtracker</a>.
|
fallos en <a href="https://github.com/Subsurface-divelog/subsurface/issues">nuestro bugtracker</a>.
|
||||||
Para instrucciones acerca de como compilar el software y (en caso necesario)
|
Para instrucciones acerca de como compilar el software y (en caso necesario)
|
||||||
sus dependencias, por favor, consulta el archivo INSTALL.md incluido con el código
|
sus dependencias, por favor, consulta el archivo INSTALL incluido con el código
|
||||||
fuente.</p></div>
|
fuente.</p></div>
|
||||||
<div class="paragraph"><p><strong>Audiencia</strong>: Buceadores recreativos, Buceadores en apnea, Buceadores técnicos,
|
<div class="paragraph"><p><strong>Audiencia</strong>: Buceadores recreativos, Buceadores en apnea, Buceadores técnicos,
|
||||||
Buceadores profesionales.</p></div>
|
Buceadores profesionales.</p></div>
|
||||||
@ -591,7 +591,7 @@ se puede hacer lanzando <em>Subsurface</em> desde la línea de comandos con la o
|
|||||||
<h2 id="S_StartUsing">3. Empezar a usar el programa</h2>
|
<h2 id="S_StartUsing">3. Empezar a usar el programa</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<div class="paragraph"><p>La ventana <em>Subsurface</em> está, habitualmente, dividida en cuatro paneles con un
|
<div class="paragraph"><p>La ventana <em>Subsurface</em> está, habitualmente, dividida en cuatro paneles con un
|
||||||
<strong>Menú principal</strong> (Archivo Importar Registro Vista Ayuda) en la parte
|
<strong>Menú principal</strong> (Archivo Importar Registro Vista Compartir Ayuda) en la parte
|
||||||
superior (en Windows y Linux) o en la parte superior de la pantalla (en Mac y
|
superior (en Windows y Linux) o en la parte superior de la pantalla (en Mac y
|
||||||
Ubuntu Unity). Los cuatro paneles son:</p></div>
|
Ubuntu Unity). Los cuatro paneles son:</p></div>
|
||||||
<div class="olist arabic"><ol class="arabic">
|
<div class="olist arabic"><ol class="arabic">
|
||||||
@ -642,7 +642,7 @@ temperaturas del agua, consumos de gases; el tiempo total y el número de
|
|||||||
inmersiones seleccionadas).</p></div>
|
inmersiones seleccionadas).</p></div>
|
||||||
<div class="imageblock" id="S_ViewPanels" style="text-align:center;">
|
<div class="imageblock" id="S_ViewPanels" style="text-align:center;">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<img src="images/MainWindow.jpg" alt="La ventana principal" />
|
<img src="images/main_window_f22.jpg" alt="La ventana principal" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="paragraph"><p>El usuario puede elegir cual de los cuatro paneles se mostrará seleccionando la
|
<div class="paragraph"><p>El usuario puede elegir cual de los cuatro paneles se mostrará seleccionando la
|
||||||
@ -906,19 +906,6 @@ El desplegable <strong>Dispositivo o punto de montaje</strong> contiene el nombr
|
|||||||
para detalles técnicos de como encontrar la información apropiada sobre
|
para detalles técnicos de como encontrar la información apropiada sobre
|
||||||
puertos, para un ordenador en concreto y, en algunos casos, como hacer los
|
puertos, para un ordenador en concreto y, en algunos casos, como hacer los
|
||||||
ajustes correctos al Sistema Operativo del ordenador que ejecuta <em>Subsurface</em>.
|
ajustes correctos al Sistema Operativo del ordenador que ejecuta <em>Subsurface</em>.
|
||||||
Algunos ordenadores de buceo desactivan este desplegable ya que usan otras
|
|
||||||
formas de conectar con el dispositivo. Para algunos ordenadores, el dato
|
|
||||||
introducido aquí es en realidad el punto de montaje del dispositivo de
|
|
||||||
almacenamiento USB con el que el ordenador de buceo se identifica a sí
|
|
||||||
mismo.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Bajo los desplegables hay hasta cuatro botones que te permiten cambiar
|
|
||||||
fácilmente entre varios ordenadores desde los que descargues
|
|
||||||
frecuentemente. Estos botones solo aparecen después de que hayas descargado
|
|
||||||
desde diferentes ordenadores de buceo.
|
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -1220,19 +1207,6 @@ de descarga _Bluetooth</em>.</p></div>
|
|||||||
<td class="icon">
|
<td class="icon">
|
||||||
<img src="images/icons/important.png" alt="Important" />
|
<img src="images/icons/important.png" alt="Important" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">El soporte de Subsurface en Windows para ordenadores de buceo BTLE es
|
|
||||||
<strong>EXPERIMENTAL</strong> y solo está soportado en Windows10.
|
|
||||||
Por favor, asegúrate de tener la última versión de Windows10.
|
|
||||||
<a href="https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1803_(April_2018_Update)">La
|
|
||||||
versión 1803</a> is el requerimiento mínimo. Asegúrate también de tener
|
|
||||||
instalados los últimos drivers para tu placa base o receptor BTLE.</td>
|
|
||||||
</tr></table>
|
|
||||||
</div>
|
|
||||||
<div class="admonitionblock">
|
|
||||||
<table><tr>
|
|
||||||
<td class="icon">
|
|
||||||
<img src="images/icons/important.png" alt="Important" />
|
|
||||||
</td>
|
|
||||||
<td class="content"><strong>EN CASO DE PROBLEMAS</strong>: Si el adaptador Bluetooth del ordenador con <em>Subsurface</em>
|
<td class="content"><strong>EN CASO DE PROBLEMAS</strong>: Si el adaptador Bluetooth del ordenador con <em>Subsurface</em>
|
||||||
se cuelga y el proceso de descarga falla repetidamente, <em>desempareja</em> los
|
se cuelga y el proceso de descarga falla repetidamente, <em>desempareja</em> los
|
||||||
dispositivos y repite los pasos indicados anteriormente. Si a pesar de ello
|
dispositivos y repite los pasos indicados anteriormente. Si a pesar de ello
|
||||||
@ -1315,14 +1289,13 @@ aire ya que el cambio en la lectura del sensor de temperatura es bastante lento
|
|||||||
para seguir los cambios en el entorno. Si fuera necesario, no hay que teclear
|
para seguir los cambios en el entorno. Si fuera necesario, no hay que teclear
|
||||||
las unidades de temperatura: <em>Subsurface</em> las suministra automáticamente de
|
las unidades de temperatura: <em>Subsurface</em> las suministra automáticamente de
|
||||||
acuerdo con las <em>Preferencias</em> (métricas o imperiales).</p></div>
|
acuerdo con las <em>Preferencias</em> (métricas o imperiales).</p></div>
|
||||||
<div class="paragraph" id="S_locations"><p><strong>Ubicación</strong>:</p></div>
|
<div class="paragraph"><p><strong>Ubicación</strong>:</p></div>
|
||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td class="icon">
|
<td class="icon">
|
||||||
<img src="images/icons/warning2.png" alt="Warning" />
|
<img src="images/icons/warning2.png" alt="Warning" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">Las localizaciones de buceo se gestionan como una parte <strong>separada</strong> del divelog
|
<td class="content">Las localizaciones de buceo se gestionan como una parte <strong>separada</strong> del divelog.
|
||||||
(Visita la sección llamada <a href="#S_DiveSiteManagement">Manipular información de puntos de buceo</a>).
|
|
||||||
La información de buceo de las pestañas <strong>Notas</strong> y <strong>Equipo</strong> no se puede editar
|
La información de buceo de las pestañas <strong>Notas</strong> y <strong>Equipo</strong> no se puede editar
|
||||||
al mismo tiempo que la información de los puntos de buceo. Guarda toda la otra
|
al mismo tiempo que la información de los puntos de buceo. Guarda toda la otra
|
||||||
información (p.e. divemaster, compañero, equipo, etc) seleccionando <em>Aplicar
|
información (p.e. divemaster, compañero, equipo, etc) seleccionando <em>Aplicar
|
||||||
@ -1773,24 +1746,9 @@ diarios de CCR APD.
|
|||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
<div class="paragraph"><p>Selecciona el formato correspondiente en la lista del diálogo y el archivo de
|
<div class="paragraph"><p>Seleccionar el archivo correspondiente en la lista del diálogo abre el archivo
|
||||||
la lista de la ventana principal. Luego haz clic en el botón _Abrir_abajo a la
|
importado directamente en la <strong>Lista de Inmersiones</strong> de <em>Subsurface</em>. También
|
||||||
derecha.</p></div>
|
están soportados algunos otros formatos, no accesibles desde el diálogo
|
||||||
<div class="paragraph"><p>Si el archivo que se está importando está en formato CSV, se da al usuario la
|
|
||||||
ocasión de efectuar ediciones manuales en las cabeceras de las columnas antes
|
|
||||||
de importarlas a <em>Subsurface</em> (ver imagen a continuación).</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/Import_csv.jpg" alt="FIGURA: Diálogo de importación: paso 2" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>Para más información sobre como configurar la importación CSV, visita
|
|
||||||
<a href="#S_ImportingCSVDives">Importar datos en formato CSV</a>.
|
|
||||||
En muchos casos no se requiere hacer cambios en las cabeceras de las columnas
|
|
||||||
porque están pre configuradas para el tipo de importación en concreto y la
|
|
||||||
pantalla de importación CSV se puede saltar pulsando el botón <em>OK</em>.
|
|
||||||
Esto abrirá el divelog importado en la <strong>Lista de inmersiones</strong> de <em>Subsurface</em>.</p></div>
|
|
||||||
<div class="paragraph"><p>También están soportados algunos otros formatos, no accesibles desde el diálogo
|
|
||||||
Importar, como se explica a continuación.</p></div>
|
Importar, como se explica a continuación.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
@ -2186,126 +2144,7 @@ asegurarse de que el resto funciona.</p></div>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="S_DiveSiteManagement">5.4. Manipular la información de puntos de buceo</h3>
|
<h3 id="_importar_coordenadas_de_buceo_desde_un_dispositivo_movil_con_gps">5.4. Importar coordenadas de buceo desde un dispositivo movil con GPS</h3>
|
||||||
<div class="paragraph"><p>La información de los puntos de buceo se gestiona como una entidad separada de
|
|
||||||
la información de la inmersión.
|
|
||||||
Al seleccionar la pestaña llamada "Puntos de buceo" en el panel <strong>Notas</strong>,
|
|
||||||
aparecerá el <em>panel de gestión de puntos de inmersión</em> (ver imagen a
|
|
||||||
continuación). Asignar un punto de buceo a una inmersión se hace desde la
|
|
||||||
pestaña Notas que muestra la información de la inmersión (visita la sección
|
|
||||||
<a href="#S_locations">Ubicaciones</a>). Por otra parte, el panel de gestión de puntos
|
|
||||||
de buceo permite manejar datos independientes de las inmersiones. Un punto de
|
|
||||||
buceo nuevo se puede crear mientras se edita una inmersión o bien desde el
|
|
||||||
panel de gestión de puntos de buceo (ver imagen a continuación).</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/DiveSitesTab.jpg" alt="FIGURE: Pestaña puntos de buceo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>Si se ha creado previamente la descripción de un punto de buceo, este se
|
|
||||||
mostrará en el panel, así como el número de inmersiones en cada punto. La
|
|
||||||
lista de puntos puede ordenarse haciendo clic en cualquiera de los
|
|
||||||
encabezamientos. A la derecha de cada punto de buceo hay un icono de papelera
|
|
||||||
y otro de edición, Se pueden efectuar las siguientes acciones para gestionar
|
|
||||||
la colección de puntos de buceo:</p></div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_filtrar_la_lista_de_puntos_de_inmersion">5.4.1. Filtrar la lista de puntos de inmersión</h4>
|
|
||||||
<div class="paragraph"><p>Arriba a la derecha en el panel hay una casilla de texto (ver imanterior). Si
|
|
||||||
solo quieres visualizar inmersiones de un punto en concreto, teclea un nombre
|
|
||||||
parcial como "Genova", así se mostrarán solo los nombres que contengan la
|
|
||||||
palabra "Genova" en el nombre o la descripción.</p></div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_editar_un_punto_de_buceo">5.4.2. Editar un punto de buceo</h4>
|
|
||||||
<div class="paragraph"><p>La información de cada punto de buceo puede editarse, bien desde la pestaña
|
|
||||||
<strong>Notas</strong>, bien desde la pestaña <strong>Puntos de buceo</strong>. Para editar la información,
|
|
||||||
selecciona el icono Editar de la izquierda del nombre del punto de buceo (ver
|
|
||||||
imagen anterior). La edición desde la pestaña <strong>Notas</strong> se comenta en la sección
|
|
||||||
<a href="#S_locations">Ubicaciones</a> donde se explica cada uno de los campos del
|
|
||||||
panel de edición.</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/DiveSiteEdit.jpg" alt="FIGURA: Edición de puntos de buceo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>Añade cualquier información que desees en la pestaña. Como editar las
|
|
||||||
coordenadas se explica en la sección sobre <a href="#S_locations">Ubicaciones</a>.
|
|
||||||
Cuando termines de editar la información del punto de inmersión, selecciona el
|
|
||||||
botón <strong>Terminado</strong> en la parte de arriba. Esto te devolverá al panel de gestión
|
|
||||||
de puntos de buceo.</p></div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_mezclar_puntos_de_inmersion">5.4.3. Mezclar puntos de inmersión</h4>
|
|
||||||
<div class="paragraph"><p>Mezclar dos o más puntos de inmersión se consigue desde el panel de edición de
|
|
||||||
puntos de buceo (ver imagen anterior). Asumimos que los puntos que se están
|
|
||||||
mezclando no están a mucha distancia. La mezcla se efectúa seleccionando un
|
|
||||||
punto y luego mezclando otros con este primero. En la parte superior del panel
|
|
||||||
de edición, selecciona la casilla de texto etiquetada "Mostrar los puntos de
|
|
||||||
buceo en el rango:" e introduce la distancia que consideres oportuna para
|
|
||||||
considerar que los diversos puntos son el mismo.
|
|
||||||
Se te presentará una lista con los puntos en el radio que hayas introducido
|
|
||||||
(ver imaden a continuación).</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/DiveSiteMerge.jpg" alt="FIGURA: Mezcla de puntos de buceo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>Selecciona el punto a mezclar haciendo clic derecho sobre él. Se mostrará un
|
|
||||||
mensaje de confirmación (ver imagen anterior). Al aceptar el mensaje de
|
|
||||||
confirmación se mezcla la inmersión seleccionada con la de arriba del panel y
|
|
||||||
se regresa al panel de gestión de puntos de buceo.</p></div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_anadir_un_punto_de_buceo">5.4.4. Añadir un punto de buceo</h4>
|
|
||||||
<div class="paragraph"><p>En la parte alta de la tabla de gestión de puntos de buceo hay un botón
|
|
||||||
redondo con un "+". Haciendo clic en este botón se inserta un nuevo punto de
|
|
||||||
buceo llamado "Nuevo punto de buceo" (imagen a continuación). El nuevo punto
|
|
||||||
puede borrarse si nos hubiéramos equivocado seleccionando <em>Editar → Deshacer</em>
|
|
||||||
en el menú principal o tecleando Ctrl-Z mientras mantenemos enfocada la tabla
|
|
||||||
de gestión de puntos de buceo. El punto nuevo se edita seleccionando su botón
|
|
||||||
de edición y proporcionando un nombre, coordenadas y, si se desea, una
|
|
||||||
descripción. Al pulsar el botón "Terminado" en el panel de edición se regresa
|
|
||||||
a al panel de gestión de puntos de buceo.</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/DiveSiteInsert.jpg" alt="FIGURA: Añadir un punto de buceo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_borrar_un_punto_de_inmersion">5.4.5. Borrar un punto de inmersión</h4>
|
|
||||||
<div class="paragraph"><p>A la izquierda de cada punto de buceo hay una papelera. Pulsar este icono
|
|
||||||
borrará el punto de buceo asociado. Si hay varias inmersiones asociadas a este
|
|
||||||
punto, se mostrará un mensaje de aviso (ver imagen a continuación). Si el
|
|
||||||
punto se borra, será necesario crear ubicaciones para las inmersiones que
|
|
||||||
estuvieran asociadas al punto borrado.</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/DiveSiteDelete.jpg" alt="FIGURA: Borrar un punto de buceo" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_aproximacion_general_al_uso_de_la_lista_de_puntos_de_buceo">5.4.6. Aproximación general al uso de la lista de puntos de buceo</h4>
|
|
||||||
<div class="paragraph"><p>Ya que la lista de puntos de buceo se gestiona separadamente de la lista de
|
|
||||||
inmersiones, es posible añadir puntos de buceo aunque no se hayan utilizado en
|
|
||||||
ninguna inmersión. En este caso, la columna etiquetada "# de buceos" muestra
|
|
||||||
un cero.
|
|
||||||
Esto posibilita que los buceadores que comparten puntos de buceo puedan
|
|
||||||
crearlos antes de haberlos buceado. Además, un punto puede crearse con
|
|
||||||
mucha información en la descripción, de esta forma la lista de puntos de buceo
|
|
||||||
se convierte en un útil repositorio de información fuera de la lista de
|
|
||||||
inmersiones.</p></div>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
|
||||||
<h4 id="_borrar_puntos_de_buceo_no_utilizados">5.4.7. Borrar puntos de buceo no utilizados</h4>
|
|
||||||
<div class="paragraph"><p>Arriba a la izquierda en el panel de gestión de inmersiones hay un botón
|
|
||||||
"Purgar puntos de buceo no usados". Al pulsar este botón se borran todos los
|
|
||||||
puntos de buceo que no tengan inmersiones asociadas.</p></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sect2">
|
|
||||||
<h3 id="_importar_coordenadas_de_buceo_desde_un_dispositivo_movil_con_gps">5.5. Importar coordenadas de buceo desde un dispositivo movil con GPS</h3>
|
|
||||||
<div class="paragraph"><p>Un smartphone con GPS incorporado puede utilizarse para guardar las
|
<div class="paragraph"><p>Un smartphone con GPS incorporado puede utilizarse para guardar las
|
||||||
ubicaciones de las inmersiones. Esto se hace como sigue:</p></div>
|
ubicaciones de las inmersiones. Esto se hace como sigue:</p></div>
|
||||||
<div class="paragraph"><p>1) Llevar el dispositivo móvil en el barco de buceo o vida abordo, para
|
<div class="paragraph"><p>1) Llevar el dispositivo móvil en el barco de buceo o vida abordo, para
|
||||||
@ -2322,7 +2161,7 @@ El antiguo servicio de posiciones GPS en internet se cerrará a finales de 2018
|
|||||||
y a partir de ese momento, la app <em>Companion</em> ya no se podrá utilizar. Por
|
y a partir de ese momento, la app <em>Companion</em> ya no se podrá utilizar. Por
|
||||||
favor, usa la app <em>Subsurface-mobile</em> en su lugar.</p></div>
|
favor, usa la app <em>Subsurface-mobile</em> en su lugar.</p></div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_guardar_y_utilizar_coordenadas_gps_utilizando_em_subsurface_mobile_em">5.5.1. Guardar y utilizar coordenadas GPS utilizando <em>Subsurface-mobile</em></h4>
|
<h4 id="_guardar_y_utilizar_coordenadas_gps_utilizando_em_subsurface_mobile_em">5.4.1. Guardar y utilizar coordenadas GPS utilizando <em>Subsurface-mobile</em></h4>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_instalar_em_subsurface_mobile_em">Instalar <em>Subsurface-mobile</em></h5>
|
<h5 id="_instalar_em_subsurface_mobile_em">Instalar <em>Subsurface-mobile</em></h5>
|
||||||
<div class="paragraph"><p>Busca <em>Subsurface-mobile</em> en Google Play e instálala en el dispositivo
|
<div class="paragraph"><p>Busca <em>Subsurface-mobile</em> en Google Play e instálala en el dispositivo
|
||||||
@ -2406,7 +2245,7 @@ recogida, subida, gestión y sincronizado de estas información.</p></div>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="S_LoadImage">5.6. Añadir fotografías o vídeos a las inmersiones</h3>
|
<h3 id="S_LoadImage">5.5. Añadir fotografías o vídeos a las inmersiones</h3>
|
||||||
<div class="paragraph"><p>Muchos buceadores (si no la mayoría) toman fotografías o vídeos durante sus
|
<div class="paragraph"><p>Muchos buceadores (si no la mayoría) toman fotografías o vídeos durante sus
|
||||||
inmersiones. LLamaremos a estos archivos "medios" refiriendonos a fotos o
|
inmersiones. LLamaremos a estos archivos "medios" refiriendonos a fotos o
|
||||||
vídeos.
|
vídeos.
|
||||||
@ -2416,7 +2255,7 @@ donde se tomaron. Los medios pueden visualizarse desde el perfil o desde la
|
|||||||
pestaña <em>Medios</em> en el <strong>Panel de Notas</strong>. <em>Subsurface</em> permite visualizar las
|
pestaña <em>Medios</em> en el <strong>Panel de Notas</strong>. <em>Subsurface</em> permite visualizar las
|
||||||
fotos o vídeos en un interfaz unificado.</p></div>
|
fotos o vídeos en un interfaz unificado.</p></div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_cargar_medios_y_sincronizar_la_camara_con_el_ordenador_de_buceo">5.6.1. Cargar medios y sincronizar la cámara con el ordenador de buceo</h4>
|
<h4 id="_cargar_medios_y_sincronizar_la_camara_con_el_ordenador_de_buceo">5.5.1. Cargar medios y sincronizar la cámara con el ordenador de buceo</h4>
|
||||||
<div class="paragraph"><p>Se selecciona una inmersión o un grupo de ellas en la lista. Luego se hace
|
<div class="paragraph"><p>Se selecciona una inmersión o un grupo de ellas en la lista. Luego se hace
|
||||||
clic-derecho en la selección lo que nos mostrará el <a href="#S_DiveListContextMenu">Menú contextual de la lista de inmersiones</a>.
|
clic-derecho en la selección lo que nos mostrará el <a href="#S_DiveListContextMenu">Menú contextual de la lista de inmersiones</a>.
|
||||||
Hacemos click-izquierdo en la opción apropiada para cargar los medios desde
|
Hacemos click-izquierdo en la opción apropiada para cargar los medios desde
|
||||||
@ -2503,7 +2342,7 @@ que todas las fotos o videos asociados con un buceo puedan visualizarse,
|
|||||||
incluidos los que se hayan tomado antes o despues de la inmersión.</p></div>
|
incluidos los que se hayan tomado antes o despues de la inmersión.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_ViewMedia">5.6.2. Visualizar los medios</h4>
|
<h4 id="S_ViewMedia">5.5.2. Visualizar los medios</h4>
|
||||||
<div class="sidebarblock">
|
<div class="sidebarblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="paragraph"><p><strong>Asegurarse de que se crean las miniaturas para los archivos de vídeo</strong></p></div>
|
<div class="paragraph"><p><strong>Asegurarse de que se crean las miniaturas para los archivos de vídeo</strong></p></div>
|
||||||
@ -2583,7 +2422,7 @@ sobre las imágenes. Las imágenes también puede borrase desde la pestaña
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_la_pestana_em_medios_em">5.6.3. La pestaña <em>Medios</em></h4>
|
<h4 id="_la_pestana_em_medios_em">5.5.3. La pestaña <em>Medios</em></h4>
|
||||||
<div class="paragraph"><p>Los medios asociados a una inmersión se muestran como miniaturas en la
|
<div class="paragraph"><p>Los medios asociados a una inmersión se muestran como miniaturas en la
|
||||||
pestaña <em>Medios</em> del <em>Panel de Notas</em>. Se puede acceder con facilidad a las
|
pestaña <em>Medios</em> del <em>Panel de Notas</em>. Se puede acceder con facilidad a las
|
||||||
fotos hechas en rápida sucesión durante la inmersión, desde la pestaña <em>Medios</em>.
|
fotos hechas en rápida sucesión durante la inmersión, desde la pestaña <em>Medios</em>.
|
||||||
@ -2598,22 +2437,9 @@ video superpuesto a la ventana de <em>Subsurface</em>. Podemos borrar un medio d
|
|||||||
la pestaña <em>Medios</em> seleccionándolo (un solo clic) y pulsando a continuación la
|
la pestaña <em>Medios</em> seleccionándolo (un solo clic) y pulsando a continuación la
|
||||||
tecla <em>Supr</em> en el teclado. Esto eliminará el medio tanto de la pestaña
|
tecla <em>Supr</em> en el teclado. Esto eliminará el medio tanto de la pestaña
|
||||||
<em>Medios</em> como del <em>Perfil de la inmersión</em>.</p></div>
|
<em>Medios</em> como del <em>Perfil de la inmersión</em>.</p></div>
|
||||||
<div class="paragraph"><p>Haciendo clic derecho en un vídeo y seleccionando "Guardar datos como
|
|
||||||
subtitulos", se creará un archivo con el mismo nombre que el vídeo y con
|
|
||||||
extensión ".ass" que contendrá datos de la inmersión en función del tiempo
|
|
||||||
(tiempo transcurrido, profundidad, temperatura, LND, TTS, y GF) que se
|
|
||||||
superpondrán al vídeo. El reproductor de medios VLC encuentra automáticamente
|
|
||||||
este archivo y lo utiliza al reproducir un vídeo. Como alternativa, puede
|
|
||||||
utilizarse el codificador de vídeo ffmpeg para crear un nuevo archivo de vídeo
|
|
||||||
con los datos codificados en él. Para ello, ejecuta</p></div>
|
|
||||||
<div class="literalblock">
|
|
||||||
<div class="content">
|
|
||||||
<pre><code>ffmpeg -v video.mp4 -vf "ass=video.ass" video_with_data.mp4</code></pre>
|
|
||||||
</div></div>
|
|
||||||
<div class="paragraph"><p>desde la línea de comandos. Es necesario tener instalada la librería libass,</p></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_fotos_en_disco_duro_externo">5.6.4. Fotos en disco duro externo</h4>
|
<h4 id="_fotos_en_disco_duro_externo">5.5.4. Fotos en disco duro externo</h4>
|
||||||
<div class="paragraph"><p>La mayoría de fotosubs guardan sus fotografías en un disco duro externo. Si este
|
<div class="paragraph"><p>La mayoría de fotosubs guardan sus fotografías en un disco duro externo. Si este
|
||||||
disco puede mapearse (como es casi siempre el caso) <em>Subsurface</em> puede acceder
|
disco puede mapearse (como es casi siempre el caso) <em>Subsurface</em> puede acceder
|
||||||
directamente a los medios. Esto facilita la interacción entre <em>Subsurface</em> y un
|
directamente a los medios. Esto facilita la interacción entre <em>Subsurface</em> y un
|
||||||
@ -2628,7 +2454,7 @@ Si, posteriormente, el disco externo con los medios se vuelve a conectar, los
|
|||||||
medios podrán visualizarse normalmente.</p></div>
|
medios podrán visualizarse normalmente.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_averiguar_que_inmersiones_tienen_medios_asociados">5.6.5. Averiguar que inmersiones tienen medios asociados</h4>
|
<h4 id="_averiguar_que_inmersiones_tienen_medios_asociados">5.5.5. Averiguar que inmersiones tienen medios asociados</h4>
|
||||||
<div class="paragraph"><p>Inspeccionar cada inmersión individual para saber si tiene asociados medios
|
<div class="paragraph"><p>Inspeccionar cada inmersión individual para saber si tiene asociados medios
|
||||||
puede llevarnos mucho tiempo. Hay una forma rápida de saber que inmersiones
|
puede llevarnos mucho tiempo. Hay una forma rápida de saber que inmersiones
|
||||||
tiene asociados medios y cuales no: activa la casilla <em>Medios</em> en la lista
|
tiene asociados medios y cuales no: activa la casilla <em>Medios</em> en la lista
|
||||||
@ -2639,7 +2465,7 @@ después o todo ello. Hay más información en la sección del manual que cubre
|
|||||||
los <a href="#S_Divelist_columns">iconos de fotos en la <strong>Lista de Inmersiones</strong></a>.</p></div>
|
los <a href="#S_Divelist_columns">iconos de fotos en la <strong>Lista de Inmersiones</strong></a>.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_FindMovedImages">5.6.6. Mover medios entre directorios, discos duros u ordenadores</h4>
|
<h4 id="S_FindMovedImages">5.5.6. Mover medios entre directorios, discos duros u ordenadores</h4>
|
||||||
<div class="paragraph"><p>Tras haber cargado un medio en <em>subsurface</em> y haberlo asociado a un buceo
|
<div class="paragraph"><p>Tras haber cargado un medio en <em>subsurface</em> y haberlo asociado a un buceo
|
||||||
determinado, se archiva el directorio donde el archivo permanece guardado, para poder
|
determinado, se archiva el directorio donde el archivo permanece guardado, para poder
|
||||||
encontrarlo cuando se vuelva a abrir la inmersión. Si la foto, la colección
|
encontrarlo cuando se vuelva a abrir la inmersión. Si la foto, la colección
|
||||||
@ -2672,11 +2498,11 @@ sus posiciones conocidas. Los cambios propuestos pueden aplicarse clicando en
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_registrar_tipos_de_inmersion_especiales">5.7. Registrar tipos de inmersión especiales</h3>
|
<h3 id="_registrar_tipos_de_inmersion_especiales">5.6. Registrar tipos de inmersión especiales</h3>
|
||||||
<div class="paragraph"><p>Esta sección da ejemplos de la verstilidad de <em>Subsurface</em> como herramienta de
|
<div class="paragraph"><p>Esta sección da ejemplos de la verstilidad de <em>Subsurface</em> como herramienta de
|
||||||
registro de inmersiones.</p></div>
|
registro de inmersiones.</p></div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_MulticylinderDives">5.7.1. Inmersiones multi botella</h4>
|
<h4 id="S_MulticylinderDives">5.6.1. Inmersiones multi botella</h4>
|
||||||
<div class="paragraph"><p><em>Subsurface</em> maneja fácilmente inmersiones que requieren más de una botella. El
|
<div class="paragraph"><p><em>Subsurface</em> maneja fácilmente inmersiones que requieren más de una botella. El
|
||||||
buceo multi botella se produce habitualmente cuando (a) un buceador no tiene
|
buceo multi botella se produce habitualmente cuando (a) un buceador no tiene
|
||||||
bastante gas para completar una inmersión con una sola botella o (b) cuando el
|
bastante gas para completar una inmersión con una sola botella o (b) cuando el
|
||||||
@ -2746,7 +2572,7 @@ en lateral (en las que utilicen dos botellas). Visita el link
|
|||||||
de ordenadores de buceo soportados</a>.</p></div>
|
de ordenadores de buceo soportados</a>.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_inmersiones_en_montaje_lateral_sidemount">5.7.2. Inmersiones en montaje lateral (sidemount)</h4>
|
<h4 id="_inmersiones_en_montaje_lateral_sidemount">5.6.2. Inmersiones en montaje lateral (sidemount)</h4>
|
||||||
<div class="paragraph"><p>El buceo en montaje lateral es solo otra forma de buceo multi botella, a menudo
|
<div class="paragraph"><p>El buceo en montaje lateral es solo otra forma de buceo multi botella, a menudo
|
||||||
con ambas o todas las botellas conteniendo la misma mezcla. Aunque es una
|
con ambas o todas las botellas conteniendo la misma mezcla. Aunque es una
|
||||||
configuración popular entre los espeleo buceadores, el buceo en lateral se
|
configuración popular entre los espeleo buceadores, el buceo en lateral se
|
||||||
@ -2802,7 +2628,7 @@ exactamente como con las inmersiones multi botella anteriores:</p></div>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_sSCR_dives">5.7.3. Inmersiones con rebreather pasivo de circuito semi cerrado (pSCR)</h4>
|
<h4 id="S_sSCR_dives">5.6.3. Inmersiones con rebreather pasivo de circuito semi cerrado (pSCR)</h4>
|
||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td class="icon">
|
<td class="icon">
|
||||||
@ -2901,7 +2727,7 @@ naranja).</td>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_CCR_dives">5.7.4. Inmersiones con rebreather de circuito cerrado (CCR)</h4>
|
<h4 id="S_CCR_dives">5.6.4. Inmersiones con rebreather de circuito cerrado (CCR)</h4>
|
||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td class="icon">
|
<td class="icon">
|
||||||
@ -3312,13 +3138,10 @@ Entre ellas se incluyen: Momento de tiempo en la inmersión (indicado por un
|
|||||||
ascenso y descenso, el Consumo de aire en superficie (CAS), la presión
|
ascenso y descenso, el Consumo de aire en superficie (CAS), la presión
|
||||||
parcial de oxigeno, la profundidad máxima operativa de la mezcla (POM o MOD),
|
parcial de oxigeno, la profundidad máxima operativa de la mezcla (POM o MOD),
|
||||||
la profundidad equivalente a aire (PEA o EAD), la profundidad narcótica equivalente
|
la profundidad equivalente a aire (PEA o EAD), la profundidad narcótica equivalente
|
||||||
(PNE o END), la profundidad equivalente a la densidad del aire (EADD), los
|
(PNE o END), la profundidad equivalenta a la densidad del aire (EADD), los
|
||||||
requisitos descompresivos en ese instante de tiempo (Deco), el GF en
|
requisitos descompresivos en ese instante de tiempo (Deco), el Tiempo hasta la
|
||||||
superficie (una medida de la carga de gas inerte en el cuerpo del buzo
|
superficie (TTS), el techo calculado así como el techo calculado para varios
|
||||||
definida como el exceso sobre la presión en superficie normalizada tal que la
|
compartimentos de tejidos de Bühlmann.</p></div>
|
||||||
la presión máxima permitida en superficie, el valor M, corresponde al 100%), el
|
|
||||||
Tiempo hasta la superficie (TTS), el techo calculado así como el techo
|
|
||||||
calculado para varios compartimentos de tejidos de Bühlmann.</p></div>
|
|
||||||
<div class="paragraph"><p>El usuario tiene control sobre varios de los datos que se muestran en la Caja
|
<div class="paragraph"><p>El usuario tiene control sobre varios de los datos que se muestran en la Caja
|
||||||
de Información, mostrados como cuatro de los botones en la columna a la
|
de Información, mostrados como cuatro de los botones en la columna a la
|
||||||
izquierda del panel del perfil. Estos son:</p></div>
|
izquierda del panel del perfil. Estos son:</p></div>
|
||||||
@ -3359,19 +3182,6 @@ Los TTS mayores a 2 horas resultan muy imprecisos y Subsurface solo indicará
|
|||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td class="icon">
|
<td class="icon">
|
||||||
<img src="images/icons/GFLow.jpg" alt="Note" />
|
|
||||||
</td>
|
|
||||||
<td class="content">Muestra información de deco. Si está activado, la caja de información muestra
|
|
||||||
el GF en superficie y los techos para los compartimentos de tejidos
|
|
||||||
individuales. El GF en superficie es un indicador de hasta que punto la
|
|
||||||
presión parcial de nitrógeno en la sangre excede la presión parcial que se
|
|
||||||
necesita para llegar a superficie con seguridad. Un GF en superficie superior
|
|
||||||
al 100% significa que emerger no es seguro.</td>
|
|
||||||
</tr></table>
|
|
||||||
</div>
|
|
||||||
<div class="admonitionblock">
|
|
||||||
<table><tr>
|
|
||||||
<td class="icon">
|
|
||||||
<img src="images/icons/SAC.jpg" alt="Note" />
|
<img src="images/icons/SAC.jpg" alt="Note" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">Pulsar en este botón hace que se muestre en la Caja de Información el
|
<td class="content">Pulsar en este botón hace que se muestre en la Caja de Información el
|
||||||
@ -3671,13 +3481,6 @@ ha eliminado a través de la respiración por lo que, aunque el buceador
|
|||||||
técnicamente encontrara un techo, la inmersión aún no requiere explícitamente
|
técnicamente encontrara un techo, la inmersión aún no requiere explícitamente
|
||||||
una parada de descompresión. Esta característica permite a los ordenadores de
|
una parada de descompresión. Esta característica permite a los ordenadores de
|
||||||
buceo ofrecer tiempos de fondo más largos.</p></div>
|
buceo ofrecer tiempos de fondo más largos.</p></div>
|
||||||
<div class="paragraph"><p>Estríctamente hablando, el techo verde calculado es solo una representación directa
|
|
||||||
de las cargas de gas inerte de los tejidos simulados y es independiente de
|
|
||||||
cualquier velocidad de ascenso asumida. Indica la profundidad mínima permitida
|
|
||||||
por el modelo de descompresión en ese instante de tiempo para unas cargas de
|
|
||||||
gas determinadas y no es una afirmación acerca de una posible tabla de ascenso
|
|
||||||
para el resto de la inmersión. Para obtener esta última utiliza la opción
|
|
||||||
"Editar inmersión en el Planificador_" en el menú Registro.</p></div>
|
|
||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<td class="icon">
|
<td class="icon">
|
||||||
@ -3909,87 +3712,6 @@ un marcador preexistente, el menú se extiende añadiendo opciones para permitir
|
|||||||
el borrado del marcador o permitir ocultar todos los marcadores de ese tipo.</p></div>
|
el borrado del marcador o permitir ocultar todos los marcadores de ese tipo.</p></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
|
||||||
<h3 id="S_Filter">6.5. Filtrar la lista de inmersiones</h3>
|
|
||||||
<div class="paragraph"><p>Los buceos de la <strong>Lista de Inmersiones</strong> se pueden filtrar seleccionando solo
|
|
||||||
algunos de ellos basándonos en atributos como etiquetas, puntos de buceo,
|
|
||||||
compañero o divemaster. Por ejemplo, el filtrado nos permite ver las
|
|
||||||
inmersiones de un año en concreto en cierto punto de buceo, o, por otro lado,
|
|
||||||
las inmersiones en cuevas con determinado compañero. El filtrado puede hacerse
|
|
||||||
en base a cualquier dato del <em>Panel de Información</em>.</p></div>
|
|
||||||
<div class="paragraph"><p>Para abrir el filtro, seleccionamos <em>Registro → Filtrar lista de inmersiones</em>
|
|
||||||
desde el menú principal. Esto reemplazará el <em>Panel Mapa</em> por el <em>Panel
|
|
||||||
Filtro</em>. La barra superior contiene el número de buceos que satisfacen las
|
|
||||||
selecciones efectuadas en el filtro (ver imagen a continuación).</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/FilterWindowBar.jpg" alt="Figura: Barra de la ventana de filtrado" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>Al abrirse, el filtro contiene valores por defecto que incluyen todas los
|
|
||||||
buceos de la <em>Lista de Inmersiones</em>. Fíltrala cambiando algunos de los valores
|
|
||||||
por defecto del panel o tecleando valores concretos o palabras en cualquiera
|
|
||||||
de los campos de texto. Por ejemplo, en la imagen a continuación se muestran
|
|
||||||
inmersiones en circuito abierto, con traje seco, en una ubicación específica
|
|
||||||
(Simonstad). No hay botón para activar la acción de filtrado: el hecho de
|
|
||||||
teclear en uno de los campos de texto o especificar un rango en cualquiera de
|
|
||||||
los campos, efectúa automáticamente el filtrado.</p></div>
|
|
||||||
<div class="paragraph"><p>Durante el filtrado, el modo de buceo (Circuito abierto, CCR, pSCR, Apnea) se
|
|
||||||
añade a la lista de etiquetas de una inmersión, lo que permite seleccionar
|
|
||||||
solo determinados tipos de buceo (p.e. CCR) en el filtro. Esto resulta útil
|
|
||||||
para buceadores con reciclador o apneistas que también buceen en circuito
|
|
||||||
abierto.</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/FilterPanel.jpg" alt="Figura: Panel de filtrado" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>El criterio de filtrado puede ser cualquiera de los siguientes:</p></div>
|
|
||||||
<div class="paragraph"><p>1) Usar varios campos de texto en el panel de filtrado produce una operación
|
|
||||||
"AND" en los atributos. Por ejemplo, al teclear "Peter" en el atributo
|
|
||||||
Personas y "Sipadan" en el atributo Ubicación se obtiene una lista de
|
|
||||||
inmersiones que contienen a Peter y a Sipadan.</p></div>
|
|
||||||
<div class="paragraph"><p>2) En un atributo único, el criterio "All of" implementa un operador "AND". En
|
|
||||||
la imagen a continuación, para el atributo <em>Personas</em>, la lista de inmersiones
|
|
||||||
contiene los buceos en los que aparecen Bob Smith Y Stephan Schultz como
|
|
||||||
compañeros/divemaster en base a la información de personas del <em>Panel
|
|
||||||
Información</em>.</p></div>
|
|
||||||
<div class="paragraph"><p>3) El criterio "Any of" implementa una operación "OR". Para el atributo
|
|
||||||
<em>Ubicación</em> de la imagen a continuación, la lista filtrada contiene las
|
|
||||||
inmersiones efectuadas en Simonstad "O" en Hout Bay.</p></div>
|
|
||||||
<div class="paragraph"><p>4) El criterio "None of" implementa una operación "NOT". Para el atributo
|
|
||||||
<em>Traje</em> en la imagen a continuación, la lista de inmersiones EXCLUYE todas
|
|
||||||
las inmersiones en las que se usó traje seco,</p></div>
|
|
||||||
<div class="paragraph"><p>5) Campo vacío. El resultado de los campos vacíos para <em>Notas</em> y <em>Etiquetas</em>
|
|
||||||
en la imagen a continuación, es que estos atributos no se tienen en cuenta
|
|
||||||
durante el filtrado.</p></div>
|
|
||||||
<div class="imageblock" style="text-align:center;">
|
|
||||||
<div class="content">
|
|
||||||
<img src="images/FilterOptions.jpg" alt="Figura: Opciones de filtrado" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="paragraph"><p>En la parte superior del <em>Panel de Filtrado</em>, la <strong>flecha amarilla hacia
|
|
||||||
arriba</strong> se usa para reiniciar el filtro y mostrar todos los buceos. El botón
|
|
||||||
rojo con el aspa blanca se usa para cerrar el panel.</p></div>
|
|
||||||
<div class="admonitionblock">
|
|
||||||
<table><tr>
|
|
||||||
<td class="icon">
|
|
||||||
<img src="./images/icons/important.png" alt="Important" />
|
|
||||||
</td>
|
|
||||||
<td class="content">La acción de filtrado solo se puede detener usando el botón "flecha
|
|
||||||
amarilla hacia arriba" o limpiando manualmente todos los campos de texto.
|
|
||||||
Cerrar el <em>Panel de filtrado</em> no acaba con la acción de filtrado: la lista
|
|
||||||
permanece sin cambios. Esto resulta obvio al indicar la barra superior de
|
|
||||||
<em>Subsurface</em> que solo se están mostrando parte de las inmersiones. Cerrar el
|
|
||||||
<em>Panel de filtrado</em> reabre el <em>Panel Mapa</em>, permitiendo visualizar las
|
|
||||||
posiciones de la lista filtrada. Por ejemplo, podemos querer filtrar a Bob
|
|
||||||
Smith como compañero. Al cerrar el <em>Panel de filtrado</em> se visualizan las
|
|
||||||
ubicaciones en las que hemos buceado con este compañero. Para reabrir el
|
|
||||||
<em>Panel de filtrado</em>, en este caso, seleccionamos <em>Registro → Filtrar lista de
|
|
||||||
inmersiones</em> desde el <em>Menú Principal</em>.</td>
|
|
||||||
</tr></table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect1">
|
<div class="sect1">
|
||||||
@ -4219,11 +3941,117 @@ selecciona <em>Editar</em> desde el <strong>Menú Principal</strong>, lo que pre
|
|||||||
con las posibilidades <em>Deshacer</em> y <em>Rehacer</em>.</p></div>
|
con las posibilidades <em>Deshacer</em> y <em>Rehacer</em>.</p></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_Filter">7.5. Filtrar la Lista de Inmersiones</h3>
|
||||||
|
<div class="paragraph"><p>Los buceos del panel <strong>Lista de inmersiones</strong> pueden filtrarse, esto es, se pueden
|
||||||
|
seleccionar únicamente algunos de los buceos basándose en sus atributos, p.e.
|
||||||
|
las etiquetas, el lugar de buceo, el divemaster, compañeros o traje protector.
|
||||||
|
El filtrado permite, por ejemplo, listar las inmersiones profundas en un punto
|
||||||
|
determinado o, por el contrario, las inmersiones en cuevas con cierto
|
||||||
|
compañero.</p></div>
|
||||||
|
<div class="paragraph"><p>Para abrir el filtrado, seleccionar <em>Registro → Filtrar la lista de inmersiones</em>
|
||||||
|
desde el menú principal. Esto abrirá el <em>Panel de filtrado</em> en la parte de arriba
|
||||||
|
de la ventana de <em>Subsurface</em>. Arriba a la derecha del panel se ubican tres
|
||||||
|
iconos (ver imagen a continuación).
|
||||||
|
El <em>Panel de filtrado</em> puede reiniciarse (p.e. limpiar todos los filtros
|
||||||
|
actuales) seleccionando la flecha amarilla. El <em>Panel de filtrado</em> también puede
|
||||||
|
minimizarse seleccionando la <strong>flecha verde</strong>. Cuando está minimizado solo se
|
||||||
|
muestran los tres iconos. El panel puede maximizarse clicando el icono que lo
|
||||||
|
minimizó. El filtro se cierra y reinicia seleccionando el <strong>botón rojo</strong> con la
|
||||||
|
cruz blanca.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/Filterpanel.jpg" alt="Figura: Panel de filtrado" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>Se pueden utilizar cuatro criterios para filtrar la lista de inmersiones:
|
||||||
|
las etiquetas, las personas (compañeros/divemasters), punto de inmersión y traje
|
||||||
|
de buceo, cada uno de los cuales viene representado por una lista seleccionable.
|
||||||
|
Sobre cada lista hay un segundo nivel de filtrado. Por ejemplo, tecleando "<em>Ba</em>"
|
||||||
|
en la casilla de texto sobre las ubicaciones, la lista podría quedar reducida a
|
||||||
|
"<em>Bajo Piles I</em>", "<em>Bajo Piles II</em>" y "<em>Bajo de Testa</em>". Filtrar la lista
|
||||||
|
permite encontrar rápidamente términos de búsqueda para filtrar la lista de
|
||||||
|
inmersiones.</p></div>
|
||||||
|
<div class="paragraph"><p>Para activar el filtrado de la lista de inmersiones, se necesita seleccionar
|
||||||
|
al menos una casilla en una de las cuatro listas. La lista de inmersiones se
|
||||||
|
reduce para mostrar solo los buceos que cumplen los criterios seleccionados en
|
||||||
|
las listas. Las cuatro listas funcionan como un filtro con operadores <em>Y</em>,
|
||||||
|
<em>Subsurface</em> filtraría, pues, para "<em>cueva</em>" como etiqueta y "<em>José García</em>"
|
||||||
|
como compañero; pero los filtros dentro de una categoría son inclusivos, esto
|
||||||
|
es, filtrar por etiquetas con "cueva" y "barco" mostraría todas las inmersiones
|
||||||
|
en las que aparezcan las etiquetas "cueva" <em>O</em> "barco", solas o conjuntamente.</p></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect1">
|
<div class="sect1">
|
||||||
<h2 id="S_ExportLog">8. Exportar el registro de inmersiones o parte del mismo</h2>
|
<h2 id="S_ExportLog">8. Exportar el registro de inmersiones o parte del mismo</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
|
<div class="paragraph"><p>Hay dos posibilidades de exportar información de buceo desde <em>Subsurface</em>:</p></div>
|
||||||
|
<div class="ulist"><ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Exportar información de buceo a <em>Facebook</em>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
<a href="#S_Export_other">Exportar información de buceo a otros destinos o formatos</a>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_Facebook">8.1. Exportar información de buceo a <em>Facebook</em></h3>
|
||||||
|
<div class="paragraph"><p>La exportación de inmersiones a <em>Facebook</em> se maneja de forma diferente a otros
|
||||||
|
tipos de exportación porque se requiere una
|
||||||
|
conexión a esta red social y se necesita un usuario de <em>Facebook</em> y su password.
|
||||||
|
Si, desde el menú principal, seleccionamos <em>Compartir → Conectar a →
|
||||||
|
Facebook</em> (imagen <strong>A</strong> siguiente), se nos presentará una pantalla de acceso
|
||||||
|
(imagen <strong>B</strong> a continuación). Introducimos nuestro usuario y password de
|
||||||
|
<em>Facebook</em>.
|
||||||
|
Desde la ventana de <em>Subsurface</em> es fácil saber si se tiene una conexión válida
|
||||||
|
con <em>Facebook</em>. Desde el <strong>Menú principal</strong>, selecciona <em>Compartir</em>
|
||||||
|
(ver imagen <strong>A</strong> a continuación). Normalmente la opción <em>Facebook</em> está
|
||||||
|
desactivada, pero, si hay una conexión establecida, la opción está activa y
|
||||||
|
puede ser seleccionada.
|
||||||
|
Tras haber establecido una conexión con <em>Facebook</em>, se mostrará un panel con
|
||||||
|
un mensaje: "<em>Para desconectar Subsurface de tu cuenta de Facebook, utiliza la
|
||||||
|
entrada del menú 'Compartir'</em>."
|
||||||
|
Cierra este panel.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook1.jpg" alt="Figure: Facebook login" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>Habiendo establecido una conexión a <em>Facebook</em>, transferir un perfil al
|
||||||
|
historial es fácil.
|
||||||
|
Selecciona en la <strong>Lista de Inmersiones</strong> de <em>Subsurface</em> el buceo que quieras
|
||||||
|
transferir; entonces, desde el <strong>Menú</strong> selecciona <em>Compartir → Facebook</em>,
|
||||||
|
aparecerá un diálogo en el que se definirá la cantidad de información
|
||||||
|
adicional que se desea compartir en el historial junto con el perfil (ver imagen
|
||||||
|
<strong>A</strong>, a continuación). Se necesita proporcionar el nombre de un álbum de <em>Facebook</em>
|
||||||
|
para poder enviar el perfil de inmersión. Las casillas seleccionables de la
|
||||||
|
izquierda nos permiten seleccionar la información que vamos a enviar. Esta
|
||||||
|
información se muestra en la ventana de texto de la derecha (ver imagen <strong>A</strong>
|
||||||
|
a continuación). El mensaje que se va a enviar se puede editar directamente en
|
||||||
|
esta ventana de texto. Tras haber elegido la información y verificado lo que se va
|
||||||
|
a subir, se selecciona el botón <em>OK</em> lo que inicia la transferencia a <em>Facebook</em>.
|
||||||
|
Unos momentos después aparecerá un mensaje indicando una transferencia correcta.</p></div>
|
||||||
|
<div class="paragraph"><p>El álbum creado y el post al historial se marcarán como privados. Para que
|
||||||
|
los amigos puedan ver el post habrá que cambiar los permisos desde un acceso
|
||||||
|
normal a <em>Facebook</em> desde un navegador o desde la app de <em>Facebook</em>. Aunque
|
||||||
|
esto suponga un paso de más, los desarrolladores entienden que esta es la mejor
|
||||||
|
solución para evitar subidas no deseadas en el historial público.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook2.jpg" alt="Figure: Facebook data submission" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>Si se considera necesario, cierra la conexión a <em>Facebook</em>, seleccionando
|
||||||
|
desde el <strong>Menú principal</strong>, <em>Compartir → Desconectar de → Facebook</em> (imagen
|
||||||
|
<strong>B</strong> anterior).</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_Export_other">8.2. Exportar información de buceo a otros destinos o formatos</h3>
|
||||||
<div class="paragraph"><p>Para exportar a otros destinos,
|
<div class="paragraph"><p>Para exportar a otros destinos,
|
||||||
se llega a la función de exportación seleccionando <em>Archivo → Exportar</em> lo que
|
se llega a la función de exportación seleccionando <em>Archivo → Exportar</em> lo que
|
||||||
despliega el diálogo de exportación. Este diálogo siempre ofrece dos opciones:
|
despliega el diálogo de exportación. Este diálogo siempre ofrece dos opciones:
|
||||||
@ -4281,20 +4109,6 @@ Universal Dive Data format (UDDF). Ver <a href="http://uddf.org">http://uddf.org
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<em>Perfil de Inmersión</em>, que permite compartir facilmente el perfil usando
|
|
||||||
redes sociales. Esta opción escribe la imagen del perfil de buceo en un
|
|
||||||
archivo en formato gráfico <em>.PNG</em> en la carpeta indicada en el diálogo
|
|
||||||
<em>Guardar Archivo</em>. La imagen guardada es exactamente la que se puede ver en
|
|
||||||
el perfil en la pantalla, así que comprueba que tienes activadas las
|
|
||||||
opciones correctas de la caja de herramientas del perfil. Si se seleccionan
|
|
||||||
varias inmersiones las imagenes se escriben en archivos separados. Al
|
|
||||||
seleccionar la opción <em>Perfil de Inmersión</em> se abre una ventana para elegir
|
|
||||||
el nombre que queremos asignar a los archivos a los que escribir los
|
|
||||||
perfiles. Pulsa <em>Guardar</em> tras haber escrito el nombre.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
Formato <em>HTML</em>, en el cual los buceos se guardan en archivos HTML,
|
Formato <em>HTML</em>, en el cual los buceos se guardan en archivos HTML,
|
||||||
visualizables con un navegador de internet.Se soportan la mayoría de navegadores
|
visualizables con un navegador de internet.Se soportan la mayoría de navegadores
|
||||||
modernos, pero debe estar activado Javascript. Este archivo <strong>NO</strong> es editable. El
|
modernos, pero debe estar activado Javascript. Este archivo <strong>NO</strong> es editable. El
|
||||||
@ -4343,12 +4157,6 @@ Formato <em>TeX</em>, un archivo para imprimir usando el software tipográfico T
|
|||||||
<div class="ulist"><ul>
|
<div class="ulist"><ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<em>LaTeX</em>. Escribe la inmersión a un documento Latex, en el que los ajustes
|
|
||||||
tipográficos se efectuan automáticamente usando TeX.
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<p>
|
|
||||||
<em>Profundidad de imágenes</em>, que crea un fichero de texto que contiene los
|
<em>Profundidad de imágenes</em>, que crea un fichero de texto que contiene los
|
||||||
nombres de todos los archivos de imagen o vídeo añadidos a cualquiera de los buceos
|
nombres de todos los archivos de imagen o vídeo añadidos a cualquiera de los buceos
|
||||||
seleccionados del la <em>Lista de inmersiones</em>, junto con la profundidad a la
|
seleccionados del la <em>Lista de inmersiones</em>, junto con la profundidad a la
|
||||||
@ -4400,6 +4208,7 @@ Solo exportar lista: Solo se exportará una lista de inmersiones. No se
|
|||||||
</ul></div>
|
</ul></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="sect1">
|
<div class="sect1">
|
||||||
<h2 id="S_Cloud_access">9. Guardar un diario de <em>Subsurface</em> en la Nube</h2>
|
<h2 id="S_Cloud_access">9. Guardar un diario de <em>Subsurface</em> en la Nube</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
@ -4749,7 +4558,7 @@ el nombre de dispositivo asignado al ordenador por el sistema operativo.
|
|||||||
Ver el <a href="#_apendice_a_informacion_especifica_del_sistema_operativo_para_importar_inmersiones_desde_un_ordenador_de_buceo">APÉNDICE A</a>
|
Ver el <a href="#_apendice_a_informacion_especifica_del_sistema_operativo_para_importar_inmersiones_desde_un_ordenador_de_buceo">APÉNDICE A</a>
|
||||||
para información sobre como hacerlo.</p></div>
|
para información sobre como hacerlo.</p></div>
|
||||||
<div class="paragraph"><p>Una vez que el ordenador de buceo está al PC con <em>Subsurface</em>, se selecciona
|
<div class="paragraph"><p>Una vez que el ordenador de buceo está al PC con <em>Subsurface</em>, se selecciona
|
||||||
<em>Archivo → Cambiar ajustes del ordenador de buceo</em> en el menú principal. Si se ha
|
<em>Archivo → Configurar ordenador de buceo</em> en el menú principal. Si se ha
|
||||||
indicado el nombre de dispositivo correcto en el campo de texto de la parte
|
indicado el nombre de dispositivo correcto en el campo de texto de la parte
|
||||||
superior, esto abrirá y seleccionará el modelo correcto en el panel de la
|
superior, esto abrirá y seleccionará el modelo correcto en el panel de la
|
||||||
izquierda (ver imagen a continuación).</p></div>
|
izquierda (ver imagen a continuación).</p></div>
|
||||||
@ -5857,15 +5666,7 @@ circuito por la caída de oxígeno en la boquilla del equipo pSCR.</p></div>
|
|||||||
<td class="content">Bucear en circuito abierto forma parte amenudo de las inmersiones con pSCR,
|
<td class="content">Bucear en circuito abierto forma parte amenudo de las inmersiones con pSCR,
|
||||||
porque a pequeñas profundidades la pO<sub>2</sub> en el circuito es demasiado baja. El
|
porque a pequeñas profundidades la pO<sub>2</sub> en el circuito es demasiado baja. El
|
||||||
cambio de rebreather a circuito abierto y viceversa se indica usando eventos
|
cambio de rebreather a circuito abierto y viceversa se indica usando eventos
|
||||||
de "bailout". Hay dos formas de planificar bailouts en inmersiones con
|
de "bailout". La imagen a la izquierda muestra un plan con pSCR (utilizando
|
||||||
reciclador: 1) Seleccionar la casilla <em>Bailout</em> en la sección <em>Modo de
|
|
||||||
Inmersión</em> del planificador; en este caso, las necesidades del bailout se
|
|
||||||
calcularán empezando por el último segmento especificado en la tabla del
|
|
||||||
planificador. 2) Si el bailout tiene lugar en otro punto de la inmersión (ver
|
|
||||||
el ejemplo de buceo en cuevas a continuación), el bailout se planifica
|
|
||||||
manipulando la columna <em>Modo de Inmersión</em> en la tabla <strong>Puntos del
|
|
||||||
Planificador</strong>.
|
|
||||||
La imagen a la izquierda muestra un plan con pSCR (utilizando
|
|
||||||
tres botellas) en el que las partes más superficiales se llevan a cabo usando
|
tres botellas) en el que las partes más superficiales se llevan a cabo usando
|
||||||
EAN50 para poder tener una pO<sub>2</sub> suficiente. La parte profunda se lleva a cabo
|
EAN50 para poder tener una pO<sub>2</sub> suficiente. La parte profunda se lleva a cabo
|
||||||
usando con EAN31 (bot. 2 en la tabla de gases disponibles, también indicada en
|
usando con EAN31 (bot. 2 en la tabla de gases disponibles, también indicada en
|
||||||
@ -5889,7 +5690,7 @@ la botella en la tabla <strong>Puntos del Planificador de inmersiones</strong> c
|
|||||||
en la imagen de la derecha (<strong>B</strong>). El icono del perfil mostrará ahora un evento
|
en la imagen de la derecha (<strong>B</strong>). El icono del perfil mostrará ahora un evento
|
||||||
de bailout superpuesto con un cambio de botella. Como en el gráfico de la
|
de bailout superpuesto con un cambio de botella. Como en el gráfico de la
|
||||||
izquierda, los valores apropiados de pO<sub>2</sub> se muestran en el perfil. Los
|
izquierda, los valores apropiados de pO<sub>2</sub> se muestran en el perfil. Los
|
||||||
volúmenes de gas necesarios se encuentran al final del panel <strong>Detalles del
|
volumenes de gas necesarios se encuentran al final del panel <strong>Detalles del
|
||||||
Plan de Buceo</strong>.</td>
|
Plan de Buceo</strong>.</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
</div>
|
</div>
|
||||||
@ -5899,13 +5700,12 @@ Plan de Buceo</strong>.</td>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="paragraph"><p>En el caso de un plan de inmersión en aguas abiertas con pSCR, el "peor
|
<div class="paragraph"><p>En el caso de un plan de inmersión en aguas abiertas con pSCR, el "peor
|
||||||
escenario" es, probablemente, una emergencia al final de la parte más profunda
|
escenacio" es, probablemente, una emergencia al final de la parte más profunda
|
||||||
de la inmersión y esto puede simularse usando la casilla <em>Bailout</em> del
|
de la inmersión. Crea un segmento de 1 minuto al final de la parte más
|
||||||
planificador. Como alternativa, se puede crear un segmento de 1 minuto al final
|
profunda del plan. Luego manipula el segmento utilizando las columnas <strong>Modo de
|
||||||
de la parte más profunda del plan. Luego manipula el segmento utilizando las
|
buceo</strong> y <strong>Gas usado</strong>, como en el ejemplo anterior de la cueva. Visita el
|
||||||
columnas <strong>Modo de buceo</strong> y <strong>Gas usado</strong>, como en el ejemplo anterior de la cueva.
|
ejemplo de emergencia para una inmersión con CCR, a continuación, que utiliza
|
||||||
Visita el ejemplo de emergencia para una inmersión con CCR, a continuación, que
|
esta aproximación.</p></div>
|
||||||
utiliza esta aproximación.</p></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
@ -5943,15 +5743,12 @@ gas para un segmento en CCR, por tanto, lo normal es obtener valores de 0 l.</p>
|
|||||||
<td class="icon">
|
<td class="icon">
|
||||||
<img src="images/CCR_b1.jpg" alt="Note" />
|
<img src="images/CCR_b1.jpg" alt="Note" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">A menudo es necesario planificar casos de "peor escenario" para asegurarnos de
|
<td class="content">A menudo es necerario planificar casos de "peor escenario" para asegurarnos de
|
||||||
que dispondremos de gas suficiente, en caso de emergencia, para alcanzar la
|
que dispondremos de gas suficiente, en caso de emergencia, para alcanzar la
|
||||||
superficie, teniendo en cuenta la descompresión. Esto se hace: 1)
|
superficie, teniendo en cuenta la descompresión. Esto se hace definiendo
|
||||||
seleccionando la casilla <em>Bailout</em> del planificador (el bailout se calculará
|
segmentos de 1 minuto al final de la parte de fondo de la inmersión, como se
|
||||||
empezando en el último segmento de inmersión definido en la tabla); 2)
|
muestra en la imagen de la izquierda donde se planifica una inmersión a 40m
|
||||||
Definiendo segmentos de 1 minuto al final de la parte de fondo de la inmersión,
|
durante 21 minutos.</td>
|
||||||
como se muestra en la imagen de la izquierda donde se planifica una inmersión a
|
|
||||||
40m durante 21 minutos; 3) Cambiando a un gas en circuito abierto en cualquier
|
|
||||||
segmento de la tabla de <em>Puntos del Planificador</em>.</td>
|
|
||||||
</tr></table>
|
</tr></table>
|
||||||
</div>
|
</div>
|
||||||
<div class="admonitionblock">
|
<div class="admonitionblock">
|
||||||
@ -8079,7 +7876,7 @@ sido sobrescritos.</p></div>
|
|||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated
|
Last updated
|
||||||
2024-02-08 08:36:54 PST
|
2018-09-23 17:52:40 PDT
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -61,7 +61,7 @@ web]. Por favor, comenta los problemas que tengas con este programa enviando un
|
|||||||
mail a mailto:subsurface@subsurface-divelog.org[nuestra lista de correo] e informa de
|
mail a mailto:subsurface@subsurface-divelog.org[nuestra lista de correo] e informa de
|
||||||
fallos en https://github.com/Subsurface/subsurface/issues[nuestro bugtracker].
|
fallos en https://github.com/Subsurface/subsurface/issues[nuestro bugtracker].
|
||||||
Para instrucciones acerca de como compilar el software y (en caso necesario)
|
Para instrucciones acerca de como compilar el software y (en caso necesario)
|
||||||
sus dependencias, por favor, consulta el archivo INSTALL.md incluido con el código
|
sus dependencias, por favor, consulta el archivo INSTALL incluido con el código
|
||||||
fuente.
|
fuente.
|
||||||
|
|
||||||
*Audiencia*: Buceadores recreativos, Buceadores en apnea, Buceadores técnicos,
|
*Audiencia*: Buceadores recreativos, Buceadores en apnea, Buceadores técnicos,
|
||||||
@ -727,7 +727,6 @@ para seguir los cambios en el entorno. Si fuera necesario, no hay que teclear
|
|||||||
las unidades de temperatura: _Subsurface_ las suministra automáticamente de
|
las unidades de temperatura: _Subsurface_ las suministra automáticamente de
|
||||||
acuerdo con las _Preferencias_ (métricas o imperiales).
|
acuerdo con las _Preferencias_ (métricas o imperiales).
|
||||||
|
|
||||||
[[S_locations]]
|
|
||||||
*Ubicación*:
|
*Ubicación*:
|
||||||
[icon="images/icons/warning2.png"]
|
[icon="images/icons/warning2.png"]
|
||||||
[WARNING]
|
[WARNING]
|
||||||
|
|||||||
@ -1,10 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
<meta name="generator" content="AsciiDoc 10.1.2" />
|
<meta name="generator" content="AsciiDoc 8.6.9" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
/*
|
/*
|
||||||
@ -17,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
* { padding: 0; margin: 0; }
|
* { padding: 0; margin: 0; }
|
||||||
img { border: 0; margin: 15px; max-width:90% }
|
img { border: 0; }
|
||||||
|
|
||||||
/*** Layout ***/
|
/*** Layout ***/
|
||||||
|
|
||||||
@ -78,12 +77,12 @@ body { font-family: Verdana, sans-serif; }
|
|||||||
#footer { font-size: 0.8em; }
|
#footer { font-size: 0.8em; }
|
||||||
|
|
||||||
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
||||||
h2 { font-size: 160%; }
|
h2 { font-size: 1.5em; }
|
||||||
.sectionbody { font-size: 0.85em; }
|
.sectionbody { font-size: 0.85em; }
|
||||||
.sectionbody .sectionbody { font-size: inherit; }
|
.sectionbody .sectionbody { font-size: inherit; }
|
||||||
h3 { font-size: 150%; } /* 1.35em */
|
h3 { font-size: 159%; } /* 1.35em */
|
||||||
h4 { font-size: 140%; } /* 1.2em */
|
h4 { font-size: 141%; } /* 1.2em */
|
||||||
h5 { font-size: 130%; } /* 1em */
|
h5 { font-size: 118%; } /* 1em */
|
||||||
.title { font-size: 106%; /* 0.9em */
|
.title { font-size: 106%; /* 0.9em */
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@ -526,7 +525,7 @@ problème, vous pouvez envoyer un e-mail sur
|
|||||||
<a href="mailto:subsurface@subsurface-divelog.org">notre liste de diffusion</a> et
|
<a href="mailto:subsurface@subsurface-divelog.org">notre liste de diffusion</a> et
|
||||||
rapportez les bogues sur <a href="http://trac.hohndel.org">notre bugtracker</a>. Pour
|
rapportez les bogues sur <a href="http://trac.hohndel.org">notre bugtracker</a>. Pour
|
||||||
des instructions de compilation du logiciel et (si besoin) de ses
|
des instructions de compilation du logiciel et (si besoin) de ses
|
||||||
dépendances, merci de consulter le fichier INSTALL.md inclus dans les sources
|
dépendances, merci de consulter le fichier INSTALL inclus dans les sources
|
||||||
logicielles.</p></div>
|
logicielles.</p></div>
|
||||||
<div class="paragraph"><p><strong>Public</strong> : Plongeurs loisirs, apnéistes, plongeurs Tek et plongeurs
|
<div class="paragraph"><p><strong>Public</strong> : Plongeurs loisirs, apnéistes, plongeurs Tek et plongeurs
|
||||||
professionnels</p></div>
|
professionnels</p></div>
|
||||||
@ -577,7 +576,7 @@ meilleur manière qui soit, il est important d’avoir des informations sur
|
|||||||
utilisateurs. À l’ouverture de <em>Subsurface</em> après avoir utilisé le logiciel
|
utilisateurs. À l’ouverture de <em>Subsurface</em> après avoir utilisé le logiciel
|
||||||
pendant une semaine environ, une fenêtre de sondage apparait. Cela est
|
pendant une semaine environ, une fenêtre de sondage apparait. Cela est
|
||||||
complètement optionnel et l’utilisateur contrôle quelles informations sont
|
complètement optionnel et l’utilisateur contrôle quelles informations sont
|
||||||
envoyées ou non à l’équipe de développement de <em>Subsurface</em>. Toutes les
|
envoyées ou non à l'équipe de développement de <em>Subsurface</em>. Toutes les
|
||||||
données que l’utilisateur envoie sont utiles et ne seront utilisées que pour
|
données que l’utilisateur envoie sont utiles et ne seront utilisées que pour
|
||||||
les futurs développements et modifications du logiciel pour coller au mieux
|
les futurs développements et modifications du logiciel pour coller au mieux
|
||||||
aux besoins des utilisateurs de <em>Subsurface</em>. Si vous complétez le sondage
|
aux besoins des utilisateurs de <em>Subsurface</em>. Si vous complétez le sondage
|
||||||
@ -593,7 +592,7 @@ envoyer un nouveau sondage en démarrant <em>Subsurface</em> avec l’option
|
|||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<div class="paragraph"><p>La fenêtre <em>Subsurface</em> est généralement divisée en 4 panneaux avec un <strong>Menu
|
<div class="paragraph"><p>La fenêtre <em>Subsurface</em> est généralement divisée en 4 panneaux avec un <strong>Menu
|
||||||
principal</strong> (Fichier Édition Importer Journal Vue Partager Aide) en haut de
|
principal</strong> (Fichier Édition Importer Journal Vue Partager Aide) en haut de
|
||||||
la fenêtre (pour Windows et Linux) ou en haut de l’écran (pour Mac et Ubuntu
|
la fenêtre (pour Windows et Linux) ou en haut de l'écran (pour Mac et Ubuntu
|
||||||
Unity). Les quatre panneaux sont :</p></div>
|
Unity). Les quatre panneaux sont :</p></div>
|
||||||
<div class="paragraph"><p>La <strong>liste des plongées</strong> en bas à gauche, affichant toutes les plongées du
|
<div class="paragraph"><p>La <strong>liste des plongées</strong> en bas à gauche, affichant toutes les plongées du
|
||||||
journal (carnet) de plongées de l’utilisateur. Une plongée peut être
|
journal (carnet) de plongées de l’utilisateur. Une plongée peut être
|
||||||
@ -603,7 +602,7 @@ d’une plongée à l’autre. La <strong>liste des plongées</strong> e
|
|||||||
manipuler un journal (carnet) de plongée.</p></div>
|
manipuler un journal (carnet) de plongée.</p></div>
|
||||||
<div class="paragraph"><p>La <strong>carte de plongée</strong> en bas à droite, affiche les sites de plongées de
|
<div class="paragraph"><p>La <strong>carte de plongée</strong> en bas à droite, affiche les sites de plongées de
|
||||||
l’utilisateur, sur une carte mondiale et centrée sur le site de la dernière
|
l’utilisateur, sur une carte mondiale et centrée sur le site de la dernière
|
||||||
plongée sélectionnée dans la <strong>liste des plongées</strong>. L’échelle de la carte
|
plongée sélectionnée dans la <strong>liste des plongées</strong>. L'échelle de la carte
|
||||||
peut être augmentée ou réduite.</p></div>
|
peut être augmentée ou réduite.</p></div>
|
||||||
<div class="paragraph"><p>Les <strong>informations</strong> en haut à gauche, fournissent des informations détaillées
|
<div class="paragraph"><p>Les <strong>informations</strong> en haut à gauche, fournissent des informations détaillées
|
||||||
sur la plongée sélectionnée dans la <strong>liste des plongées</strong>, dont des
|
sur la plongée sélectionnée dans la <strong>liste des plongées</strong>, dont des
|
||||||
@ -633,7 +632,7 @@ plongées sélectionnées).</p></div>
|
|||||||
<div class="paragraph"><p>Décider quels panneaux sont affichés, parmi les 4, en sélectionnant l’option
|
<div class="paragraph"><p>Décider quels panneaux sont affichés, parmi les 4, en sélectionnant l’option
|
||||||
<strong>Vue</strong> dans le menu principal. Cette fonctionnalité permet plusieurs choix
|
<strong>Vue</strong> dans le menu principal. Cette fonctionnalité permet plusieurs choix
|
||||||
d’affichage :</p></div>
|
d’affichage :</p></div>
|
||||||
<div class="paragraph"><p><strong>Tout</strong> : affiche les quatre panneaux tels que sur la capture d’écran ci-dessus.</p></div>
|
<div class="paragraph"><p><strong>Tout</strong> : affiche les quatre panneaux tels que sur la capture d'écran ci-dessus.</p></div>
|
||||||
<div class="paragraph"><p><strong>Liste des plongées</strong> : affiche uniquement la liste des plongées.</p></div>
|
<div class="paragraph"><p><strong>Liste des plongées</strong> : affiche uniquement la liste des plongées.</p></div>
|
||||||
<div class="paragraph"><p><strong>Profil</strong> : affiche uniquement le profile de plongée de la plongée sélectionnée.</p></div>
|
<div class="paragraph"><p><strong>Profil</strong> : affiche uniquement le profile de plongée de la plongée sélectionnée.</p></div>
|
||||||
<div class="paragraph"><p><strong>Info</strong> : affiche uniquement les notes de plongées de la dernière plongée sélectionnée et les statistiques pour
|
<div class="paragraph"><p><strong>Info</strong> : affiche uniquement les notes de plongées de la dernière plongée sélectionnée et les statistiques pour
|
||||||
@ -762,7 +761,7 @@ doit être enregistré sur le disque ou non.</p></div>
|
|||||||
<div class="paragraph"><p>Le <strong>Profil de plongée</strong> (une représentation graphique de la profondeur d’une
|
<div class="paragraph"><p>Le <strong>Profil de plongée</strong> (une représentation graphique de la profondeur d’une
|
||||||
plongée en fonction du temps) est affiché dans le panneau en haut à droite
|
plongée en fonction du temps) est affiché dans le panneau en haut à droite
|
||||||
de la fenêtre de <em>Subsurface</em>. Lorsqu’il est ajouté manuellement au carnet,
|
de la fenêtre de <em>Subsurface</em>. Lorsqu’il est ajouté manuellement au carnet,
|
||||||
<em>Subsurface</em> affiche un profil de plongée par défaut qui nécessite d’être
|
<em>Subsurface</em> affiche un profil de plongée par défaut qui nécessite d'être
|
||||||
modifié pour représenter au mieux la plongée décrite:</p></div>
|
modifié pour représenter au mieux la plongée décrite:</p></div>
|
||||||
<div class="imageblock" style="text-align:center;">
|
<div class="imageblock" style="text-align:center;">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@ -778,7 +777,7 @@ en haut de la boîte noire d’information (@ et D). Les unités
|
|||||||
ligne séparés par des points de passage (les points blancs sur le profil,
|
ligne séparés par des points de passage (les points blancs sur le profil,
|
||||||
voir ci-dessous). La profondeur par défaut d’une plongée est de 15m. Si la
|
voir ci-dessous). La profondeur par défaut d’une plongée est de 15m. Si la
|
||||||
prfondeur de votre plongée était de 20m, vous devez glisser le point de
|
prfondeur de votre plongée était de 20m, vous devez glisser le point de
|
||||||
passage approprié jusqu’à 20m. Pour ajouter un point de passage,
|
passage approprié jusqu'à 20m. Pour ajouter un point de passage,
|
||||||
double-cliquez sur n’importe quel segment de la ligne. Pour bouger un point
|
double-cliquez sur n’importe quel segment de la ligne. Pour bouger un point
|
||||||
de passage supplémentaire, glissez-le. Le bouger peut également être réalisé
|
de passage supplémentaire, glissez-le. Le bouger peut également être réalisé
|
||||||
en le sélectionnant et en utilisant les flèches du clavier. Pour supprimer
|
en le sélectionnant et en utilisant les flèches du clavier. Pour supprimer
|
||||||
@ -832,7 +831,7 @@ de plongée supportés</a>.</p></div>
|
|||||||
<td class="icon">
|
<td class="icon">
|
||||||
<img src="images/icons/warning2.png" alt="Warning" />
|
<img src="images/icons/warning2.png" alt="Warning" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">Certains ordinateurs de plongée consomme plus d’énergie lorsqu’ils sont en
|
<td class="content">Certains ordinateurs de plongée consomme plus d'énergie lorsqu’ils sont en
|
||||||
mode Communication PC. <strong>Ceci peut consommer une grande partie de la
|
mode Communication PC. <strong>Ceci peut consommer une grande partie de la
|
||||||
batterie de votre ordinateur de plongée</strong>. Nous recommandons à l’utilisateur
|
batterie de votre ordinateur de plongée</strong>. Nous recommandons à l’utilisateur
|
||||||
de vérifier que l’ordinateur de plongée est chargé lorsqu’il est connecté au
|
de vérifier que l’ordinateur de plongée est chargé lorsqu’il est connecté au
|
||||||
@ -844,7 +843,7 @@ au port USB.</td>
|
|||||||
</tr></table>
|
</tr></table>
|
||||||
</div>
|
</div>
|
||||||
<div class="paragraph"><p>Pour importer les informations depuis un ordinateur de plongée vers un
|
<div class="paragraph"><p>Pour importer les informations depuis un ordinateur de plongée vers un
|
||||||
ordinateur utilisant <em>Subsurface</em>, les deux pièces d’équipement doivent
|
ordinateur utilisant <em>Subsurface</em>, les deux pièces d'équipement doivent
|
||||||
communiquer entre elles. Ceci implique la configuration des ports de
|
communiquer entre elles. Ceci implique la configuration des ports de
|
||||||
communication (ou point de montage) de l’ordinateur sur lequel tourne
|
communication (ou point de montage) de l’ordinateur sur lequel tourne
|
||||||
<em>Subsurface</em> qui communique avec l’ordinateur de plongée. Pour configurer
|
<em>Subsurface</em> qui communique avec l’ordinateur de plongée. Pour configurer
|
||||||
@ -852,7 +851,8 @@ cette communication, les utilisateurs doivent trouver l’information
|
|||||||
appropriée pour renseigner à <em>Subsurface</em> d’où et comment importer les
|
appropriée pour renseigner à <em>Subsurface</em> d’où et comment importer les
|
||||||
informations de
|
informations de
|
||||||
plongée.
|
plongée.
|
||||||
<a href="#appendix_a">Annexe A</a> donne les informations techniques pour aider l’utilisateur à configurer
|
<a href="#_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer">Annexe
|
||||||
|
A</a> donne les informations techniques pour aider l’utilisateur à configurer
|
||||||
ceci pour les différents systèmes d’exploitation et
|
ceci pour les différents systèmes d’exploitation et
|
||||||
<a href="#_appendix_b_dive_computer_specific_information_for_importing_dive_information">Annexe
|
<a href="#_appendix_b_dive_computer_specific_information_for_importing_dive_information">Annexe
|
||||||
B</a> contient des informations spécifiques à chaque ordinateur de plongée.</p></div>
|
B</a> contient des informations spécifiques à chaque ordinateur de plongée.</p></div>
|
||||||
@ -908,7 +908,8 @@ La boîte de dialogue propose deux menus déroulants, <strong>Fournisseur</stron
|
|||||||
Le menu déroulant <strong>Périphérique ou point de montage</strong> le nom du port USB ou
|
Le menu déroulant <strong>Périphérique ou point de montage</strong> le nom du port USB ou
|
||||||
Bluetooth dont <em>Subsurface</em> a besoin pour communiquer avec l’ordinateur de
|
Bluetooth dont <em>Subsurface</em> a besoin pour communiquer avec l’ordinateur de
|
||||||
plongée. Le port approprié doit être sélectionné. Consultez
|
plongée. Le port approprié doit être sélectionné. Consultez
|
||||||
<a href="#appendix_a">Annexe A</a> et
|
<a href="#_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer">Annexe
|
||||||
|
A</a> et
|
||||||
<a href="#_appendix_b_dive_computer_specific_information_for_importing_dive_information">Annexe
|
<a href="#_appendix_b_dive_computer_specific_information_for_importing_dive_information">Annexe
|
||||||
B</a> pour obtenir des détails techniques sur la façon de trouver des
|
B</a> pour obtenir des détails techniques sur la façon de trouver des
|
||||||
informations sur le port approprié à chaque ordinateur de plongée et, dans
|
informations sur le port approprié à chaque ordinateur de plongée et, dans
|
||||||
@ -1034,15 +1035,17 @@ Le câble de connexion est-il fautif ? Le câble fonctionne-t-il avec d’au
|
|||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
Consultez
|
Consultez
|
||||||
<a href="#appendix_a">Annexe A</a> pour être certain que le point de montage correct a été spécifié (voir
|
<a href="#_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer">Annexe
|
||||||
|
A</a> pour être certain que le point de montage correct a été spécifié (voir
|
||||||
ci-dessus).
|
ci-dessus).
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
Sur les systèmes d’exploitation de type Unix, l’utilisateur a-t-il les
|
Sur les systèmes d’exploitation de type Unix, l’utilisateur a-t-il les
|
||||||
droits d’écriture sur le port USB? Si non, consultez
|
droits d'écriture sur le port USB? Si non, consultez
|
||||||
<a href="#appendix_a">Annexe A</a>
|
<a href="#_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer">Annexe
|
||||||
|
A</a>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
@ -1139,7 +1142,7 @@ start by scanning for Bluetooth devices from an empty list (on the desktop)
|
|||||||
of Bluetooth devices. Once <em>Subsurface</em> has recognised the Bluetooth dive
|
of Bluetooth devices. Once <em>Subsurface</em> has recognised the Bluetooth dive
|
||||||
computer, subsequent divelog downloads are likely to be simple.</p></div>
|
computer, subsequent divelog downloads are likely to be simple.</p></div>
|
||||||
<div class="paragraph"><p>Sur les plateformes <em>Linux</em> ou -MacOS_, le nom de l’ordinateur utilisant
|
<div class="paragraph"><p>Sur les plateformes <em>Linux</em> ou -MacOS_, le nom de l’ordinateur utilisant
|
||||||
Subsurface_ et son adresse Bluetooth sont affichées du côté droit. L’état
|
Subsurface_ et son adresse Bluetooth sont affichées du côté droit. L'état
|
||||||
(allumé/éteint) de l’adaptateur Bluetooth est affiché sous l’adresse et peut
|
(allumé/éteint) de l’adaptateur Bluetooth est affiché sous l’adresse et peut
|
||||||
être modifié en cliquer sur la case <em>Allumer/éteindre</em>. Si l’adresse
|
être modifié en cliquer sur la case <em>Allumer/éteindre</em>. Si l’adresse
|
||||||
Bluetooth n’est pas affichée, <em>Subsurface</em> ne détecte pas le périphérique
|
Bluetooth n’est pas affichée, <em>Subsurface</em> ne détecte pas le périphérique
|
||||||
@ -1218,10 +1221,10 @@ ci-dessus). Si l’ordinateur de plongée est connecté à Subsurface pour l
|
|||||||
première fois, il est possible que Subsurface demande un nombre ou un code
|
première fois, il est possible que Subsurface demande un nombre ou un code
|
||||||
PIN. Entrez le code indiqué dans le manuel utilisateur de l’ordinatuer de
|
PIN. Entrez le code indiqué dans le manuel utilisateur de l’ordinatuer de
|
||||||
plongée. Un code ou PIN de 0000 est souvent le code par défaut.</p></div>
|
plongée. Un code ou PIN de 0000 est souvent le code par défaut.</p></div>
|
||||||
<div class="paragraph"><p>L’étape de jumelage est vérifiée et réalisée automatiquement durant le
|
<div class="paragraph"><p>L'étape de jumelage est vérifiée et réalisée automatiquement durant le
|
||||||
processus de téléchargement. Si les périphériques n’ont pas encore été
|
processus de téléchargement. Si les périphériques n’ont pas encore été
|
||||||
jumelés, le système demandera l’autorisation de le faire et affichera un
|
jumelés, le système demandera l’autorisation de le faire et affichera un
|
||||||
message sur la partie droite de l’écran. <em>Ajouter un périphérique</em>, <em>Tapez
|
message sur la partie droite de l'écran. <em>Ajouter un périphérique</em>, <em>Tapez
|
||||||
pour configurer votre périphérique</em>. <em>Toujours autoriser le jumelage. Après
|
pour configurer votre périphérique</em>. <em>Toujours autoriser le jumelage. Après
|
||||||
la sélection d’un item découvert, cliquez sur le bouton
|
la sélection d’un item découvert, cliquez sur le bouton
|
||||||
_Enregistrer</em>. Enfin, sélectionnez le bouton "Télécharger_ dans la boîte de
|
_Enregistrer</em>. Enfin, sélectionnez le bouton "Télécharger_ dans la boîte de
|
||||||
@ -1275,7 +1278,7 @@ avec <em>Subsurface</em>.</td>
|
|||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_DeviceNames">5.2.3. Changement du nom d’un ordinateur de plongée</h4>
|
<h4 id="S_DeviceNames">5.2.3. Changement du nom d’un ordinateur de plongée</h4>
|
||||||
<div class="paragraph"><p>Il peut être nécessaire d’établir une distinction entre différents
|
<div class="paragraph"><p>Il peut être nécessaire d'établir une distinction entre différents
|
||||||
ordinateurs de plongée utilisés pour télécharger des données de plongée vers
|
ordinateurs de plongée utilisés pour télécharger des données de plongée vers
|
||||||
<em>Subsurface</em>. Par exemple, si l’ordinateur d’un équipier provient du même
|
<em>Subsurface</em>. Par exemple, si l’ordinateur d’un équipier provient du même
|
||||||
fabriquant et est dun même modèle que le votre et que les données sont
|
fabriquant et est dun même modèle que le votre et que les données sont
|
||||||
@ -1346,7 +1349,7 @@ dans des boîtes de texte à droite de l’heure de début de plongée. De n
|
|||||||
renseignent la température de l’eau, et cette boîte peut contenir cette information.
|
renseignent la température de l’eau, et cette boîte peut contenir cette information.
|
||||||
Si la température de l’air n’est pas renseignée par l’ordinateur de plongée, la première température pour l’eau
|
Si la température de l’air n’est pas renseignée par l’ordinateur de plongée, la première température pour l’eau
|
||||||
peut être utilisée comme température de l’air. En général, elle est proche de la température de l’air.
|
peut être utilisée comme température de l’air. En général, elle est proche de la température de l’air.
|
||||||
S’il est nécessaire d’éditer ces informations, seule une valeur est nécessaire, l’unité de température étant
|
S’il est nécessaire d'éditer ces informations, seule une valeur est nécessaire, l’unité de température étant
|
||||||
automatiquement fournie par
|
automatiquement fournie par
|
||||||
<em>Subsurface</em> (sur base des <em>Préférences</em>, les unités métriques ou impériales
|
<em>Subsurface</em> (sur base des <em>Préférences</em>, les unités métriques ou impériales
|
||||||
seront utilisées).</p></div>
|
seront utilisées).</p></div>
|
||||||
@ -1362,7 +1365,7 @@ plongée. Les informations de plongée dans les onglets <strong>Notes</strong>
|
|||||||
informations sur le site de plongée. Enregistrez toutes les autres
|
informations sur le site de plongée. Enregistrez toutes les autres
|
||||||
informations (p. ex. instructeur, équipier, équipement, notes à propos de la
|
informations (p. ex. instructeur, équipier, équipement, notes à propos de la
|
||||||
plongée) en sélectionnant <em>Appliquer les modifications</em> dans l’onglet
|
plongée) en sélectionnant <em>Appliquer les modifications</em> dans l’onglet
|
||||||
<strong>Notes</strong> AVANT d’éditer les informations sur le site de plongée. Ensuite,
|
<strong>Notes</strong> AVANT d'éditer les informations sur le site de plongée. Ensuite,
|
||||||
nommez le site de plongée dans la bpîte de texte <em>Lieu</em> dans l’onglet
|
nommez le site de plongée dans la bpîte de texte <em>Lieu</em> dans l’onglet
|
||||||
<strong>Notes</strong>.</td>
|
<strong>Notes</strong>.</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@ -1485,11 +1488,11 @@ Une sélection automatique est disponible.
|
|||||||
Certains utilisateurs de vêtement étanche peuvent utiliser ce champ pour enregistrer quelle ensemble de
|
Certains utilisateurs de vêtement étanche peuvent utiliser ce champ pour enregistrer quelle ensemble de
|
||||||
combinaison et souris ils ont utilisé.</p></div>
|
combinaison et souris ils ont utilisé.</p></div>
|
||||||
<div class="paragraph"><p><strong>Évaluation</strong>: attribue une évaluation subjective à une plongée sur une
|
<div class="paragraph"><p><strong>Évaluation</strong>: attribue une évaluation subjective à une plongée sur une
|
||||||
échelle de 5 points en cliquant sur l’étoile correspondante.</p></div>
|
échelle de 5 points en cliquant sur l'étoile correspondante.</p></div>
|
||||||
<div class="paragraph"><p><strong>Visibilité</strong>: attribue une évaluation de la visibilité à une plongée sur une
|
<div class="paragraph"><p><strong>Visibilité</strong>: attribue une évaluation de la visibilité à une plongée sur une
|
||||||
échelle de 5 points en cliquant sur l’étoile correspondante.</p></div>
|
échelle de 5 points en cliquant sur l'étoile correspondante.</p></div>
|
||||||
<div class="paragraph"><p><strong>Étiquettes</strong>: il est possible de définir ici des étiquettes qui décrivent le
|
<div class="paragraph"><p><strong>Étiquettes</strong>: il est possible de définir ici des étiquettes qui décrivent le
|
||||||
type de plongée (séparées par des virgules). Des exemples courants d’étiquettes sont bateau,
|
type de plongée (séparées par des virgules). Des exemples courants d'étiquettes sont bateau,
|
||||||
plongée dérivante, exercice, grotte, etc.
|
plongée dérivante, exercice, grotte, etc.
|
||||||
<em>Subsurface</em> contient de nombreuses étiquettes. En commençant à taper une étiquette, <em>Subsurface</em> liste
|
<em>Subsurface</em> contient de nombreuses étiquettes. En commençant à taper une étiquette, <em>Subsurface</em> liste
|
||||||
les étiquettes correspondant à la frappe. Par exemple, en entrant
|
les étiquettes correspondant à la frappe. Par exemple, en entrant
|
||||||
@ -1512,7 +1515,7 @@ message dans la boîte bleue en haut du panneau:</p></div>
|
|||||||
<img src="images/BlueEditBar_f22.jpg" alt="FIGURE: Blue edit bar" />
|
<img src="images/BlueEditBar_f22.jpg" alt="FIGURE: Blue edit bar" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="paragraph"><p>indique que l’équipement a été édité. C’est une partie hautement interactive
|
<div class="paragraph"><p>indique que l'équipement a été édité. C’est une partie hautement interactive
|
||||||
de <em>Subsurface</em> et les informations sur les blocs et les gaz (entrées ici)
|
de <em>Subsurface</em> et les informations sur les blocs et les gaz (entrées ici)
|
||||||
déterminent le comportement du <strong>Profil de plongée</strong> (panneau en haut à
|
déterminent le comportement du <strong>Profil de plongée</strong> (panneau en haut à
|
||||||
droite).</p></div>
|
droite).</p></div>
|
||||||
@ -1889,7 +1892,7 @@ not currently supported on Mac.</p></div>
|
|||||||
your system before building: <em>glib2.0</em> and <em>mdbtools</em> (see below).</p></div>
|
your system before building: <em>glib2.0</em> and <em>mdbtools</em> (see below).</p></div>
|
||||||
<div class="paragraph"><p>In addition, a web service is available for divelog convertions from
|
<div class="paragraph"><p>In addition, a web service is available for divelog convertions from
|
||||||
SmartTrak to <em>Subsurface</em> (see below).</p></div>
|
SmartTrak to <em>Subsurface</em> (see below).</p></div>
|
||||||
<div class="paragraph"><p>N’hésitez pas à contacter l’équipe de développement de <em>Subsurface</em> via
|
<div class="paragraph"><p>N’hésitez pas à contacter l'équipe de développement de <em>Subsurface</em> via
|
||||||
<a href="mailto:subsurface@subsurface-divelog.org">notre liste de diffusion</a> pour de
|
<a href="mailto:subsurface@subsurface-divelog.org">notre liste de diffusion</a> pour de
|
||||||
l’aide à l’importation des lofs <em>SmartTrak</em>.</p></div>
|
l’aide à l’importation des lofs <em>SmartTrak</em>.</p></div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
@ -3189,7 +3192,7 @@ profondeur à un moment précis de la plongée.</p></div>
|
|||||||
<img src="images/icons/scale.jpg" alt="Note" />
|
<img src="images/icons/scale.jpg" alt="Note" />
|
||||||
</td>
|
</td>
|
||||||
<td class="content">Dans certains cas, le profil de plongée ne remplit pas toute la zone du
|
<td class="content">Dans certains cas, le profil de plongée ne remplit pas toute la zone du
|
||||||
panneau <strong>Profil de plongée</strong>. Cliquer sur le bouton <strong>Ajuster l’échelle du
|
panneau <strong>Profil de plongée</strong>. Cliquer sur le bouton <strong>Ajuster l'échelle du
|
||||||
graphique</strong> dans la barre d’outils sur la gauche du profil de plongée
|
graphique</strong> dans la barre d’outils sur la gauche du profil de plongée
|
||||||
augmente la taille du profil de plongée pour remplir la zone du panneau.</td>
|
augmente la taille du profil de plongée pour remplir la zone du panneau.</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@ -3234,8 +3237,8 @@ panel. These are:</p></div>
|
|||||||
<td class="content">Affiche la <strong>Profondeur maximale d’utilisation (MOD)</strong> d’une plongée, en
|
<td class="content">Affiche la <strong>Profondeur maximale d’utilisation (MOD)</strong> d’une plongée, en
|
||||||
fonction du mélange gazeux utilisé. La MOD dépend de la concentration en
|
fonction du mélange gazeux utilisé. La MOD dépend de la concentration en
|
||||||
oxygène du gaz respiré. Pour l’air (21% d’oxygène), il vaut envuron 57m si
|
oxygène du gaz respiré. Pour l’air (21% d’oxygène), il vaut envuron 57m si
|
||||||
une pO<sub>2</sub> maximale de 1.4 est choisie dans la section <strong>Préférences</strong>
|
une pO<sub>2 maximale de 1.4 est choisie dans la section <strong>Préférences</strong>
|
||||||
(sélectionnez <em>Fichier → Préférences → Profil</em> et éditez le champ <em>pO<sub>2</sub>
|
(sélectionnez <em>Fichier → Préférences → Profil</em> et éditez le champ <em>pO</sub>2
|
||||||
dans le calcul de MOD</em>). En plongeant sous la MOD, il y a un risque
|
dans le calcul de MOD</em>). En plongeant sous la MOD, il y a un risque
|
||||||
important d’exposition aux dangers liés à la toxicité de l’oxygène.</td>
|
important d’exposition aux dangers liés à la toxicité de l’oxygène.</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@ -4046,13 +4049,66 @@ those dives that have either one OR both of these tags.</p></div>
|
|||||||
<div class="ulist"><ul>
|
<div class="ulist"><ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
|
Exporter les informations de plongée vers <em>Facebook</em>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
<a href="#S_Export_other">Exporter des informations de plongée vers d’autres
|
<a href="#S_Export_other">Exporter des informations de plongée vers d’autres
|
||||||
destinations ou formats</a>
|
destinations ou formats</a>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="S_Export_other">8.1. Exporter des informations de plongée vers d’autres destinations ou formats</h3>
|
<h3 id="S_Facebook">8.1. Export des informations de plongée vers <em>Facebook</em></h3>
|
||||||
|
<div class="paragraph"><p>L’export des plongées vers <em>Facebook</em> est géré différemment des autres types
|
||||||
|
d’export car une connexion vers <em>Facebook</em> est nécessaire, nécessitant un
|
||||||
|
identifiant et un mot de passe. À partir du menu principal, sélectionnez
|
||||||
|
<em>Partager sur → Connecter à → Facebook</em> (image <strong>A</strong> ci-dessous). Un écran
|
||||||
|
de connexion s’affiche (image <strong>B</strong> ci dessous). Entrez l’identifiant et le
|
||||||
|
mot de passe <em>Facebook</em>. Depuis la fenêtre <em>Subsurface</em>, il est facile de
|
||||||
|
vérifier si <em>Subsurface</em> a une connection valide vers <em>Facebook</em> : Depuis le
|
||||||
|
"Menu principal", sélectionnez <em>Partager sur</em> (image <strong>A</strong>
|
||||||
|
ci-dessous). Normalement, l’option <em>Facebook</em> est grisée. Mais si une
|
||||||
|
connection vers <em>Facebook</em> existe, cette option est active (c’est à dire
|
||||||
|
écrit en noir et sélectionnable).</p></div>
|
||||||
|
<div class="paragraph"><p>Once logged into to <em>Facebook</em> , a panel is shown with a message: "<em>To
|
||||||
|
disconnect Subsurface from your Facebook account, use the <em>Share on</em> menu
|
||||||
|
entry</em>." Close this message panel.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook1.jpg" alt="Figure: Facebook login" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>Une fois qu’une connexion à <em>Facebook</em> est établie, transférer un profil de
|
||||||
|
plongée vers <em>Facebook</em> est facile. Dans le panneau <strong>Liste des plongées</strong> de
|
||||||
|
<em>Subsurface</em>, sélectionnez la plongée à transférer. Ensuite, à partir du
|
||||||
|
<strong>menu principal</strong>, sélectionnez <em>Partager sur → Facebook</em>. Une fenêtre
|
||||||
|
s’affiche, pour déterminer quelles informations seront transférées avec le
|
||||||
|
profil de plongée (image <strong>A</strong> ci-dessous). Pour transférer un profil de
|
||||||
|
plongée vers <em>Facebook</em>, le nom d’un album <em>Facebook</em> doit être fourni. Les
|
||||||
|
cases à cocher sur la partie gauche permettent de sélectionner des
|
||||||
|
informations supplémentaires à transférer avec le profil de plongée. Ces
|
||||||
|
informations sont affichées dans le champs de texte sur la partie droite du
|
||||||
|
panneau. (image <strong>A</strong> ci dessous). Personnalisez le message qui sera envoyé
|
||||||
|
avec le profil de plongée en modifiant les informations. Une fois les
|
||||||
|
informations supplémentaires ajoutées et vérifiées, sélectionner le bouton
|
||||||
|
<em>OK</em> qui effectue le transfert vers <em>Facebook</em>. Après le transfert, une
|
||||||
|
fenêtre de confirmation apparait ,indiquant le succès du transfert.</p></div>
|
||||||
|
<div class="paragraph"><p>À la fois l’album créé et la publication sur votre ligne temporelle seront
|
||||||
|
marquées comme privés. Pour que vos amis puissent la voir, connectez-vous à
|
||||||
|
<em>Facebook</em> depuis un navigateur ou l’application Facebook et modifiez les
|
||||||
|
permissions.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook2.jpg" alt="Figure: Facebook data submission" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>If required, then close the <em>Facebook</em> connection by selecting, from the
|
||||||
|
<strong>Main Menu</strong>, <em>Share on → Disconnect from → Facebook</em> (image <strong>B</strong> above).</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_Export_other">8.2. Exporter des informations de plongée vers d’autres destinations ou formats</h3>
|
||||||
<div class="paragraph"><p>For non-<em>Facebook exports</em>, the export function can be found by selecting
|
<div class="paragraph"><p>For non-<em>Facebook exports</em>, the export function can be found by selecting
|
||||||
<em>File → Export</em>, which brings up the Export dialog. This dialog always
|
<em>File → Export</em>, which brings up the Export dialog. This dialog always
|
||||||
gives two options: save ALL dives, or save only the dives selected in <strong>Dive
|
gives two options: save ALL dives, or save only the dives selected in <strong>Dive
|
||||||
@ -4544,7 +4600,7 @@ ces ordinateurs de plongée peuvent être lues et modifiées. Pour commencer,
|
|||||||
assurez vous que les pilotes pour votre ordinateur de plongée sont installés
|
assurez vous que les pilotes pour votre ordinateur de plongée sont installés
|
||||||
(également nécessaire pour télécharger les plongées) et que le nom de
|
(également nécessaire pour télécharger les plongées) et que le nom de
|
||||||
périphérique de l’ordinateur de plongée est connu. Voir
|
périphérique de l’ordinateur de plongée est connu. Voir
|
||||||
<a href="#appendix_a">ANNEXE A</a> pour plus d’informations sur la manière de procéder.</p></div>
|
<a href="#_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer">ANNEXE A</a> pour plus d’informations sur la manière de procéder.</p></div>
|
||||||
<div class="paragraph"><p>Une fois que l’ordinateur de plongée est connecté à <em>Subsurface</em>,
|
<div class="paragraph"><p>Une fois que l’ordinateur de plongée est connecté à <em>Subsurface</em>,
|
||||||
sélectionner <em>Fichier → Configurer l’ordinateur de plongée</em>, à partir du
|
sélectionner <em>Fichier → Configurer l’ordinateur de plongée</em>, à partir du
|
||||||
menu principal. Sélectionner le nom du périphérique (ou le point de montage)
|
menu principal. Sélectionner le nom du périphérique (ou le point de montage)
|
||||||
@ -4979,7 +5035,7 @@ L’utilisateur planifie des plongées dans les limites de sa certification.
|
|||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
La planification de plongée se base sur les caractéristiques d’une <em>personne
|
La planification de plongée se base sur les caractéristiques d’une <em>personne
|
||||||
normale</em> et ne peut compenser les caractéristiques physiologiques, l’état de
|
normale</em> et ne peut compenser les caractéristiques physiologiques, l'état de
|
||||||
santé, l’historique personnel et les caractéristiques du mode de vie.
|
santé, l’historique personnel et les caractéristiques du mode de vie.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
@ -5003,7 +5059,7 @@ Un utilisateur qui n’est pas absolument certain d’un des prérequis
|
|||||||
</ul></div>
|
</ul></div>
|
||||||
</div></div>
|
</div></div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_l_8217_écran_du_planificateur_de_plongée_em_subsurface_em">14.1. L’écran du planificateur de plongée <em>Subsurface</em></h3>
|
<h3 id="_l_écran_du_planificateur_de_plongée_em_subsurface_em">14.1. L'écran du planificateur de plongée <em>Subsurface</em></h3>
|
||||||
<div class="paragraph"><p>Like the <em>Subsurface</em> dive log, the planner screen is divided into several
|
<div class="paragraph"><p>Like the <em>Subsurface</em> dive log, the planner screen is divided into several
|
||||||
sections (see image below). The <strong>setup</strong> parameters for a dive are entered
|
sections (see image below). The <strong>setup</strong> parameters for a dive are entered
|
||||||
into the sections on the left hand and bottom side of the screen. They are:
|
into the sections on the left hand and bottom side of the screen. They are:
|
||||||
@ -6106,7 +6162,18 @@ The Edit option allows one to undo or redo an action, e.g. deleting dives.
|
|||||||
</ul></div>
|
</ul></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_aide">16.6. Aide</h3>
|
<h3 id="_share_on">16.6. Share on</h3>
|
||||||
|
<div class="ulist"><ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
<a href="#S_Facebook"><em>Facebook</em></a> - Partager la plongée sélectionnée sur votre
|
||||||
|
Facebook.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_aide">16.7. Aide</h3>
|
||||||
<div class="ulist"><ul>
|
<div class="ulist"><ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
@ -6138,7 +6205,7 @@ The Edit option allows one to undo or redo an action, e.g. deleting dives.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect1">
|
<div class="sect1">
|
||||||
<h2 id="appendix_a">17. ANNEXE A : informations spécifiques au système d’exploitation utilisé pour importer les informations de plongées depuis un ordinateur de plongée.</h2>
|
<h2 id="_annexe_a_informations_spécifiques_au_système_d_8217_exploitation_utilisé_pour_importer_les_informations_de_plongées_depuis_un_ordinateur_de_plongée">17. ANNEXE A : informations spécifiques au système d’exploitation utilisé pour importer les informations de plongées depuis un ordinateur de plongée.</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_assurez_vous_que_les_pilotes_drivers_nécessaires_sont_installés">17.1. Assurez-vous que les pilotes (drivers) nécessaires sont installés</h3>
|
<h3 id="_assurez_vous_que_les_pilotes_drivers_nécessaires_sont_installés">17.1. Assurez-vous que les pilotes (drivers) nécessaires sont installés</h3>
|
||||||
@ -6248,14 +6315,14 @@ ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver</code></pre>
|
|||||||
détecté et connecté sur <code>ttyUSB3</code>. Cette information peut à présent être
|
détecté et connecté sur <code>ttyUSB3</code>. Cette information peut à présent être
|
||||||
utilisée pour les paramètres d’importation en tant que <code>/dev/ttyUSB3</code> pour
|
utilisée pour les paramètres d’importation en tant que <code>/dev/ttyUSB3</code> pour
|
||||||
que Subsurface utilise le bon port USB.</p></div>
|
que Subsurface utilise le bon port USB.</p></div>
|
||||||
<div class="paragraph"><p>S’assurer que l’utilisateur possède les droits d’écriture sur le port série
|
<div class="paragraph"><p>S’assurer que l’utilisateur possède les droits d'écriture sur le port série
|
||||||
USB :</p></div>
|
USB :</p></div>
|
||||||
<div class="paragraph"><p>Sur les systèmes similaires à Unix, les ports USB ne peuvent être accédés
|
<div class="paragraph"><p>Sur les systèmes similaires à Unix, les ports USB ne peuvent être accédés
|
||||||
que par des utilisateurs membres d’un groupe spécial qui peut être <code>dialout</code>
|
que par des utilisateurs membres d’un groupe spécial qui peut être <code>dialout</code>
|
||||||
ou <code>uucp</code>. Cela peut être vérifié en listant les permissions associées au
|
ou <code>uucp</code>. Cela peut être vérifié en listant les permissions associées au
|
||||||
périphérique, par exemple via <code>ls - l /dev/ttyUSB0</code>. Notez que le numéro
|
périphérique, par exemple via <code>ls - l /dev/ttyUSB0</code>. Notez que le numéro
|
||||||
dans le nom de fichier dépend du nombre de périphériques USB que vous avez
|
dans le nom de fichier dépend du nombre de périphériques USB que vous avez
|
||||||
branchés et peut être ajusté au besoin.Si vous n’êtes pas root, vous n’êtes
|
branchés et peut être ajusté au besoin.Si vous n'êtes pas root, vous n'êtes
|
||||||
peut-être pas membre de ce groupe et ne pouvez donc pas utiliser le port
|
peut-être pas membre de ce groupe et ne pouvez donc pas utiliser le port
|
||||||
USB. Admettons que votre nom d’utilisateur soit <em>johnB</em>.</p></div>
|
USB. Admettons que votre nom d’utilisateur soit <em>johnB</em>.</p></div>
|
||||||
<div class="paragraph"><p>En tant que root, tapez : usermod -a -G dialout johnB+ (utilisateurs
|
<div class="paragraph"><p>En tant que root, tapez : usermod -a -G dialout johnB+ (utilisateurs
|
||||||
@ -7787,7 +7854,7 @@ salvaged after being overwritten by new dives.</p></div>
|
|||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated
|
Last updated
|
||||||
2024-02-08 08:51:28 PST
|
2018-11-05 09:24:27 CET
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -61,7 +61,7 @@ problème, vous pouvez envoyer un e-mail sur
|
|||||||
mailto:subsurface@subsurface-divelog.org[notre liste de diffusion] et
|
mailto:subsurface@subsurface-divelog.org[notre liste de diffusion] et
|
||||||
rapportez les bogues sur http://trac.hohndel.org[notre bugtracker]. Pour
|
rapportez les bogues sur http://trac.hohndel.org[notre bugtracker]. Pour
|
||||||
des instructions de compilation du logiciel et (si besoin) de ses
|
des instructions de compilation du logiciel et (si besoin) de ses
|
||||||
dépendances, merci de consulter le fichier INSTALL.md inclus dans les sources
|
dépendances, merci de consulter le fichier INSTALL inclus dans les sources
|
||||||
logicielles.
|
logicielles.
|
||||||
|
|
||||||
*Public* : Plongeurs loisirs, apnéistes, plongeurs Tek et plongeurs
|
*Public* : Plongeurs loisirs, apnéistes, plongeurs Tek et plongeurs
|
||||||
@ -365,7 +365,8 @@ cette communication, les utilisateurs doivent trouver l'information
|
|||||||
appropriée pour renseigner à _Subsurface_ d'où et comment importer les
|
appropriée pour renseigner à _Subsurface_ d'où et comment importer les
|
||||||
informations de
|
informations de
|
||||||
plongée.
|
plongée.
|
||||||
xref:appendix_a[Annexe A] donne les informations techniques pour aider l'utilisateur à configurer
|
xref:_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer[Annexe
|
||||||
|
A] donne les informations techniques pour aider l'utilisateur à configurer
|
||||||
ceci pour les différents systèmes d'exploitation et
|
ceci pour les différents systèmes d'exploitation et
|
||||||
xref:_appendix_b_dive_computer_specific_information_for_importing_dive_information[Annexe
|
xref:_appendix_b_dive_computer_specific_information_for_importing_dive_information[Annexe
|
||||||
B] contient des informations spécifiques à chaque ordinateur de plongée.
|
B] contient des informations spécifiques à chaque ordinateur de plongée.
|
||||||
@ -405,7 +406,8 @@ plongée (en tout cas pour ceux qui ne se rechargent pas via USB).
|
|||||||
- Le menu déroulant *Périphérique ou point de montage* le nom du port USB ou
|
- Le menu déroulant *Périphérique ou point de montage* le nom du port USB ou
|
||||||
Bluetooth dont _Subsurface_ a besoin pour communiquer avec l'ordinateur de
|
Bluetooth dont _Subsurface_ a besoin pour communiquer avec l'ordinateur de
|
||||||
plongée. Le port approprié doit être sélectionné. Consultez
|
plongée. Le port approprié doit être sélectionné. Consultez
|
||||||
xref:appendix_a[Annexe A] et
|
xref:_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer[Annexe
|
||||||
|
A] et
|
||||||
xref:_appendix_b_dive_computer_specific_information_for_importing_dive_information[Annexe
|
xref:_appendix_b_dive_computer_specific_information_for_importing_dive_information[Annexe
|
||||||
B] pour obtenir des détails techniques sur la façon de trouver des
|
B] pour obtenir des détails techniques sur la façon de trouver des
|
||||||
informations sur le port approprié à chaque ordinateur de plongée et, dans
|
informations sur le port approprié à chaque ordinateur de plongée et, dans
|
||||||
@ -491,12 +493,14 @@ Vérifiez les éléments suivants:
|
|||||||
sont-ils propres ?
|
sont-ils propres ?
|
||||||
|
|
||||||
- Consultez
|
- Consultez
|
||||||
xref:appendix_a[Annexe A] pour être certain que le point de montage correct a été spécifié (voir
|
xref:_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer[Annexe
|
||||||
|
A] pour être certain que le point de montage correct a été spécifié (voir
|
||||||
ci-dessus).
|
ci-dessus).
|
||||||
|
|
||||||
- Sur les systèmes d'exploitation de type Unix, l'utilisateur a-t-il les
|
- Sur les systèmes d'exploitation de type Unix, l'utilisateur a-t-il les
|
||||||
droits d'écriture sur le port USB? Si non, consultez
|
droits d'écriture sur le port USB? Si non, consultez
|
||||||
xref:appendix_a[Annexe A]
|
xref:_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer[Annexe
|
||||||
|
A]
|
||||||
|
|
||||||
Si l'ordinateur utilisant _Subsurface_ ne reconnaît pas l'adaptateur USB en
|
Si l'ordinateur utilisant _Subsurface_ ne reconnaît pas l'adaptateur USB en
|
||||||
ne montrant pas le bon nom de périphérique à côté du Point de montage, il
|
ne montrant pas le bon nom de périphérique à côté du Point de montage, il
|
||||||
@ -2303,8 +2307,8 @@ panel. These are:
|
|||||||
Affiche la *Profondeur maximale d'utilisation (MOD)* d'une plongée, en
|
Affiche la *Profondeur maximale d'utilisation (MOD)* d'une plongée, en
|
||||||
fonction du mélange gazeux utilisé. La MOD dépend de la concentration en
|
fonction du mélange gazeux utilisé. La MOD dépend de la concentration en
|
||||||
oxygène du gaz respiré. Pour l'air (21% d'oxygène), il vaut envuron 57m si
|
oxygène du gaz respiré. Pour l'air (21% d'oxygène), il vaut envuron 57m si
|
||||||
une pO~2~ maximale de 1.4 est choisie dans la section *Préférences*
|
une pO~2 maximale de 1.4 est choisie dans la section *Préférences*
|
||||||
(sélectionnez _Fichier -> Préférences -> Profil_ et éditez le champ _pO~2~
|
(sélectionnez _Fichier -> Préférences -> Profil_ et éditez le champ _pO~2
|
||||||
dans le calcul de MOD_). En plongeant sous la MOD, il y a un risque
|
dans le calcul de MOD_). En plongeant sous la MOD, il y a un risque
|
||||||
important d'exposition aux dangers liés à la toxicité de l'oxygène.
|
important d'exposition aux dangers liés à la toxicité de l'oxygène.
|
||||||
|
|
||||||
@ -2978,6 +2982,8 @@ those dives that have either one OR both of these tags.
|
|||||||
|
|
||||||
Il y a deux façons d'exporter des informations de plongée depuis Subsurface:
|
Il y a deux façons d'exporter des informations de plongée depuis Subsurface:
|
||||||
|
|
||||||
|
- Exporter les informations de plongée vers _Facebook_
|
||||||
|
|
||||||
- xref:S_Export_other[Exporter des informations de plongée vers d'autres
|
- xref:S_Export_other[Exporter des informations de plongée vers d'autres
|
||||||
destinations ou formats]
|
destinations ou formats]
|
||||||
|
|
||||||
@ -3299,7 +3305,8 @@ ces ordinateurs de plongée peuvent être lues et modifiées. Pour commencer,
|
|||||||
assurez vous que les pilotes pour votre ordinateur de plongée sont installés
|
assurez vous que les pilotes pour votre ordinateur de plongée sont installés
|
||||||
(également nécessaire pour télécharger les plongées) et que le nom de
|
(également nécessaire pour télécharger les plongées) et que le nom de
|
||||||
périphérique de l'ordinateur de plongée est connu. Voir
|
périphérique de l'ordinateur de plongée est connu. Voir
|
||||||
<<appendix_a,ANNEXE A>> pour plus d'informations sur la manière de procéder.
|
<<_appendix_a_operating_system_specific_information_for_importing_dive_information_from_a_dive_computer,
|
||||||
|
ANNEXE A>> pour plus d'informations sur la manière de procéder.
|
||||||
|
|
||||||
Une fois que l'ordinateur de plongée est connecté à _Subsurface_,
|
Une fois que l'ordinateur de plongée est connecté à _Subsurface_,
|
||||||
sélectionner _Fichier -> Configurer l'ordinateur de plongée_, à partir du
|
sélectionner _Fichier -> Configurer l'ordinateur de plongée_, à partir du
|
||||||
@ -4330,6 +4337,10 @@ des sections de ce manuel traitant des opérations relatives.
|
|||||||
- _Ordinateur suivant_ - Passer à l'ordinateur de plongée suivant.
|
- _Ordinateur suivant_ - Passer à l'ordinateur de plongée suivant.
|
||||||
- _Plein écran_ - Passer en mode plein écran.
|
- _Plein écran_ - Passer en mode plein écran.
|
||||||
|
|
||||||
|
=== Share on
|
||||||
|
- <<S_Facebook,_Facebook_>> - Partager la plongée sélectionnée sur votre
|
||||||
|
Facebook.
|
||||||
|
|
||||||
=== Aide
|
=== Aide
|
||||||
- _À propos de Subsurface_ - Affiche un panneau avec le numéro de version de
|
- _À propos de Subsurface_ - Affiche un panneau avec le numéro de version de
|
||||||
_Subsurface_ ainsi que les informations de licence.
|
_Subsurface_ ainsi que les informations de licence.
|
||||||
@ -4343,7 +4354,6 @@ des sections de ce manuel traitant des opérations relatives.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[appendix_a]]
|
|
||||||
== ANNEXE A : informations spécifiques au système d'exploitation utilisé pour importer les informations de plongées depuis un ordinateur de plongée.
|
== ANNEXE A : informations spécifiques au système d'exploitation utilisé pour importer les informations de plongées depuis un ordinateur de plongée.
|
||||||
|
|
||||||
=== Assurez-vous que les pilotes (drivers) nécessaires sont installés
|
=== Assurez-vous que les pilotes (drivers) nécessaires sont installés
|
||||||
@ -5291,7 +5301,7 @@ see thumbnails that represent individual videos, _Subsurface_ uses an
|
|||||||
external program calle _FFmpeg_. To create thumbnails for videos, do two
|
external program calle _FFmpeg_. To create thumbnails for videos, do two
|
||||||
things:
|
things:
|
||||||
|
|
||||||
1. Install _FFmpeg_ on the computer that runs _Subsurface_. The program can be
|
Install _FFmpeg_ on the computer that runs _Subsurface_. The program can be
|
||||||
downloaded from the FFmpeg web site:
|
downloaded from the FFmpeg web site:
|
||||||
https://www.ffmpeg.org/download.html. Most Linux distributions ship with an
|
https://www.ffmpeg.org/download.html. Most Linux distributions ship with an
|
||||||
_ffmpeg_ package and therefore do not need an additional download.
|
_ffmpeg_ package and therefore do not need an additional download.
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
<meta name="generator" content="AsciiDoc 10.1.2" />
|
<meta name="generator" content="AsciiDoc 8.6.10" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
/*
|
/*
|
||||||
@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
* { padding: 0; margin: 0; }
|
* { padding: 0; margin: 0; }
|
||||||
img { border: 0; margin: 15px; max-width:90% }
|
img { border: 0; }
|
||||||
|
|
||||||
/*** Layout ***/
|
/*** Layout ***/
|
||||||
|
|
||||||
@ -78,12 +78,12 @@ body { font-family: Verdana, sans-serif; }
|
|||||||
#footer { font-size: 0.8em; }
|
#footer { font-size: 0.8em; }
|
||||||
|
|
||||||
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
h2, h3, h4, h5, .title { font-family: Arial, sans-serif; }
|
||||||
h2 { font-size: 160%; }
|
h2 { font-size: 1.5em; }
|
||||||
.sectionbody { font-size: 0.85em; }
|
.sectionbody { font-size: 0.85em; }
|
||||||
.sectionbody .sectionbody { font-size: inherit; }
|
.sectionbody .sectionbody { font-size: inherit; }
|
||||||
h3 { font-size: 150%; } /* 1.35em */
|
h3 { font-size: 159%; } /* 1.35em */
|
||||||
h4 { font-size: 140%; } /* 1.2em */
|
h4 { font-size: 141%; } /* 1.2em */
|
||||||
h5 { font-size: 130%; } /* 1em */
|
h5 { font-size: 118%; } /* 1em */
|
||||||
.title { font-size: 106%; /* 0.9em */
|
.title { font-size: 106%; /* 0.9em */
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@ -514,9 +514,9 @@ moet installeren staat uitgelegd op <em>Downloaden</em> page on the
|
|||||||
<a href="https://subsurface-divelog.org/"><em>Subsurface</em> website</a>. Vragen over of problemen met
|
<a href="https://subsurface-divelog.org/"><em>Subsurface</em> website</a>. Vragen over of problemen met
|
||||||
het programma kunnen bij de ontwikkelaars gemeld worden via email op
|
het programma kunnen bij de ontwikkelaars gemeld worden via email op
|
||||||
<a href="mailto:subsurface@subsurface-divelog.org">onze mailinglijst</a>. Fouten kunnen
|
<a href="mailto:subsurface@subsurface-divelog.org">onze mailinglijst</a>. Fouten kunnen
|
||||||
ook gemeld worden op <a href="https://github.com/Subsurface/subsurface/issues">onze bugtracker</a>.
|
ook gemeld worden op <a href="https://github.com/Subsurface-divelog/subsurface/issues">onze bugtracker</a>.
|
||||||
Instructies hoe <em>Subsurface</em> zelf te compileren vanuit de broncode staan ook op
|
Instructies hoe <em>Subsurface</em> zelf te compileren vanuit de broncode staan ook op
|
||||||
onze website en in het INSTALL.md bestand in de broncode.</p></div>
|
onze website en in het INSTALL bestand in de broncode.</p></div>
|
||||||
<div class="paragraph"><p><strong>Doelgroep</strong>: Recreatieve duikers, Tec duikers, Apneu duikers,
|
<div class="paragraph"><p><strong>Doelgroep</strong>: Recreatieve duikers, Tec duikers, Apneu duikers,
|
||||||
Professionele duikers.</p></div>
|
Professionele duikers.</p></div>
|
||||||
<div id="toc">
|
<div id="toc">
|
||||||
@ -2119,7 +2119,7 @@ met een duik, en op deze manier zichtbaar zijn via het <em>Media</em> tabblad va
|
|||||||
het <strong>Notities</strong> paneel.</p></div>
|
het <strong>Notities</strong> paneel.</p></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="S_ViewMedia">5.5.2. Media bekijken</h4>
|
<h4 id="_media_bekijken">5.5.2. Media bekijken</h4>
|
||||||
<div class="sidebarblock">
|
<div class="sidebarblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="paragraph"><p><strong>Zorg ervoor dat thumbnails voor video kunnen worden gemaakt</strong></p></div>
|
<div class="paragraph"><p><strong>Zorg ervoor dat thumbnails voor video kunnen worden gemaakt</strong></p></div>
|
||||||
@ -3529,12 +3529,58 @@ grotduik met Bob).</p></div>
|
|||||||
<div class="ulist"><ul>
|
<div class="ulist"><ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
|
Exporteer duikinformatie naar <em>Facebook</em>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
<a href="#S_Export_other">Exporteer duikinformatie naar andere bestemmingen of formaten</a>
|
<a href="#S_Export_other">Exporteer duikinformatie naar andere bestemmingen of formaten</a>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="S_Export_other">8.1. Exporteer duikinformatie naar andere bestemmingen of formaten</h3>
|
<h3 id="S_Facebook">8.1. Exporteer duikinformatie naar <em>Facebook</em></h3>
|
||||||
|
<div class="paragraph"><p>Exporteren naar <em>Facebook</em> werkt op een andere manier dan andere vormen van
|
||||||
|
export, met name omdat er een verbinding met <em>Facebook</em> aanwezig moet zijn die
|
||||||
|
is ingelogd. Selecteer vanuit het hoofdmenu <em>Deel via → Facebook</em> (zie figuur
|
||||||
|
<strong>A</strong> hieronder). Een inlogscherm voor <em>Facebook</em> verschijnt (zie figuur
|
||||||
|
<strong>B</strong> hieronder), en log in bij <em>Facebook</em>.</p></div>
|
||||||
|
<div class="paragraph"><p>Het is eenvoudig te zien in het hoofdmenu of er een verbinding met <em>Facebook</em>
|
||||||
|
actief is. In het <em>Deel via</em> menu is de <em>Facebook knop</em> grijs en niet-selecteerbaar
|
||||||
|
als er geen verbinding is (figuur <strong>A</strong> hieronder).</p></div>
|
||||||
|
<div class="paragraph"><p>Eenmaal ingelogd op <em>Facebook</em> wordt er een paneel getoond met het bericht:
|
||||||
|
"Gebruik het <em>Deel via</em> menu om de verbinding van Subsurface met uw Facebook
|
||||||
|
account te sluiten.". Sluit dit paneel.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook1.jpg" alt="Figuur: Facebook login" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>Met de verbinding met <em>Facebook</em> geactiveerd is het overdragen van een duik naar
|
||||||
|
<em>Facebook</em> eenvoudig. Selecteer eerst de duik in de <strong>Duiklijst</strong>. Selecteer dan
|
||||||
|
uit het hoofdmenu <em>Deel via → Facebook</em>. Er verschijnt een dialoog, waarin
|
||||||
|
aangegeven kan worden welke informatie naast het duikprofiel, moet worden
|
||||||
|
overgedragen naar <em>Facebook</em> (zie figuur <strong>A</strong> hieronder).</p></div>
|
||||||
|
<div class="paragraph"><p>Om een duikprofiel naar <em>Facebook</em> te exporteren is de naam van een (foto) album
|
||||||
|
nodig. De keuzevakjes aan de linker zijde bepalen welke data uit het logboek
|
||||||
|
eveneens wordt geëxporteerd. Deze verschijnen in het tekst veld aan de rechter zijde,
|
||||||
|
welke verder handmatig kan worden aangepast. Nadat alles naar wens is ingevuld,
|
||||||
|
kan via de <em>OK</em> knop de feitelijke export worden gedaan. Als de export gereed is
|
||||||
|
volgt een bevestiging.</p></div>
|
||||||
|
<div class="paragraph"><p>Zowel het album als de geëxporteerde profiel (met annotaties) is in <em>Facebook</em> als
|
||||||
|
privé aangemerkt, en de rechten van de geëxporteerde data moeten dus handmatig
|
||||||
|
in <em>Facebook</em> worden gezet zoals gewenst.</p></div>
|
||||||
|
<div class="imageblock" style="text-align:center;">
|
||||||
|
<div class="content">
|
||||||
|
<img src="images/facebook2.jpg" alt="Figuur: Facebook data submission" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="paragraph"><p>De verbinding met <em>Facebook</em> kan nu worden afgesloten als dat gewenst is. Gebruik
|
||||||
|
hiervoor uit het hoofdmenu <em>Deel via → Verbinding verbreken met → Facebook</em> (
|
||||||
|
figuur <strong>B</strong> hierboven).</p></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="S_Export_other">8.2. Exporteer duikinformatie naar andere bestemmingen of formaten</h3>
|
||||||
<div class="paragraph"><p>Andere dan <em>Facebook</em> exports kunnen gevonden worden door in het hoofdmenu
|
<div class="paragraph"><p>Andere dan <em>Facebook</em> exports kunnen gevonden worden door in het hoofdmenu
|
||||||
<em>Bestand → Exporteren</em> te kiezen. De exporteer dialoog biedt de mogelijkheid
|
<em>Bestand → Exporteren</em> te kiezen. De exporteer dialoog biedt de mogelijkheid
|
||||||
om ALLE, of alleen de in de <strong>Duiklijst</strong> geselecteerde duiken, te exporteren. Kies
|
om ALLE, of alleen de in de <strong>Duiklijst</strong> geselecteerde duiken, te exporteren. Kies
|
||||||
@ -5438,7 +5484,17 @@ tegelijktijd.
|
|||||||
</ul></div>
|
</ul></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_help">16.6. Help</h3>
|
<h3 id="_deel_via">16.6. Deel via</h3>
|
||||||
|
<div class="ulist"><ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
<a href="#S_Facebook"><em>Facebook</em></a> - Deel de geselecteerde duik op de Facebook tijdslijn.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_help">16.7. Help</h3>
|
||||||
<div class="ulist"><ul>
|
<div class="ulist"><ul>
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
@ -7049,7 +7105,7 @@ alleen als deze nog niet zijn overschreven door nieuwere duiken.</p></div>
|
|||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated
|
Last updated
|
||||||
2024-02-08 08:55:00 PST
|
2018-09-19 08:04:33 PDT
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||