All new desgn and in app display of events

This commit is contained in:
Dorian Zedler 2018-12-30 20:58:52 +01:00
parent 51635fa7e2
commit 37b412d02f
96 changed files with 6088 additions and 2773 deletions

View file

@ -1,9 +1,21 @@
# Changelog # Changelog
Jegliche Veräderungen werden hier dokumentiert All notable changes to this project will be documented in this file.
## [Unveröffentlicht] The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [0.9.0 - 0.9.1] - ALPHA - 2018-12
### Geändert ### Geändert
- Auf der Anmelde Seite ist jetzt der gesamte Text auf deutsch - Komplett neues Design
- der Vertretungsplan wird jetzt innerhalb der App angezeigt
- Auf der Anmelde-Seite ist jetzt der gesamte Text auf deutsch
- Die fanny-Webseite wird jetzt nicht mehr innerhalb der App angezeigt
### Behoben
- Viele interne Verbesserungen, die zu besserer performance führen
### Hinzugefügt
- Jetzt kompatibel mit der neusten android API und IOS Geräten
## [0.04] - 2018-07-19 ## [0.04] - 2018-07-19
### Behoben ### Behoben
@ -30,6 +42,7 @@ Jegliche Veräderungen werden hier dokumentiert
### Geändert ### Geändert
- Die bisherige Fortschrittsanzeige durch eine kreisförmige erstezt - Die bisherige Fortschrittsanzeige durch eine kreisförmige erstezt
### Behoben ### Behoben
- Der Text beim Spieseplan wird nicht mehr abgeschnitten - Der Text beim Spieseplan wird nicht mehr abgeschnitten
- Beim Laden des Speiseplanes werden keine sehr großen oder kleinen Zahlen mehr angezeigt - Beim Laden des Speiseplanes werden keine sehr großen oder kleinen Zahlen mehr angezeigt
@ -52,12 +65,13 @@ ohne Internetverbindung gestertet und diese dann während die app lief wieder he
## [0.02] - 2018-06-22 ## [0.02] - 2018-06-22
### Hinzugefügt ### Hinzugefügt
- Fortschrittsanzeigr beim Herunterladen der pdfs - Fortschrittsanzeigr beim Herunterladen der pdfs
### Behoben ### Behoben
-Rechtschreibfehler auf der Startseite - Rechtschreibfehler auf der Startseite
## [0.01] - 2018-06-21 ## [0.01] - 2018-06-21
### Hinzugefügt ### Hinzugefügt
- Anzeigen des Vertretungsplanes - Anzeigen des Vertretungsplanes
- Anzeigen der Fanny-Webseite - Anzeigen der Fanny-Webseite
- Anmelden und angemeldet bleiben - Anmelden und angemeldet bleiben
- Abmelden - Abmelden

View file

@ -1,10 +1,8 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<manifest package="com.itsblue.flgvertretung" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.04" android:versionCode="7" android:installLocation="auto"> <manifest package="com.itsblue.flgvertretungtest" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.9.3" android:versionCode="12" android:installLocation="auto">
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="fannyapp" android:icon="@drawable/icon"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="fannyapp" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="fannyapp" android:screenOrientation="unspecified" android:launchMode="singleTop"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="com.itsblue.flgvertretung.MainActivity" android:label="fannyapp_alpha" android:screenOrientation="unspecified" android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
@ -62,13 +60,19 @@
--> -->
<meta-data android:name="android.app.extract_android_style" android:value="full"/> <meta-data android:name="android.app.extract_android_style" android:value="full"/>
<!-- extract android style --> <!-- extract android style -->
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
</provider>
</activity> </activity>
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices --> <!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
</application> </application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application. <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.

View file

@ -0,0 +1,58 @@
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
allprojects {
repositories {
jcenter()
}
}
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:25.3.1'
}
android {
/*******************************************************
* The following variables:
* - androidBuildToolsVersion,
* - androidCompileSdkVersion
* - qt5AndroidDir - holds the path to qt android files
* needed to build any Qt application
* on Android.
*
* are defined in gradle.properties file. This file is
* updated by QtCreator and androiddeployqt tools.
* Changing them manually might break the compilation!
*******************************************************/
compileSdkVersion androidCompileSdkVersion.toInteger()
buildToolsVersion androidBuildToolsVersion
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
res.srcDirs = [qt5AndroidDir + '/res', 'res']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
lintOptions {
abortOnError false
}
}

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>

View file

@ -0,0 +1,124 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtAndroidExtras module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
package com.itsblue.flgvertretung;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.app.Activity;
import java.lang.Runnable;
import android.content.Intent;
import java.io.File;
import android.net.Uri;
public class MainActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
private static MainActivity m_instance;
public MainActivity()
{
m_instance = this;
}
/*
private static NotificationManager m_notificationManager;
private static Notification.Builder m_builder;
private static NotificationClient m_instance;
public NotificationClient()
{
m_instance = this;
}
public static void notify(String s)
{
if (m_notificationManager == null) {
m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
m_builder = new Notification.Builder(m_instance);
m_builder.setSmallIcon(R.drawable.icon);
m_builder.setContentTitle("A message from Qt!");
}
m_builder.setContentText(s);
m_notificationManager.notify(1, m_builder.build());
}
*/
public static boolean openUrl(String url, String mime)
{
boolean ok = true;
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(url);
intent.setDataAndType(Uri.fromFile(file), "text/plain");
m_instance.startActivity(intent);
return ok;
/*
try
{
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if ( !mime.isEmpty() ) intent.setDataAndType(uri, mime);
m_instance.startActivity(intent);
}
catch (Exception e)
{ e.printStackTrace(); ok = false; }
return ok;
*/
}
}

View file

@ -1,4 +1,4 @@
QT += qml quick quickcontrols2 xml widgets webview QT += qml quick quickcontrols2 xml
CONFIG += c++11 CONFIG += c++11
# The following define makes your compiler emit warnings if you use # The following define makes your compiler emit warnings if you use
@ -16,20 +16,26 @@ TEMPLATE = app
TARGET = fannyapp TARGET = fannyapp
ICON = favicon.icns ICON = favicon.icns
RC_ICONS = favicon.ico RC_ICONS = shared/favicon.ico
SOURCES += \ SOURCES += \
source/serverconn.cpp \ sources/serverconn.cpp \
source/main.cpp \ sources/main.cpp \
source/appsettings.cpp sources/appsettings.cpp \
sources/foodplanmodel.cpp \
sources/eventmodel.cpp \
sources/filtermodel.cpp
HEADERS += \ HEADERS += \
headers/serverconn.h \ headers/serverconn.h \
headers/appsettings.h headers/appsettings.h \
headers/foodplanmodel.h \
headers/eventmodel.h \
headers/filtermodel.h
RESOURCES += \ RESOURCES += \
qml/qml.qrc \ shared/shared.qrc \
shared.qrc qml/qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model # Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = QML_IMPORT_PATH =
@ -43,10 +49,17 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target !isEmpty(target.path): INSTALLS += target
android { android {
QT += androidextras
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
} }
DISTFILES += \ DISTFILES += \
favicon.png \ favicon.png \
android-sources/AndroidManifest.xml android-sources/AndroidManifest.xml \
android-sources/src/com/itsblue/flgvertretung/MainActivity.java \
android-sources/res/drawable-hdpi/icon.png \
android-sources/res/drawable-ldpi/icon.png \
android-sources/res/drawable-mdpi/icon.png \
android-sources/res/xml/provider_paths.xml \
CHANGELOG.md

View file

@ -1,336 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.6.2, 2018-06-22T08:53:16. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{736334c7-59b9-42fb-bb64-0bbe827a8b2c}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.10.1 clang 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.10.1 clang 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5101.clang_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">2</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/Users/dorian/Documents/git/build-fannyapp-Desktop_Qt_5_10_1_clang_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/Users/dorian/Documents/git/build-fannyapp-Desktop_Qt_5_10_1_clang_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/Users/dorian/Documents/git/build-fannyapp-Desktop_Qt_5_10_1_clang_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment-Konfiguration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fannyapp</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/Users/dorian/Documents/git/fanny-app/fannyapp.pro</value>
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fannyapp.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/Users/dorian/Documents/git/build-fannyapp-Desktop_Qt_5_10_1_clang_64bit-Profile/fannyapp.app/Contents/MacOS</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">18</value>
</data>
<data>
<variable>Version</variable>
<value type="int">18</value>
</data>
</qtcreator>

View file

@ -1,882 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.6.1, 2018-06-21T17:56:13. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{a7af30b9-cb0f-45fd-9894-328c8b8b2887}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.10.1 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.10.1 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5101.win64_msvc2017_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Desktop_Qt_5_10_1_MSVC2017_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Desktop_Qt_5_10_1_MSVC2017_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Desktop_Qt_5_10_1_MSVC2017_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment-Konfiguration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fannyapp</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/Documents/Git/fanny-app/fannyapp.pro</value>
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fannyapp.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">D:/Documents/Git/build-fannyapp-Desktop_Qt_5_10_1_MSVC2017_64bit-Release</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.10.1 for UWP 32bit (MSVC 2017)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.10.1 for UWP 32bit (MSVC 2017)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5101.win64_msvc2017_winrt_x86_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Qt_5_10_1_for_UWP_32bit_MSVC_2017-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Qt_5_10_1_for_UWP_32bit_MSVC_2017-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Qt_5_10_1_for_UWP_32bit_MSVC_2017-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">windeployqt ausführen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">WinRt.BuildStep.Deploy</value>
<value type="QString" key="WinRt.BuildStep.Deploy.Arguments">--qmldir D:\Documents\Git\fanny-app</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">windeployqt ausführen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">WinRTAppxDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">App-Paket ausführen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">WinRt.WinRtRunConfiguration:D:/Documents/Git/fanny-app/fannyapp.pro</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="WinRtRunConfigurationArgumentsId"></value>
<value type="bool" key="WinRtRunConfigurationUninstallAfterStopId">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.2</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android für armeabi-v7a (GCC 4.9, Qt 5.10.1 for Android armv7)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android für armeabi-v7a (GCC 4.9, Qt 5.10.1 for Android armv7)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{944fd98d-a247-470d-994b-ce639c60daa2}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_10_1_for_Android_armv7-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
<value type="QString" key="BuildTargetSdk">android-27</value>
<value type="QString" key="KeystoreLocation"></value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
<value type="bool" key="UseMinistro">false</value>
<value type="bool" key="VerboseOutput">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_10_1_for_Android_armv7-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
<value type="QString" key="BuildTargetSdk">android-27</value>
<value type="QString" key="KeystoreLocation"></value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
<value type="bool" key="UseMinistro">false</value>
<value type="bool" key="VerboseOutput">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/Documents/Git/build-fannyapp-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_10_1_for_Android_armv7-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
<value type="QString" key="BuildTargetSdk">android-27</value>
<value type="QString" key="KeystoreLocation"></value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
<value type="bool" key="UseMinistro">false</value>
<value type="bool" key="VerboseOutput">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Erstellen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
<value type="QString">-w</value>
<value type="QString">-r</value>
</valuelist>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment auf Android-Gerät</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployQtStep</value>
<value type="bool" key="UninstallPreviousPackage">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment auf Android-Gerät</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployConfiguration2</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="Android.AmStartArgsKey"/>
<valuelist type="QVariantList" key="Android.PostFinishShellCmdListKey"/>
<valuelist type="QVariantList" key="Android.PreStartShellCmdListKey"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fannyapp</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">fannyapp</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:D:/Documents/Git/fanny-app/fannyapp.pro</value>
<value type="QString" key="QMakeProjectManager.QmakeAndroidRunConfiguration.ProFile">fannyapp.pro</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">3</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">18</value>
</data>
<data>
<variable>Version</variable>
<value type="int">18</value>
</data>
</qtcreator>

Binary file not shown.

View file

@ -1,8 +1,12 @@
#ifndef APPSETTINGS_H #ifndef APPSETTINGS_H
#define APPSETTINGS_H #define APPSETTINGS_H
#include <QFile>
#include <QObject> #include <QObject>
#include <QtDebug>
#include <QSettings> #include <QSettings>
#include <QJsonArray>
#include <QJsonDocument>
#include <QStandardPaths> #include <QStandardPaths>
class AppSettings : public QObject class AppSettings : public QObject
@ -15,7 +19,14 @@ public:
Q_INVOKABLE QString loadSetting(const QString &key); Q_INVOKABLE QString loadSetting(const QString &key);
Q_INVOKABLE void writeSetting(const QString &key, const QVariant &variant); Q_INVOKABLE void writeSetting(const QString &key, const QVariant &variant);
QList<QStringList> readFilters();
void writeFilters(QList<QStringList> list);
Q_INVOKABLE QStringList readFiltersQml();
Q_INVOKABLE void writeFiltersQml(QStringList);
QSettings *settingsManager; QSettings *settingsManager;
QFile * filtersFile;
signals: signals:

48
headers/eventmodel.h Normal file
View file

@ -0,0 +1,48 @@
#ifndef EVENTMODEL_H
#define EVENTMODEL_H
#include <QObject>
#include <QAbstractListModel>
#include "headers/serverconn.h"
class EventModel : public QAbstractListModel
{
Q_OBJECT
public:
EventModel(QObject *parent = nullptr);
~EventModel();
enum DayRole {
GradeRole = Qt::DisplayRole,
HourRole,
ReplaceRole,
SubjectRole,
RoomRole,
ToRole,
TextRole
};
Q_ENUM(DayRole)
int rowCount(const QModelIndex & = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE QStringList getHeader();
Q_INVOKABLE QVariantMap get(int row) const;
private:
struct Day {
QString grade;
QString hour;
QString replace;
QString subject;
QString room;
QString to;
QString text;
};
QList<Day> m_events;
};
#endif // EVENTMODEL_H

39
headers/filtermodel.h Normal file
View file

@ -0,0 +1,39 @@
#ifndef FILTERMODEL_H
#define FILTERMODEL_H
#include <QAbstractListModel>
#include <QtDebug>
#include "serverconn.h"
class FilterModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit FilterModel(QObject *parent = nullptr);
enum FilterRole {
GradeRole = Qt::DisplayRole,
ClassLetterRole,
RoleRole
};
Q_ENUM(FilterRole)
int rowCount(const QModelIndex & = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE QVariantMap get(int row) const;
Q_INVOKABLE void append(const QString &grade, const QString &classLetter, const QString &role);
Q_INVOKABLE void remove(int row);
private:
struct Filter {
QString grade;
QString classLetter;
QString role;
};
QList<Filter> m_filters;
};
#endif // FILTERMODEL_H

44
headers/foodplanmodel.h Normal file
View file

@ -0,0 +1,44 @@
#ifndef FOODPLANMODEL_H
#define FOODPLANMODEL_H
#include <QAbstractListModel>
#include <QtDebug>
#include "serverconn.h"
class FoodPlanModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit FoodPlanModel(QObject *parent = nullptr);
~FoodPlanModel();
enum DishRole {
CookteamRole = Qt::DisplayRole,
DateRole,
MainDishRole,
MainDishVegRole,
GarnishRole,
DessertRole
};
Q_ENUM(DishRole)
int rowCount(const QModelIndex & = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE QVariantMap get(int row) const;
private:
struct Dish {
QString cookteam;
QString date;
QString mainDish;
QString mainDishVeg;
QString garnish;
QString dessert;
};
QList<Dish> m_foodPlan;
};
#endif // FOODPLANMODEL_H

View file

@ -4,6 +4,9 @@
#include <QObject> #include <QObject>
#include <QDir> #include <QDir>
#include <QUrl> #include <QUrl>
#include <QtXml>
#include <QTimer>
#include <QtNetwork> #include <QtNetwork>
#include <QAuthenticator> #include <QAuthenticator>
#include <QDesktopServices> #include <QDesktopServices>
@ -11,6 +14,10 @@
#include "headers/appsettings.h" #include "headers/appsettings.h"
#ifdef Q_OS_ANDROID
#include <QtAndroidExtras>
#endif
typedef struct strReturnData{ typedef struct strReturnData{
int status_code; int status_code;
@ -20,44 +27,51 @@ typedef struct strReturnData{
class ServerConn : public QObject class ServerConn : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString state READ getState NOTIFY stateChanged)
public: private:
QString state;
// can be: loggedIn ; notLoggedIn
QString username; QString username;
QString password; QString password;
QNetworkAccessManager *networkManager; QNetworkAccessManager *networkManager;
QNetworkAccessManager *refreshNetworkManager; QNetworkAccessManager *refreshNetworkManager;
QTimer *checkConnTimer;
float progress; float progress;
int authErrorCount;
ReturnData_t senddata(QUrl serviceUrl, QUrlQuery postData);
private slots:
void updateProgress(qint64 read, qint64 total);
void setState(QString state);
public: public:
explicit ServerConn(QObject *parent = nullptr); explicit ServerConn(QObject *parent = nullptr);
~ServerConn(); ~ServerConn();
Q_INVOKABLE QString login(QString username, QString password, bool permanent);
public slots:
Q_INVOKABLE int login(QString username, QString password, bool permanent);
Q_INVOKABLE int logout(); Q_INVOKABLE int logout();
Q_INVOKABLE QString getDay(QString day); Q_INVOKABLE QString getDay(QString day);
Q_INVOKABLE int checkConn(); Q_INVOKABLE int checkConn();
Q_INVOKABLE float getProgress(); Q_INVOKABLE float getProgress();
Q_INVOKABLE int getFoodPlan(); Q_INVOKABLE int getFoodPlan();
Q_INVOKABLE QVariantMap getFoodPlanData(int index); Q_INVOKABLE int getEvents(QString day);
ReturnData_t senddata(QUrl serviceUrl, QUrlQuery postData);
Q_INVOKABLE QString getState();
signals: signals:
void stateChanged(QString newState);
public slots: public:
Q_INVOKABLE void updateProgress(qint64 read, qint64 total); QList<QList<QString>> m_weekplan;
QList<QStringList> m_events;
QStringList m_eventHeader;
private:
struct Day
{
QString Cookteam;
QString Date;
QString Main;
QString Main_veg;
QString Salad;
QString Dessert;
};
QList<QList<QString>> m_weekplan;
}; };
extern ServerConn * pGlobalServConn;
#endif // SERVERCONN_H #endif // SERVERCONN_H

View file

@ -1,69 +0,0 @@
import QtQuick 2.6
import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.1
ToolBar {
id: toolBar
property bool showErrorBar: true
Material.theme: Material.Light
Rectangle {
id: errorField
width: parent.width
height: 30
enabled: window.is_error & stackView.currentItem.objectName !== "LoginPage" & showErrorBar
anchors.top: parent.bottom
color: "red"
onEnabledChanged: {
if(enabled){
toolBar.state = 'moveIn'
}
else {
toolBar.state = 'moveOut'
}
}
MouseArea { anchors.fill: parent; onClicked: {
toolBar.state = 'moveOut'
console.log("clicked")
}
}
Text {
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
id: errorText
font.family: "Helvetica"
color: "White"
font.pointSize: 8
visible: parent.height !== 0
text: window.error
}
}
states: [
State {
name: "moveOut"
PropertyChanges { target: errorField; height: 0 }
},
State {
name: "moveIn"
PropertyChanges { target: errorField; height: 30 }
}
]
transitions: [
Transition {
to: "moveOut"
NumberAnimation { properties: "height"; easing.type: Easing.InOutQuad; duration: 200 }
},
Transition {
to: "moveIn"
NumberAnimation { properties: "height"; easing.type: Easing.InOutQuad; duration: 200 }
}
]
}

View file

@ -0,0 +1,92 @@
import QtQuick 2.6
import QtQuick.Controls 2.1
import QtGraphicalEffects 1.0
Item {
id: control
height: 50
property bool showErrorBar: true
RectangularGlow {
id: toolBarEffect
glowRadius: 3
spread: 0.2
color: "black"
opacity: 0.3
anchors.fill: toolBar
}
Rectangle {
id: toolBar
color: "white"
anchors.fill: parent
// anchors {
// top: parent.top
// left: parent.left
// right: parent.right
// topMargin: -60
// }
Rectangle {
id: errorField
width: parent.width
height: 30
enabled: app.is_error & app.state !== "notLoggedIn" & control.showErrorBar
anchors.top: parent.bottom
color: "red"
onEnabledChanged: {
if(enabled){
toolBar.state = 'moveIn'
}
else {
toolBar.state = 'moveOut'
}
}
MouseArea { anchors.fill: parent; onClicked: {
toolBar.state = 'moveOut'
console.log("clicked")
}
}
Text {
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
id: errorText
font.family: "Helvetica"
color: "White"
font.pointSize: 8
visible: parent.height !== 0
text: app.error
}
}
states: [
State {
name: "moveOut"
PropertyChanges { target: errorField; height: 0 }
},
State {
name: "moveIn"
PropertyChanges { target: errorField; height: 30 }
}
]
transitions: [
Transition {
to: "moveOut"
NumberAnimation { properties: "height"; easing.type: Easing.InOutQuad; duration: 200 }
},
Transition {
to: "moveIn"
NumberAnimation { properties: "height"; easing.type: Easing.InOutQuad; duration: 200 }
}
]
}
}

View file

@ -0,0 +1,79 @@
import Backend 1.0
import QtQuick 2.9
import QtQuick.Controls 2.4
FannyDataListView {
id: eventList
anchors.fill: parent
model: EventModel {
id: foodPlanModel
}
delegate: Button {
id: delegate
width: eventList.width
height: contentCol.height + 10
Column {
id: contentCol
anchors {
top: parent.top
left: parent.left
right: parent.right
margins: 10
}
height: childrenRect.height + 10
spacing: 1
Label {
id: gradeLa
// label for the grade
font.bold: true
font.pixelSize: hourReplaceSubjectRoomLa.font.pixelSize * 1.5
width: parent.width - 10
wrapMode: Label.Wrap
text: grade
}
Label {
id: hourReplaceSubjectRoomLa
// label for the hour, replacement, subject and room
width: parent.width - 10
wrapMode: Label.Wrap
text: hour + ( replace === "" ? "": ( " | "
+ replace + ( subject === "" ? "": ( " | "
+ subject + ( room === "" ? "": ( " | "
+ room ) ) ) ) ) )
}
Label {
id: toTextLa
// label for the new room (to) and the additional text (text)
width: parent.width - 10
wrapMode: Label.Wrap
font.pixelSize: gradeLa.font.pixelSize
font.bold: true
visible: text !== ""
text: to !== "" && model.text !== "" ? to + " | " + model.text:model.to + model.text
}
}
}
}

View file

@ -0,0 +1,107 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
import QtGraphicalEffects 1.0
Button {
id: control
property string image
property real imageScale: 1
background: Item {
id: controlBackgroundContainer
scale: control.pressed ? 0.8:1
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
RectangularGlow {
id: effect
glowRadius: 0.001
spread: 0.2
color: "black"
opacity: 1
cornerRadius: controlBackground.radius
anchors.fill: controlBackground
scale: 0.75
}
Rectangle {
id: controlBackground
anchors.fill: parent
radius: height * 0.5
Image {
id: buttonIcon
source: control.image
anchors.centerIn: parent
height: parent.height * 0.5
width: height
mipmap: true
fillMode: Image.PreserveAspectFit
scale: control.imageScale
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
}
}
/*
background: Image {
id: smorgenBackground
source: "qrc:/circle.png"
height: control.height
width: height
scale: control.pressed ? 0.8:1
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
mipmap: true
smooth: true
fillMode: Image.PreserveAspectFit
Image {
id: smorgenImage
source: control.image
anchors.centerIn: parent
height: parent.height * 0.5
width: height
mipmap: true
smooth: true
fillMode: Image.PreserveAspectFit
scale: control.imageScale
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
*/

View file

@ -0,0 +1,52 @@
import Backend 1.0
import QtQuick 2.9
import QtQuick.Controls 2.4
ListView {
id: control
property int status: -1
signal refresh()
anchors.fill: parent
anchors.margins: 10
anchors.rightMargin: 14
ScrollBar.vertical: ScrollBar {
parent: control.parent
anchors {
top: parent.top
right: parent.right
bottom: parent.bottom
margins: 10
rightMargin: 3
}
width: 8
active: true
}
onContentYChanged: {
if(contentY < -125){
control.refresh()
}
}
InfoArea {
id: infoArea
anchors {
left: parent.left
right: parent.right
top: parent.top
margins: app.landscape() ? parent.width * 0.4:parent.width * 0.3
topMargin: parent.height*( status === 901 ? 0.6:0.5) - height * 0.8
}
excludedCodes: [200, 902]
errorCode: control.status
}
}

View file

@ -0,0 +1,133 @@
import Backend 1.0
import QtQuick 2.9
import QtQuick.Controls 2.4
FannyDataListView {
id: foodList
anchors.fill: parent
model: FoodPlanModel {
id: foodPlanModel
}
delegate: Button {
id: delegate
width: foodList.width
height: contentCol.height + 10
Column {
id: contentCol
anchors {
top: parent.top
left: parent.left
right: parent.right
margins: 10
}
height: childrenRect.height + 10
spacing: 2
Label {
id: cookteamLa
// label for the cookteam
width: parent.width
wrapMode: Label.Wrap
font.bold: true
text: cookteam
}
Label {
id: dateLa
// label for the date
width: parent.width
wrapMode: Label.Wrap
font.bold: true
text: date
}
Rectangle {
width: parent.width
height: 2
color: "grey"
}
Label {
id: mainDishLa
// label for the main dish
width: parent.width
wrapMode: Label.Wrap
text: mainDish
}
Rectangle {
width: parent.width / 10
height: mainDishVegLa.text!=""? 1:0
color: "grey"
}
Label {
id: mainDishVegLa
// label for the vegetarian main dish
width: parent.width
height: text!=""? undefined:0
wrapMode: Label.Wrap
text: mainDishVeg
}
Rectangle {
width: parent.width / 10
height: garnishLa.text!=""? 1:0
color: "grey"
}
Label {
id: garnishLa
// label for the garnish
width: parent.width
height: text!=""? undefined:0
wrapMode: Label.Wrap
text: garnish
}
Rectangle {
width: parent.width / 10
height: dessertLa.text!=""? 1:0
color: "grey"
}
Label {
id: dessertLa
// label for the dessert
width: parent.width
height: text!=""? undefined:0
wrapMode: Label.Wrap
text: dessert
}
}
}
}

View file

@ -0,0 +1,80 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
Item {
id: infoArea
property int alertLevel: app.getErrorInfo(infoArea.errorCode)[0]
// 0 - ok
// 1 - info
// 2 - error
property int errorCode: -1
property var excludedCodes: []
visible: !(excludedCodes.indexOf(errorCode) >= 0)
height: childrenRect.height
Rectangle {
radius: height * 0.5
width: parent.width
height: width
color: "transparent"
border.width: 5
border.color: infoArea.alertLevel > 0 ? infoArea.alertLevel > 1 ? "red":"grey" : "green"
opacity: infoArea.errorCode !== 200 && infoArea.errorCode !== (-1) ? 1:0
Behavior on opacity {
NumberAnimation {
duration: 500
}
}
Label {
anchors.centerIn: parent
font.pixelSize: parent.height * 0.8
text: infoArea.alertLevel > 1 ? "!":"i"
color: infoArea.alertLevel > 0 ? infoArea.alertLevel > 1 ? "red":"grey" : "green"
}
Label {
id: errorShortDescription
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.bottom
margins: parent.height * 0.1
}
width: app.width * 0.8
wrapMode: Label.Wrap
horizontalAlignment: Label.AlignHCenter
font.pixelSize: errorLongDescription.font.pixelSize * 1.8
text: app.getErrorInfo(infoArea.errorCode)[1]
}
Label {
id: errorLongDescription
anchors {
horizontalCenter: parent.horizontalCenter
top: errorShortDescription.bottom
margins: parent.height * 0.1
}
width: app.width * 0.8
wrapMode: Label.Wrap
horizontalAlignment: Label.AlignHCenter
text: app.getErrorInfo(infoArea.errorCode)[2]
}
}
}

View file

@ -0,0 +1,65 @@
import QtQuick 2.0
import QtQuick.Controls 2.4
ItemDelegate {
id: control
property string title: ""
property string description: ""
property bool showForwardIcon: true
height: 10 + shortDescription.height + 2 + longDescription.height + 10
Label {
id: shortDescription
anchors {
top: parent.top
left: parent.left
margins: 10
}
font.pixelSize: longDescription.font.pixelSize * 1.4
text: control.title
}
Label {
id: longDescription
anchors {
top: shortDescription.bottom
topMargin: 2
left: parent.left
leftMargin: 10
}
width: parent.width * 0.85
wrapMode: Label.Wrap
text: control.description
}
Image {
id: forwardIcon
visible: control.showForwardIcon
anchors {
verticalCenter: parent.verticalCenter
right: parent.right
rightMargin: 10
}
height: parent.height * 0.4
rotation: 180
fillMode: Image.PreserveAspectFit
source: "/graphics/icons/backDark.png"
}
}

View file

@ -1,215 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtGraphicalEffects 1.0
Page {
id:root
//anchors.fill: parent
property bool cookplanChanged
title: qsTr("Speiseplan")
property string icon: "qrc:/graphics/TreffpunktFannyLogo.png"
property string link: "http://www.treffpunkt-fanny.de"
// Image{
// source: "qrc:/graphics/chat_background.jpg";
// height: parent.height
// width: parent.width
// fillMode: Image.Tile
// horizontalAlignment: Image.AlignLeft
// verticalAlignment: Image.AlignTop
// }
// LinearGradient {
// anchors.fill: parent
// start: Qt.point(0, 0)
// end: Qt.point(0, parent.height)
// gradient: Gradient {
// GradientStop { position: 0.0; color: "#4db2b3" }
// GradientStop { position: 1.0; color: "#8f4dae" }
// }
// }
Timer {
id: firstLoadTimer
interval: 1;
running: true
repeat: false
onTriggered: {
_cppServerConn.getFoodPlan()
cookplanChanged = true
}
}
ScrollView {
id:scroll
anchors.fill: parent
ListView {
id: listView
//width: 514
model: 8
spacing: 0
property var today: new Date
anchors {
right: parent.right
left: parent.left
top: parent.top
bottom: parent.bottom
leftMargin: 5
rightMargin: 5
topMargin: 3
}
delegate: Button {
//text: getText(index, "cookteam")
width: listView.width
id: delegate
height: visible ? cookteam.height + date.height + main_dish.height + main_dish_veg.height + garnish.height + dessert.height + spacer.height + cust_spacing*9 + 5:0
visible: listView.isDayVisible(index)
property int cust_spacing: 5
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: parent.top
anchors.topMargin: 10
font.bold: true
id: cookteam
text: _cppServerConn.getFoodPlanData(index).cookteam
width: parent.width - 10
wrapMode: Label.Wrap
height: text!=""? undefined:0
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: cookteam.bottom
font.bold: true
id: date
text: listView.getDateString(index)
width: parent.width - 10
wrapMode: Label.Wrap
}
Rectangle {
anchors.top: date.bottom
anchors.topMargin: cust_spacing
anchors.left: parent.left
anchors.leftMargin: 10
anchors.right: parent.right
anchors.rightMargin: 10
height: 2
color: "grey"
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: date.bottom
anchors.topMargin: cust_spacing * 2
width: parent.width - 10
wrapMode: Label.Wrap
id: main_dish
text: _cppServerConn.getFoodPlanData(index).main_dish
height: text!=""? undefined:0
}
Rectangle {
anchors.top: main_dish.bottom
anchors.topMargin: cust_spacing
anchors.left: parent.left
anchors.leftMargin: 10
width: parent.width / 10
height: main_dish_veg.text!=""? 1:0
color: "grey"
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: main_dish.bottom
anchors.topMargin: cust_spacing * 2
id: main_dish_veg
text: _cppServerConn.getFoodPlanData(index).main_dish_veg
width: parent.width - 10
wrapMode: Label.Wrap
height: text!=""? undefined:0
}
Rectangle {
anchors.top: main_dish_veg.bottom
anchors.topMargin: cust_spacing
anchors.left: parent.left
anchors.leftMargin: 10
width: parent.width / 10
height: garnish.text!=""? 1:0
color: "grey"
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: main_dish_veg.bottom
anchors.topMargin: cust_spacing * 2
id: garnish
text: _cppServerConn.getFoodPlanData(index).garnish
width: parent.width - 10
wrapMode: Label.Wrap
height: text!=""? undefined:0
}
Rectangle {
anchors.top: garnish.bottom
anchors.topMargin: cust_spacing
anchors.left: parent.left
anchors.leftMargin: 10
width: parent.width / 10
height: dessert.text!=""? 1:0
color: "grey"
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: garnish.bottom
anchors.topMargin: cust_spacing * 2
id: dessert
text: _cppServerConn.getFoodPlanData(index).dessert
width: parent.width - 10
wrapMode: Label.Wrap
height: text!=""? undefined:0
}
Label {
anchors.left: parent.left
anchors.leftMargin: 10
anchors.top: dessert.bottom
anchors.topMargin: cust_spacing
id: spacer
text: ""
}
}
function getDateString(index){
var date = _cppServerConn.getFoodPlanData(index).date
//console.log(date)
if(date.getDate() === today.getDate()){
return("Heute")
}
else if(date.getDate() === today.getDate() + 1 || (date.getDate() === 1 && date.getMonth() === today.getMonth() + 1)){
return("Morgen")
}
else {
return(Qt.formatDateTime(_cppServerConn.getFoodPlanData(index).date, "dddd, d.M.yy"))
}
}
function isDayVisible(index){
var date = _cppServerConn.getFoodPlanData(index).date
return( date.getDate() >= today.getDate() && date.getMonth() >= today.getMonth())
}
}
}
}

100
qml/Forms/EventForm.qml Normal file
View file

@ -0,0 +1,100 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtGraphicalEffects 1.0
import "../Components"
Page {
id: root
//anchors.fill: parent
property string day
title: qsTr("Vertretungsplan")
property string icon: "qrc:/graphics/FannyLogo_small.png"
property string link: "http://www.fanny-leicht.de/j34"
property int status: -1
signal opened()
onOpened: {
}
// Image{
// source: "qrc:/graphics/chat_background.jpg";
// height: parent.height
// width: parent.width
// fillMode: Image.Tile
// horizontalAlignment: Image.AlignLeft
// verticalAlignment: Image.AlignTop
// }
// LinearGradient {
// anchors.fill: parent
// start: Qt.point(0, 0)
// end: Qt.point(0, parent.height)
// gradient: Gradient {
// GradientStop { position: 0.0; color: "#4db2b3" }
// GradientStop { position: 1.0; color: "#8f4dae" }
// }
// }
Loader {
id: pageLoader
property string newSource: ""
onNewSourceChanged: {
oldItemAnimation.start()
}
anchors.fill: parent
source: "./LoadingForm.qml"
onSourceChanged: {
pageLoader.item.status = root.status
newItemAnimation.start()
}
NumberAnimation {
id: newItemAnimation
target: pageLoader.item
property: "opacity"
from: 0
to: 1
duration: 200
easing.type: Easing.InExpo
}
NumberAnimation {
id: oldItemAnimation
target: pageLoader.item
property: "opacity"
from: 1
to: 0
duration: 200
easing.type: Easing.InExpo
onRunningChanged: {
if(!running){
pageLoader.source = pageLoader.newSource
}
}
}
Connections {
target: pageLoader.item
onRefresh: {
pageLoader.newSource = "./LoadingForm.qml"
loadTimer.start()
}
}
}
Timer {
id: loadTimer
interval: 500
running: true
repeat: false
onTriggered: {
root.status = serverConn.getEvents(day)
pageLoader.newSource = "../Components/EventView.qml"
}
}
}

250
qml/Forms/FilterForm.qml Normal file
View file

@ -0,0 +1,250 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import Backend 1.0
import "../Components"
Page {
id: root
property bool teacherMode: _cppAppSettings.loadSetting("teacherMode") === "true"
title: "Vertretungsplan Filter"
signal opened()
onOpened: {
console.log("Filter Form opened")
}
Dialog {
id: filterDialog
signal finished(string grade, string classletter, string teacherShortcut)
property bool teacherMode: _cppAppSettings.loadSetting("teacherMode") === "true"
onFinished: {
if(_cppAppSettings.loadSetting("teacherMode") === "true"){
contactView.model.append(teacherShortcut, "", "t");
}
else {
if(parseInt(grade) > 10 || classletter === "alle"){
classletter = ""
}
contactView.model.append(grade, classletter, "s")
}
}
function createContact() {
form.grade.value = 5
form.classLetter.currentIndex = 0
form.teacherShortcut.text = ""
filterDialog.title = qsTr("Filter hinzufügen");
filterDialog.open();
}
x: ( parent.width - width ) / 2
y: ( parent.height - height ) / 2
focus: true
modal: true
title: qsTr("Add Contact")
standardButtons: Dialog.Ok | Dialog.Cancel
contentItem: GridLayout {
id: form
property alias grade: gradeSb
property alias classLetter: classLetterCb
property alias teacherShortcut: shortcutTf
property int minimumInputSize: 120
rows: 4
columns: 2
Label {
text: qsTr("Stufe")
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
visible: !filterDialog.teacherMode
}
SpinBox {
id: gradeSb
focus: true
Layout.fillWidth: true
Layout.minimumWidth: form.minimumInputSize
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
from: 5
to: 12
stepSize: 1
value: 5
visible: !filterDialog.teacherMode
}
Label {
text: qsTr("Klasse")
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
visible: !filterDialog.teacherMode
}
ComboBox {
id: classLetterCb
Layout.fillWidth: true
Layout.minimumWidth: form.minimumInputSize
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
model: ["a", "b", "c", "d", "e", "alle"]
enabled: gradeSb.value < 11
visible: !filterDialog.teacherMode
}
Label {
text: qsTr("Kürzel")
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
visible: filterDialog.teacherMode
}
TextField {
id: shortcutTf
focus: true
Layout.fillWidth: true
Layout.minimumWidth: form.minimumInputSize
Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
visible: filterDialog.teacherMode
}
}
onAccepted: finished(form.grade.value, form.classLetter.currentText, form.teacherShortcut.text)
}
ListView {
id: contactView
anchors.fill: parent
width: 320
height: 480
focus: true
delegate: ItemDelegate {
id: delegate
width: contactView.width
height: 0
Component.onCompleted: {
delegate.height = 50
}
text: grade + classLetter
font.pixelSize: height * 0.4
enabled: root.teacherMode ? role === "t":role === "s"
Rectangle {
anchors {
bottom: parent.bottom
left: parent.left
right: parent.right
}
height: 1
width: parent.width
color: "lightgrey"
}
Behavior on height {
NumberAnimation {
duration: 500
easing.type: Easing.InOutQuad
}
}
NumberAnimation {
id: deleteAnimation
target: delegate
property: "height"
duration: 500
from: delegate.height
to: 0
easing.type: Easing.InOutQuad
onRunningChanged: {
if(!running){
contactView.model.remove(index)
}
}
}
Button {
id: deleteButton
anchors {
right: parent.right
rightMargin: 10
verticalCenter: parent.verticalCenter
}
height: parent.height * 0.6
width: height
scale: pressed ? 0.8:1
onClicked: {
deleteAnimation.start()
}
background: Image {
source: "/graphics/icons/delete.png"
fillMode: Image.PreserveAspectFit
mipmap: true
}
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
model: FilterModel {
}
ScrollBar.vertical: ScrollBar { }
}
FancyButton {
highlighted: true
anchors {
margins: 10
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
imageScale: 0
height: 50
width: height
onClicked: {
filterDialog.createContact()
}
Label {
anchors.centerIn: parent
font.pixelSize: parent.height * 0.6
text: "+"
}
}
}

101
qml/Forms/FoodPlanForm.qml Normal file
View file

@ -0,0 +1,101 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
import QtGraphicalEffects 1.0
import "../Components"
Page {
id:root
//anchors.fill: parent
property bool cookplanChanged
title: qsTr("Speiseplan")
property string icon: "qrc:/graphics/images/TreffpunktFannyLogo.png"
property string link: "http://www.treffpunkt-fanny.de"
property int status: -1
signal opened()
onOpened: {
console.warn("foodplan opened")
}
// Image{
// source: "qrc:/graphics/chat_background.jpg";
// height: parent.height
// width: parent.width
// fillMode: Image.Tile
// horizontalAlignment: Image.AlignLeft
// verticalAlignment: Image.AlignTop
// }
// LinearGradient {
// anchors.fill: parent
// start: Qt.point(0, 0)
// end: Qt.point(0, parent.height)
// gradient: Gradient {
// GradientStop { position: 0.0; color: "#4db2b3" }
// GradientStop { position: 1.0; color: "#8f4dae" }
// }
// }
Loader {
id: pageLoader
property string newSource: ""
onNewSourceChanged: {
oldItemAnimation.start()
}
anchors.fill: parent
source: "./LoadingForm.qml"
onSourceChanged: {
pageLoader.item.status = root.status
newItemAnimation.start()
}
NumberAnimation {
id: newItemAnimation
target: pageLoader.item
property: "opacity"
from: 0
to: 1
duration: 200
easing.type: Easing.InExpo
}
NumberAnimation {
id: oldItemAnimation
target: pageLoader.item
property: "opacity"
from: 1
to: 0
duration: 200
easing.type: Easing.InExpo
onRunningChanged: {
if(!running){
pageLoader.source = pageLoader.newSource
}
}
}
Connections {
target: pageLoader.item
onRefresh: {
pageLoader.newSource = "./LoadingForm.qml"
loadTimer.start()
}
}
}
Timer {
id: loadTimer
interval: 500
running: true
repeat: false
onTriggered: {
root.status = serverConn.getFoodPlan()
pageLoader.newSource = "../Components/FoodPlanView.qml"
}
}
}

187
qml/Forms/HomeForm.qml Normal file
View file

@ -0,0 +1,187 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
import "../Components"
Page {
id: root
signal opened()
onOpened: {
console.log("Home Form opened")
}
Column {
id: mainMenu
spacing: buttonWidth * 0.1
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
property int buttonHeight: app.landscape() ? root.height * (0.5*0.8):buttonWidth
property int buttonWidth: app.landscape() ? buttonHeight:root.width * (0.5*0.8)
Row {
id: bigMenu
spacing: mainMenu.buttonWidth * 0.1
anchors.horizontalCenter: parent.horizontalCenter
FancyButton {
id: todayButton
image: "qrc:/graphics/sheute.png"
width: mainMenu.buttonWidth
height: mainMenu.buttonHeight
onClicked: {
eventConfirmationDialog.openDay( _cppAppSettings.loadSetting("teacherMode") === "true" ? "lheute":"sheute")
}
}
FancyButton {
id: tomorrowButton
image: "qrc:/graphics/smorgen.png"
width: mainMenu.buttonWidth
height: mainMenu.buttonHeight
onClicked: {
eventConfirmationDialog.openDay( _cppAppSettings.loadSetting("teacherMode") === "true" ? "lmorgen":"smorgen")
}
}
Dialog {
property string day
id: eventConfirmationDialog
modal: true
focus: true
title: "Bedingung"
x: (app.width - eventConfirmationDialog.width) / 2
y: (app.height - eventConfirmationDialog.height) / 2
parent: Overlay.overlay
width: Math.min(root.width, root.height) / 3 * 2
contentHeight: aboutColumn.height
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: {
formStack.eventDay = day
formStack.push(eventForm)
}
Column {
id: aboutColumn
spacing: 20
Label {
id: text
visible: true
width: eventConfirmationDialog.availableWidth
wrapMode: Label.Wrap
text: "Vertretungsplan, vertraulich, nur zum persönlichen Gebrauch, keine Speicherung!"
}
}
function openDay(day){
eventConfirmationDialog.day = day
eventConfirmationDialog.open()
}
}
}
Grid {
id: smallMenu
columns: app.landscape() ? 4:2
spacing: mainMenu.buttonWidth * 0.1
anchors.horizontalCenter: parent.horizontalCenter
property int buttonHeight: mainMenu.buttonHeight * 0.7
property int buttonWidth: mainMenu.buttonWidth * 0.7
FancyButton {
id: foodplanButton
image: "qrc:/graphics/images/TreffpunktFannyLogoDark.png"
width: smallMenu.buttonWidth
height: smallMenu.buttonHeight
onClicked: {
formStack.push(foodPlanForm)
}
}
FancyButton {
id: fannyButton
image: "qrc:/graphics/images/FannyLogoDark.jpg"
imageScale: 1.2
width: smallMenu.buttonWidth
height: smallMenu.buttonHeight
onClicked: {
Qt.openUrlExternally("http://www.fanny-leicht.de")
}
}
FancyButton {
id: settingsButton
image: "qrc:/graphics/icons/settingsBlack.png"
imageScale: 0.8
width: smallMenu.buttonWidth
height: smallMenu.buttonHeight
onClicked: {
formStack.push(settingsForm)
}
}
FancyButton {
id: logoutButton
image: "qrc:/graphics/icons/logoutRed.png"
imageScale: 0.8
width: smallMenu.buttonWidth
height: smallMenu.buttonHeight
onClicked: {
logoutConfirmationDialog.open()
}
Dialog {
id: logoutConfirmationDialog
x: (app.width - width) / 2
y: (app.height - height) / 2
parent: Overlay.overlay
modal: true
standardButtons: Dialog.Cancel | Dialog.Ok
Column {
spacing: 20
anchors.fill: parent
Label {
text: "Möchtest du dich wirklich abmelden?"
}
}
onAccepted: {
serverConn.logout()
app.state = "notLoggedIn"
}
}
}
}
}
}

14
qml/Forms/LoadingForm.qml Normal file
View file

@ -0,0 +1,14 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
Page {
id: root
signal refresh()
property int status: -1
BusyIndicator {
anchors.centerIn: parent
}
}

112
qml/Forms/SettingsForm.qml Normal file
View file

@ -0,0 +1,112 @@
import QtQuick 2.0
import QtQuick.Controls 2.4
import "../Components"
Page {
id: root
title: "Einstellungen"
signal opened()
onOpened: {
console.log("Settings Form opened")
var filters = _cppAppSettings.readFiltersQml()
}
Column {
id: settingsCol
anchors.fill: parent
SettingsDelegate {
width: parent.width
onClicked: {
formStack.push(filterForm)
}
title: "Filter"
description: "Wähle die Klassen(stufen) bzw. Lehrerkürzel aus, für die du den Vertretungsplan ansehen möchtest"
}
SwitchDelegate {
width: parent.width
height: 10 + shortDescription.height + 2 + longDescription.height + 10
checked: _cppAppSettings.loadSetting("teacherMode") === "true"
onCheckedChanged: {
_cppAppSettings.writeSetting("teacherMode", checked)
}
Label {
id: shortDescription
anchors {
top: parent.top
left: parent.left
margins: 10
}
font.pixelSize: longDescription.font.pixelSize * 1.4
text: "Lehrermodus"
}
Label {
id: longDescription
anchors {
top: shortDescription.bottom
topMargin: 2
left: parent.left
leftMargin: 10
}
width: parent.width * 0.9
wrapMode: Label.Wrap
text: "Lehrermodus aktivieren"
}
indicator: Rectangle {
property bool checked: parent.checked
property bool down: parent.down
property int set_height: parent.font.pixelSize * 1.4
implicitWidth: set_height * 1.84
implicitHeight: set_height
x: parent.width - width - parent.rightPadding
y: parent.height / 2 - height / 2
radius: implicitHeight * 0.5
color: parent.checked ? "#17a81a" : "transparent"
border.color: parent.checked ? "#17a81a" : "#cccccc"
Behavior on color{
ColorAnimation{
duration: 200
}
}
Rectangle {
x: parent.checked ? parent.width - width : 0
width: parent.height
height: parent.height
radius: height * 0.5
color: parent.down ? "#cccccc" : "#ffffff"
border.color: parent.checked ? (parent.down ? "#17a81a" : "#21be2b") : "#999999"
Behavior on x{
NumberAnimation {
property: "x"
duration: 200
easing.type: Easing.InOutQuad
}
}
}
}
}
}
}

View file

@ -1,206 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtGraphicalEffects 1.0
Page {
//anchors.fill: parent
title: qsTr("Vertretungsplan")
property string icon: "qrc:/graphics/FannyLogo_small.png"
property string link: "http://www.fanny-leicht.de/j34"
// Image{
// source: "qrc:/graphics/chat_background.jpg";
// height: parent.height
// width: parent.width
// fillMode: Image.Tile
// horizontalAlignment: Image.AlignLeft
// verticalAlignment: Image.AlignTop
// }
// LinearGradient {
// anchors.fill: parent
// start: Qt.point(0, 0)
// end: Qt.point(0, parent.height)
// gradient: Gradient {
// GradientStop { position: 0.0; color: "#4db2b3" }
// GradientStop { position: 1.0; color: "#8f4dae" }
// }
// }
Label {
id: laWelcome
text: "Hier kannst du dir den Vertretungsplan des Fannys anschauen"
font.pixelSize: 20
wrapMode: Label.Wrap
width: window.width / 1.2
color: window.text_color
anchors {
top: parent.top
topMargin: window.height / 8 - laWelcome.height / 2
horizontalCenter: parent.horizontalCenter
}
}
Button {
id:buttToday
enabled: window.is_error === false
anchors {
left: parent.left
leftMargin: (window.width / 4) - (buttToday.width / 2)
verticalCenter: parent.verticalCenter
}
onClicked: {
verificationDialog.day = "sheute"
verificationDialog.open()
}
onPressed: sheuteImage.scale = 0.9
onReleased: sheuteImage.scale = 1.0
background: Image {
id: sheuteImage
source: "qrc:/graphics/sheute.png"
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
Button {
id: buttTomorrow
enabled: window.is_error === false
anchors {
right: parent.right
rightMargin: (window.width / 4) - (buttTomorrow.width / 2)
verticalCenter: parent.verticalCenter
}
onClicked: {
verificationDialog.day = "smorgen"
verificationDialog.open()
}
onPressed: smorgenImage.scale = 0.9
onReleased: smorgenImage.scale = 1.0
background: Image {
id: smorgenImage
source: "qrc:/graphics/smorgen.png"
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
Rectangle {
id: buttonsDisabled
anchors.left: buttToday.left
anchors.right: buttTomorrow.right
anchors.top: buttToday.top
anchors.bottom: buttToday.bottom
color: "white"
opacity: 0.7
visible: window.is_error
}
Dialog {
property string day
id: verificationDialog
modal: true
focus: true
title: "Bedingung"
x: (window.width - width) / 2
y: window.height / 6
width: Math.min(window.width, window.height) / 3 * 2
contentHeight: aboutColumn.height
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: {
_cppServerConn.updateProgress(0,100)
busyDialog.open()
text.visible = false
var ret = _cppServerConn.getDay(day)
progressCircle.arcEnd = 36000
progress.text = "100%"
busyDialog.close()
text.visible = true
if(ret === "OK"){
return
}
else if(ret === "Ungültige Benutzerdaten."){
root.StackView.view.pop()
}
else {
error.text = ret
window.is_error = true
window.error = ret
error.visible = true
}
}
Column {
id: aboutColumn
spacing: 20
Label {
id: text
visible: true
width: verificationDialog.availableWidth
wrapMode: Label.Wrap
text: "Vertretungsplan, vertraulich, nur zum persönlichen Gebrauch, keine Speicherung!"
}
}
}
Dialog {
id: busyDialog
modal: true
closePolicy: "NoAutoClose"
focus: true
//title: "Please wait..."
x: (window.width - width) / 2
y: window.height / 6
//width: Math.min(window.width, window.height) / 3 * 2
height: contentHeight * 1.5
width: contentWidth * 1.5
contentHeight: progressCircle.height
contentWidth: progressCircle.width
ProgressCircle {
id: progressCircle
size: 50
lineWidth: 5
anchors.centerIn: parent
colorCircle: "#FF3333"
colorBackground: "#E6E6E6"
showBackground: true
arcBegin: 0
arcEnd: 0
Label {
id: progress
anchors.centerIn: parent
text: "0%"
}
Timer {
id: refreshTimer
interval: 1;
running: busyDialog.visible
repeat: true
onTriggered: {
var ret = _cppServerConn.getProgress()
progressCircle.arcEnd = 360 * ret * 1.2
progress.text = Math.round( ret * 100 ) + "%"
}
}
}
}
}

View file

@ -1,165 +0,0 @@
import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.2
Page {
id: root
//anchors.fill: parent
objectName: "LoginPage";
header: AppToolBar {
Label {
text: "Anmeldung"
anchors.centerIn: parent
color: "white"
}
}
Image {
id: bigLogo
source: "favicon.png"
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: window.height * 0.01
height: window.height * 0.2
fillMode: Image.PreserveAspectFit
}
Label {
id: infoText
text: "<html>Bitte melde dich mit den Anmeldedaten an, die du für den Vertretungsplan erhalten hast.
<a href='http://www.fanny-leicht.de/j34/index.php/aktuelles/vertretungsplan'>Weitere Informationen</a></html>"
wrapMode: Text.Wrap
onLinkActivated: {
Qt.openUrlExternally(link)
}
anchors {
top: bigLogo.bottom
left: parent.left
right: parent.right
leftMargin: window.width * 0.05
rightMargin: window.width * 0.05
}
}
ColumnLayout {
spacing: 40
width: parent.width
anchors.fill: parent
anchors.topMargin: bigLogo.height + infoText.height + window.height * 0.02
anchors.bottomMargin: window.height * 0.2
TextField {
id: tiuname
placeholderText: "Benutzername"
anchors.horizontalCenter: parent.horizontalCenter
Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked)
anchors.left: parent.left
anchors.margins: window.width * 0.05
}
TextField {
id: tipasswd
echoMode: TextInput.Password
placeholderText: "Passwort"
anchors.horizontalCenter: parent.horizontalCenter
Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked)
anchors.left: parent.left
anchors.margins: window.width * 0.05
}
CheckDelegate {
id: cBperm
text: qsTr("Angemeldet bleiben")
checked: true
anchors.horizontalCenter: parent.horizontalCenter
}
Button {
id: loginButton
objectName: "loginButton"
text: qsTr("Anmelden")
enabled: tiuname.length > 0 & tipasswd.length > 0
anchors.horizontalCenter: parent.horizontalCenter
anchors.left: parent.left
anchors.margins: window.width * 0.05
onClicked: login(tiuname.text, tipasswd.text, cBperm.checked)
}
Label {
id: laStatus
text: qsTr("")
font.pixelSize: 20
color: "red"
anchors.horizontalCenter: parent.horizontalCenter
}
}
function login(username, password, permanent){
Qt.inputMethod.hide();
busyDialog.open()
loginButton.enabled = false
loginButton.text = "Loggin in.."
console.log(username, password, permanent)
var ret = _cppServerConn.login(username, password, permanent);
busyDialog.close()
loginButton.enabled = true
loginButton.text = "Login"
if(ret === "OK"){
_cppAppSettings.writeSetting("init", 1);
window.is_error = false;
root.StackView.view.push("MainPage.qml")
}
else{
if(_cppAppSettings.loadSetting("permanent") === "1"){
tiuname.text = _cppAppSettings.loadSetting("username")
tipasswd.text = _cppAppSettings.loadSetting("password")
_cppAppSettings.writeSetting("permanent", "0")
_cppAppSettings.writeSetting("username", "")
_cppAppSettings.writeSetting("password", "")
}
laStatus.text = ret
}
//root.qmlSignal(tiuname.text, tipasswd.text)
}
Dialog {
id: busyDialog
modal: true
closePolicy: "NoAutoClose"
focus: true
title: "Please wait..."
x: (window.width - width) / 2
y: window.height / 6
width: Math.min(window.width, window.height) / 3 * 2
height: 150
contentHeight: aboutColumn.height
Column {
id: aboutColumn
spacing: 20
RowLayout {
width: parent.width
BusyIndicator {
id: busyIndicator
visible: true
x: 22
y: 38
}
Label {
width: busyDialog.availableWidth
text: "logging in..."
wrapMode: Label.Wrap
font.pixelSize: 12
}
}
}
}
}

View file

@ -1,244 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
Page {
id: root
objectName: "MainPage"
Shortcut {
sequences: ["Esc", "Back"]
enabled: stackView.depth > 1
onActivated: {
stackView.pop()
}
}
header: AppToolBar {
Button {
id:toolButton
enabled: window.is_error === false
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
leftMargin: parent.width *0.02
}
height: parent.height - parent.height * 0.5
width: height
onClicked: {
if (stackView.depth > 1) {
stackView.pop()
} else {
drawer.open()
}
}
onPressed: toolButton.scale = 0.9
onReleased: toolButton.scale = 1.0
background: Image {
source: stackView.depth > 1 ? "qrc:/graphics/icons/back.png" : "qrc:/graphics/icons/drawer.png"
height: parent.height
width: parent.width
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
Label {
text: stackView.currentItem.title
anchors {
verticalCenter: parent.verticalCenter
left: toolButton.right
leftMargin: parent.width * 0.02
}
font.bold: true
color: "white"
}
Image {
id: logo
source: stackView.currentItem.icon
anchors.right: parent.right
anchors.rightMargin: parent.width * 0.02
anchors.top: parent.top
height: parent.height
fillMode: Image.PreserveAspectFit
mipmap: true
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
MouseArea {
enabled: stackView.currentItem.link !== undefined && stackView.currentItem.objectName !== "WebsitePage"
anchors.fill: parent
onPressed: logo.scale = 0.9
onReleased: logo.scale = 1.0
onClicked: {
stackView.push("qrc:/WebsitePage.qml",{title: "Web", link: stackView.currentItem.link, icon: stackView.currentItem.icon})
}
}
}
}
Drawer {
id: drawer
width: window.width * 0.66
height: window.height
AppToolBar {
id: header
showErrorBar: false
anchors {
top: parent.top
left: parent.left
right: parent.right
}
Label {
text: "Menü"
anchors {
verticalCenter: parent.verticalCenter
left: parent.left
leftMargin: 17
}
font.bold: true
}
}
Column {
anchors {
top: header.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
ItemDelegate {
text: qsTr("Fanny Webseite")
width: parent.width
onClicked: {
stackView.push("qrc:/WebsitePage.qml",{title: "Fanny Webseite", link: "http://www.fanny-leicht.de/j34", icon: stackView.currentItem.icon})
drawer.close()
}
}
ItemDelegate {
text: qsTr("Speiseplan")
width: parent.width
onClicked: {
busyDialog.open()
var ret = _cppServerConn.getFoodPlan();
drawer.close()
busyDialog.close()
if(ret === 200 || _cppServerConn.getFoodPlanData(1).cookteam !== ""){
stackView.push("qrc:/FoodPlanForm.qml")
}
}
}
ItemDelegate {
Label {
text: "abmelden"
color: "red"
anchors {
verticalCenter: parent.verticalCenter
left: parent.left
leftMargin: 17
}
font.bold: true
}
width: parent.width
onClicked: {
confirmationDialog.open()
}
Dialog {
id: confirmationDialog
x: (window.width - width) / 2
y: (window.height - height) / 2
parent: ApplicationWindow.overlay
modal: true
standardButtons: Dialog.Cancel | Dialog.Ok
Column {
spacing: 20
anchors.fill: parent
Label {
text: "Möchtest du dich wirklich abmelden?"
}
}
onAccepted: {
_cppServerConn.logout()
drawer.close()
root.StackView.view.push("qrc:/LoginPage.qml")
}
}
}
}
}
StackView {
id: stackView
initialItem: "qrc:/HomeForm.qml"
anchors.fill: parent
}
Dialog {
id: busyDialog
modal: true
focus: true
//title: "Please wait..."
x: (window.width - width) / 2
y: window.height / 6
//width: Math.min(window.width, window.height) / 3 * 2
height: contentHeight * 1.5
width: contentWidth * 1.5
contentHeight: progressCircle.height
contentWidth: progressCircle.width
ProgressCircle {
id: progressCircle
size: 50
lineWidth: 5
anchors.centerIn: parent
colorCircle: "#FF3333"
colorBackground: "#E6E6E6"
showBackground: true
arcBegin: 0
arcEnd: 0
Label {
id: progress
anchors.centerIn: parent
text: "0%"
}
Timer {
id: refreshTimer
interval: 1;
running: busyDialog.visible
repeat: true
onTriggered: {
var ret = _cppServerConn.getProgress()
if(ret > 100 || ret < 0){
ret = 0
}
progress.text = Math.round( ret * 100 ) + "%"
progressCircle.arcEnd = 360 * ret
}
}
}
}
}

280
qml/Pages/LoginPage.qml Normal file
View file

@ -0,0 +1,280 @@
import QtQuick 2.11
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.2
import "../Components"
Page {
id: root
objectName: "LoginPage";
header: AppToolBar {
Label {
text: "Anmeldung"
anchors.centerIn: parent
color: "black"
}
}
Image {
id: bigLogo
source: "qrc:/favicon.png"
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: window.height * 0.01
height: window.height * 0.2
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
}
Label {
id: infoText
text: "<html>Bitte melde dich mit den Anmeldedaten an, die du für den Vertretungsplan erhalten hast.
<a href='http://www.fanny-leicht.de/j34/index.php/aktuelles/vertretungsplan'>Weitere Informationen</a></html>"
wrapMode: Text.Wrap
onLinkActivated: {
Qt.openUrlExternally(link)
}
anchors {
top: bigLogo.bottom
left: parent.left
right: parent.right
leftMargin: window.width * 0.05
rightMargin: window.width * 0.05
}
}
Column {
spacing: ( height - 100 ) * 0.1
anchors {
left: parent.left
right: parent.right
top: infoText.bottom
bottom: parent.bottom
topMargin: window.height * 0.02
bottomMargin: window.height * 0.2
}
TextField {
id: tiuname
placeholderText: "Benutzername"
Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked)
anchors {
left: parent.left
leftMargin: root.width * 0.05
right: parent.right
rightMargin: root.width * 0.05
}
}
TextField {
id: tipasswd
echoMode: passwordHideShow.state === "visible" ? TextInput.Normal:TextInput.Password
placeholderText: "Passwort"
Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked)
anchors {
left: parent.left
leftMargin: root.width * 0.05
right: parent.right
rightMargin: root.width * 0.05
}
MouseArea {
id: passwordHideShow
anchors {
top: parent.top
bottom: parent.bottom
right: parent.right
}
width: visibleIcon.width
onClicked: {
if(state === "visible"){
state = "invisible"
}
else {
state = "visible"
}
}
state: "invisible"
states: [
State {
name: "visible"
PropertyChanges {
target: visibleIcon
scale: 0
}
PropertyChanges {
target: invisibleIcon
scale: 1
}
},
State {
name: "invisible"
PropertyChanges {
target: visibleIcon
scale: 1
}
PropertyChanges {
target: invisibleIcon
scale: 0
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "scale,opacity"
easing.type: Easing.InOutQuad
duration: 200
}
}
]
Image {
id: visibleIcon
anchors {
top: parent.top
bottom: parent.bottom
right: parent.right
bottomMargin: parent.height * 0.2
topMargin: anchors.bottomMargin
}
fillMode: Image.PreserveAspectFit
smooth: true
mipmap: true
source: "qrc:/graphics/icons/view.png"
}
Image {
id: invisibleIcon
anchors {
top: parent.top
bottom: parent.bottom
right: parent.right
bottomMargin: parent.height * 0.25
topMargin: anchors.bottomMargin
}
fillMode: Image.PreserveAspectFit
smooth: true
mipmap: true
source: "qrc:/graphics/icons/hide.png"
}
}
}
CheckDelegate {
id: cBperm
text: qsTr("Angemeldet bleiben")
checked: true
anchors.horizontalCenter: parent.horizontalCenter
}
Button {
id: loginButton
objectName: "loginButton"
text: qsTr("Anmelden")
enabled: tiuname.length > 0 & tipasswd.length > 0
anchors.horizontalCenter: parent.horizontalCenter
anchors.left: parent.left
anchors.margins: window.width * 0.05
onClicked: login(tiuname.text, tipasswd.text, cBperm.checked)
}
Label {
id: laStatus
text: qsTr("")
font.pixelSize: 20
color: "red"
anchors.horizontalCenter: parent.horizontalCenter
}
}
function login(username, password, permanent){
// hide the keyboard
Qt.inputMethod.hide();
// open the busy dialog
busyDialog.open()
// disable the login button
loginButton.enabled = false
// change the text to "Anmelden.."
loginButton.text = "Anmelden.."
console.log(username, password, permanent)
// trigger the login fucntion of the cpp backend and store the return code
var ret = serverConn.login(username, password, permanent);
// the request has finished
// close the busy dialog
busyDialog.close()
// enable the button
loginButton.enabled = true
// change the text of the login button back to "Anmelden"
loginButton.text = "Anmelden"
// chekc if the login was successfull
if(ret === 200){
// if it was -> set the app to inited and set the state of the app to loggedIn
_cppAppSettings.writeSetting("init", 1);
app.is_error = false;
app.state = "loggedIn"
}
else{
// if it wasn't -> reset the stored credentinals
_cppAppSettings.writeSetting("permanent", "0")
_cppAppSettings.writeSetting("username", "")
_cppAppSettings.writeSetting("password", "")
// and set the error label to the error short description of the retuned error code
laStatus.text = app.getErrorInfo(ret)[1]
}
}
Dialog {
id: busyDialog
modal: true
closePolicy: "NoAutoClose"
focus: true
title: "Bitte warten..."
x: (app.width - width) / 2
y: (app.height - height) / 2
width: Math.min(window.width, window.height) / 3 * 2
height: 150
contentHeight: contentColumn.height
Column {
id: contentColumn
spacing: 20
RowLayout {
width: parent.width
BusyIndicator {
id: busyIndicator
visible: true
x: 22
y: 38
}
Label {
width: busyDialog.availableWidth
text: "Anmelden..."
wrapMode: Label.Wrap
font.pixelSize: 12
}
}
}
}
}

201
qml/Pages/MainPage.qml Normal file
View file

@ -0,0 +1,201 @@
import QtQuick 2.9
import QtQuick.Controls 2.4
import QtGraphicalEffects 1.0
import "../Components"
import "../Forms"
Page {
id: root
objectName: "MainPage"
Shortcut {
sequences: ["Esc", "Back"]
enabled: formStack.depth > 1
onActivated: {
formStack.pop()
}
}
StackView {
id: formStack
property var currPage
property string eventDay: ""
anchors {
top: toolBar.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
onCurrPageChanged: {
mainStack.replace(currPage)
}
onCurrentItemChanged: {
formStack.currentItem.opened()
}
initialItem: homeForm
Component {
id: homeForm
HomeForm {}
}
Component {
id: foodPlanForm
FoodPlanForm {}
}
Component {
id: eventForm
EventForm {
day: formStack.eventDay
}
}
Component {
id: settingsForm
SettingsForm {}
}
Component {
id: filterForm
FilterForm {}
}
popEnter: Transition {
XAnimator {
from: (formStack.mirrored ? -1 : 1) * -formStack.width
to: 0
duration: 500
easing.type: Easing.OutCubic
}
}
popExit: Transition {
XAnimator {
from: 0
to: (formStack.mirrored ? -1 : 1) * formStack.width
duration: 500
easing.type: Easing.OutCubic
}
}
pushEnter: Transition {
XAnimator {
from: (formStack.mirrored ? -1 : 1) * formStack.width
to: 0
duration: 500
easing.type: Easing.OutCubic
}
}
pushExit: Transition {
XAnimator {
from: 0
to: (formStack.mirrored ? -1 : 1) * -formStack.width
duration: 500
easing.type: Easing.OutCubic
}
}
}
AppToolBar {
id: toolBar
anchors {
top: parent.top
left: parent.left
right: parent.right
topMargin: -60
}
height: 50
Button {
id:toolButton
enabled: true
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
leftMargin: parent.width *0.02
}
height: parent.height - parent.height * 0.5
width: height
onClicked: {
if (formStack.depth > 1) {
formStack.pop()
} else {
drawer.open()
}
}
onPressed: toolButton.scale = 0.9
onReleased: toolButton.scale = 1.0
background: Image {
source: formStack.depth > 1 ? "qrc:/graphics/icons/backDark.png" : "qrc:/graphics/icons/drawer.png"
height: parent.height
width: parent.width
Behavior on scale {
PropertyAnimation {
duration: 100
}
}
}
}
Label {
text: getText()
anchors {
verticalCenter: parent.verticalCenter
left: toolButton.right
leftMargin: parent.width * 0.02
}
font.bold: true
color: "black"
function getText(){
var titleString = "";
for(var i=1; i<formStack.depth; i++){
if(i > 1){
titleString += " > "
}
titleString += formStack.get(i).title
}
return(titleString)
}
}
Behavior on anchors.topMargin {
NumberAnimation {
duration: 500
easing.type: Easing.OutCubic
}
}
states: [
State {
name: "closed"
when: formStack.depth === 1
PropertyChanges {
target: toolBar
anchors.topMargin: -60
}
},
State {
name: "open"
when: formStack.depth > 1
PropertyChanges {
target: toolBar
anchors.topMargin: 0
}
}
]
}
}

View file

@ -1,48 +0,0 @@
import QtQuick 2.9
import QtWebView 1.1
import QtQuick.Controls 2.2
import QtWebView 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
Page {
id:root
objectName: "WebsitePage";
title: qsTr("Fanny Webseite")
property string icon: "qrc:/graphics/FannyLogo_small.png"
property string link: "http://www.fanny-leicht.de/j34"
ProgressBar {
id: progress
width: parent.width
anchors {
top: parent.top
}
//z: Qt.platform.os === "android" ? -1 : 1
visible: webView.loadProgress < 100
value: webView.loadProgress === 100 ? 0 : webView.loadProgress / 100
}
WebView {
id: webView
Keys.onBackPressed: webView.goBack()
z: 0
anchors {
top: webView.loadProgress < 100 ? progress.bottom:parent.top
bottom: parent.bottom
left: parent.left
right: parent.right
}
url: link
onLoadingChanged: {
console.log(url)
if (loadRequest.errorString)
console.error(loadRequest.errorString);
}
}
}

View file

@ -1,133 +1,134 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import Backend 1.0
import "./Components"
import "./Forms"
import "./Pages"
ApplicationWindow { ApplicationWindow {
id: window id: window
visible: true visible: true
width: 540 width: 540
height: 960 height: 960
property bool is_error Item {
property string error id: app
property bool initdone: false
property bool firstinitdone: false
property string text_color: "black" //"#424753"
property string background_color: "white"
property string toolbar_color: "#312f38"
onBeforeRendering: {
if(!firstinitdone){
var isinit = _cppAppSettings.loadSetting("permanent")
console.log("getinit");
console.log(isinit);
if(isinit === "0"){
stackView.push("qrc:/LoginPage.qml", {});
}
}
firstinitdone = true
}
Timer {
//runs only one time at applictaion lauch
property bool finished: true
id: initTimer
interval: 1;
running: initdone === false
repeat: finished
onTriggered: {
finished = false
var init = _cppAppSettings.loadSetting("init")
var perm = _cppAppSettings.loadSetting("permanent")
console.log("checkoldlogin:", perm);
if(perm === "1"){
console.log("Perm")
var ret = _cppServerConn.login(_cppAppSettings.loadSetting("username"), _cppAppSettings.loadSetting("password"), true);
if(ret === "OK"){
initdone = true
_cppAppSettings.writeSetting("init", 1);
if(stackView.currentItem.objectName !== "MainPage"){
stackView.push("qrc:/MainPage.qml", {});
}
window.is_error = false;
}
else if(ret === "Keine Verbindung zum Server."){
handleError(0)
//initTimer.interval = 1000
finished = true
return
}
else {
ret = _cppServerConn.checkConn()
handleError(ret)
}
}
else {
initdone = false
if(stackView.currentItem.objectName !== "LoginPage"){
stackView.push("qrc:/LoginPage.qml")
}
}
finished = true
initdone = true
}
}
Timer {
id: refreshTimer
interval: 1000;
running: initdone && stackView.currentItem.objectName !== "LoginPage"
repeat: true
onTriggered: {
var ret = _cppServerConn.checkConn()
handleError(ret)
}
}
StackView {
id: stackView
initialItem: "MainPage.qml"
anchors.fill: parent anchors.fill: parent
}
function handleError(error_code){ property bool is_error
if(error_code === 200){ property string error
window.is_error = false;
window.error = ""; property string textColor: "black" // "#424753"
} property string backgroundColor: "white"
else if(error_code === 401){ property string toolbarColor: "#312f38"
console.warn("401")
_cppAppSettings.writeSetting("permanent", 0) state: "loggedIn"
_cppAppSettings.writeSetting("username", "")
_cppAppSettings.writeSetting("password", "") states: [
if(["LoginPage"].indexOf(stackView.currentItem.objectName) < 0){ State {
console.log("switching to login page") name: "notLoggedIn"
stackView.push("qrc:/LoginPage.qml"); PropertyChanges {
target: mainStack
currPage: loginPage
}
},
State {
name: "loggedIn"
PropertyChanges {
target: mainStack
currPage: mainPage
}
}
]
ServerConn {
id: serverConn
onStateChanged: {
app.state = newState
} }
window.is_error = true;
window.error = "Nicht angemeldet!!";
} }
else if(error_code === 500){
window.is_error = true; StackView {
window.error = "Interner Server Fehler!"; id: mainStack
property var currPage
anchors.fill: parent
onCurrPageChanged: {
mainStack.replace(currPage)
}
//initialItem: mainPage
Component {
id: loginPage
LoginPage {}
}
Component {
id: mainPage
MainPage {}
}
} }
else if(error_code === 0){
window.is_error = true; function getErrorInfo(errorCode) {
window.error = "Keine Verbindung zum Server!";
var infoLevel
// 0 - ok
// 1 - info
// 2 - error
var errorString
var errorDescription
switch(errorCode) {
case 0:
infoLevel = 2
errorString = "Keine Verbindung zum Server"
errorDescription = "Bitte überprüfe deine Internetverbindung und versuche es erneut."
break
case 401:
infoLevel = 2
errorString = "Ungültige Zugangsdaten"
errorDescription = "Der Server hat den Zugang verweigert, bitte überprüfe deine Zugangsdaten und versuche es erneut"
break
case 500:
infoLevel = 2
errorString = "Interner Server Fehler"
errorDescription = "Scheinbar kann der Server die Anfrage im Moment nicht verarbeiten, bitte versuche es später erneut."
break
case 900:
infoLevel = 2
errorString = "Interner Verarbeitungsfehler"
errorDescription = "Die Daten, die vom Server übertragen wurden, konnten nicht richtig verarbeitet werden, bitte versuche es später erneut."
break
case 901:
infoLevel = 1
errorString = "Keine Daten"
errorDescription = "Es liegen keine aktuellen Daten vor."
break
case 902:
infoLevel = 1
errorString = "Alte Daten"
errorDescription = "Es konnte keine Verbindung zum Server hergestellt werden, aber es sind noch alte Daten gespeichert."
break
default:
infoLevel = 2
errorString = "Unerwarteter Fehler ("+errorCode+")"
errorDescription = "Unbekannter Fehler bei der Verbindung mit dem Server."
}
return([infoLevel, errorString, errorDescription])
} }
else if(error_code === 404){
//the testcon function calls a non existent file to be fast, so no error here function landscape(){
window.is_error = false; return(app.width > app.height)
}
else if(error_code === 111){
window.is_error = true;
window.error = "Unbekannter interner Fehler!";
}
else {
window.is_error = true;
window.error = "Unbekannter Fehler! ("+error_code+")";
} }
} }
} }

View file

@ -1,13 +1,21 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>main.qml</file> <file>main.qml</file>
<file>HomeForm.qml</file> <file>Pages/LoginPage.qml</file>
<file>qtquickcontrols2.conf</file> <file>Components/AppToolBar.qml</file>
<file>LoginPage.qml</file> <file>Forms/FoodPlanForm.qml</file>
<file>MainPage.qml</file> <file>Components/ProgressCircle.qml</file>
<file>AppToolBar.qml</file> <file>Forms/EventForm.qml</file>
<file>WebsitePage.qml</file> <file>Pages/MainPage.qml</file>
<file>FoodPlanForm.qml</file> <file>Components/FancyButton.qml</file>
<file>ProgressCircle.qml</file> <file>Forms/HomeForm.qml</file>
<file>Components/FoodPlanView.qml</file>
<file>Forms/LoadingForm.qml</file>
<file>Components/EventView.qml</file>
<file>Components/InfoArea.qml</file>
<file>Forms/SettingsForm.qml</file>
<file>Forms/FilterForm.qml</file>
<file>Components/SettingsDelegate.qml</file>
<file>Components/FannyDataListView.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -1,9 +0,0 @@
; This file can be edited to change the style of the application
; Read "Qt Quick Controls 2 Configuration File" for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
[Controls]
Style=Material
[Material]
; Primary="#312f38"

View file

@ -1,23 +1,22 @@
<h1>Dies ist die offizielle entwicklungs - repo der Fanny-App</h1> # Dies ist die offizielle entwicklungs - repo der Fanny-App
<p>Die App bietet die Möglichkeit, komfortabel auf den Vertretungsplan des Fanny-Leicht-Gymnasiums in Stuttgart zuzugreifen.</p> Die App bietet die Möglichkeit, komfortabel auf den Vertretungsplan des Fanny-Leicht-Gymnasiums in Stuttgart zuzugreifen.
<h4>Funktionen</h4> ### Funktionen
<p>- Zugriff auf den Vertretungsplan</p> - Zugriff auf den Vertretungsplan
<p>- Anzeige des Speiseplanes des Treffpunkt Fanny</p> - Anzeige des Speiseplanes des Treffpunkt Fanny
<p>- Zugriff auf die Fanny-Webseite (www.fanny-leicht.de)
<h4>Geplante Funktionen</h4> ### Geplante Funktionen
<p>- Sortierung der Ereignsse pro Klasse</p> - Sortierung der Ereignsse pro Klasse
<h4>Weitere Informationen:</h4> ### Weitere Informationen:
<p>Wenn du eine Idee für eine neue Funktion hast, erstelle einfach eine issue (dafür musst du dich hier registrieren),<br> Wenn du eine Idee für eine neue Funktion hast, erstelle einfach eine issue (dafür musst du dich hier registrieren),
oder schreibe eine Mail an development@itsblue.de.</p> oder schreibe eine Mail an development@itsblue.de.
<p>Falls du dich gerne an diesem Projekt beteiligen würdest (als Programmier, Designer o.ä.),<br> Falls du dich gerne an diesem Projekt beteiligen würdest (als Programmier, Designer o.ä.),
schreibe bitte eine Mail an contact@itsblue.de, oder frag mich in der Schule.</p> schreibe bitte eine Mail an contact@itsblue.de, oder frag mich in der Schule.
<h5>Aktueller Status:</h5> #### Aktueller Status:
<p>Warte auf die Anpassung des Vertretungsplanes.</p> Warte auf die Anpassung des Vertretungsplanes.
<h4>Downloads:</h4> ### Downloads:
<p><a href="https://play.google.com/store/apps/details?id=com.itsblue.flgvertretung&amp;pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1" target="_blank"><img src="https://play.google.com/intl/en_us/badges/images/generic/de_badge_web_generic.png" alt="Jetzt bei Google Play" width="25%"/></a><p> <p><a href="https://play.google.com/store/apps/details?id=com.itsblue.flgvertretung&amp;pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1" target="_blank"><img src="https://play.google.com/intl/en_us/badges/images/generic/de_badge_web_generic.png" alt="Jetzt bei Google Play" width="25%"/></a><p>
<p>- <a href="https://git.itsblue.de/dorian/fanny-app/raw/master/release/mac%20OS/fannyapp.dmg">Mac OS</a></p> <p>- <a href="https://git.itsblue.de/dorian/fanny-app/raw/master/release/mac%20OS/fannyapp.dmg">Mac OS</a></p>
<p>- <a href="https://git.itsblue.de/dorian/fanny-app/raw/master/release/windows/fannyapp-setup.exe">Windows</a></p> <p>- <a href="https://git.itsblue.de/dorian/fanny-app/raw/master/release/windows/fannyapp-setup.exe">Windows</a></p>

Binary file not shown.

1
release/mac OS/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.DS_Store

View file

@ -1,14 +0,0 @@
<RCC>
<qresource prefix="/">
<file>favicon.png</file>
<file>graphics/sheute.png</file>
<file>graphics/smorgen.png</file>
<file>graphics/chat_background.jpg</file>
<file>graphics/FannyLogo.png</file>
<file>graphics/TreffpunktFannyLogo.png</file>
<file>graphics/icons/back.png</file>
<file>graphics/icons/drawer.png</file>
<file>graphics/icons/menu.png</file>
<file>graphics/FannyLogo_small.png</file>
</qresource>
</RCC>

BIN
shared/circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View file

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View file

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

BIN
shared/favicon.xcf Normal file

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

View file

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

View file

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

Before

Width:  |  Height:  |  Size: 126 B

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 158 B

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View file

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View file

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View file

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View file

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5 KiB

View file

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View file

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,485 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>Download File-html.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<br/>
<style type="text/css">
<!--
p {margin: 0; padding: 0;} .ft10{font-size:17px;font-family:Times;color:#000000;}
.ft11{font-size:16px;font-family:Times;color:#000000;}
.ft12{font-size:25px;font-family:Times;color:#000000;}
.ft13{font-size:14px;font-family:Times;color:#000000;}
.ft14{font-size:16px;font-family:Times;color:#000000;}
.ft15{font-size:16px;line-height:23px;font-family:Times;color:#000000;}
-->
</style>
</head>
<body bgcolor="#A0A0A0" vlink="blue" link="blue">
<div id="page1-div" style="position:relative;width:893px;height:1262px;">
<p style="position:absolute;top:10px;left:3px;white-space:nowrap" class="ft10"><b>D-70563&#160;FANNY-LEICHT-GYMN.</b></p>
<p style="position:absolute;top:32px;left:3px;white-space:nowrap" class="ft11">STUTTGART,&#160;F.-LEICHT-STR.&#160;13</p>
<p style="position:absolute;top:9px;left:332px;white-space:nowrap" class="ft15">Schuljahr&#160;2018/19&#160;-&#160;1.&#160;Halbjahr<br/>gültig&#160;ab&#160;10. September&#160;2018</p>
<p style="position:absolute;top:10px;left:708px;white-space:nowrap" class="ft10"><b>Untis&#160;2017</b></p>
<p style="position:absolute;top:32px;left:671px;white-space:nowrap" class="ft11">13.12.2018&#160;&#160;9:04</p>
<p style="position:absolute;top:64px;left:3px;white-space:nowrap" class="ft12"><b>Klasse&#160;&#160;13.12.&#160;/&#160;Donnerstag&#160;Woche-A</b></p>
<p style="position:absolute;top:111px;left:3px;white-space:nowrap" class="ft13">Ordnungsdienst: Klasse&#160;10a</p>
<p style="position:absolute;top:172px;left:3px;white-space:nowrap" class="ft11">Kl.</p>
<p style="position:absolute;top:172px;left:55px;white-space:nowrap" class="ft11">Std.</p>
<p style="position:absolute;top:172px;left:123px;white-space:nowrap" class="ft11">Vertr.&#160;Fach&#160;Rau&#160;nach</p>
<p style="position:absolute;top:172px;left:391px;white-space:nowrap" class="ft11">Vertretungs-Text</p>
<p style="position:absolute;top:194px;left:3px;white-space:nowrap" class="ft11">5b</p>
<p style="position:absolute;top:194px;left:55px;white-space:nowrap" class="ft11">1</p>
<p style="position:absolute;top:194px;left:123px;white-space:nowrap" class="ft14"><i>Hei</i></p>
<p style="position:absolute;top:194px;left:178px;white-space:nowrap" class="ft14"><i>D</i></p>
<p style="position:absolute;top:194px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:194px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:217px;left:3px;white-space:nowrap" class="ft11">5b</p>
<p style="position:absolute;top:217px;left:55px;white-space:nowrap" class="ft11">2</p>
<p style="position:absolute;top:217px;left:123px;white-space:nowrap" class="ft11">Fu</p>
<p style="position:absolute;top:217px;left:178px;white-space:nowrap" class="ft11">D</p>
<p style="position:absolute;top:217px;left:233px;white-space:nowrap" class="ft11">114</p>
<p style="position:absolute;top:217px;left:391px;white-space:nowrap" class="ft11">Hei&#160;/&#160;Aufgaben,&#160;Arbeitsheft!</p>
<p style="position:absolute;top:240px;left:3px;white-space:nowrap" class="ft11">5b</p>
<p style="position:absolute;top:240px;left:55px;white-space:nowrap" class="ft11">3</p>
<p style="position:absolute;top:240px;left:123px;white-space:nowrap" class="ft11">Oe</p>
<p style="position:absolute;top:240px;left:178px;white-space:nowrap" class="ft11">M</p>
<p style="position:absolute;top:240px;left:233px;white-space:nowrap" class="ft11">114</p>
<p style="position:absolute;top:240px;left:391px;white-space:nowrap" class="ft11">Ei&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:263px;left:3px;white-space:nowrap" class="ft11">5b</p>
<p style="position:absolute;top:263px;left:55px;white-space:nowrap" class="ft11">4</p>
<p style="position:absolute;top:263px;left:123px;white-space:nowrap" class="ft11">Rm</p>
<p style="position:absolute;top:263px;left:178px;white-space:nowrap" class="ft11">M</p>
<p style="position:absolute;top:263px;left:233px;white-space:nowrap" class="ft11">114</p>
<p style="position:absolute;top:263px;left:391px;white-space:nowrap" class="ft11">Ei&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:285px;left:3px;white-space:nowrap" class="ft11">6bc</p>
<p style="position:absolute;top:285px;left:55px;white-space:nowrap" class="ft11">5</p>
<p style="position:absolute;top:285px;left:123px;white-space:nowrap" class="ft11">Sf</p>
<p style="position:absolute;top:285px;left:178px;white-space:nowrap" class="ft11">EvR</p>
<p style="position:absolute;top:285px;left:233px;white-space:nowrap" class="ft11">321</p>
<p style="position:absolute;top:285px;left:391px;white-space:nowrap" class="ft11">&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:306px;left:3px;white-space:nowrap" class="ft11">6bc</p>
<p style="position:absolute;top:306px;left:55px;white-space:nowrap" class="ft11">5</p>
<p style="position:absolute;top:306px;left:123px;white-space:nowrap" class="ft11">Dk</p>
<p style="position:absolute;top:306px;left:178px;white-space:nowrap" class="ft11">KR</p>
<p style="position:absolute;top:306px;left:233px;white-space:nowrap" class="ft11">121</p>
<p style="position:absolute;top:306px;left:391px;white-space:nowrap" class="ft11">We&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:328px;left:3px;white-space:nowrap" class="ft11">6bc</p>
<p style="position:absolute;top:328px;left:55px;white-space:nowrap" class="ft11">6</p>
<p style="position:absolute;top:328px;left:123px;white-space:nowrap" class="ft14"><i></i></p>
<p style="position:absolute;top:328px;left:178px;white-space:nowrap" class="ft14"><i>EvR</i></p>
<p style="position:absolute;top:328px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:328px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:349px;left:3px;white-space:nowrap" class="ft11">6bc</p>
<p style="position:absolute;top:349px;left:55px;white-space:nowrap" class="ft11">6</p>
<p style="position:absolute;top:349px;left:123px;white-space:nowrap" class="ft14"><i>We</i></p>
<p style="position:absolute;top:349px;left:178px;white-space:nowrap" class="ft14"><i>KR</i></p>
<p style="position:absolute;top:349px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:349px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:372px;left:3px;white-space:nowrap" class="ft11">6d</p>
<p style="position:absolute;top:372px;left:55px;white-space:nowrap" class="ft11">6</p>
<p style="position:absolute;top:371px;left:123px;white-space:nowrap" class="ft14"><i>Ku</i></p>
<p style="position:absolute;top:371px;left:178px;white-space:nowrap" class="ft14"><i>Ek</i></p>
<p style="position:absolute;top:372px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:372px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:394px;left:3px;white-space:nowrap" class="ft11">7b</p>
<p style="position:absolute;top:394px;left:55px;white-space:nowrap" class="ft11">2</p>
<p style="position:absolute;top:394px;left:123px;white-space:nowrap" class="ft11">Ga</p>
<p style="position:absolute;top:394px;left:178px;white-space:nowrap" class="ft11">G</p>
<p style="position:absolute;top:394px;left:233px;white-space:nowrap" class="ft11">414</p>
<p style="position:absolute;top:394px;left:391px;white-space:nowrap" class="ft11">KA&#160;Fkr</p>
<p style="position:absolute;top:417px;left:3px;white-space:nowrap" class="ft11">7b</p>
<p style="position:absolute;top:417px;left:55px;white-space:nowrap" class="ft11">8</p>
<p style="position:absolute;top:417px;left:123px;white-space:nowrap" class="ft14"><i>Gg</i></p>
<p style="position:absolute;top:417px;left:178px;white-space:nowrap" class="ft14"><i>BK</i></p>
<p style="position:absolute;top:417px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:417px;left:275px;white-space:nowrap" class="ft11">Mi-12.12.&#160;/&#160;1</p>
<p style="position:absolute;top:440px;left:3px;white-space:nowrap" class="ft11">7b</p>
<p style="position:absolute;top:440px;left:55px;white-space:nowrap" class="ft11">9</p>
<p style="position:absolute;top:439px;left:123px;white-space:nowrap" class="ft14"><i>Gg</i></p>
<p style="position:absolute;top:439px;left:178px;white-space:nowrap" class="ft14"><i>BK</i></p>
<p style="position:absolute;top:440px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:440px;left:275px;white-space:nowrap" class="ft11">Mi-12.12.&#160;/&#160;2</p>
<p style="position:absolute;top:462px;left:3px;white-space:nowrap" class="ft11">7c</p>
<p style="position:absolute;top:462px;left:55px;white-space:nowrap" class="ft11">8&#160;-&#160;9</p>
<p style="position:absolute;top:462px;left:123px;white-space:nowrap" class="ft14"><i>Gw</i></p>
<p style="position:absolute;top:462px;left:178px;white-space:nowrap" class="ft14"><i>G</i></p>
<p style="position:absolute;top:462px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:462px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:485px;left:3px;white-space:nowrap" class="ft11">7d</p>
<p style="position:absolute;top:485px;left:55px;white-space:nowrap" class="ft11">1</p>
<p style="position:absolute;top:485px;left:123px;white-space:nowrap" class="ft14"><i>Ku</i></p>
<p style="position:absolute;top:485px;left:178px;white-space:nowrap" class="ft14"><i>D</i></p>
<p style="position:absolute;top:485px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:485px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:508px;left:3px;white-space:nowrap" class="ft11">7d</p>
<p style="position:absolute;top:508px;left:55px;white-space:nowrap" class="ft11">2</p>
<p style="position:absolute;top:508px;left:123px;white-space:nowrap" class="ft11">Oz</p>
<p style="position:absolute;top:508px;left:178px;white-space:nowrap" class="ft11">D</p>
<p style="position:absolute;top:508px;left:233px;white-space:nowrap" class="ft11">416</p>
<p style="position:absolute;top:508px;left:391px;white-space:nowrap" class="ft11">Ku&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:530px;left:3px;white-space:nowrap" class="ft11">8a</p>
<p style="position:absolute;top:530px;left:55px;white-space:nowrap" class="ft11">1&#160;-&#160;2</p>
<p style="position:absolute;top:530px;left:123px;white-space:nowrap" class="ft14"><i>Ei</i></p>
<p style="position:absolute;top:530px;left:178px;white-space:nowrap" class="ft14"><i>Ch</i></p>
<p style="position:absolute;top:530px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:530px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:530px;left:391px;white-space:nowrap" class="ft11">KEINE&#160;KA</p>
<p style="position:absolute;top:553px;left:3px;white-space:nowrap" class="ft11">9ac</p>
<p style="position:absolute;top:553px;left:55px;white-space:nowrap" class="ft11">8&#160;-&#160;9</p>
<p style="position:absolute;top:553px;left:123px;white-space:nowrap" class="ft14"><i>Lk</i></p>
<p style="position:absolute;top:553px;left:178px;white-space:nowrap" class="ft14"><i>SpJ</i></p>
<p style="position:absolute;top:553px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:553px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:576px;left:3px;white-space:nowrap" class="ft11">9c</p>
<p style="position:absolute;top:576px;left:55px;white-space:nowrap" class="ft11">1&#160;-&#160;2</p>
<p style="position:absolute;top:576px;left:123px;white-space:nowrap" class="ft11">Jw</p>
<p style="position:absolute;top:576px;left:178px;white-space:nowrap" class="ft11">Gk</p>
<p style="position:absolute;top:576px;left:233px;white-space:nowrap" class="ft11">322</p>
<p style="position:absolute;top:576px;left:391px;white-space:nowrap" class="ft11">Raum!</p>
<p style="position:absolute;top:599px;left:3px;white-space:nowrap" class="ft11">9c</p>
<p style="position:absolute;top:599px;left:55px;white-space:nowrap" class="ft11">3</p>
<p style="position:absolute;top:599px;left:123px;white-space:nowrap" class="ft11">Hf</p>
<p style="position:absolute;top:599px;left:178px;white-space:nowrap" class="ft11">D</p>
<p style="position:absolute;top:599px;left:233px;white-space:nowrap" class="ft11">220</p>
<p style="position:absolute;top:599px;left:391px;white-space:nowrap" class="ft11">Hei&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:621px;left:3px;white-space:nowrap" class="ft11">9c</p>
<p style="position:absolute;top:621px;left:55px;white-space:nowrap" class="ft11">4</p>
<p style="position:absolute;top:621px;left:123px;white-space:nowrap" class="ft11">Bkn</p>
<p style="position:absolute;top:621px;left:178px;white-space:nowrap" class="ft11">D</p>
<p style="position:absolute;top:621px;left:233px;white-space:nowrap" class="ft11">220</p>
<p style="position:absolute;top:621px;left:391px;white-space:nowrap" class="ft11">Hei&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:644px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:644px;left:55px;white-space:nowrap" class="ft11">1</p>
<p style="position:absolute;top:644px;left:123px;white-space:nowrap" class="ft14"><i>Rt</i></p>
<p style="position:absolute;top:644px;left:178px;white-space:nowrap" class="ft14"><i>Gk</i></p>
<p style="position:absolute;top:644px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:644px;left:275px;white-space:nowrap" class="ft11">Do-13.12.&#160;/&#160;3</p>
<p style="position:absolute;top:667px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:667px;left:55px;white-space:nowrap" class="ft11">2</p>
<p style="position:absolute;top:666px;left:123px;white-space:nowrap" class="ft14"><i>Rt</i></p>
<p style="position:absolute;top:666px;left:178px;white-space:nowrap" class="ft14"><i>Gk</i></p>
<p style="position:absolute;top:667px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:667px;left:275px;white-space:nowrap" class="ft11">Do-13.12.&#160;/&#160;4</p>
<p style="position:absolute;top:689px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:689px;left:55px;white-space:nowrap" class="ft11">3</p>
<p style="position:absolute;top:689px;left:123px;white-space:nowrap" class="ft11">Rt</p>
<p style="position:absolute;top:689px;left:178px;white-space:nowrap" class="ft11">Gk</p>
<p style="position:absolute;top:689px;left:233px;white-space:nowrap" class="ft11">218</p>
<p style="position:absolute;top:712px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:712px;left:55px;white-space:nowrap" class="ft11">4</p>
<p style="position:absolute;top:712px;left:123px;white-space:nowrap" class="ft11">Rt</p>
<p style="position:absolute;top:712px;left:178px;white-space:nowrap" class="ft11">Gk</p>
<p style="position:absolute;top:712px;left:233px;white-space:nowrap" class="ft11">218</p>
<p style="position:absolute;top:735px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:735px;left:55px;white-space:nowrap" class="ft11">5</p>
<p style="position:absolute;top:735px;left:123px;white-space:nowrap" class="ft11">Ni</p>
<p style="position:absolute;top:735px;left:178px;white-space:nowrap" class="ft11">BK</p>
<p style="position:absolute;top:735px;left:233px;white-space:nowrap" class="ft11">126</p>
<p style="position:absolute;top:757px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:757px;left:55px;white-space:nowrap" class="ft11">6</p>
<p style="position:absolute;top:757px;left:123px;white-space:nowrap" class="ft11">Ni</p>
<p style="position:absolute;top:757px;left:178px;white-space:nowrap" class="ft11">BK</p>
<p style="position:absolute;top:757px;left:233px;white-space:nowrap" class="ft11">126</p>
<p style="position:absolute;top:780px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:780px;left:55px;white-space:nowrap" class="ft11">8</p>
<p style="position:absolute;top:780px;left:123px;white-space:nowrap" class="ft14"><i>Ni</i></p>
<p style="position:absolute;top:780px;left:178px;white-space:nowrap" class="ft14"><i>BK</i></p>
<p style="position:absolute;top:780px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:780px;left:275px;white-space:nowrap" class="ft11">Do-13.12.&#160;/&#160;5</p>
<p style="position:absolute;top:803px;left:3px;white-space:nowrap" class="ft11">9d</p>
<p style="position:absolute;top:803px;left:55px;white-space:nowrap" class="ft11">9</p>
<p style="position:absolute;top:802px;left:123px;white-space:nowrap" class="ft14"><i>Ni</i></p>
<p style="position:absolute;top:802px;left:178px;white-space:nowrap" class="ft14"><i>BK</i></p>
<p style="position:absolute;top:803px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:803px;left:275px;white-space:nowrap" class="ft11">Do-13.12.&#160;/&#160;6</p>
<p style="position:absolute;top:825px;left:3px;white-space:nowrap" class="ft11">10b</p>
<p style="position:absolute;top:825px;left:55px;white-space:nowrap" class="ft11">10&#160;-&#160;11</p>
<p style="position:absolute;top:825px;left:123px;white-space:nowrap" class="ft14"><i>Fe</i></p>
<p style="position:absolute;top:825px;left:178px;white-space:nowrap" class="ft14"><i>Ph</i></p>
<p style="position:absolute;top:825px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:825px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:848px;left:3px;white-space:nowrap" class="ft11">11</p>
<p style="position:absolute;top:848px;left:55px;white-space:nowrap" class="ft11">3&#160;-&#160;4</p>
<p style="position:absolute;top:848px;left:123px;white-space:nowrap" class="ft14"><i>Ft</i></p>
<p style="position:absolute;top:848px;left:178px;white-space:nowrap" class="ft14"><i>g4</i></p>
<p style="position:absolute;top:848px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:848px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:871px;left:3px;white-space:nowrap" class="ft11">11</p>
<p style="position:absolute;top:871px;left:55px;white-space:nowrap" class="ft11">5</p>
<p style="position:absolute;top:870px;left:123px;white-space:nowrap" class="ft14"><i>Ei</i></p>
<p style="position:absolute;top:870px;left:178px;white-space:nowrap" class="ft14"><i>M1</i></p>
<p style="position:absolute;top:871px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:871px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:893px;left:3px;white-space:nowrap" class="ft11">11</p>
<p style="position:absolute;top:893px;left:55px;white-space:nowrap" class="ft11">7</p>
<p style="position:absolute;top:893px;left:123px;white-space:nowrap" class="ft11">Gt</p>
<p style="position:absolute;top:893px;left:178px;white-space:nowrap" class="ft11">sem1&#160;324</p>
<p style="position:absolute;top:893px;left:391px;white-space:nowrap" class="ft11">geteilte&#160;Gruppen&#160;Schwimmen&#160;/&#160;</p>
<p style="position:absolute;top:916px;left:3px;white-space:nowrap" class="ft11">11</p>
<p style="position:absolute;top:916px;left:55px;white-space:nowrap" class="ft11">8&#160;-&#160;9</p>
<p style="position:absolute;top:916px;left:123px;white-space:nowrap" class="ft11">Ro</p>
<p style="position:absolute;top:916px;left:178px;white-space:nowrap" class="ft11">sem1&#160;???</p>
<p style="position:absolute;top:939px;left:3px;white-space:nowrap" class="ft11">11</p>
<p style="position:absolute;top:939px;left:55px;white-space:nowrap" class="ft11">10&#160;-&#160;11</p>
<p style="position:absolute;top:939px;left:123px;white-space:nowrap" class="ft14"><i>Lk</i></p>
<p style="position:absolute;top:939px;left:178px;white-space:nowrap" class="ft14"><i>sp3</i></p>
<p style="position:absolute;top:939px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:939px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:962px;left:3px;white-space:nowrap" class="ft11">12</p>
<p style="position:absolute;top:962px;left:55px;white-space:nowrap" class="ft11">1&#160;-&#160;2</p>
<p style="position:absolute;top:962px;left:123px;white-space:nowrap" class="ft11">Ni</p>
<p style="position:absolute;top:962px;left:178px;white-space:nowrap" class="ft11">bk1</p>
<p style="position:absolute;top:962px;left:233px;white-space:nowrap" class="ft11">412</p>
<p style="position:absolute;top:962px;left:391px;white-space:nowrap" class="ft11">Raum!</p>
<p style="position:absolute;top:984px;left:3px;white-space:nowrap" class="ft11">12</p>
<p style="position:absolute;top:984px;left:55px;white-space:nowrap" class="ft11">5</p>
<p style="position:absolute;top:984px;left:123px;white-space:nowrap" class="ft14"><i>Ku</i></p>
<p style="position:absolute;top:984px;left:178px;white-space:nowrap" class="ft14"><i>D2</i></p>
<p style="position:absolute;top:984px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:984px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
<p style="position:absolute;top:1007px;left:3px;white-space:nowrap" class="ft11">1112&#160;8&#160;-&#160;9</p>
<p style="position:absolute;top:1007px;left:123px;white-space:nowrap" class="ft14"><i>Fe</i></p>
<p style="position:absolute;top:1007px;left:178px;white-space:nowrap" class="ft14"><i>vma</i></p>
<p style="position:absolute;top:1007px;left:233px;white-space:nowrap" class="ft11">---</p>
<p style="position:absolute;top:1007px;left:275px;white-space:nowrap" class="ft11">Entfall</p>
</div>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>Download File-html.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<br/>
<style type="text/css">
<!--
p {margin: 0; padding: 0;} .ft20{font-size:17px;font-family:Times;color:#000000;}
.ft21{font-size:16px;font-family:Times;color:#000000;}
.ft22{font-size:25px;font-family:Times;color:#000000;}
.ft23{font-size:14px;font-family:Times;color:#000000;}
.ft24{font-size:16px;font-family:Times;color:#000000;}
.ft25{font-size:16px;line-height:23px;font-family:Times;color:#000000;}
-->
</style>
</head>
<body bgcolor="#A0A0A0" vlink="blue" link="blue">
<div id="page2-div" style="position:relative;width:893px;height:1262px;">
<p style="position:absolute;top:10px;left:3px;white-space:nowrap" class="ft20"><b>D-70563&#160;FANNY-LEICHT-GYMN.</b></p>
<p style="position:absolute;top:32px;left:3px;white-space:nowrap" class="ft21">STUTTGART,&#160;F.-LEICHT-STR.&#160;13</p>
<p style="position:absolute;top:9px;left:332px;white-space:nowrap" class="ft25">Schuljahr&#160;2018/19&#160;-&#160;1.&#160;Halbjahr<br/>gültig&#160;ab&#160;10. September&#160;2018</p>
<p style="position:absolute;top:10px;left:708px;white-space:nowrap" class="ft20"><b>Untis&#160;2017</b></p>
<p style="position:absolute;top:32px;left:671px;white-space:nowrap" class="ft21">13.12.2018&#160;&#160;8:11</p>
<p style="position:absolute;top:64px;left:3px;white-space:nowrap" class="ft22"><b>Klasse&#160;&#160;14.12.&#160;/&#160;Freitag&#160;Woche-A</b></p>
<p style="position:absolute;top:111px;left:3px;white-space:nowrap" class="ft23">Ordnungsdienst: Klasse&#160;10a</p>
<p style="position:absolute;top:172px;left:3px;white-space:nowrap" class="ft21">Kl.</p>
<p style="position:absolute;top:172px;left:55px;white-space:nowrap" class="ft21">Std.&#160;Vertr.&#160;Fach&#160;Rau&#160;nach</p>
<p style="position:absolute;top:172px;left:398px;white-space:nowrap" class="ft21">Vertretungs-Text</p>
<p style="position:absolute;top:194px;left:3px;white-space:nowrap" class="ft21">5abc&#160;1</p>
<p style="position:absolute;top:194px;left:102px;white-space:nowrap" class="ft24"><i>We</i></p>
<p style="position:absolute;top:194px;left:157px;white-space:nowrap" class="ft24"><i>KR</i></p>
<p style="position:absolute;top:194px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:194px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:215px;left:3px;white-space:nowrap" class="ft21">5a</p>
<p style="position:absolute;top:215px;left:55px;white-space:nowrap" class="ft21">1</p>
<p style="position:absolute;top:215px;left:102px;white-space:nowrap" class="ft24"><i></i></p>
<p style="position:absolute;top:215px;left:157px;white-space:nowrap" class="ft24"><i>EvR</i></p>
<p style="position:absolute;top:215px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:215px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:238px;left:3px;white-space:nowrap" class="ft21">5abc&#160;2</p>
<p style="position:absolute;top:238px;left:102px;white-space:nowrap" class="ft21">Jw</p>
<p style="position:absolute;top:238px;left:157px;white-space:nowrap" class="ft21">KR</p>
<p style="position:absolute;top:238px;left:209px;white-space:nowrap" class="ft21">123</p>
<p style="position:absolute;top:238px;left:398px;white-space:nowrap" class="ft21">We&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:258px;left:3px;white-space:nowrap" class="ft21">5a</p>
<p style="position:absolute;top:258px;left:55px;white-space:nowrap" class="ft21">2</p>
<p style="position:absolute;top:258px;left:102px;white-space:nowrap" class="ft21">Ng</p>
<p style="position:absolute;top:258px;left:157px;white-space:nowrap" class="ft21">EvR</p>
<p style="position:absolute;top:258px;left:209px;white-space:nowrap" class="ft21">321</p>
<p style="position:absolute;top:258px;left:398px;white-space:nowrap" class="ft21">&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:281px;left:3px;white-space:nowrap" class="ft21">5d</p>
<p style="position:absolute;top:281px;left:55px;white-space:nowrap" class="ft21">3</p>
<p style="position:absolute;top:281px;left:102px;white-space:nowrap" class="ft21">Lo</p>
<p style="position:absolute;top:281px;left:157px;white-space:nowrap" class="ft21">D</p>
<p style="position:absolute;top:281px;left:209px;white-space:nowrap" class="ft21">122</p>
<p style="position:absolute;top:281px;left:398px;white-space:nowrap" class="ft21">anstatt&#160;17.12.,&#160;1.&#160;Std.</p>
<p style="position:absolute;top:304px;left:3px;white-space:nowrap" class="ft21">5d</p>
<p style="position:absolute;top:304px;left:55px;white-space:nowrap" class="ft21">4</p>
<p style="position:absolute;top:304px;left:102px;white-space:nowrap" class="ft21">Lo</p>
<p style="position:absolute;top:304px;left:157px;white-space:nowrap" class="ft21">D</p>
<p style="position:absolute;top:304px;left:209px;white-space:nowrap" class="ft21">122</p>
<p style="position:absolute;top:304px;left:398px;white-space:nowrap" class="ft21">anstatt&#160;19.12.,&#160;1&#160;Std.</p>
<p style="position:absolute;top:326px;left:3px;white-space:nowrap" class="ft21">6a</p>
<p style="position:absolute;top:326px;left:55px;white-space:nowrap" class="ft21">6</p>
<p style="position:absolute;top:326px;left:102px;white-space:nowrap" class="ft24"><i>He</i></p>
<p style="position:absolute;top:326px;left:157px;white-space:nowrap" class="ft24"><i>E</i></p>
<p style="position:absolute;top:326px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:326px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:349px;left:3px;white-space:nowrap" class="ft21">6acd&#160;7</p>
<p style="position:absolute;top:349px;left:102px;white-space:nowrap" class="ft24"><i>Ft</i></p>
<p style="position:absolute;top:349px;left:157px;white-space:nowrap" class="ft24"><i>MF</i></p>
<p style="position:absolute;top:349px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:349px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:372px;left:3px;white-space:nowrap" class="ft21">6c</p>
<p style="position:absolute;top:372px;left:55px;white-space:nowrap" class="ft21">1</p>
<p style="position:absolute;top:371px;left:102px;white-space:nowrap" class="ft24"><i>Ku</i></p>
<p style="position:absolute;top:371px;left:157px;white-space:nowrap" class="ft24"><i>D</i></p>
<p style="position:absolute;top:372px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:372px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:394px;left:3px;white-space:nowrap" class="ft21">6c</p>
<p style="position:absolute;top:394px;left:55px;white-space:nowrap" class="ft21">2</p>
<p style="position:absolute;top:394px;left:102px;white-space:nowrap" class="ft21">Sl</p>
<p style="position:absolute;top:394px;left:157px;white-space:nowrap" class="ft21">D</p>
<p style="position:absolute;top:394px;left:209px;white-space:nowrap" class="ft21">121</p>
<p style="position:absolute;top:394px;left:398px;white-space:nowrap" class="ft21">Ku&#160;/&#160;Aufgaben</p>
<p style="position:absolute;top:417px;left:3px;white-space:nowrap" class="ft21">7a</p>
<p style="position:absolute;top:417px;left:55px;white-space:nowrap" class="ft21">3</p>
<p style="position:absolute;top:417px;left:102px;white-space:nowrap" class="ft21">Di</p>
<p style="position:absolute;top:417px;left:157px;white-space:nowrap" class="ft21">D</p>
<p style="position:absolute;top:417px;left:209px;white-space:nowrap" class="ft21">323</p>
<p style="position:absolute;top:417px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:440px;left:3px;white-space:nowrap" class="ft21">7a</p>
<p style="position:absolute;top:440px;left:55px;white-space:nowrap" class="ft21">4</p>
<p style="position:absolute;top:440px;left:102px;white-space:nowrap" class="ft21">Hhn</p>
<p style="position:absolute;top:440px;left:157px;white-space:nowrap" class="ft21">M</p>
<p style="position:absolute;top:440px;left:209px;white-space:nowrap" class="ft21">323</p>
<p style="position:absolute;top:462px;left:3px;white-space:nowrap" class="ft21">7a</p>
<p style="position:absolute;top:462px;left:55px;white-space:nowrap" class="ft21">5</p>
<p style="position:absolute;top:462px;left:102px;white-space:nowrap" class="ft21">Hhn</p>
<p style="position:absolute;top:462px;left:157px;white-space:nowrap" class="ft21">M</p>
<p style="position:absolute;top:462px;left:209px;white-space:nowrap" class="ft21">323</p>
<p style="position:absolute;top:485px;left:3px;white-space:nowrap" class="ft21">7a</p>
<p style="position:absolute;top:485px;left:55px;white-space:nowrap" class="ft21">6</p>
<p style="position:absolute;top:485px;left:102px;white-space:nowrap" class="ft21">Hhn</p>
<p style="position:absolute;top:485px;left:157px;white-space:nowrap" class="ft21">M</p>
<p style="position:absolute;top:485px;left:209px;white-space:nowrap" class="ft21">323</p>
<p style="position:absolute;top:485px;left:398px;white-space:nowrap" class="ft21">findet&#160;statt!</p>
<p style="position:absolute;top:508px;left:3px;white-space:nowrap" class="ft21">7b</p>
<p style="position:absolute;top:508px;left:55px;white-space:nowrap" class="ft21">6</p>
<p style="position:absolute;top:507px;left:102px;white-space:nowrap" class="ft24"><i>Rt</i></p>
<p style="position:absolute;top:507px;left:157px;white-space:nowrap" class="ft24"><i>D</i></p>
<p style="position:absolute;top:508px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:508px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:530px;left:3px;white-space:nowrap" class="ft21">8a</p>
<p style="position:absolute;top:530px;left:55px;white-space:nowrap" class="ft21">1</p>
<p style="position:absolute;top:530px;left:102px;white-space:nowrap" class="ft24"><i>Ft</i></p>
<p style="position:absolute;top:530px;left:157px;white-space:nowrap" class="ft24"><i>M</i></p>
<p style="position:absolute;top:530px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:530px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:553px;left:3px;white-space:nowrap" class="ft21">8a</p>
<p style="position:absolute;top:553px;left:55px;white-space:nowrap" class="ft21">2</p>
<p style="position:absolute;top:553px;left:102px;white-space:nowrap" class="ft21">Li</p>
<p style="position:absolute;top:553px;left:157px;white-space:nowrap" class="ft21">E</p>
<p style="position:absolute;top:553px;left:209px;white-space:nowrap" class="ft21">323</p>
<p style="position:absolute;top:553px;left:398px;white-space:nowrap" class="ft21">statt&#160;18.12.</p>
<p style="position:absolute;top:576px;left:3px;white-space:nowrap" class="ft21">9c</p>
<p style="position:absolute;top:576px;left:55px;white-space:nowrap" class="ft21">5&#160;-&#160;6</p>
<p style="position:absolute;top:576px;left:102px;white-space:nowrap" class="ft24"><i>Hei</i></p>
<p style="position:absolute;top:576px;left:157px;white-space:nowrap" class="ft24"><i>D</i></p>
<p style="position:absolute;top:576px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:576px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:599px;left:3px;white-space:nowrap" class="ft21">9d</p>
<p style="position:absolute;top:599px;left:55px;white-space:nowrap" class="ft21">1&#160;-&#160;2&#160;Rm</p>
<p style="position:absolute;top:599px;left:157px;white-space:nowrap" class="ft21">NWT&#160;412</p>
<p style="position:absolute;top:599px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:621px;left:3px;white-space:nowrap" class="ft21">9d</p>
<p style="position:absolute;top:621px;left:55px;white-space:nowrap" class="ft21">5&#160;-&#160;6</p>
<p style="position:absolute;top:621px;left:102px;white-space:nowrap" class="ft24"><i>Ft</i></p>
<p style="position:absolute;top:621px;left:157px;white-space:nowrap" class="ft24"><i>M</i></p>
<p style="position:absolute;top:621px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:621px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:644px;left:3px;white-space:nowrap" class="ft21">10a</p>
<p style="position:absolute;top:644px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Smr</p>
<p style="position:absolute;top:644px;left:157px;white-space:nowrap" class="ft21">E</p>
<p style="position:absolute;top:644px;left:209px;white-space:nowrap" class="ft21">413</p>
<p style="position:absolute;top:644px;left:398px;white-space:nowrap" class="ft21">Hörverstehensklausur</p>
<p style="position:absolute;top:664px;left:3px;white-space:nowrap" class="ft21">10ad&#160;3</p>
<p style="position:absolute;top:664px;left:102px;white-space:nowrap" class="ft21">Ro</p>
<p style="position:absolute;top:664px;left:157px;white-space:nowrap" class="ft21">EvR</p>
<p style="position:absolute;top:664px;left:209px;white-space:nowrap" class="ft21">SH</p>
<p style="position:absolute;top:664px;left:398px;white-space:nowrap" class="ft21">Sport!</p>
<p style="position:absolute;top:685px;left:3px;white-space:nowrap" class="ft21">10ad&#160;3&#160;-&#160;4</p>
<p style="position:absolute;top:685px;left:102px;white-space:nowrap" class="ft24"><i>We</i></p>
<p style="position:absolute;top:685px;left:157px;white-space:nowrap" class="ft24"><i>KR</i></p>
<p style="position:absolute;top:685px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:685px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:708px;left:3px;white-space:nowrap" class="ft21">10ad&#160;4</p>
<p style="position:absolute;top:708px;left:102px;white-space:nowrap" class="ft21">Lk</p>
<p style="position:absolute;top:708px;left:157px;white-space:nowrap" class="ft21">EvR</p>
<p style="position:absolute;top:708px;left:209px;white-space:nowrap" class="ft21">SH</p>
<p style="position:absolute;top:708px;left:398px;white-space:nowrap" class="ft21">Sport!</p>
<p style="position:absolute;top:730px;left:3px;white-space:nowrap" class="ft21">10b</p>
<p style="position:absolute;top:730px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Ki</p>
<p style="position:absolute;top:730px;left:157px;white-space:nowrap" class="ft21">E</p>
<p style="position:absolute;top:730px;left:209px;white-space:nowrap" class="ft21">414</p>
<p style="position:absolute;top:730px;left:398px;white-space:nowrap" class="ft21">Hörverstehensklausur</p>
<p style="position:absolute;top:751px;left:3px;white-space:nowrap" class="ft21">10b</p>
<p style="position:absolute;top:751px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4</p>
<p style="position:absolute;top:751px;left:102px;white-space:nowrap" class="ft24"><i>He</i></p>
<p style="position:absolute;top:751px;left:157px;white-space:nowrap" class="ft24"><i>Gk</i></p>
<p style="position:absolute;top:751px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:751px;left:251px;white-space:nowrap" class="ft21">Entfall&#160;für&#160;Lehrer</p>
<p style="position:absolute;top:774px;left:3px;white-space:nowrap" class="ft21">10bc&#160;5&#160;-&#160;6</p>
<p style="position:absolute;top:773px;left:102px;white-space:nowrap" class="ft24"><i>We</i></p>
<p style="position:absolute;top:773px;left:157px;white-space:nowrap" class="ft24"><i>KR</i></p>
<p style="position:absolute;top:774px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:774px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:796px;left:3px;white-space:nowrap" class="ft21">10c</p>
<p style="position:absolute;top:796px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4</p>
<p style="position:absolute;top:796px;left:102px;white-space:nowrap" class="ft24"><i>Ran</i></p>
<p style="position:absolute;top:796px;left:157px;white-space:nowrap" class="ft24"><i>M</i></p>
<p style="position:absolute;top:796px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:796px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:796px;left:398px;white-space:nowrap" class="ft21">alle bei&#160;Oe</p>
<p style="position:absolute;top:817px;left:3px;white-space:nowrap" class="ft21">10c</p>
<p style="position:absolute;top:817px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Oe</p>
<p style="position:absolute;top:817px;left:157px;white-space:nowrap" class="ft21">E</p>
<p style="position:absolute;top:817px;left:209px;white-space:nowrap" class="ft21">422</p>
<p style="position:absolute;top:817px;left:398px;white-space:nowrap" class="ft21">Hörverstehensklausur</p>
<p style="position:absolute;top:839px;left:3px;white-space:nowrap" class="ft21">10d</p>
<p style="position:absolute;top:839px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Wd</p>
<p style="position:absolute;top:839px;left:157px;white-space:nowrap" class="ft21">E</p>
<p style="position:absolute;top:839px;left:209px;white-space:nowrap" class="ft21">416</p>
<p style="position:absolute;top:839px;left:398px;white-space:nowrap" class="ft21">Hörverstehensklausur</p>
<p style="position:absolute;top:862px;left:3px;white-space:nowrap" class="ft21">11</p>
<p style="position:absolute;top:862px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;At</p>
<p style="position:absolute;top:862px;left:157px;white-space:nowrap" class="ft21">D3</p>
<p style="position:absolute;top:862px;left:209px;white-space:nowrap" class="ft21">121</p>
<p style="position:absolute;top:862px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:883px;left:3px;white-space:nowrap" class="ft21">11</p>
<p style="position:absolute;top:883px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Sl</p>
<p style="position:absolute;top:883px;left:157px;white-space:nowrap" class="ft21">D2</p>
<p style="position:absolute;top:883px;left:209px;white-space:nowrap" class="ft21">415</p>
<p style="position:absolute;top:883px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:905px;left:3px;white-space:nowrap" class="ft21">12</p>
<p style="position:absolute;top:905px;left:55px;white-space:nowrap" class="ft21">1&#160;-&#160;2&#160;Lo</p>
<p style="position:absolute;top:905px;left:157px;white-space:nowrap" class="ft21">Sp1</p>
<p style="position:absolute;top:905px;left:209px;white-space:nowrap" class="ft21">222</p>
<p style="position:absolute;top:905px;left:398px;white-space:nowrap" class="ft21">Theorie</p>
<p style="position:absolute;top:928px;left:3px;white-space:nowrap" class="ft21">12</p>
<p style="position:absolute;top:928px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Mf</p>
<p style="position:absolute;top:928px;left:157px;white-space:nowrap" class="ft21">E2</p>
<p style="position:absolute;top:928px;left:209px;white-space:nowrap" class="ft21">218</p>
<p style="position:absolute;top:928px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:949px;left:3px;white-space:nowrap" class="ft21">12</p>
<p style="position:absolute;top:949px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4&#160;Sf</p>
<p style="position:absolute;top:949px;left:157px;white-space:nowrap" class="ft21">M3</p>
<p style="position:absolute;top:949px;left:209px;white-space:nowrap" class="ft21">322</p>
<p style="position:absolute;top:949px;left:398px;white-space:nowrap" class="ft21">Raum</p>
<p style="position:absolute;top:969px;left:3px;white-space:nowrap" class="ft21">12</p>
<p style="position:absolute;top:969px;left:55px;white-space:nowrap" class="ft21">3&#160;-&#160;4</p>
<p style="position:absolute;top:969px;left:102px;white-space:nowrap" class="ft24"><i>Ft</i></p>
<p style="position:absolute;top:969px;left:157px;white-space:nowrap" class="ft24"><i>M2</i></p>
<p style="position:absolute;top:969px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:969px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
<p style="position:absolute;top:992px;left:3px;white-space:nowrap" class="ft21">12</p>
<p style="position:absolute;top:992px;left:55px;white-space:nowrap" class="ft21">5&#160;-&#160;6</p>
<p style="position:absolute;top:991px;left:102px;white-space:nowrap" class="ft24"><i>Ku</i></p>
<p style="position:absolute;top:991px;left:157px;white-space:nowrap" class="ft24"><i>ek1</i></p>
<p style="position:absolute;top:992px;left:209px;white-space:nowrap" class="ft21">---</p>
<p style="position:absolute;top:992px;left:251px;white-space:nowrap" class="ft21">Entfall</p>
</div>
</body>
</html>

View file

@ -0,0 +1,871 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>MergedFile</title>
<meta name="Producer" content="3-Heights(TM) PDF Merge Split API 4.9.17.0 (http://www.pdf-tools.com)"/>
<meta name="CreationDate" content=""/>
</head>
<body>
<doc>
<page width="595.440000" height="841.680000">
<flow>
<block xMin="2.155223" yMin="6.712403" xMax="200.369021" yMax="19.097534">
<line xMin="2.155223" yMin="6.712403" xMax="200.369021" yMax="19.097534">
<word xMin="2.155223" yMin="6.712403" xMax="52.636293" yMax="19.097534">D-70563</word>
<word xMin="56.214732" yMin="6.712403" xMax="200.369021" yMax="19.097534">FANNY-LEICHT-GYMN.</word>
</line>
</block>
<block xMin="2.155223" yMin="21.630261" xMax="185.638722" yMax="32.889471">
<line xMin="2.155223" yMin="21.630261" xMax="185.638722" yMax="32.889471">
<word xMin="2.155223" yMin="21.630261" xMax="77.697366" yMax="32.889471">STUTTGART,</word>
<word xMin="80.698405" yMin="21.630261" xMax="169.433114" yMax="32.889471">F.-LEICHT-STR.</word>
<word xMin="172.290102" yMin="21.630261" xMax="185.638722" yMax="32.889471">13</word>
</line>
</block>
</flow>
<flow>
<block xMin="221.269518" yMin="5.785731" xMax="386.482695" yMax="32.889471">
<line xMin="221.269518" yMin="5.785731" xMax="386.482695" yMax="17.044941">
<word xMin="221.269518" yMin="5.785731" xMax="271.290830" yMax="17.044941">Schuljahr</word>
<word xMin="274.639989" yMin="5.785731" xMax="318.010998" yMax="17.044941">2018/19</word>
<word xMin="321.456191" yMin="5.785731" xMax="325.453574" yMax="17.044941">-</word>
<word xMin="328.634675" yMin="5.785731" xMax="338.634136" yMax="17.044941">1.</word>
<word xMin="341.923274" yMin="5.785731" xMax="386.482695" yMax="17.044941">Halbjahr</word>
</line>
<line xMin="221.269518" yMin="21.630261" xMax="378.559953" yMax="32.889471">
<word xMin="221.269518" yMin="21.630261" xMax="249.947443" yMax="32.889471">gültig</word>
<word xMin="253.080527" yMin="21.630261" xMax="266.429147" yMax="32.889471">ab</word>
<word xMin="269.730290" yMin="21.630261" xMax="286.404060" yMax="32.889471">10.</word>
<word xMin="289.729211" yMin="21.630261" xMax="348.561571" yMax="32.889471">September</word>
<word xMin="351.862714" yMin="21.630261" xMax="378.559953" yMax="32.889471">2018</word>
</line>
</block>
</flow>
<flow>
<block xMin="2.155223" yMin="42.828303" xMax="317.498329" yMax="59.717116">
<line xMin="2.155223" yMin="42.828303" xMax="317.498329" yMax="59.717116">
<word xMin="2.155223" yMin="42.828303" xMax="60.009240" yMax="59.717116">Klasse</word>
<word xMin="69.876654" yMin="42.828303" xMax="119.681886" yMax="59.717116">13.12.</word>
<word xMin="124.705624" yMin="42.828303" xMax="129.693350" yMax="59.717116">/</word>
<word xMin="134.771107" yMin="42.828303" xMax="234.525621" yMax="59.717116">Donnerstag</word>
<word xMin="239.531353" yMin="42.828303" xMax="317.498329" yMax="59.717116">Woche-A</word>
</line>
</block>
<block xMin="2.155223" yMin="73.878753" xMax="137.504463" yMax="84.012042">
<line xMin="2.155223" yMin="73.878753" xMax="137.504463" yMax="84.012042">
<word xMin="2.155223" yMin="73.878753" xMax="81.173768" yMax="84.012042">Ordnungsdienst:</word>
<word xMin="84.166404" yMin="73.878753" xMax="116.577621" yMax="84.012042">Klasse</word>
<word xMin="119.483826" yMin="73.878753" xMax="137.504463" yMax="84.012042">10a</word>
</line>
</block>
</flow>
<flow>
<block xMin="2.155223" yMin="114.536755" xMax="28.696408" yMax="682.514662">
<line xMin="2.155223" yMin="114.536755" xMax="16.140063" yMax="125.795965">
<word xMin="2.155223" yMin="114.536755" xMax="16.140063" yMax="125.795965">Kl.</word>
</line>
<line xMin="2.155223" yMin="129.661077" xMax="15.503842" yMax="140.920287">
<word xMin="2.155223" yMin="129.661077" xMax="15.503842" yMax="140.920287">5b</word>
</line>
<line xMin="2.155223" yMin="144.785399" xMax="15.503842" yMax="156.044609">
<word xMin="2.155223" yMin="144.785399" xMax="15.503842" yMax="156.044609">5b</word>
</line>
<line xMin="2.155223" yMin="159.909659" xMax="15.503842" yMax="171.168869">
<word xMin="2.155223" yMin="159.909659" xMax="15.503842" yMax="171.168869">5b</word>
</line>
<line xMin="2.155223" yMin="175.033981" xMax="15.503842" yMax="186.293190">
<word xMin="2.155223" yMin="175.033981" xMax="15.503842" yMax="186.293190">5b</word>
</line>
<line xMin="2.155223" yMin="190.158302" xMax="21.505920" yMax="201.417512">
<word xMin="2.155223" yMin="190.158302" xMax="21.505920" yMax="201.417512">6bc</word>
</line>
<line xMin="2.155223" yMin="203.842207" xMax="21.505920" yMax="215.101417">
<word xMin="2.155223" yMin="203.842207" xMax="21.505920" yMax="215.101417">6bc</word>
</line>
<line xMin="2.155223" yMin="218.966528" xMax="21.505920" yMax="230.225738">
<word xMin="2.155223" yMin="218.966528" xMax="21.505920" yMax="230.225738">6bc</word>
</line>
<line xMin="2.155223" yMin="232.650432" xMax="21.505920" yMax="243.909642">
<word xMin="2.155223" yMin="232.650432" xMax="21.505920" yMax="243.909642">6bc</word>
</line>
<line xMin="2.155223" yMin="247.774692" xMax="15.503842" yMax="259.033902">
<word xMin="2.155223" yMin="247.774692" xMax="15.503842" yMax="259.033902">6d</word>
</line>
<line xMin="2.155223" yMin="262.899014" xMax="15.503842" yMax="274.158224">
<word xMin="2.155223" yMin="262.899014" xMax="15.503842" yMax="274.158224">7b</word>
</line>
<line xMin="2.155223" yMin="278.023335" xMax="15.503842" yMax="289.282545">
<word xMin="2.155223" yMin="278.023335" xMax="15.503842" yMax="289.282545">7b</word>
</line>
<line xMin="2.155223" yMin="293.147658" xMax="15.503842" yMax="304.406867">
<word xMin="2.155223" yMin="293.147658" xMax="15.503842" yMax="304.406867">7b</word>
</line>
<line xMin="2.155223" yMin="308.271979" xMax="14.831610" yMax="319.531189">
<word xMin="2.155223" yMin="308.271979" xMax="14.831610" yMax="319.531189">7c</word>
</line>
<line xMin="2.155223" yMin="323.396269" xMax="15.503842" yMax="334.655479">
<word xMin="2.155223" yMin="323.396269" xMax="15.503842" yMax="334.655479">7d</word>
</line>
<line xMin="2.155223" yMin="338.520561" xMax="15.503842" yMax="349.779771">
<word xMin="2.155223" yMin="338.520561" xMax="15.503842" yMax="349.779771">7d</word>
</line>
<line xMin="2.155223" yMin="353.644882" xMax="15.503842" yMax="364.904092">
<word xMin="2.155223" yMin="353.644882" xMax="15.503842" yMax="364.904092">8a</word>
</line>
<line xMin="2.155223" yMin="368.769203" xMax="21.505920" yMax="380.028413">
<word xMin="2.155223" yMin="368.769203" xMax="21.505920" yMax="380.028413">9ac</word>
</line>
<line xMin="2.155223" yMin="383.893495" xMax="14.831610" yMax="395.152705">
<word xMin="2.155223" yMin="383.893495" xMax="14.831610" yMax="395.152705">9c</word>
</line>
<line xMin="2.155223" yMin="399.017816" xMax="14.831610" yMax="410.277026">
<word xMin="2.155223" yMin="399.017816" xMax="14.831610" yMax="410.277026">9c</word>
</line>
<line xMin="2.155223" yMin="414.142138" xMax="14.831610" yMax="425.401348">
<word xMin="2.155223" yMin="414.142138" xMax="14.831610" yMax="425.401348">9c</word>
</line>
<line xMin="2.155223" yMin="429.266460" xMax="15.503842" yMax="440.525670">
<word xMin="2.155223" yMin="429.266460" xMax="15.503842" yMax="440.525670">9d</word>
</line>
<line xMin="2.155223" yMin="444.390750" xMax="15.503842" yMax="455.649960">
<word xMin="2.155223" yMin="444.390750" xMax="15.503842" yMax="455.649960">9d</word>
</line>
<line xMin="2.155223" yMin="459.515072" xMax="15.503842" yMax="470.774282">
<word xMin="2.155223" yMin="459.515072" xMax="15.503842" yMax="470.774282">9d</word>
</line>
<line xMin="2.155223" yMin="474.639394" xMax="15.503842" yMax="485.898604">
<word xMin="2.155223" yMin="474.639394" xMax="15.503842" yMax="485.898604">9d</word>
</line>
<line xMin="2.155223" yMin="489.763685" xMax="15.503842" yMax="501.022894">
<word xMin="2.155223" yMin="489.763685" xMax="15.503842" yMax="501.022894">9d</word>
</line>
<line xMin="2.155223" yMin="504.887976" xMax="15.503842" yMax="516.147186">
<word xMin="2.155223" yMin="504.887976" xMax="15.503842" yMax="516.147186">9d</word>
</line>
<line xMin="2.155223" yMin="520.012297" xMax="15.503842" yMax="531.271507">
<word xMin="2.155223" yMin="520.012297" xMax="15.503842" yMax="531.271507">9d</word>
</line>
<line xMin="2.155223" yMin="535.136619" xMax="15.503842" yMax="546.395829">
<word xMin="2.155223" yMin="535.136619" xMax="15.503842" yMax="546.395829">9d</word>
</line>
<line xMin="2.155223" yMin="550.260940" xMax="22.178152" yMax="561.520150">
<word xMin="2.155223" yMin="550.260940" xMax="22.178152" yMax="561.520150">10b</word>
</line>
<line xMin="2.155223" yMin="565.385262" xMax="15.503842" yMax="576.644471">
<word xMin="2.155223" yMin="565.385262" xMax="15.503842" yMax="576.644471">11</word>
</line>
<line xMin="2.155223" yMin="580.509523" xMax="15.503842" yMax="591.768733">
<word xMin="2.155223" yMin="580.509523" xMax="15.503842" yMax="591.768733">11</word>
</line>
<line xMin="2.155223" yMin="595.633844" xMax="15.503842" yMax="606.893054">
<word xMin="2.155223" yMin="595.633844" xMax="15.503842" yMax="606.893054">11</word>
</line>
<line xMin="2.155223" yMin="610.758166" xMax="15.503842" yMax="622.017376">
<word xMin="2.155223" yMin="610.758166" xMax="15.503842" yMax="622.017376">11</word>
</line>
<line xMin="2.155223" yMin="625.882487" xMax="15.503842" yMax="637.141697">
<word xMin="2.155223" yMin="625.882487" xMax="15.503842" yMax="637.141697">11</word>
</line>
<line xMin="2.155223" yMin="641.006809" xMax="15.503842" yMax="652.266018">
<word xMin="2.155223" yMin="641.006809" xMax="15.503842" yMax="652.266018">12</word>
</line>
<line xMin="2.155223" yMin="656.131130" xMax="15.503842" yMax="667.390340">
<word xMin="2.155223" yMin="656.131130" xMax="15.503842" yMax="667.390340">12</word>
</line>
<line xMin="2.155223" yMin="671.255452" xMax="28.696408" yMax="682.514662">
<word xMin="2.155223" yMin="671.255452" xMax="28.696408" yMax="682.514662">1112</word>
</line>
</block>
</flow>
<flow>
<block xMin="36.638783" yMin="114.536755" xMax="73.899678" yMax="682.514662">
<line xMin="36.638783" yMin="114.536755" xMax="57.958161" yMax="125.795965">
<word xMin="36.638783" yMin="114.536755" xMax="57.958161" yMax="125.795965">Std.</word>
</line>
<line xMin="36.638783" yMin="129.661077" xMax="43.313093" yMax="140.920287">
<word xMin="36.638783" yMin="129.661077" xMax="43.313093" yMax="140.920287">1</word>
</line>
<line xMin="36.638783" yMin="144.785399" xMax="43.313093" yMax="156.044609">
<word xMin="36.638783" yMin="144.785399" xMax="43.313093" yMax="156.044609">2</word>
</line>
<line xMin="36.638783" yMin="159.909659" xMax="43.313093" yMax="171.168869">
<word xMin="36.638783" yMin="159.909659" xMax="43.313093" yMax="171.168869">3</word>
</line>
<line xMin="36.638783" yMin="175.033981" xMax="43.313093" yMax="186.293190">
<word xMin="36.638783" yMin="175.033981" xMax="43.313093" yMax="186.293190">4</word>
</line>
<line xMin="36.638783" yMin="190.158302" xMax="43.313093" yMax="201.417512">
<word xMin="36.638783" yMin="190.158302" xMax="43.313093" yMax="201.417512">5</word>
</line>
<line xMin="36.638783" yMin="203.842207" xMax="43.313093" yMax="215.101417">
<word xMin="36.638783" yMin="203.842207" xMax="43.313093" yMax="215.101417">5</word>
</line>
<line xMin="36.638783" yMin="218.966528" xMax="43.313093" yMax="230.225738">
<word xMin="36.638783" yMin="218.966528" xMax="43.313093" yMax="230.225738">6</word>
</line>
<line xMin="36.638783" yMin="232.650432" xMax="43.313093" yMax="243.909642">
<word xMin="36.638783" yMin="232.650432" xMax="43.313093" yMax="243.909642">6</word>
</line>
<line xMin="36.638783" yMin="247.774692" xMax="43.313093" yMax="259.033902">
<word xMin="36.638783" yMin="247.774692" xMax="43.313093" yMax="259.033902">6</word>
</line>
<line xMin="36.638783" yMin="262.899014" xMax="43.313093" yMax="274.158224">
<word xMin="36.638783" yMin="262.899014" xMax="43.313093" yMax="274.158224">2</word>
</line>
<line xMin="36.638783" yMin="278.023335" xMax="43.313093" yMax="289.282545">
<word xMin="36.638783" yMin="278.023335" xMax="43.313093" yMax="289.282545">8</word>
</line>
<line xMin="36.638783" yMin="293.147658" xMax="43.313093" yMax="304.406867">
<word xMin="36.638783" yMin="293.147658" xMax="43.313093" yMax="304.406867">9</word>
</line>
<line xMin="36.638783" yMin="308.271979" xMax="60.647091" yMax="319.531189">
<word xMin="36.638783" yMin="308.271979" xMax="43.313093" yMax="319.531189">8</word>
<word xMin="46.662252" yMin="308.271979" xMax="50.659635" yMax="319.531189">-</word>
<word xMin="53.972782" yMin="308.271979" xMax="60.647091" yMax="319.531189">9</word>
</line>
<line xMin="36.638783" yMin="323.396269" xMax="43.313093" yMax="334.655479">
<word xMin="36.638783" yMin="323.396269" xMax="43.313093" yMax="334.655479">1</word>
</line>
<line xMin="36.638783" yMin="338.520561" xMax="43.313093" yMax="349.779771">
<word xMin="36.638783" yMin="338.520561" xMax="43.313093" yMax="349.779771">2</word>
</line>
<line xMin="36.638783" yMin="353.644882" xMax="60.647091" yMax="364.904092">
<word xMin="36.638783" yMin="353.644882" xMax="43.313093" yMax="364.904092">1</word>
<word xMin="46.662252" yMin="353.644882" xMax="50.659635" yMax="364.904092">-</word>
<word xMin="53.972782" yMin="353.644882" xMax="60.647091" yMax="364.904092">2</word>
</line>
<line xMin="36.638783" yMin="368.769203" xMax="60.647091" yMax="380.028413">
<word xMin="36.638783" yMin="368.769203" xMax="43.313093" yMax="380.028413">8</word>
<word xMin="46.662252" yMin="368.769203" xMax="50.659635" yMax="380.028413">-</word>
<word xMin="53.972782" yMin="368.769203" xMax="60.647091" yMax="380.028413">9</word>
</line>
<line xMin="36.638783" yMin="383.893495" xMax="60.647091" yMax="395.152705">
<word xMin="36.638783" yMin="383.893495" xMax="43.313093" yMax="395.152705">1</word>
<word xMin="46.662252" yMin="383.893495" xMax="50.659635" yMax="395.152705">-</word>
<word xMin="53.972782" yMin="383.893495" xMax="60.647091" yMax="395.152705">2</word>
</line>
<line xMin="36.638783" yMin="399.017816" xMax="43.313093" yMax="410.277026">
<word xMin="36.638783" yMin="399.017816" xMax="43.313093" yMax="410.277026">3</word>
</line>
<line xMin="36.638783" yMin="414.142138" xMax="43.313093" yMax="425.401348">
<word xMin="36.638783" yMin="414.142138" xMax="43.313093" yMax="425.401348">4</word>
</line>
<line xMin="36.638783" yMin="429.266460" xMax="43.313093" yMax="440.525670">
<word xMin="36.638783" yMin="429.266460" xMax="43.313093" yMax="440.525670">1</word>
</line>
<line xMin="36.638783" yMin="444.390750" xMax="43.313093" yMax="455.649960">
<word xMin="36.638783" yMin="444.390750" xMax="43.313093" yMax="455.649960">2</word>
</line>
<line xMin="36.638783" yMin="459.515072" xMax="43.313093" yMax="470.774282">
<word xMin="36.638783" yMin="459.515072" xMax="43.313093" yMax="470.774282">3</word>
</line>
<line xMin="36.638783" yMin="474.639394" xMax="43.313093" yMax="485.898604">
<word xMin="36.638783" yMin="474.639394" xMax="43.313093" yMax="485.898604">4</word>
</line>
<line xMin="36.638783" yMin="489.763685" xMax="43.313093" yMax="501.022894">
<word xMin="36.638783" yMin="489.763685" xMax="43.313093" yMax="501.022894">5</word>
</line>
<line xMin="36.638783" yMin="504.887976" xMax="43.313093" yMax="516.147186">
<word xMin="36.638783" yMin="504.887976" xMax="43.313093" yMax="516.147186">6</word>
</line>
<line xMin="36.638783" yMin="520.012297" xMax="43.313093" yMax="531.271507">
<word xMin="36.638783" yMin="520.012297" xMax="43.313093" yMax="531.271507">8</word>
</line>
<line xMin="36.638783" yMin="535.136619" xMax="43.313093" yMax="546.395829">
<word xMin="36.638783" yMin="535.136619" xMax="43.313093" yMax="546.395829">9</word>
</line>
<line xMin="36.638783" yMin="550.260940" xMax="73.899678" yMax="561.520150">
<word xMin="36.638783" yMin="550.260940" xMax="49.987402" yMax="561.520150">10</word>
<word xMin="53.372574" yMin="550.260940" xMax="57.369957" yMax="561.520150">-</word>
<word xMin="60.551058" yMin="550.260940" xMax="73.899678" yMax="561.520150">11</word>
</line>
<line xMin="36.638783" yMin="565.385262" xMax="60.647091" yMax="576.644471">
<word xMin="36.638783" yMin="565.385262" xMax="43.313093" yMax="576.644471">3</word>
<word xMin="46.662252" yMin="565.385262" xMax="50.659635" yMax="576.644471">-</word>
<word xMin="53.972782" yMin="565.385262" xMax="60.647091" yMax="576.644471">4</word>
</line>
<line xMin="36.638783" yMin="580.509523" xMax="43.313093" yMax="591.768733">
<word xMin="36.638783" yMin="580.509523" xMax="43.313093" yMax="591.768733">5</word>
</line>
<line xMin="36.638783" yMin="595.633844" xMax="43.313093" yMax="606.893054">
<word xMin="36.638783" yMin="595.633844" xMax="43.313093" yMax="606.893054">7</word>
</line>
<line xMin="36.638783" yMin="610.758166" xMax="60.647091" yMax="622.017376">
<word xMin="36.638783" yMin="610.758166" xMax="43.313093" yMax="622.017376">8</word>
<word xMin="46.662252" yMin="610.758166" xMax="50.659635" yMax="622.017376">-</word>
<word xMin="53.972782" yMin="610.758166" xMax="60.647091" yMax="622.017376">9</word>
</line>
<line xMin="36.638783" yMin="625.882487" xMax="73.899678" yMax="637.141697">
<word xMin="36.638783" yMin="625.882487" xMax="49.987402" yMax="637.141697">10</word>
<word xMin="53.372574" yMin="625.882487" xMax="57.369957" yMax="637.141697">-</word>
<word xMin="60.551058" yMin="625.882487" xMax="73.899678" yMax="637.141697">11</word>
</line>
<line xMin="36.638783" yMin="641.006809" xMax="60.647091" yMax="652.266018">
<word xMin="36.638783" yMin="641.006809" xMax="43.313093" yMax="652.266018">1</word>
<word xMin="46.662252" yMin="641.006809" xMax="50.659635" yMax="652.266018">-</word>
<word xMin="53.972782" yMin="641.006809" xMax="60.647091" yMax="652.266018">2</word>
</line>
<line xMin="36.638783" yMin="656.131130" xMax="43.313093" yMax="667.390340">
<word xMin="36.638783" yMin="656.131130" xMax="43.313093" yMax="667.390340">5</word>
</line>
<line xMin="36.638783" yMin="671.255452" xMax="60.647091" yMax="682.514662">
<word xMin="36.638783" yMin="671.255452" xMax="43.313093" yMax="682.514662">8</word>
<word xMin="46.662252" yMin="671.255452" xMax="50.659635" yMax="682.514662">-</word>
<word xMin="53.972782" yMin="671.255452" xMax="60.647091" yMax="682.514662">9</word>
</line>
</block>
</flow>
<flow>
<block xMin="81.898452" yMin="114.536755" xMax="111.080551" yMax="682.545121">
<line xMin="81.898452" yMin="114.536755" xMax="111.080551" yMax="125.795965">
<word xMin="81.898452" yMin="114.536755" xMax="111.080551" yMax="125.795965">Vertr.</word>
</line>
<line xMin="81.898452" yMin="129.470449" xMax="99.904683" yMax="140.950745">
<word xMin="81.898452" yMin="129.470449" xMax="99.904683" yMax="140.950745">Hei</word>
</line>
<line xMin="81.898452" yMin="144.785399" xMax="95.895296" yMax="156.044609">
<word xMin="81.898452" yMin="144.785399" xMax="95.895296" yMax="156.044609">Fu</word>
</line>
<line xMin="81.898452" yMin="159.909659" xMax="97.899990" yMax="171.168869">
<word xMin="81.898452" yMin="159.909659" xMax="97.899990" yMax="171.168869">Oe</word>
</line>
<line xMin="81.898452" yMin="175.033981" xMax="100.396854" yMax="186.293190">
<word xMin="81.898452" yMin="175.033981" xMax="100.396854" yMax="186.293190">Rm</word>
</line>
<line xMin="81.898452" yMin="190.158302" xMax="93.002295" yMax="201.417512">
<word xMin="81.898452" yMin="190.158302" xMax="93.002295" yMax="201.417512">Sf</word>
</line>
<line xMin="81.898452" yMin="203.842207" xMax="96.567528" yMax="215.101417">
<word xMin="81.898452" yMin="203.842207" xMax="96.567528" yMax="215.101417">Dk</word>
</line>
<line xMin="81.898452" yMin="218.775900" xMax="96.567528" yMax="230.256196">
<word xMin="81.898452" yMin="218.775900" xMax="96.567528" yMax="230.256196"></word>
</line>
<line xMin="81.898452" yMin="232.459804" xMax="99.892679" yMax="243.940100">
<word xMin="81.898452" yMin="232.459804" xMax="99.892679" yMax="243.940100">We</word>
</line>
<line xMin="81.898452" yMin="247.584064" xMax="96.567528" yMax="259.064360">
<word xMin="81.898452" yMin="247.584064" xMax="96.567528" yMax="259.064360">Ku</word>
</line>
<line xMin="81.898452" yMin="262.899014" xMax="97.899990" yMax="274.158224">
<word xMin="81.898452" yMin="262.899014" xMax="97.899990" yMax="274.158224">Ga</word>
</line>
<line xMin="81.898452" yMin="277.832707" xMax="97.899990" yMax="289.313003">
<word xMin="81.898452" yMin="277.832707" xMax="97.899990" yMax="289.313003">Gg</word>
</line>
<line xMin="81.898452" yMin="292.957030" xMax="97.899990" yMax="304.437326">
<word xMin="81.898452" yMin="292.957030" xMax="97.899990" yMax="304.437326">Gg</word>
</line>
<line xMin="81.898452" yMin="308.081351" xMax="99.892679" yMax="319.561647">
<word xMin="81.898452" yMin="308.081351" xMax="99.892679" yMax="319.561647">Gw</word>
</line>
<line xMin="81.898452" yMin="323.205641" xMax="96.567528" yMax="334.685937">
<word xMin="81.898452" yMin="323.205641" xMax="96.567528" yMax="334.685937">Ku</word>
</line>
<line xMin="81.898452" yMin="338.520561" xMax="97.227757" yMax="349.779771">
<word xMin="81.898452" yMin="338.520561" xMax="97.227757" yMax="349.779771">Oz</word>
</line>
<line xMin="81.898452" yMin="353.454254" xMax="92.558141" yMax="364.934550">
<word xMin="81.898452" yMin="353.454254" xMax="92.558141" yMax="364.934550">Ei</word>
</line>
<line xMin="81.898452" yMin="368.578576" xMax="94.574839" yMax="380.058872">
<word xMin="81.898452" yMin="368.578576" xMax="94.574839" yMax="380.058872">Lk</word>
</line>
<line xMin="81.898452" yMin="383.893495" xMax="96.567528" yMax="395.152705">
<word xMin="81.898452" yMin="383.893495" xMax="96.567528" yMax="395.152705">Jw</word>
</line>
<line xMin="81.898452" yMin="399.017816" xMax="93.722544" yMax="410.277026">
<word xMin="81.898452" yMin="399.017816" xMax="93.722544" yMax="410.277026">Hf</word>
</line>
<line xMin="81.898452" yMin="414.142138" xMax="102.569606" yMax="425.401348">
<word xMin="81.898452" yMin="414.142138" xMax="102.569606" yMax="425.401348">Bkn</word>
</line>
<line xMin="81.898452" yMin="429.075832" xMax="93.890602" yMax="440.556128">
<word xMin="81.898452" yMin="429.075832" xMax="93.890602" yMax="440.556128">Rt</word>
</line>
<line xMin="81.898452" yMin="444.200122" xMax="93.890602" yMax="455.680419">
<word xMin="81.898452" yMin="444.200122" xMax="93.890602" yMax="455.680419">Rt</word>
</line>
<line xMin="81.898452" yMin="459.515072" xMax="93.890602" yMax="470.774282">
<word xMin="81.898452" yMin="459.515072" xMax="93.890602" yMax="470.774282">Rt</word>
</line>
<line xMin="81.898452" yMin="474.639394" xMax="93.890602" yMax="485.898604">
<word xMin="81.898452" yMin="474.639394" xMax="93.890602" yMax="485.898604">Rt</word>
</line>
<line xMin="81.898452" yMin="489.763685" xMax="93.230373" yMax="501.022894">
<word xMin="81.898452" yMin="489.763685" xMax="93.230373" yMax="501.022894">Ni</word>
</line>
<line xMin="81.898452" yMin="504.887976" xMax="93.230373" yMax="516.147186">
<word xMin="81.898452" yMin="504.887976" xMax="93.230373" yMax="516.147186">Ni</word>
</line>
<line xMin="81.898452" yMin="519.821669" xMax="93.230373" yMax="531.301966">
<word xMin="81.898452" yMin="519.821669" xMax="93.230373" yMax="531.301966">Ni</word>
</line>
<line xMin="81.898452" yMin="534.945991" xMax="93.230373" yMax="546.426287">
<word xMin="81.898452" yMin="534.945991" xMax="93.230373" yMax="546.426287">Ni</word>
</line>
<line xMin="81.898452" yMin="550.070312" xMax="95.895296" yMax="561.550608">
<word xMin="81.898452" yMin="550.070312" xMax="95.895296" yMax="561.550608">Fe</word>
</line>
<line xMin="81.898452" yMin="565.194634" xMax="92.546137" yMax="576.674930">
<word xMin="81.898452" yMin="565.194634" xMax="92.546137" yMax="576.674930">Ft</word>
</line>
<line xMin="81.898452" yMin="580.318895" xMax="92.558141" yMax="591.799191">
<word xMin="81.898452" yMin="580.318895" xMax="92.558141" yMax="591.799191">Ei</word>
</line>
<line xMin="81.898452" yMin="595.633844" xMax="94.550830" yMax="606.893054">
<word xMin="81.898452" yMin="595.633844" xMax="94.550830" yMax="606.893054">Gt</word>
</line>
<line xMin="81.898452" yMin="610.758166" xMax="97.239761" yMax="622.017376">
<word xMin="81.898452" yMin="610.758166" xMax="97.239761" yMax="622.017376">Ro</word>
</line>
<line xMin="81.898452" yMin="625.691859" xMax="94.574839" yMax="637.172155">
<word xMin="81.898452" yMin="625.691859" xMax="94.574839" yMax="637.172155">Lk</word>
</line>
<line xMin="81.898452" yMin="641.006809" xMax="93.230373" yMax="652.266018">
<word xMin="81.898452" yMin="641.006809" xMax="93.230373" yMax="652.266018">Ni</word>
</line>
<line xMin="81.898452" yMin="655.940502" xMax="96.567528" yMax="667.420798">
<word xMin="81.898452" yMin="655.940502" xMax="96.567528" yMax="667.420798">Ku</word>
</line>
<line xMin="81.898452" yMin="671.064824" xMax="95.895296" yMax="682.545121">
<word xMin="81.898452" yMin="671.064824" xMax="95.895296" yMax="682.545121">Fe</word>
</line>
</block>
</flow>
<flow>
<block xMin="118.537239" yMin="114.536755" xMax="147.719338" yMax="682.545121">
<line xMin="118.537239" yMin="114.536755" xMax="145.078424" yMax="125.795965">
<word xMin="118.537239" yMin="114.536755" xMax="145.078424" yMax="125.795965">Fach</word>
</line>
<line xMin="118.537239" yMin="129.470449" xMax="127.204238" yMax="140.950745">
<word xMin="118.537239" yMin="129.470449" xMax="127.204238" yMax="140.950745">D</word>
</line>
<line xMin="118.537239" yMin="144.785399" xMax="127.204238" yMax="156.044609">
<word xMin="118.537239" yMin="144.785399" xMax="127.204238" yMax="156.044609">D</word>
</line>
<line xMin="118.537239" yMin="159.909659" xMax="128.536699" yMax="171.168869">
<word xMin="118.537239" yMin="159.909659" xMax="128.536699" yMax="171.168869">M</word>
</line>
<line xMin="118.537239" yMin="175.033981" xMax="128.536699" yMax="186.293190">
<word xMin="118.537239" yMin="175.033981" xMax="128.536699" yMax="186.293190">M</word>
</line>
<line xMin="118.537239" yMin="190.158302" xMax="141.201082" yMax="201.417512">
<word xMin="118.537239" yMin="190.158302" xMax="141.201082" yMax="201.417512">EvR</word>
</line>
<line xMin="118.537239" yMin="203.842207" xMax="135.199005" yMax="215.101417">
<word xMin="118.537239" yMin="203.842207" xMax="135.199005" yMax="215.101417">KR</word>
</line>
<line xMin="118.537239" yMin="218.775900" xMax="141.201082" yMax="230.256196">
<word xMin="118.537239" yMin="218.775900" xMax="141.201082" yMax="230.256196">EvR</word>
</line>
<line xMin="118.537239" yMin="232.459804" xMax="135.199005" yMax="243.940100">
<word xMin="118.537239" yMin="232.459804" xMax="135.199005" yMax="243.940100">KR</word>
</line>
<line xMin="118.537239" yMin="247.584064" xMax="132.534082" yMax="259.064360">
<word xMin="118.537239" yMin="247.584064" xMax="132.534082" yMax="259.064360">Ek</word>
</line>
<line xMin="118.537239" yMin="262.899014" xMax="127.864466" yMax="274.158224">
<word xMin="118.537239" yMin="262.899014" xMax="127.864466" yMax="274.158224">G</word>
</line>
<line xMin="118.537239" yMin="277.832707" xMax="134.526772" yMax="289.313003">
<word xMin="118.537239" yMin="277.832707" xMax="134.526772" yMax="289.313003">BK</word>
</line>
<line xMin="118.537239" yMin="292.957030" xMax="134.526772" yMax="304.437326">
<word xMin="118.537239" yMin="292.957030" xMax="134.526772" yMax="304.437326">BK</word>
</line>
<line xMin="118.537239" yMin="308.081351" xMax="127.864466" yMax="319.561647">
<word xMin="118.537239" yMin="308.081351" xMax="127.864466" yMax="319.561647">G</word>
</line>
<line xMin="118.537239" yMin="323.205641" xMax="127.204238" yMax="334.685937">
<word xMin="118.537239" yMin="323.205641" xMax="127.204238" yMax="334.685937">D</word>
</line>
<line xMin="118.537239" yMin="338.520561" xMax="127.204238" yMax="349.779771">
<word xMin="118.537239" yMin="338.520561" xMax="127.204238" yMax="349.779771">D</word>
</line>
<line xMin="118.537239" yMin="353.454254" xMax="133.878548" yMax="364.934550">
<word xMin="118.537239" yMin="353.454254" xMax="133.878548" yMax="364.934550">Ch</word>
</line>
<line xMin="118.537239" yMin="368.578576" xMax="139.208392" yMax="380.058872">
<word xMin="118.537239" yMin="368.578576" xMax="139.208392" yMax="380.058872">SpJ</word>
</line>
<line xMin="118.537239" yMin="383.893495" xMax="133.866544" yMax="395.152705">
<word xMin="118.537239" yMin="383.893495" xMax="133.866544" yMax="395.152705">Gk</word>
</line>
<line xMin="118.537239" yMin="399.017816" xMax="127.204238" yMax="410.277026">
<word xMin="118.537239" yMin="399.017816" xMax="127.204238" yMax="410.277026">D</word>
</line>
<line xMin="118.537239" yMin="414.142138" xMax="127.204238" yMax="425.401348">
<word xMin="118.537239" yMin="414.142138" xMax="127.204238" yMax="425.401348">D</word>
</line>
<line xMin="118.537239" yMin="429.075832" xMax="133.866544" yMax="440.556128">
<word xMin="118.537239" yMin="429.075832" xMax="133.866544" yMax="440.556128">Gk</word>
</line>
<line xMin="118.537239" yMin="444.200122" xMax="133.866544" yMax="455.680419">
<word xMin="118.537239" yMin="444.200122" xMax="133.866544" yMax="455.680419">Gk</word>
</line>
<line xMin="118.537239" yMin="459.515072" xMax="133.866544" yMax="470.774282">
<word xMin="118.537239" yMin="459.515072" xMax="133.866544" yMax="470.774282">Gk</word>
</line>
<line xMin="118.537239" yMin="474.639394" xMax="133.866544" yMax="485.898604">
<word xMin="118.537239" yMin="474.639394" xMax="133.866544" yMax="485.898604">Gk</word>
</line>
<line xMin="118.537239" yMin="489.763685" xMax="134.526772" yMax="501.022894">
<word xMin="118.537239" yMin="489.763685" xMax="134.526772" yMax="501.022894">BK</word>
</line>
<line xMin="118.537239" yMin="504.887976" xMax="134.526772" yMax="516.147186">
<word xMin="118.537239" yMin="504.887976" xMax="134.526772" yMax="516.147186">BK</word>
</line>
<line xMin="118.537239" yMin="519.821669" xMax="134.526772" yMax="531.301966">
<word xMin="118.537239" yMin="519.821669" xMax="134.526772" yMax="531.301966">BK</word>
</line>
<line xMin="118.537239" yMin="534.945991" xMax="134.526772" yMax="546.426287">
<word xMin="118.537239" yMin="534.945991" xMax="134.526772" yMax="546.426287">BK</word>
</line>
<line xMin="118.537239" yMin="550.070312" xMax="133.206315" yMax="561.550608">
<word xMin="118.537239" yMin="550.070312" xMax="133.206315" yMax="561.550608">Ph</word>
</line>
<line xMin="118.537239" yMin="565.194634" xMax="131.885858" yMax="576.674930">
<word xMin="118.537239" yMin="565.194634" xMax="131.885858" yMax="576.674930">g4</word>
</line>
<line xMin="118.537239" yMin="580.318895" xMax="135.211009" yMax="591.799191">
<word xMin="118.537239" yMin="580.318895" xMax="135.211009" yMax="591.799191">M1</word>
</line>
<line xMin="118.537239" yMin="595.633844" xMax="147.719338" yMax="606.893054">
<word xMin="118.537239" yMin="595.633844" xMax="147.719338" yMax="606.893054">sem1</word>
</line>
<line xMin="118.537239" yMin="610.758166" xMax="147.719338" yMax="622.017376">
<word xMin="118.537239" yMin="610.758166" xMax="147.719338" yMax="622.017376">sem1</word>
</line>
<line xMin="118.537239" yMin="625.691859" xMax="137.887935" yMax="637.172155">
<word xMin="118.537239" yMin="625.691859" xMax="137.887935" yMax="637.172155">sp3</word>
</line>
<line xMin="118.537239" yMin="641.006809" xMax="137.887935" yMax="652.266018">
<word xMin="118.537239" yMin="641.006809" xMax="137.887935" yMax="652.266018">bk1</word>
</line>
<line xMin="118.537239" yMin="655.940502" xMax="133.878548" yMax="667.420798">
<word xMin="118.537239" yMin="655.940502" xMax="133.878548" yMax="667.420798">D2</word>
</line>
<line xMin="118.537239" yMin="671.064824" xMax="141.009015" yMax="682.545121">
<word xMin="118.537239" yMin="671.064824" xMax="141.009015" yMax="682.545121">vma</word>
</line>
</block>
</flow>
<flow>
<block xMin="155.176025" yMin="114.536755" xMax="177.047595" yMax="682.514662">
<line xMin="155.176025" yMin="114.536755" xMax="177.047595" yMax="125.795965">
<word xMin="155.176025" yMin="114.536755" xMax="177.047595" yMax="125.795965">Rau</word>
</line>
<line xMin="155.176025" yMin="129.661077" xMax="167.168175" yMax="140.920287">
<word xMin="155.176025" yMin="129.661077" xMax="167.168175" yMax="140.920287">---</word>
</line>
<line xMin="155.176025" yMin="144.785399" xMax="175.198955" yMax="156.044609">
<word xMin="155.176025" yMin="144.785399" xMax="175.198955" yMax="156.044609">114</word>
</line>
<line xMin="155.176025" yMin="159.909659" xMax="175.198955" yMax="171.168869">
<word xMin="155.176025" yMin="159.909659" xMax="175.198955" yMax="171.168869">114</word>
</line>
<line xMin="155.176025" yMin="175.033981" xMax="175.198955" yMax="186.293190">
<word xMin="155.176025" yMin="175.033981" xMax="175.198955" yMax="186.293190">114</word>
</line>
<line xMin="155.176025" yMin="190.158302" xMax="175.198955" yMax="201.417512">
<word xMin="155.176025" yMin="190.158302" xMax="175.198955" yMax="201.417512">321</word>
</line>
<line xMin="155.176025" yMin="203.842207" xMax="175.198955" yMax="215.101417">
<word xMin="155.176025" yMin="203.842207" xMax="175.198955" yMax="215.101417">121</word>
</line>
<line xMin="155.176025" yMin="218.966528" xMax="167.168175" yMax="230.225738">
<word xMin="155.176025" yMin="218.966528" xMax="167.168175" yMax="230.225738">---</word>
</line>
<line xMin="155.176025" yMin="232.650432" xMax="167.168175" yMax="243.909642">
<word xMin="155.176025" yMin="232.650432" xMax="167.168175" yMax="243.909642">---</word>
</line>
<line xMin="155.176025" yMin="247.774692" xMax="167.168175" yMax="259.033902">
<word xMin="155.176025" yMin="247.774692" xMax="167.168175" yMax="259.033902">---</word>
</line>
<line xMin="155.176025" yMin="262.899014" xMax="175.198955" yMax="274.158224">
<word xMin="155.176025" yMin="262.899014" xMax="175.198955" yMax="274.158224">414</word>
</line>
<line xMin="155.176025" yMin="278.023335" xMax="167.168175" yMax="289.282545">
<word xMin="155.176025" yMin="278.023335" xMax="167.168175" yMax="289.282545">---</word>
</line>
<line xMin="155.176025" yMin="293.147658" xMax="167.168175" yMax="304.406867">
<word xMin="155.176025" yMin="293.147658" xMax="167.168175" yMax="304.406867">---</word>
</line>
<line xMin="155.176025" yMin="308.271979" xMax="167.168175" yMax="319.531189">
<word xMin="155.176025" yMin="308.271979" xMax="167.168175" yMax="319.531189">---</word>
</line>
<line xMin="155.176025" yMin="323.396269" xMax="167.168175" yMax="334.655479">
<word xMin="155.176025" yMin="323.396269" xMax="167.168175" yMax="334.655479">---</word>
</line>
<line xMin="155.176025" yMin="338.520561" xMax="175.198955" yMax="349.779771">
<word xMin="155.176025" yMin="338.520561" xMax="175.198955" yMax="349.779771">416</word>
</line>
<line xMin="155.176025" yMin="353.644882" xMax="167.168175" yMax="364.904092">
<word xMin="155.176025" yMin="353.644882" xMax="167.168175" yMax="364.904092">---</word>
</line>
<line xMin="155.176025" yMin="368.769203" xMax="167.168175" yMax="380.028413">
<word xMin="155.176025" yMin="368.769203" xMax="167.168175" yMax="380.028413">---</word>
</line>
<line xMin="155.176025" yMin="383.893495" xMax="175.198955" yMax="395.152705">
<word xMin="155.176025" yMin="383.893495" xMax="175.198955" yMax="395.152705">322</word>
</line>
<line xMin="155.176025" yMin="399.017816" xMax="175.198955" yMax="410.277026">
<word xMin="155.176025" yMin="399.017816" xMax="175.198955" yMax="410.277026">220</word>
</line>
<line xMin="155.176025" yMin="414.142138" xMax="175.198955" yMax="425.401348">
<word xMin="155.176025" yMin="414.142138" xMax="175.198955" yMax="425.401348">220</word>
</line>
<line xMin="155.176025" yMin="429.266460" xMax="167.168175" yMax="440.525670">
<word xMin="155.176025" yMin="429.266460" xMax="167.168175" yMax="440.525670">---</word>
</line>
<line xMin="155.176025" yMin="444.390750" xMax="167.168175" yMax="455.649960">
<word xMin="155.176025" yMin="444.390750" xMax="167.168175" yMax="455.649960">---</word>
</line>
<line xMin="155.176025" yMin="459.515072" xMax="175.198955" yMax="470.774282">
<word xMin="155.176025" yMin="459.515072" xMax="175.198955" yMax="470.774282">218</word>
</line>
<line xMin="155.176025" yMin="474.639394" xMax="175.198955" yMax="485.898604">
<word xMin="155.176025" yMin="474.639394" xMax="175.198955" yMax="485.898604">218</word>
</line>
<line xMin="155.176025" yMin="489.763685" xMax="175.198955" yMax="501.022894">
<word xMin="155.176025" yMin="489.763685" xMax="175.198955" yMax="501.022894">126</word>
</line>
<line xMin="155.176025" yMin="504.887976" xMax="175.198955" yMax="516.147186">
<word xMin="155.176025" yMin="504.887976" xMax="175.198955" yMax="516.147186">126</word>
</line>
<line xMin="155.176025" yMin="520.012297" xMax="167.168175" yMax="531.271507">
<word xMin="155.176025" yMin="520.012297" xMax="167.168175" yMax="531.271507">---</word>
</line>
<line xMin="155.176025" yMin="535.136619" xMax="167.168175" yMax="546.395829">
<word xMin="155.176025" yMin="535.136619" xMax="167.168175" yMax="546.395829">---</word>
</line>
<line xMin="155.176025" yMin="550.260940" xMax="167.168175" yMax="561.520150">
<word xMin="155.176025" yMin="550.260940" xMax="167.168175" yMax="561.520150">---</word>
</line>
<line xMin="155.176025" yMin="565.385262" xMax="167.168175" yMax="576.644471">
<word xMin="155.176025" yMin="565.385262" xMax="167.168175" yMax="576.644471">---</word>
</line>
<line xMin="155.176025" yMin="580.509523" xMax="167.168175" yMax="591.768733">
<word xMin="155.176025" yMin="580.509523" xMax="167.168175" yMax="591.768733">---</word>
</line>
<line xMin="155.176025" yMin="595.633844" xMax="175.198955" yMax="606.893054">
<word xMin="155.176025" yMin="595.633844" xMax="175.198955" yMax="606.893054">324</word>
</line>
<line xMin="155.176025" yMin="610.758166" xMax="175.198955" yMax="622.017376">
<word xMin="155.176025" yMin="610.758166" xMax="175.198955" yMax="622.017376">???</word>
</line>
<line xMin="155.176025" yMin="625.882487" xMax="167.168175" yMax="637.141697">
<word xMin="155.176025" yMin="625.882487" xMax="167.168175" yMax="637.141697">---</word>
</line>
<line xMin="155.176025" yMin="641.006809" xMax="175.198955" yMax="652.266018">
<word xMin="155.176025" yMin="641.006809" xMax="175.198955" yMax="652.266018">412</word>
</line>
<line xMin="155.176025" yMin="656.131130" xMax="167.168175" yMax="667.390340">
<word xMin="155.176025" yMin="656.131130" xMax="167.168175" yMax="667.390340">---</word>
</line>
<line xMin="155.176025" yMin="671.255452" xMax="167.168175" yMax="682.514662">
<word xMin="155.176025" yMin="671.255452" xMax="167.168175" yMax="682.514662">---</word>
</line>
</block>
</flow>
<flow>
<block xMin="183.193911" yMin="114.536755" xMax="216.505439" yMax="140.920287">
<line xMin="183.193911" yMin="114.536755" xMax="209.218917" yMax="125.795965">
<word xMin="183.193911" yMin="114.536755" xMax="209.218917" yMax="125.795965">nach</word>
</line>
<line xMin="183.193911" yMin="129.661077" xMax="216.505439" yMax="140.920287">
<word xMin="183.193911" yMin="129.661077" xMax="216.505439" yMax="140.920287">Entfall</word>
</line>
</block>
</flow>
<flow>
<block xMin="260.781924" yMin="114.536755" xMax="349.948782" yMax="125.795965">
<line xMin="260.781924" yMin="114.536755" xMax="349.948782" yMax="125.795965">
<word xMin="260.781924" yMin="114.536755" xMax="349.948782" yMax="125.795965">Vertretungs-Text</word>
</line>
</block>
<block xMin="260.781924" yMin="144.785399" xMax="407.280624" yMax="215.101417">
<line xMin="260.781924" yMin="144.785399" xMax="407.280624" yMax="156.044609">
<word xMin="260.781924" yMin="144.785399" xMax="278.788155" yMax="156.044609">Hei</word>
<word xMin="281.849215" yMin="144.785399" xMax="285.174366" yMax="156.044609">/</word>
<word xMin="288.319454" yMin="144.785399" xMax="343.214452" yMax="156.044609">Aufgaben,</word>
<word xMin="346.383549" yMin="144.785399" xMax="407.280624" yMax="156.044609">Arbeitsheft!</word>
</line>
<line xMin="260.781924" yMin="159.909659" xMax="332.578771" yMax="171.168869">
<word xMin="260.781924" yMin="159.909659" xMax="271.441613" yMax="171.168869">Ei</word>
<word xMin="274.550689" yMin="159.909659" xMax="277.875840" yMax="171.168869">/</word>
<word xMin="281.008924" yMin="159.909659" xMax="332.578771" yMax="171.168869">Aufgaben</word>
</line>
<line xMin="260.781924" yMin="175.033981" xMax="332.578771" yMax="186.293190">
<word xMin="260.781924" yMin="175.033981" xMax="271.441613" yMax="186.293190">Ei</word>
<word xMin="274.550689" yMin="175.033981" xMax="277.875840" yMax="186.293190">/</word>
<word xMin="281.008924" yMin="175.033981" xMax="332.578771" yMax="186.293190">Aufgaben</word>
</line>
<line xMin="260.781924" yMin="190.158302" xMax="336.648179" yMax="201.417512">
<word xMin="260.781924" yMin="190.158302" xMax="275.451001" yMax="201.417512"></word>
<word xMin="278.620097" yMin="190.158302" xMax="281.945248" yMax="201.417512">/</word>
<word xMin="285.078332" yMin="190.158302" xMax="336.648179" yMax="201.417512">Aufgaben</word>
</line>
<line xMin="260.781924" yMin="203.842207" xMax="340.009343" yMax="215.101417">
<word xMin="260.781924" yMin="203.842207" xMax="279.304334" yMax="215.101417">We</word>
<word xMin="282.209339" yMin="203.842207" xMax="285.534490" yMax="215.101417">/</word>
<word xMin="288.439496" yMin="203.842207" xMax="340.009343" yMax="215.101417">Aufgaben</word>
</line>
</block>
</flow>
<flow>
<block xMin="183.193911" yMin="218.966528" xMax="216.505439" yMax="259.033902">
<line xMin="183.193911" yMin="218.966528" xMax="216.505439" yMax="230.225738">
<word xMin="183.193911" yMin="218.966528" xMax="216.505439" yMax="230.225738">Entfall</word>
</line>
<line xMin="183.193911" yMin="232.650432" xMax="216.505439" yMax="243.909642">
<word xMin="183.193911" yMin="232.650432" xMax="216.505439" yMax="243.909642">Entfall</word>
</line>
<line xMin="183.193911" yMin="247.774692" xMax="216.505439" yMax="259.033902">
<word xMin="183.193911" yMin="247.774692" xMax="216.505439" yMax="259.033902">Entfall</word>
</line>
</block>
<block xMin="260.781924" yMin="262.899014" xMax="297.466620" yMax="274.158224">
<line xMin="260.781924" yMin="262.899014" xMax="297.466620" yMax="274.158224">
<word xMin="260.781924" yMin="262.899014" xMax="276.771458" yMax="274.158224">KA</word>
<word xMin="280.144625" yMin="262.899014" xMax="297.466620" yMax="274.158224">Fkr</word>
</line>
</block>
<block xMin="183.193911" yMin="278.023335" xMax="249.816967" yMax="334.655479">
<line xMin="183.193911" yMin="278.023335" xMax="249.816967" yMax="289.282545">
<word xMin="183.193911" yMin="278.023335" xMax="233.179210" yMax="289.282545">Mi-12.12.</word>
<word xMin="236.564381" yMin="278.023335" xMax="239.889532" yMax="289.282545">/</word>
<word xMin="243.142658" yMin="278.023335" xMax="249.816967" yMax="289.282545">1</word>
</line>
<line xMin="183.193911" yMin="293.147658" xMax="249.816967" yMax="304.406867">
<word xMin="183.193911" yMin="293.147658" xMax="233.179210" yMax="304.406867">Mi-12.12.</word>
<word xMin="236.564381" yMin="293.147658" xMax="239.889532" yMax="304.406867">/</word>
<word xMin="243.142658" yMin="293.147658" xMax="249.816967" yMax="304.406867">2</word>
</line>
<line xMin="183.193911" yMin="308.271979" xMax="216.505439" yMax="319.531189">
<word xMin="183.193911" yMin="308.271979" xMax="216.505439" yMax="319.531189">Entfall</word>
</line>
<line xMin="183.193911" yMin="323.396269" xMax="216.505439" yMax="334.655479">
<word xMin="183.193911" yMin="323.396269" xMax="216.505439" yMax="334.655479">Entfall</word>
</line>
</block>
<block xMin="183.193911" yMin="353.644882" xMax="216.505439" yMax="380.028413">
<line xMin="183.193911" yMin="353.644882" xMax="216.505439" yMax="364.904092">
<word xMin="183.193911" yMin="353.644882" xMax="216.505439" yMax="364.904092">Entfall</word>
</line>
<line xMin="183.193911" yMin="368.769203" xMax="216.505439" yMax="380.028413">
<word xMin="183.193911" yMin="368.769203" xMax="216.505439" yMax="380.028413">Entfall</word>
</line>
</block>
</flow>
<flow>
<block xMin="260.781924" yMin="338.520561" xMax="336.648179" yMax="364.904092">
<line xMin="260.781924" yMin="338.520561" xMax="336.648179" yMax="349.779771">
<word xMin="260.781924" yMin="338.520561" xMax="275.451001" yMax="349.779771">Ku</word>
<word xMin="278.620097" yMin="338.520561" xMax="281.945248" yMax="349.779771">/</word>
<word xMin="285.078332" yMin="338.520561" xMax="336.648179" yMax="349.779771">Aufgaben</word>
</line>
<line xMin="260.781924" yMin="353.644882" xMax="315.917005" yMax="364.904092">
<word xMin="260.781924" yMin="353.644882" xMax="296.758375" yMax="364.904092">KEINE</word>
<word xMin="299.927471" yMin="353.644882" xMax="315.917005" yMax="364.904092">KA</word>
</line>
</block>
<block xMin="260.781924" yMin="383.893495" xMax="339.889301" yMax="425.401348">
<line xMin="260.781924" yMin="383.893495" xMax="295.954096" yMax="395.152705">
<word xMin="260.781924" yMin="383.893495" xMax="295.954096" yMax="395.152705">Raum!</word>
</line>
<line xMin="260.781924" yMin="399.017816" xMax="339.889301" yMax="410.277026">
<word xMin="260.781924" yMin="399.017816" xMax="278.788155" yMax="410.277026">Hei</word>
<word xMin="281.849215" yMin="399.017816" xMax="285.174366" yMax="410.277026">/</word>
<word xMin="288.319454" yMin="399.017816" xMax="339.889301" yMax="410.277026">Aufgaben</word>
</line>
<line xMin="260.781924" yMin="414.142138" xMax="339.889301" yMax="425.401348">
<word xMin="260.781924" yMin="414.142138" xMax="278.788155" yMax="425.401348">Hei</word>
<word xMin="281.849215" yMin="414.142138" xMax="285.174366" yMax="425.401348">/</word>
<word xMin="288.319454" yMin="414.142138" xMax="339.889301" yMax="425.401348">Aufgaben</word>
</line>
</block>
</flow>
<flow>
<block xMin="183.193911" yMin="429.266460" xMax="252.577923" yMax="455.649960">
<line xMin="183.193911" yMin="429.266460" xMax="252.577923" yMax="440.525670">
<word xMin="183.193911" yMin="429.266460" xMax="235.880144" yMax="440.525670">Do-13.12.</word>
<word xMin="239.313332" yMin="429.266460" xMax="242.638483" yMax="440.525670">/</word>
<word xMin="245.903613" yMin="429.266460" xMax="252.577923" yMax="440.525670">3</word>
</line>
<line xMin="183.193911" yMin="444.390750" xMax="252.577923" yMax="455.649960">
<word xMin="183.193911" yMin="444.390750" xMax="235.880144" yMax="455.649960">Do-13.12.</word>
<word xMin="239.313332" yMin="444.390750" xMax="242.638483" yMax="455.649960">/</word>
<word xMin="245.903613" yMin="444.390750" xMax="252.577923" yMax="455.649960">4</word>
</line>
</block>
</flow>
<flow>
<block xMin="183.193911" yMin="520.012297" xMax="252.577923" yMax="591.768733">
<line xMin="183.193911" yMin="520.012297" xMax="252.577923" yMax="531.271507">
<word xMin="183.193911" yMin="520.012297" xMax="235.880144" yMax="531.271507">Do-13.12.</word>
<word xMin="239.313332" yMin="520.012297" xMax="242.638483" yMax="531.271507">/</word>
<word xMin="245.903613" yMin="520.012297" xMax="252.577923" yMax="531.271507">5</word>
</line>
<line xMin="183.193911" yMin="535.136619" xMax="252.577923" yMax="546.395829">
<word xMin="183.193911" yMin="535.136619" xMax="235.880144" yMax="546.395829">Do-13.12.</word>
<word xMin="239.313332" yMin="535.136619" xMax="242.638483" yMax="546.395829">/</word>
<word xMin="245.903613" yMin="535.136619" xMax="252.577923" yMax="546.395829">6</word>
</line>
<line xMin="183.193911" yMin="550.260940" xMax="216.505439" yMax="561.520150">
<word xMin="183.193911" yMin="550.260940" xMax="216.505439" yMax="561.520150">Entfall</word>
</line>
<line xMin="183.193911" yMin="565.385262" xMax="216.505439" yMax="576.644471">
<word xMin="183.193911" yMin="565.385262" xMax="216.505439" yMax="576.644471">Entfall</word>
</line>
<line xMin="183.193911" yMin="580.509523" xMax="216.505439" yMax="591.768733">
<word xMin="183.193911" yMin="580.509523" xMax="216.505439" yMax="591.768733">Entfall</word>
</line>
</block>
<block xMin="260.781924" yMin="595.633844" xMax="424.302514" yMax="606.893054">
<line xMin="260.781924" yMin="595.633844" xMax="424.302514" yMax="606.893054">
<word xMin="260.781924" yMin="595.633844" xMax="299.459309" yMax="606.893054">geteilte</word>
<word xMin="302.568385" yMin="595.633844" xMax="349.264546" yMax="606.893054">Gruppen</word>
<word xMin="352.493663" yMin="595.633844" xMax="417.724238" yMax="606.893054">Schwimmen</word>
<word xMin="420.977364" yMin="595.633844" xMax="424.302514" yMax="606.893054">/</word>
</line>
</block>
<block xMin="183.193911" yMin="625.882487" xMax="216.505439" yMax="637.141697">
<line xMin="183.193911" yMin="625.882487" xMax="216.505439" yMax="637.141697">
<word xMin="183.193911" yMin="625.882487" xMax="216.505439" yMax="637.141697">Entfall</word>
</line>
</block>
<block xMin="260.781924" yMin="641.006809" xMax="295.954096" yMax="652.266018">
<line xMin="260.781924" yMin="641.006809" xMax="295.954096" yMax="652.266018">
<word xMin="260.781924" yMin="641.006809" xMax="295.954096" yMax="652.266018">Raum!</word>
</line>
</block>
<block xMin="183.193911" yMin="656.131130" xMax="216.505439" yMax="682.514662">
<line xMin="183.193911" yMin="656.131130" xMax="216.505439" yMax="667.390340">
<word xMin="183.193911" yMin="656.131130" xMax="216.505439" yMax="667.390340">Entfall</word>
</line>
<line xMin="183.193911" yMin="671.255452" xMax="216.505439" yMax="682.514662">
<word xMin="183.193911" yMin="671.255452" xMax="216.505439" yMax="682.514662">Entfall</word>
</line>
</block>
</flow>
<flow>
<block xMin="471.993720" yMin="6.712403" xMax="537.937342" yMax="19.097534">
<line xMin="471.993720" yMin="6.712403" xMax="537.937342" yMax="19.097534">
<word xMin="471.993720" yMin="6.712403" xMax="504.978736" yMax="19.097534">Untis</word>
<word xMin="508.570379" yMin="6.712403" xMax="537.937342" yMax="19.097534">2017</word>
</line>
</block>
<block xMin="447.567867" yMin="21.630261" xMax="537.238900" yMax="32.889471">
<line xMin="447.567867" yMin="21.630261" xMax="537.238900" yMax="32.889471">
<word xMin="447.567867" yMin="21.630261" xMax="507.876739" yMax="32.889471">13.12.2018</word>
<word xMin="513.890820" yMin="21.630261" xMax="537.238900" yMax="32.889471">9:04</word>
</line>
</block>
</flow>
</page>
<page width="595.440000" height="841.680000">
</page>
</doc>
</body>
</html>

Binary file not shown.

View file

@ -0,0 +1,82 @@
D-70563 FANNY-LEICHT-GYMN. Schuljahr 2018/19 - 1. Halbjahr Untis 2017
STUTTGART, F.-LEICHT-STR. 13 gültig ab 10. September 2018 13.12.2018 9:04
Klasse 13.12. / Donnerstag Woche-A
Ordnungsdienst: Klasse 10a
Kl. Std. Vertr. Fach Rau nach Vertretungs-Text
5b 1 Hei D --- Entfall
5b 2 Fu D 114 Hei / Aufgaben, Arbeitsheft!
5b 3 Oe M 114 Ei / Aufgaben
5b 4 Rm M 114 Ei / Aufgaben
6bc 5 Sf EvR 321 Bü / Aufgaben
6bc 5 Dk KR 121 We / Aufgaben
6bc 6 Bü EvR --- Entfall
6bc 6 We KR --- Entfall
6d 6 Ku Ek --- Entfall
7b 2 Ga G 414 KA Fkr
7b 8 Gg BK --- Mi-12.12. / 1
7b 9 Gg BK --- Mi-12.12. / 2
7c 8-9 Gw G --- Entfall
7d 1 Ku D --- Entfall
7d 2 Oz D 416 Ku / Aufgaben
8a 1-2 Ei Ch --- Entfall KEINE KA
D-70563 FANNY-LEICHT-GYMN. Schuljahr 2018/19 - 1. Halbjahr Untis 2017
STUTTGART, F.-LEICHT-STR. 13 gültig ab 10. September 2018 13.12.2018 9:04
Klasse 13.12. / Donnerstag Woche-A
Ordnungsdienst: Klasse 10a
Kl. Std. Vertr. Fach Rau nach Vertretungs-Text
9ac 8-9 Lk SpJ --- Entfall
9c 1-2 Jw Gk 322 Raum!
9c 3 Hf D 220 Hei / Aufgaben
9c 4 Bkn D 220 Hei / Aufgaben
9d 1 Rt Gk --- Do-13.12. / 3
9d 2 Rt Gk --- Do-13.12. / 4
9d 3 Rt Gk 218
9d 4 Rt Gk 218
9d 5 Ni BK 126
9d 6 Ni BK 126
9d 8 Ni BK --- Do-13.12. / 5
9d 9 Ni BK --- Do-13.12. / 6
10b 10 - 11 Fe Ph --- Entfall
11 3-4 Ft g4 --- Entfall
11 5 Ei M1 --- Entfall
11 7 Gt sem1 324 geteilte Gruppen Schwimmen /
11 8-9 Ro sem1 ???
11 10 - 11 Lk sp3 --- Entfall
12 1-2 Ni bk1 412 Raum!
12 5 Ku D2 --- Entfall
1112 8-9 Fe vma --- Entfall
D-70563 FANNY-LEICHT-GYMN. Schuljahr 2018/19 - 1. Halbjahr Untis 2017
STUTTGART, F.-LEICHT-STR. 13 gültig ab 10. September 2018 13.12.2018 9:04
Klasse 13.12. / Donnerstag Woche-A
Ordnungsdienst: Klasse 10a
Kl. Std. Vertr. Fach Rau nach Vertretungs-Text
12ac 8-9 Lk SpJ --- Entfall
13c 1-2 Jw Gk 322 Raum!
13c 3 Hf D 220 Hei / Aufgaben
913c 4 Bkn D 220 Hei / Aufgaben
913d 1 Rt Gk --- Do-13.12. / 3
13d 2 Rt Gk --- Do-13.12. / 4
92d 3 Rt Gk 218
91d 4 Rt Gk 218
92d 5 Ni BK 126
91d 6 Ni BK 126
91d 8 Ni BK --- Do-13.12. / 5
91d 9 Ni BK --- Do-13.12. / 6
130b 10 - 11 Fe Ph --- Entfall
131 3-4 Ft g4 --- Entfall
131 5 Ei M1 --- Entfall
131 7 Gt sem1 324 geteilte Gruppen Schwimmen /
131 8-9 Ro sem1 ???
131 10 - 11 Lk sp3 --- Entfall
123 1-2 Ni bk1 412 Raum!
122 5 Ku D2 --- Entfall
11132 8-9 Fe vma --- Entfall

View file

@ -0,0 +1,455 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">
<pdf2xml producer="poppler" version="0.68.0">
<page number="1" position="absolute" top="0" left="0" height="1262" width="893">
<fontspec id="0" size="17" family="Times" color="#000000"/>
<fontspec id="1" size="16" family="Times" color="#000000"/>
<fontspec id="2" size="25" family="Times" color="#000000"/>
<fontspec id="3" size="14" family="Times" color="#000000"/>
<fontspec id="4" size="16" family="Times" color="#000000"/>
<text top="10" left="3" width="297" height="19" font="0"><b>D-70563 FANNY-LEICHT-GYMN.</b></text>
<text top="32" left="3" width="275" height="17" font="1">STUTTGART, F.-LEICHT-STR. 13</text>
<text top="9" left="332" width="248" height="17" font="1">Schuljahr 2018/19 - 1. Halbjahr</text>
<text top="32" left="332" width="236" height="17" font="1">gültig ab 10. September 2018</text>
<text top="10" left="708" width="99" height="19" font="0"><b>Untis 2017</b></text>
<text top="32" left="671" width="135" height="17" font="1">13.12.2018 9:04</text>
<text top="64" left="3" width="473" height="25" font="2"><b>Klasse 13.12. / Donnerstag Woche-A</b></text>
<text top="111" left="3" width="203" height="15" font="3">Ordnungsdienst: Klasse 10a</text>
<text top="172" left="3" width="21" height="17" font="1">Kl.</text>
<text top="172" left="55" width="32" height="17" font="1">Std.</text>
<text top="172" left="123" width="191" height="17" font="1">Vertr. Fach Rau nach</text>
<text top="172" left="391" width="134" height="17" font="1">Vertretungs-Text</text>
<text top="194" left="3" width="20" height="17" font="1">5b</text>
<text top="194" left="55" width="10" height="17" font="1">1</text>
<text top="194" left="123" width="27" height="17" font="4"><i>Hei</i></text>
<text top="194" left="178" width="13" height="17" font="4"><i>D</i></text>
<text top="194" left="233" width="18" height="17" font="1">---</text>
<text top="194" left="275" width="50" height="17" font="1">Entfall</text>
<text top="217" left="3" width="20" height="17" font="1">5b</text>
<text top="217" left="55" width="10" height="17" font="1">2</text>
<text top="217" left="123" width="21" height="17" font="1">Fu</text>
<text top="217" left="178" width="13" height="17" font="1">D</text>
<text top="217" left="233" width="30" height="17" font="1">114</text>
<text top="217" left="391" width="220" height="17" font="1">Hei / Aufgaben, Arbeitsheft!</text>
<text top="240" left="3" width="20" height="17" font="1">5b</text>
<text top="240" left="55" width="10" height="17" font="1">3</text>
<text top="240" left="123" width="24" height="17" font="1">Oe</text>
<text top="240" left="178" width="15" height="17" font="1">M</text>
<text top="240" left="233" width="30" height="17" font="1">114</text>
<text top="240" left="391" width="108" height="17" font="1">Ei / Aufgaben</text>
<text top="263" left="3" width="20" height="17" font="1">5b</text>
<text top="263" left="55" width="10" height="17" font="1">4</text>
<text top="263" left="123" width="28" height="17" font="1">Rm</text>
<text top="263" left="178" width="15" height="17" font="1">M</text>
<text top="263" left="233" width="30" height="17" font="1">114</text>
<text top="263" left="391" width="108" height="17" font="1">Ei / Aufgaben</text>
<text top="285" left="3" width="29" height="17" font="1">6bc</text>
<text top="285" left="55" width="10" height="17" font="1">5</text>
<text top="285" left="123" width="17" height="17" font="1">Sf</text>
<text top="285" left="178" width="34" height="17" font="1">EvR</text>
<text top="285" left="233" width="30" height="17" font="1">321</text>
<text top="285" left="391" width="114" height="17" font="1">Bü / Aufgaben</text>
<text top="306" left="3" width="29" height="17" font="1">6bc</text>
<text top="306" left="55" width="10" height="17" font="1">5</text>
<text top="306" left="123" width="22" height="17" font="1">Dk</text>
<text top="306" left="178" width="25" height="17" font="1">KR</text>
<text top="306" left="233" width="30" height="17" font="1">121</text>
<text top="306" left="391" width="119" height="17" font="1">We / Aufgaben</text>
<text top="328" left="3" width="29" height="17" font="1">6bc</text>
<text top="328" left="55" width="10" height="17" font="1">6</text>
<text top="328" left="123" width="22" height="17" font="4"><i></i></text>
<text top="328" left="178" width="34" height="17" font="4"><i>EvR</i></text>
<text top="328" left="233" width="18" height="17" font="1">---</text>
<text top="328" left="275" width="50" height="17" font="1">Entfall</text>
<text top="349" left="3" width="29" height="17" font="1">6bc</text>
<text top="349" left="55" width="10" height="17" font="1">6</text>
<text top="349" left="123" width="27" height="17" font="4"><i>We</i></text>
<text top="349" left="178" width="25" height="17" font="4"><i>KR</i></text>
<text top="349" left="233" width="18" height="17" font="1">---</text>
<text top="349" left="275" width="50" height="17" font="1">Entfall</text>
<text top="372" left="3" width="20" height="17" font="1">6d</text>
<text top="372" left="55" width="10" height="17" font="1">6</text>
<text top="371" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="371" left="178" width="21" height="17" font="4"><i>Ek</i></text>
<text top="372" left="233" width="18" height="17" font="1">---</text>
<text top="372" left="275" width="50" height="17" font="1">Entfall</text>
<text top="394" left="3" width="20" height="17" font="1">7b</text>
<text top="394" left="55" width="10" height="17" font="1">2</text>
<text top="394" left="123" width="24" height="17" font="1">Ga</text>
<text top="394" left="178" width="14" height="17" font="1">G</text>
<text top="394" left="233" width="30" height="17" font="1">414</text>
<text top="394" left="391" width="55" height="17" font="1">KA Fkr</text>
<text top="417" left="3" width="20" height="17" font="1">7b</text>
<text top="417" left="55" width="10" height="17" font="1">8</text>
<text top="417" left="123" width="24" height="17" font="4"><i>Gg</i></text>
<text top="417" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="417" left="233" width="18" height="17" font="1">---</text>
<text top="417" left="275" width="100" height="17" font="1">Mi-12.12. / 1</text>
<text top="440" left="3" width="20" height="17" font="1">7b</text>
<text top="440" left="55" width="10" height="17" font="1">9</text>
<text top="439" left="123" width="24" height="17" font="4"><i>Gg</i></text>
<text top="439" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="440" left="233" width="18" height="17" font="1">---</text>
<text top="440" left="275" width="100" height="17" font="1">Mi-12.12. / 2</text>
<text top="462" left="3" width="19" height="17" font="1">7c</text>
<text top="462" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="462" left="123" width="27" height="17" font="4"><i>Gw</i></text>
<text top="462" left="178" width="14" height="17" font="4"><i>G</i></text>
<text top="462" left="233" width="18" height="17" font="1">---</text>
<text top="462" left="275" width="50" height="17" font="1">Entfall</text>
<text top="485" left="3" width="20" height="17" font="1">7d</text>
<text top="485" left="55" width="10" height="17" font="1">1</text>
<text top="485" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="485" left="178" width="13" height="17" font="4"><i>D</i></text>
<text top="485" left="233" width="18" height="17" font="1">---</text>
<text top="485" left="275" width="50" height="17" font="1">Entfall</text>
<text top="508" left="3" width="20" height="17" font="1">7d</text>
<text top="508" left="55" width="10" height="17" font="1">2</text>
<text top="508" left="123" width="23" height="17" font="1">Oz</text>
<text top="508" left="178" width="13" height="17" font="1">D</text>
<text top="508" left="233" width="30" height="17" font="1">416</text>
<text top="508" left="391" width="114" height="17" font="1">Ku / Aufgaben</text>
<text top="530" left="3" width="20" height="17" font="1">8a</text>
<text top="530" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="530" left="123" width="16" height="17" font="4"><i>Ei</i></text>
<text top="530" left="178" width="23" height="17" font="4"><i>Ch</i></text>
<text top="530" left="233" width="18" height="17" font="1">---</text>
<text top="530" left="275" width="50" height="17" font="1">Entfall</text>
<text top="530" left="391" width="83" height="17" font="1">KEINE KA</text>
<text top="553" left="3" width="29" height="17" font="1">9ac</text>
<text top="553" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="553" left="123" width="19" height="17" font="4"><i>Lk</i></text>
<text top="553" left="178" width="31" height="17" font="4"><i>SpJ</i></text>
<text top="553" left="233" width="18" height="17" font="1">---</text>
<text top="553" left="275" width="50" height="17" font="1">Entfall</text>
<text top="576" left="3" width="19" height="17" font="1">9c</text>
<text top="576" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="576" left="123" width="22" height="17" font="1">Jw</text>
<text top="576" left="178" width="23" height="17" font="1">Gk</text>
<text top="576" left="233" width="30" height="17" font="1">322</text>
<text top="576" left="391" width="53" height="17" font="1">Raum!</text>
<text top="599" left="3" width="19" height="17" font="1">9c</text>
<text top="599" left="55" width="10" height="17" font="1">3</text>
<text top="599" left="123" width="18" height="17" font="1">Hf</text>
<text top="599" left="178" width="13" height="17" font="1">D</text>
<text top="599" left="233" width="30" height="17" font="1">220</text>
<text top="599" left="391" width="119" height="17" font="1">Hei / Aufgaben</text>
<text top="621" left="3" width="19" height="17" font="1">9c</text>
<text top="621" left="55" width="10" height="17" font="1">4</text>
<text top="621" left="123" width="31" height="17" font="1">Bkn</text>
<text top="621" left="178" width="13" height="17" font="1">D</text>
<text top="621" left="233" width="30" height="17" font="1">220</text>
<text top="621" left="391" width="119" height="17" font="1">Hei / Aufgaben</text>
<text top="644" left="3" width="20" height="17" font="1">9d</text>
<text top="644" left="55" width="10" height="17" font="1">1</text>
<text top="644" left="123" width="18" height="17" font="4"><i>Rt</i></text>
<text top="644" left="178" width="23" height="17" font="4"><i>Gk</i></text>
<text top="644" left="233" width="18" height="17" font="1">---</text>
<text top="644" left="275" width="104" height="17" font="1">Do-13.12. / 3</text>
<text top="667" left="3" width="20" height="17" font="1">9d</text>
<text top="667" left="55" width="10" height="17" font="1">2</text>
<text top="666" left="123" width="18" height="17" font="4"><i>Rt</i></text>
<text top="666" left="178" width="23" height="17" font="4"><i>Gk</i></text>
<text top="667" left="233" width="18" height="17" font="1">---</text>
<text top="667" left="275" width="104" height="17" font="1">Do-13.12. / 4</text>
<text top="689" left="3" width="20" height="17" font="1">9d</text>
<text top="689" left="55" width="10" height="17" font="1">3</text>
<text top="689" left="123" width="18" height="17" font="1">Rt</text>
<text top="689" left="178" width="23" height="17" font="1">Gk</text>
<text top="689" left="233" width="30" height="17" font="1">218</text>
<text top="712" left="3" width="20" height="17" font="1">9d</text>
<text top="712" left="55" width="10" height="17" font="1">4</text>
<text top="712" left="123" width="18" height="17" font="1">Rt</text>
<text top="712" left="178" width="23" height="17" font="1">Gk</text>
<text top="712" left="233" width="30" height="17" font="1">218</text>
<text top="735" left="3" width="20" height="17" font="1">9d</text>
<text top="735" left="55" width="10" height="17" font="1">5</text>
<text top="735" left="123" width="17" height="17" font="1">Ni</text>
<text top="735" left="178" width="24" height="17" font="1">BK</text>
<text top="735" left="233" width="30" height="17" font="1">126</text>
<text top="757" left="3" width="20" height="17" font="1">9d</text>
<text top="757" left="55" width="10" height="17" font="1">6</text>
<text top="757" left="123" width="17" height="17" font="1">Ni</text>
<text top="757" left="178" width="24" height="17" font="1">BK</text>
<text top="757" left="233" width="30" height="17" font="1">126</text>
<text top="780" left="3" width="20" height="17" font="1">9d</text>
<text top="780" left="55" width="10" height="17" font="1">8</text>
<text top="780" left="123" width="17" height="17" font="4"><i>Ni</i></text>
<text top="780" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="780" left="233" width="18" height="17" font="1">---</text>
<text top="780" left="275" width="104" height="17" font="1">Do-13.12. / 5</text>
<text top="803" left="3" width="20" height="17" font="1">9d</text>
<text top="803" left="55" width="10" height="17" font="1">9</text>
<text top="802" left="123" width="17" height="17" font="4"><i>Ni</i></text>
<text top="802" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="803" left="233" width="18" height="17" font="1">---</text>
<text top="803" left="275" width="104" height="17" font="1">Do-13.12. / 6</text>
<text top="825" left="3" width="30" height="17" font="1">10b</text>
<text top="825" left="55" width="56" height="17" font="1">10 - 11</text>
<text top="825" left="123" width="21" height="17" font="4"><i>Fe</i></text>
<text top="825" left="178" width="22" height="17" font="4"><i>Ph</i></text>
<text top="825" left="233" width="18" height="17" font="1">---</text>
<text top="825" left="275" width="50" height="17" font="1">Entfall</text>
<text top="848" left="3" width="20" height="17" font="1">11</text>
<text top="848" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="848" left="123" width="16" height="17" font="4"><i>Ft</i></text>
<text top="848" left="178" width="20" height="17" font="4"><i>g4</i></text>
<text top="848" left="233" width="18" height="17" font="1">---</text>
<text top="848" left="275" width="50" height="17" font="1">Entfall</text>
<text top="871" left="3" width="20" height="17" font="1">11</text>
<text top="871" left="55" width="10" height="17" font="1">5</text>
<text top="870" left="123" width="16" height="17" font="4"><i>Ei</i></text>
<text top="870" left="178" width="25" height="17" font="4"><i>M1</i></text>
<text top="871" left="233" width="18" height="17" font="1">---</text>
<text top="871" left="275" width="50" height="17" font="1">Entfall</text>
<text top="893" left="3" width="20" height="17" font="1">11</text>
<text top="893" left="55" width="10" height="17" font="1">7</text>
<text top="893" left="123" width="19" height="17" font="1">Gt</text>
<text top="893" left="178" width="85" height="17" font="1">sem1 324</text>
<text top="893" left="391" width="250" height="17" font="1">geteilte Gruppen Schwimmen / </text>
<text top="916" left="3" width="20" height="17" font="1">11</text>
<text top="916" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="916" left="123" width="23" height="17" font="1">Ro</text>
<text top="916" left="178" width="85" height="17" font="1">sem1 ???</text>
<text top="939" left="3" width="20" height="17" font="1">11</text>
<text top="939" left="55" width="56" height="17" font="1">10 - 11</text>
<text top="939" left="123" width="19" height="17" font="4"><i>Lk</i></text>
<text top="939" left="178" width="29" height="17" font="4"><i>sp3</i></text>
<text top="939" left="233" width="18" height="17" font="1">---</text>
<text top="939" left="275" width="50" height="17" font="1">Entfall</text>
<text top="962" left="3" width="20" height="17" font="1">12</text>
<text top="962" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="962" left="123" width="17" height="17" font="1">Ni</text>
<text top="962" left="178" width="29" height="17" font="1">bk1</text>
<text top="962" left="233" width="30" height="17" font="1">412</text>
<text top="962" left="391" width="53" height="17" font="1">Raum!</text>
<text top="984" left="3" width="20" height="17" font="1">12</text>
<text top="984" left="55" width="10" height="17" font="1">5</text>
<text top="984" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="984" left="178" width="23" height="17" font="4"><i>D2</i></text>
<text top="984" left="233" width="18" height="17" font="1">---</text>
<text top="984" left="275" width="50" height="17" font="1">Entfall</text>
<text top="1007" left="3" width="88" height="17" font="1">1112 8 - 9</text>
<text top="1007" left="123" width="21" height="17" font="4"><i>Fe</i></text>
<text top="1007" left="178" width="34" height="17" font="4"><i>vma</i></text>
<text top="1007" left="233" width="18" height="17" font="1">---</text>
<text top="1007" left="275" width="50" height="17" font="1">Entfall</text>
</page>
<page number="2" position="absolute" top="0" left="0" height="1262" width="893">
<text top="10" left="3" width="297" height="19" font="0"><b>D-70563 FANNY-LEICHT-GYMN.</b></text>
<text top="32" left="3" width="275" height="17" font="1">STUTTGART, F.-LEICHT-STR. 13</text>
<text top="9" left="332" width="248" height="17" font="1">Schuljahr 2018/19 - 1. Halbjahr</text>
<text top="32" left="332" width="236" height="17" font="1">gültig ab 10. September 2018</text>
<text top="10" left="708" width="99" height="19" font="0"><b>Untis 2017</b></text>
<text top="32" left="671" width="135" height="17" font="1">13.12.2018 8:11</text>
<text top="64" left="3" width="413" height="25" font="2"><b>Klasse 14.12. / Freitag Woche-A</b></text>
<text top="111" left="3" width="203" height="15" font="3">Ordnungsdienst: Klasse 10a</text>
<text top="172" left="3" width="21" height="17" font="1">Kl.</text>
<text top="172" left="55" width="235" height="17" font="1">Std. Vertr. Fach Rau nach</text>
<text top="172" left="398" width="134" height="17" font="1">Vertretungs-Text</text>
<text top="194" left="3" width="62" height="17" font="1">5abc 1</text>
<text top="194" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="194" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="194" left="209" width="18" height="17" font="1">---</text>
<text top="194" left="251" width="50" height="17" font="1">Entfall</text>
<text top="215" left="3" width="20" height="17" font="1">5a</text>
<text top="215" left="55" width="10" height="17" font="1">1</text>
<text top="215" left="102" width="22" height="17" font="4"><i></i></text>
<text top="215" left="157" width="34" height="17" font="4"><i>EvR</i></text>
<text top="215" left="209" width="18" height="17" font="1">---</text>
<text top="215" left="251" width="50" height="17" font="1">Entfall</text>
<text top="238" left="3" width="62" height="17" font="1">5abc 2</text>
<text top="238" left="102" width="22" height="17" font="1">Jw</text>
<text top="238" left="157" width="25" height="17" font="1">KR</text>
<text top="238" left="209" width="30" height="17" font="1">123</text>
<text top="238" left="398" width="119" height="17" font="1">We / Aufgaben</text>
<text top="258" left="3" width="20" height="17" font="1">5a</text>
<text top="258" left="55" width="10" height="17" font="1">2</text>
<text top="258" left="102" width="23" height="17" font="1">Ng</text>
<text top="258" left="157" width="34" height="17" font="1">EvR</text>
<text top="258" left="209" width="30" height="17" font="1">321</text>
<text top="258" left="398" width="114" height="17" font="1">Bü / Aufgaben</text>
<text top="281" left="3" width="20" height="17" font="1">5d</text>
<text top="281" left="55" width="10" height="17" font="1">3</text>
<text top="281" left="102" width="20" height="17" font="1">Lo</text>
<text top="281" left="157" width="13" height="17" font="1">D</text>
<text top="281" left="209" width="30" height="17" font="1">122</text>
<text top="281" left="398" width="171" height="17" font="1">anstatt 17.12., 1. Std.</text>
<text top="304" left="3" width="20" height="17" font="1">5d</text>
<text top="304" left="55" width="10" height="17" font="1">4</text>
<text top="304" left="102" width="20" height="17" font="1">Lo</text>
<text top="304" left="157" width="13" height="17" font="1">D</text>
<text top="304" left="209" width="30" height="17" font="1">122</text>
<text top="304" left="398" width="166" height="17" font="1">anstatt 19.12., 1 Std.</text>
<text top="326" left="3" width="20" height="17" font="1">6a</text>
<text top="326" left="55" width="10" height="17" font="1">6</text>
<text top="326" left="102" width="23" height="17" font="4"><i>He</i></text>
<text top="326" left="157" width="12" height="17" font="4"><i>E</i></text>
<text top="326" left="209" width="18" height="17" font="1">---</text>
<text top="326" left="251" width="50" height="17" font="1">Entfall</text>
<text top="349" left="3" width="62" height="17" font="1">6acd 7</text>
<text top="349" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="349" left="157" width="26" height="17" font="4"><i>MF</i></text>
<text top="349" left="209" width="18" height="17" font="1">---</text>
<text top="349" left="251" width="50" height="17" font="1">Entfall</text>
<text top="372" left="3" width="19" height="17" font="1">6c</text>
<text top="372" left="55" width="10" height="17" font="1">1</text>
<text top="371" left="102" width="22" height="17" font="4"><i>Ku</i></text>
<text top="371" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="372" left="209" width="18" height="17" font="1">---</text>
<text top="372" left="251" width="50" height="17" font="1">Entfall</text>
<text top="394" left="3" width="19" height="17" font="1">6c</text>
<text top="394" left="55" width="10" height="17" font="1">2</text>
<text top="394" left="102" width="16" height="17" font="1">Sl</text>
<text top="394" left="157" width="13" height="17" font="1">D</text>
<text top="394" left="209" width="30" height="17" font="1">121</text>
<text top="394" left="398" width="114" height="17" font="1">Ku / Aufgaben</text>
<text top="417" left="3" width="20" height="17" font="1">7a</text>
<text top="417" left="55" width="10" height="17" font="1">3</text>
<text top="417" left="102" width="17" height="17" font="1">Di</text>
<text top="417" left="157" width="13" height="17" font="1">D</text>
<text top="417" left="209" width="30" height="17" font="1">323</text>
<text top="417" left="398" width="48" height="17" font="1">Raum</text>
<text top="440" left="3" width="20" height="17" font="1">7a</text>
<text top="440" left="55" width="10" height="17" font="1">4</text>
<text top="440" left="102" width="33" height="17" font="1">Hhn</text>
<text top="440" left="157" width="15" height="17" font="1">M</text>
<text top="440" left="209" width="30" height="17" font="1">323</text>
<text top="462" left="3" width="20" height="17" font="1">7a</text>
<text top="462" left="55" width="10" height="17" font="1">5</text>
<text top="462" left="102" width="33" height="17" font="1">Hhn</text>
<text top="462" left="157" width="15" height="17" font="1">M</text>
<text top="462" left="209" width="30" height="17" font="1">323</text>
<text top="485" left="3" width="20" height="17" font="1">7a</text>
<text top="485" left="55" width="10" height="17" font="1">6</text>
<text top="485" left="102" width="33" height="17" font="1">Hhn</text>
<text top="485" left="157" width="15" height="17" font="1">M</text>
<text top="485" left="209" width="30" height="17" font="1">323</text>
<text top="485" left="398" width="88" height="17" font="1">findet statt!</text>
<text top="508" left="3" width="20" height="17" font="1">7b</text>
<text top="508" left="55" width="10" height="17" font="1">6</text>
<text top="507" left="102" width="18" height="17" font="4"><i>Rt</i></text>
<text top="507" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="508" left="209" width="18" height="17" font="1">---</text>
<text top="508" left="251" width="50" height="17" font="1">Entfall</text>
<text top="530" left="3" width="20" height="17" font="1">8a</text>
<text top="530" left="55" width="10" height="17" font="1">1</text>
<text top="530" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="530" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="530" left="209" width="18" height="17" font="1">---</text>
<text top="530" left="251" width="50" height="17" font="1">Entfall</text>
<text top="553" left="3" width="20" height="17" font="1">8a</text>
<text top="553" left="55" width="10" height="17" font="1">2</text>
<text top="553" left="102" width="14" height="17" font="1">Li</text>
<text top="553" left="157" width="12" height="17" font="1">E</text>
<text top="553" left="209" width="30" height="17" font="1">323</text>
<text top="553" left="398" width="89" height="17" font="1">statt 18.12.</text>
<text top="576" left="3" width="19" height="17" font="1">9c</text>
<text top="576" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="576" left="102" width="27" height="17" font="4"><i>Hei</i></text>
<text top="576" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="576" left="209" width="18" height="17" font="1">---</text>
<text top="576" left="251" width="50" height="17" font="1">Entfall</text>
<text top="599" left="3" width="20" height="17" font="1">9d</text>
<text top="599" left="55" width="75" height="17" font="1">1 - 2 Rm</text>
<text top="599" left="157" width="82" height="17" font="1">NWT 412</text>
<text top="599" left="398" width="48" height="17" font="1">Raum</text>
<text top="621" left="3" width="20" height="17" font="1">9d</text>
<text top="621" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="621" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="621" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="621" left="209" width="18" height="17" font="1">---</text>
<text top="621" left="251" width="50" height="17" font="1">Entfall</text>
<text top="644" left="3" width="30" height="17" font="1">10a</text>
<text top="644" left="55" width="80" height="17" font="1">3 - 4 Smr</text>
<text top="644" left="157" width="12" height="17" font="1">E</text>
<text top="644" left="209" width="30" height="17" font="1">413</text>
<text top="644" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="664" left="3" width="62" height="17" font="1">10ad 3</text>
<text top="664" left="102" width="23" height="17" font="1">Ro</text>
<text top="664" left="157" width="34" height="17" font="1">EvR</text>
<text top="664" left="209" width="25" height="17" font="1">SH</text>
<text top="664" left="398" width="48" height="17" font="1">Sport!</text>
<text top="685" left="3" width="88" height="17" font="1">10ad 3 - 4</text>
<text top="685" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="685" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="685" left="209" width="18" height="17" font="1">---</text>
<text top="685" left="251" width="50" height="17" font="1">Entfall</text>
<text top="708" left="3" width="62" height="17" font="1">10ad 4</text>
<text top="708" left="102" width="19" height="17" font="1">Lk</text>
<text top="708" left="157" width="34" height="17" font="1">EvR</text>
<text top="708" left="209" width="25" height="17" font="1">SH</text>
<text top="708" left="398" width="48" height="17" font="1">Sport!</text>
<text top="730" left="3" width="30" height="17" font="1">10b</text>
<text top="730" left="55" width="63" height="17" font="1">3 - 4 Ki</text>
<text top="730" left="157" width="12" height="17" font="1">E</text>
<text top="730" left="209" width="30" height="17" font="1">414</text>
<text top="730" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="751" left="3" width="30" height="17" font="1">10b</text>
<text top="751" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="751" left="102" width="23" height="17" font="4"><i>He</i></text>
<text top="751" left="157" width="23" height="17" font="4"><i>Gk</i></text>
<text top="751" left="209" width="18" height="17" font="1">---</text>
<text top="751" left="251" width="133" height="17" font="1">Entfall für Lehrer</text>
<text top="774" left="3" width="88" height="17" font="1">10bc 5 - 6</text>
<text top="773" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="773" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="774" left="209" width="18" height="17" font="1">---</text>
<text top="774" left="251" width="50" height="17" font="1">Entfall</text>
<text top="796" left="3" width="29" height="17" font="1">10c</text>
<text top="796" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="796" left="102" width="33" height="17" font="4"><i>Ran</i></text>
<text top="796" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="796" left="209" width="18" height="17" font="1">---</text>
<text top="796" left="251" width="50" height="17" font="1">Entfall</text>
<text top="796" left="398" width="86" height="17" font="1">alle bei Oe</text>
<text top="817" left="3" width="29" height="17" font="1">10c</text>
<text top="817" left="55" width="71" height="17" font="1">3 - 4 Oe</text>
<text top="817" left="157" width="12" height="17" font="1">E</text>
<text top="817" left="209" width="30" height="17" font="1">422</text>
<text top="817" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="839" left="3" width="30" height="17" font="1">10d</text>
<text top="839" left="55" width="74" height="17" font="1">3 - 4 Wd</text>
<text top="839" left="157" width="12" height="17" font="1">E</text>
<text top="839" left="209" width="30" height="17" font="1">416</text>
<text top="839" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="862" left="3" width="20" height="17" font="1">11</text>
<text top="862" left="55" width="64" height="17" font="1">3 - 4 At</text>
<text top="862" left="157" width="23" height="17" font="1">D3</text>
<text top="862" left="209" width="30" height="17" font="1">121</text>
<text top="862" left="398" width="48" height="17" font="1">Raum</text>
<text top="883" left="3" width="20" height="17" font="1">11</text>
<text top="883" left="55" width="63" height="17" font="1">3 - 4 Sl</text>
<text top="883" left="157" width="23" height="17" font="1">D2</text>
<text top="883" left="209" width="30" height="17" font="1">415</text>
<text top="883" left="398" width="48" height="17" font="1">Raum</text>
<text top="905" left="3" width="20" height="17" font="1">12</text>
<text top="905" left="55" width="67" height="17" font="1">1 - 2 Lo</text>
<text top="905" left="157" width="32" height="17" font="1">Sp1</text>
<text top="905" left="209" width="30" height="17" font="1">222</text>
<text top="905" left="398" width="61" height="17" font="1">Theorie</text>
<text top="928" left="3" width="20" height="17" font="1">12</text>
<text top="928" left="55" width="67" height="17" font="1">3 - 4 Mf</text>
<text top="928" left="157" width="22" height="17" font="1">E2</text>
<text top="928" left="209" width="30" height="17" font="1">218</text>
<text top="928" left="398" width="48" height="17" font="1">Raum</text>
<text top="949" left="3" width="20" height="17" font="1">12</text>
<text top="949" left="55" width="64" height="17" font="1">3 - 4 Sf</text>
<text top="949" left="157" width="25" height="17" font="1">M3</text>
<text top="949" left="209" width="30" height="17" font="1">322</text>
<text top="949" left="398" width="48" height="17" font="1">Raum</text>
<text top="969" left="3" width="20" height="17" font="1">12</text>
<text top="969" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="969" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="969" left="157" width="25" height="17" font="4"><i>M2</i></text>
<text top="969" left="209" width="18" height="17" font="1">---</text>
<text top="969" left="251" width="50" height="17" font="1">Entfall</text>
<text top="992" left="3" width="20" height="17" font="1">12</text>
<text top="992" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="991" left="102" width="22" height="17" font="4"><i>Ku</i></text>
<text top="991" left="157" width="29" height="17" font="4"><i>ek1</i></text>
<text top="992" left="209" width="18" height="17" font="1">---</text>
<text top="992" left="251" width="50" height="17" font="1">Entfall</text>
</page>
</pdf2xml>

1
shared/samplehtml/convert.sh Executable file
View file

@ -0,0 +1 @@
pdftotext Download\ File.pdf -layout -y 130 -H 1000 -W 1000 -nopgbrk

View file

@ -0,0 +1,455 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">
<pdf2xml producer="poppler" version="0.68.0">
<page number="1" position="absolute" top="0" left="0" height="1262" width="893">
<fontspec id="0" size="17" family="Times" color="#000000"/>
<fontspec id="1" size="16" family="Times" color="#000000"/>
<fontspec id="2" size="25" family="Times" color="#000000"/>
<fontspec id="3" size="14" family="Times" color="#000000"/>
<fontspec id="4" size="16" family="Times" color="#000000"/>
<text top="10" left="3" width="297" height="19" font="0"><b>D-70563 FANNY-LEICHT-GYMN.</b></text>
<text top="32" left="3" width="275" height="17" font="1">STUTTGART, F.-LEICHT-STR. 13</text>
<text top="9" left="332" width="248" height="17" font="1">Schuljahr 2018/19 - 1. Halbjahr</text>
<text top="32" left="332" width="236" height="17" font="1">gültig ab 10. September 2018</text>
<text top="10" left="708" width="99" height="19" font="0"><b>Untis 2017</b></text>
<text top="32" left="671" width="135" height="17" font="1">13.12.2018 9:04</text>
<text top="64" left="3" width="473" height="25" font="2"><b>Klasse 13.12. / Donnerstag Woche-A</b></text>
<text top="111" left="3" width="203" height="15" font="3">Ordnungsdienst: Klasse 10a</text>
<text top="172" left="3" width="21" height="17" font="1">Kl.</text>
<text top="172" left="55" width="32" height="17" font="1">Std.</text>
<text top="172" left="123" width="191" height="17" font="1">Vertr. Fach Rau nach</text>
<text top="172" left="391" width="134" height="17" font="1">Vertretungs-Text</text>
<text top="194" left="3" width="20" height="17" font="1">5b</text>
<text top="194" left="55" width="10" height="17" font="1">1</text>
<text top="194" left="123" width="27" height="17" font="4"><i>Hei</i></text>
<text top="194" left="178" width="13" height="17" font="4"><i>D</i></text>
<text top="194" left="233" width="18" height="17" font="1">---</text>
<text top="194" left="275" width="50" height="17" font="1">Entfall</text>
<text top="217" left="3" width="20" height="17" font="1">5b</text>
<text top="217" left="55" width="10" height="17" font="1">2</text>
<text top="217" left="123" width="21" height="17" font="1">Fu</text>
<text top="217" left="178" width="13" height="17" font="1">D</text>
<text top="217" left="233" width="30" height="17" font="1">114</text>
<text top="217" left="391" width="220" height="17" font="1">Hei / Aufgaben, Arbeitsheft!</text>
<text top="240" left="3" width="20" height="17" font="1">5b</text>
<text top="240" left="55" width="10" height="17" font="1">3</text>
<text top="240" left="123" width="24" height="17" font="1">Oe</text>
<text top="240" left="178" width="15" height="17" font="1">M</text>
<text top="240" left="233" width="30" height="17" font="1">114</text>
<text top="240" left="391" width="108" height="17" font="1">Ei / Aufgaben</text>
<text top="263" left="3" width="20" height="17" font="1">5b</text>
<text top="263" left="55" width="10" height="17" font="1">4</text>
<text top="263" left="123" width="28" height="17" font="1">Rm</text>
<text top="263" left="178" width="15" height="17" font="1">M</text>
<text top="263" left="233" width="30" height="17" font="1">114</text>
<text top="263" left="391" width="108" height="17" font="1">Ei / Aufgaben</text>
<text top="285" left="3" width="29" height="17" font="1">6bc</text>
<text top="285" left="55" width="10" height="17" font="1">5</text>
<text top="285" left="123" width="17" height="17" font="1">Sf</text>
<text top="285" left="178" width="34" height="17" font="1">EvR</text>
<text top="285" left="233" width="30" height="17" font="1">321</text>
<text top="285" left="391" width="114" height="17" font="1">Bü / Aufgaben</text>
<text top="306" left="3" width="29" height="17" font="1">6bc</text>
<text top="306" left="55" width="10" height="17" font="1">5</text>
<text top="306" left="123" width="22" height="17" font="1">Dk</text>
<text top="306" left="178" width="25" height="17" font="1">KR</text>
<text top="306" left="233" width="30" height="17" font="1">121</text>
<text top="306" left="391" width="119" height="17" font="1">We / Aufgaben</text>
<text top="328" left="3" width="29" height="17" font="1">6bc</text>
<text top="328" left="55" width="10" height="17" font="1">6</text>
<text top="328" left="123" width="22" height="17" font="4"><i></i></text>
<text top="328" left="178" width="34" height="17" font="4"><i>EvR</i></text>
<text top="328" left="233" width="18" height="17" font="1">---</text>
<text top="328" left="275" width="50" height="17" font="1">Entfall</text>
<text top="349" left="3" width="29" height="17" font="1">6bc</text>
<text top="349" left="55" width="10" height="17" font="1">6</text>
<text top="349" left="123" width="27" height="17" font="4"><i>We</i></text>
<text top="349" left="178" width="25" height="17" font="4"><i>KR</i></text>
<text top="349" left="233" width="18" height="17" font="1">---</text>
<text top="349" left="275" width="50" height="17" font="1">Entfall</text>
<text top="372" left="3" width="20" height="17" font="1">6d</text>
<text top="372" left="55" width="10" height="17" font="1">6</text>
<text top="371" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="371" left="178" width="21" height="17" font="4"><i>Ek</i></text>
<text top="372" left="233" width="18" height="17" font="1">---</text>
<text top="372" left="275" width="50" height="17" font="1">Entfall</text>
<text top="394" left="3" width="20" height="17" font="1">7b</text>
<text top="394" left="55" width="10" height="17" font="1">2</text>
<text top="394" left="123" width="24" height="17" font="1">Ga</text>
<text top="394" left="178" width="14" height="17" font="1">G</text>
<text top="394" left="233" width="30" height="17" font="1">414</text>
<text top="394" left="391" width="55" height="17" font="1">KA Fkr</text>
<text top="417" left="3" width="20" height="17" font="1">7b</text>
<text top="417" left="55" width="10" height="17" font="1">8</text>
<text top="417" left="123" width="24" height="17" font="4"><i>Gg</i></text>
<text top="417" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="417" left="233" width="18" height="17" font="1">---</text>
<text top="417" left="275" width="100" height="17" font="1">Mi-12.12. / 1</text>
<text top="440" left="3" width="20" height="17" font="1">7b</text>
<text top="440" left="55" width="10" height="17" font="1">9</text>
<text top="439" left="123" width="24" height="17" font="4"><i>Gg</i></text>
<text top="439" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="440" left="233" width="18" height="17" font="1">---</text>
<text top="440" left="275" width="100" height="17" font="1">Mi-12.12. / 2</text>
<text top="462" left="3" width="19" height="17" font="1">7c</text>
<text top="462" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="462" left="123" width="27" height="17" font="4"><i>Gw</i></text>
<text top="462" left="178" width="14" height="17" font="4"><i>G</i></text>
<text top="462" left="233" width="18" height="17" font="1">---</text>
<text top="462" left="275" width="50" height="17" font="1">Entfall</text>
<text top="485" left="3" width="20" height="17" font="1">7d</text>
<text top="485" left="55" width="10" height="17" font="1">1</text>
<text top="485" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="485" left="178" width="13" height="17" font="4"><i>D</i></text>
<text top="485" left="233" width="18" height="17" font="1">---</text>
<text top="485" left="275" width="50" height="17" font="1">Entfall</text>
<text top="508" left="3" width="20" height="17" font="1">7d</text>
<text top="508" left="55" width="10" height="17" font="1">2</text>
<text top="508" left="123" width="23" height="17" font="1">Oz</text>
<text top="508" left="178" width="13" height="17" font="1">D</text>
<text top="508" left="233" width="30" height="17" font="1">416</text>
<text top="508" left="391" width="114" height="17" font="1">Ku / Aufgaben</text>
<text top="530" left="3" width="20" height="17" font="1">8a</text>
<text top="530" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="530" left="123" width="16" height="17" font="4"><i>Ei</i></text>
<text top="530" left="178" width="23" height="17" font="4"><i>Ch</i></text>
<text top="530" left="233" width="18" height="17" font="1">---</text>
<text top="530" left="275" width="50" height="17" font="1">Entfall</text>
<text top="530" left="391" width="83" height="17" font="1">KEINE KA</text>
<text top="553" left="3" width="29" height="17" font="1">9ac</text>
<text top="553" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="553" left="123" width="19" height="17" font="4"><i>Lk</i></text>
<text top="553" left="178" width="31" height="17" font="4"><i>SpJ</i></text>
<text top="553" left="233" width="18" height="17" font="1">---</text>
<text top="553" left="275" width="50" height="17" font="1">Entfall</text>
<text top="576" left="3" width="19" height="17" font="1">9c</text>
<text top="576" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="576" left="123" width="22" height="17" font="1">Jw</text>
<text top="576" left="178" width="23" height="17" font="1">Gk</text>
<text top="576" left="233" width="30" height="17" font="1">322</text>
<text top="576" left="391" width="53" height="17" font="1">Raum!</text>
<text top="599" left="3" width="19" height="17" font="1">9c</text>
<text top="599" left="55" width="10" height="17" font="1">3</text>
<text top="599" left="123" width="18" height="17" font="1">Hf</text>
<text top="599" left="178" width="13" height="17" font="1">D</text>
<text top="599" left="233" width="30" height="17" font="1">220</text>
<text top="599" left="391" width="119" height="17" font="1">Hei / Aufgaben</text>
<text top="621" left="3" width="19" height="17" font="1">9c</text>
<text top="621" left="55" width="10" height="17" font="1">4</text>
<text top="621" left="123" width="31" height="17" font="1">Bkn</text>
<text top="621" left="178" width="13" height="17" font="1">D</text>
<text top="621" left="233" width="30" height="17" font="1">220</text>
<text top="621" left="391" width="119" height="17" font="1">Hei / Aufgaben</text>
<text top="644" left="3" width="20" height="17" font="1">9d</text>
<text top="644" left="55" width="10" height="17" font="1">1</text>
<text top="644" left="123" width="18" height="17" font="4"><i>Rt</i></text>
<text top="644" left="178" width="23" height="17" font="4"><i>Gk</i></text>
<text top="644" left="233" width="18" height="17" font="1">---</text>
<text top="644" left="275" width="104" height="17" font="1">Do-13.12. / 3</text>
<text top="667" left="3" width="20" height="17" font="1">9d</text>
<text top="667" left="55" width="10" height="17" font="1">2</text>
<text top="666" left="123" width="18" height="17" font="4"><i>Rt</i></text>
<text top="666" left="178" width="23" height="17" font="4"><i>Gk</i></text>
<text top="667" left="233" width="18" height="17" font="1">---</text>
<text top="667" left="275" width="104" height="17" font="1">Do-13.12. / 4</text>
<text top="689" left="3" width="20" height="17" font="1">9d</text>
<text top="689" left="55" width="10" height="17" font="1">3</text>
<text top="689" left="123" width="18" height="17" font="1">Rt</text>
<text top="689" left="178" width="23" height="17" font="1">Gk</text>
<text top="689" left="233" width="30" height="17" font="1">218</text>
<text top="712" left="3" width="20" height="17" font="1">9d</text>
<text top="712" left="55" width="10" height="17" font="1">4</text>
<text top="712" left="123" width="18" height="17" font="1">Rt</text>
<text top="712" left="178" width="23" height="17" font="1">Gk</text>
<text top="712" left="233" width="30" height="17" font="1">218</text>
<text top="735" left="3" width="20" height="17" font="1">9d</text>
<text top="735" left="55" width="10" height="17" font="1">5</text>
<text top="735" left="123" width="17" height="17" font="1">Ni</text>
<text top="735" left="178" width="24" height="17" font="1">BK</text>
<text top="735" left="233" width="30" height="17" font="1">126</text>
<text top="757" left="3" width="20" height="17" font="1">9d</text>
<text top="757" left="55" width="10" height="17" font="1">6</text>
<text top="757" left="123" width="17" height="17" font="1">Ni</text>
<text top="757" left="178" width="24" height="17" font="1">BK</text>
<text top="757" left="233" width="30" height="17" font="1">126</text>
<text top="780" left="3" width="20" height="17" font="1">9d</text>
<text top="780" left="55" width="10" height="17" font="1">8</text>
<text top="780" left="123" width="17" height="17" font="4"><i>Ni</i></text>
<text top="780" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="780" left="233" width="18" height="17" font="1">---</text>
<text top="780" left="275" width="104" height="17" font="1">Do-13.12. / 5</text>
<text top="803" left="3" width="20" height="17" font="1">9d</text>
<text top="803" left="55" width="10" height="17" font="1">9</text>
<text top="802" left="123" width="17" height="17" font="4"><i>Ni</i></text>
<text top="802" left="178" width="24" height="17" font="4"><i>BK</i></text>
<text top="803" left="233" width="18" height="17" font="1">---</text>
<text top="803" left="275" width="104" height="17" font="1">Do-13.12. / 6</text>
<text top="825" left="3" width="30" height="17" font="1">10b</text>
<text top="825" left="55" width="56" height="17" font="1">10 - 11</text>
<text top="825" left="123" width="21" height="17" font="4"><i>Fe</i></text>
<text top="825" left="178" width="22" height="17" font="4"><i>Ph</i></text>
<text top="825" left="233" width="18" height="17" font="1">---</text>
<text top="825" left="275" width="50" height="17" font="1">Entfall</text>
<text top="848" left="3" width="20" height="17" font="1">11</text>
<text top="848" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="848" left="123" width="16" height="17" font="4"><i>Ft</i></text>
<text top="848" left="178" width="20" height="17" font="4"><i>g4</i></text>
<text top="848" left="233" width="18" height="17" font="1">---</text>
<text top="848" left="275" width="50" height="17" font="1">Entfall</text>
<text top="871" left="3" width="20" height="17" font="1">11</text>
<text top="871" left="55" width="10" height="17" font="1">5</text>
<text top="870" left="123" width="16" height="17" font="4"><i>Ei</i></text>
<text top="870" left="178" width="25" height="17" font="4"><i>M1</i></text>
<text top="871" left="233" width="18" height="17" font="1">---</text>
<text top="871" left="275" width="50" height="17" font="1">Entfall</text>
<text top="893" left="3" width="20" height="17" font="1">11</text>
<text top="893" left="55" width="10" height="17" font="1">7</text>
<text top="893" left="123" width="19" height="17" font="1">Gt</text>
<text top="893" left="178" width="85" height="17" font="1">sem1 324</text>
<text top="893" left="391" width="250" height="17" font="1">geteilte Gruppen Schwimmen / </text>
<text top="916" left="3" width="20" height="17" font="1">11</text>
<text top="916" left="55" width="36" height="17" font="1">8 - 9</text>
<text top="916" left="123" width="23" height="17" font="1">Ro</text>
<text top="916" left="178" width="85" height="17" font="1">sem1 ???</text>
<text top="939" left="3" width="20" height="17" font="1">11</text>
<text top="939" left="55" width="56" height="17" font="1">10 - 11</text>
<text top="939" left="123" width="19" height="17" font="4"><i>Lk</i></text>
<text top="939" left="178" width="29" height="17" font="4"><i>sp3</i></text>
<text top="939" left="233" width="18" height="17" font="1">---</text>
<text top="939" left="275" width="50" height="17" font="1">Entfall</text>
<text top="962" left="3" width="20" height="17" font="1">12</text>
<text top="962" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="962" left="123" width="17" height="17" font="1">Ni</text>
<text top="962" left="178" width="29" height="17" font="1">bk1</text>
<text top="962" left="233" width="30" height="17" font="1">412</text>
<text top="962" left="391" width="53" height="17" font="1">Raum!</text>
<text top="984" left="3" width="20" height="17" font="1">12</text>
<text top="984" left="55" width="10" height="17" font="1">5</text>
<text top="984" left="123" width="22" height="17" font="4"><i>Ku</i></text>
<text top="984" left="178" width="23" height="17" font="4"><i>D2</i></text>
<text top="984" left="233" width="18" height="17" font="1">---</text>
<text top="984" left="275" width="50" height="17" font="1">Entfall</text>
<text top="1007" left="3" width="88" height="17" font="1">1112 8 - 9</text>
<text top="1007" left="123" width="21" height="17" font="4"><i>Fe</i></text>
<text top="1007" left="178" width="34" height="17" font="4"><i>vma</i></text>
<text top="1007" left="233" width="18" height="17" font="1">---</text>
<text top="1007" left="275" width="50" height="17" font="1">Entfall</text>
</page>
<page number="2" position="absolute" top="0" left="0" height="1262" width="893">
<text top="10" left="3" width="297" height="19" font="0"><b>D-70563 FANNY-LEICHT-GYMN.</b></text>
<text top="32" left="3" width="275" height="17" font="1">STUTTGART, F.-LEICHT-STR. 13</text>
<text top="9" left="332" width="248" height="17" font="1">Schuljahr 2018/19 - 1. Halbjahr</text>
<text top="32" left="332" width="236" height="17" font="1">gültig ab 10. September 2018</text>
<text top="10" left="708" width="99" height="19" font="0"><b>Untis 2017</b></text>
<text top="32" left="671" width="135" height="17" font="1">13.12.2018 8:11</text>
<text top="64" left="3" width="413" height="25" font="2"><b>Klasse 14.12. / Freitag Woche-A</b></text>
<text top="111" left="3" width="203" height="15" font="3">Ordnungsdienst: Klasse 10a</text>
<text top="172" left="3" width="21" height="17" font="1">Kl.</text>
<text top="172" left="55" width="235" height="17" font="1">Std. Vertr. Fach Rau nach</text>
<text top="172" left="398" width="134" height="17" font="1">Vertretungs-Text</text>
<text top="194" left="3" width="62" height="17" font="1">5abc 1</text>
<text top="194" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="194" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="194" left="209" width="18" height="17" font="1">---</text>
<text top="194" left="251" width="50" height="17" font="1">Entfall</text>
<text top="215" left="3" width="20" height="17" font="1">5a</text>
<text top="215" left="55" width="10" height="17" font="1">1</text>
<text top="215" left="102" width="22" height="17" font="4"><i></i></text>
<text top="215" left="157" width="34" height="17" font="4"><i>EvR</i></text>
<text top="215" left="209" width="18" height="17" font="1">---</text>
<text top="215" left="251" width="50" height="17" font="1">Entfall</text>
<text top="238" left="3" width="62" height="17" font="1">5abc 2</text>
<text top="238" left="102" width="22" height="17" font="1">Jw</text>
<text top="238" left="157" width="25" height="17" font="1">KR</text>
<text top="238" left="209" width="30" height="17" font="1">123</text>
<text top="238" left="398" width="119" height="17" font="1">We / Aufgaben</text>
<text top="258" left="3" width="20" height="17" font="1">5a</text>
<text top="258" left="55" width="10" height="17" font="1">2</text>
<text top="258" left="102" width="23" height="17" font="1">Ng</text>
<text top="258" left="157" width="34" height="17" font="1">EvR</text>
<text top="258" left="209" width="30" height="17" font="1">321</text>
<text top="258" left="398" width="114" height="17" font="1">Bü / Aufgaben</text>
<text top="281" left="3" width="20" height="17" font="1">5d</text>
<text top="281" left="55" width="10" height="17" font="1">3</text>
<text top="281" left="102" width="20" height="17" font="1">Lo</text>
<text top="281" left="157" width="13" height="17" font="1">D</text>
<text top="281" left="209" width="30" height="17" font="1">122</text>
<text top="281" left="398" width="171" height="17" font="1">anstatt 17.12., 1. Std.</text>
<text top="304" left="3" width="20" height="17" font="1">5d</text>
<text top="304" left="55" width="10" height="17" font="1">4</text>
<text top="304" left="102" width="20" height="17" font="1">Lo</text>
<text top="304" left="157" width="13" height="17" font="1">D</text>
<text top="304" left="209" width="30" height="17" font="1">122</text>
<text top="304" left="398" width="166" height="17" font="1">anstatt 19.12., 1 Std.</text>
<text top="326" left="3" width="20" height="17" font="1">6a</text>
<text top="326" left="55" width="10" height="17" font="1">6</text>
<text top="326" left="102" width="23" height="17" font="4"><i>He</i></text>
<text top="326" left="157" width="12" height="17" font="4"><i>E</i></text>
<text top="326" left="209" width="18" height="17" font="1">---</text>
<text top="326" left="251" width="50" height="17" font="1">Entfall</text>
<text top="349" left="3" width="62" height="17" font="1">6acd 7</text>
<text top="349" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="349" left="157" width="26" height="17" font="4"><i>MF</i></text>
<text top="349" left="209" width="18" height="17" font="1">---</text>
<text top="349" left="251" width="50" height="17" font="1">Entfall</text>
<text top="372" left="3" width="19" height="17" font="1">6c</text>
<text top="372" left="55" width="10" height="17" font="1">1</text>
<text top="371" left="102" width="22" height="17" font="4"><i>Ku</i></text>
<text top="371" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="372" left="209" width="18" height="17" font="1">---</text>
<text top="372" left="251" width="50" height="17" font="1">Entfall</text>
<text top="394" left="3" width="19" height="17" font="1">6c</text>
<text top="394" left="55" width="10" height="17" font="1">2</text>
<text top="394" left="102" width="16" height="17" font="1">Sl</text>
<text top="394" left="157" width="13" height="17" font="1">D</text>
<text top="394" left="209" width="30" height="17" font="1">121</text>
<text top="394" left="398" width="114" height="17" font="1">Ku / Aufgaben</text>
<text top="417" left="3" width="20" height="17" font="1">7a</text>
<text top="417" left="55" width="10" height="17" font="1">3</text>
<text top="417" left="102" width="17" height="17" font="1">Di</text>
<text top="417" left="157" width="13" height="17" font="1">D</text>
<text top="417" left="209" width="30" height="17" font="1">323</text>
<text top="417" left="398" width="48" height="17" font="1">Raum</text>
<text top="440" left="3" width="20" height="17" font="1">7a</text>
<text top="440" left="55" width="10" height="17" font="1">4</text>
<text top="440" left="102" width="33" height="17" font="1">Hhn</text>
<text top="440" left="157" width="15" height="17" font="1">M</text>
<text top="440" left="209" width="30" height="17" font="1">323</text>
<text top="462" left="3" width="20" height="17" font="1">7a</text>
<text top="462" left="55" width="10" height="17" font="1">5</text>
<text top="462" left="102" width="33" height="17" font="1">Hhn</text>
<text top="462" left="157" width="15" height="17" font="1">M</text>
<text top="462" left="209" width="30" height="17" font="1">323</text>
<text top="485" left="3" width="20" height="17" font="1">7a</text>
<text top="485" left="55" width="10" height="17" font="1">6</text>
<text top="485" left="102" width="33" height="17" font="1">Hhn</text>
<text top="485" left="157" width="15" height="17" font="1">M</text>
<text top="485" left="209" width="30" height="17" font="1">323</text>
<text top="485" left="398" width="88" height="17" font="1">findet statt!</text>
<text top="508" left="3" width="20" height="17" font="1">7b</text>
<text top="508" left="55" width="10" height="17" font="1">6</text>
<text top="507" left="102" width="18" height="17" font="4"><i>Rt</i></text>
<text top="507" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="508" left="209" width="18" height="17" font="1">---</text>
<text top="508" left="251" width="50" height="17" font="1">Entfall</text>
<text top="530" left="3" width="20" height="17" font="1">8a</text>
<text top="530" left="55" width="10" height="17" font="1">1</text>
<text top="530" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="530" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="530" left="209" width="18" height="17" font="1">---</text>
<text top="530" left="251" width="50" height="17" font="1">Entfall</text>
<text top="553" left="3" width="20" height="17" font="1">8a</text>
<text top="553" left="55" width="10" height="17" font="1">2</text>
<text top="553" left="102" width="14" height="17" font="1">Li</text>
<text top="553" left="157" width="12" height="17" font="1">E</text>
<text top="553" left="209" width="30" height="17" font="1">323</text>
<text top="553" left="398" width="89" height="17" font="1">statt 18.12.</text>
<text top="576" left="3" width="19" height="17" font="1">9c</text>
<text top="576" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="576" left="102" width="27" height="17" font="4"><i>Hei</i></text>
<text top="576" left="157" width="13" height="17" font="4"><i>D</i></text>
<text top="576" left="209" width="18" height="17" font="1">---</text>
<text top="576" left="251" width="50" height="17" font="1">Entfall</text>
<text top="599" left="3" width="20" height="17" font="1">9d</text>
<text top="599" left="55" width="75" height="17" font="1">1 - 2 Rm</text>
<text top="599" left="157" width="82" height="17" font="1">NWT 412</text>
<text top="599" left="398" width="48" height="17" font="1">Raum</text>
<text top="621" left="3" width="20" height="17" font="1">9d</text>
<text top="621" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="621" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="621" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="621" left="209" width="18" height="17" font="1">---</text>
<text top="621" left="251" width="50" height="17" font="1">Entfall</text>
<text top="644" left="3" width="30" height="17" font="1">10a</text>
<text top="644" left="55" width="80" height="17" font="1">3 - 4 Smr</text>
<text top="644" left="157" width="12" height="17" font="1">E</text>
<text top="644" left="209" width="30" height="17" font="1">413</text>
<text top="644" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="664" left="3" width="62" height="17" font="1">10ad 3</text>
<text top="664" left="102" width="23" height="17" font="1">Ro</text>
<text top="664" left="157" width="34" height="17" font="1">EvR</text>
<text top="664" left="209" width="25" height="17" font="1">SH</text>
<text top="664" left="398" width="48" height="17" font="1">Sport!</text>
<text top="685" left="3" width="88" height="17" font="1">10ad 3 - 4</text>
<text top="685" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="685" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="685" left="209" width="18" height="17" font="1">---</text>
<text top="685" left="251" width="50" height="17" font="1">Entfall</text>
<text top="708" left="3" width="62" height="17" font="1">10ad 4</text>
<text top="708" left="102" width="19" height="17" font="1">Lk</text>
<text top="708" left="157" width="34" height="17" font="1">EvR</text>
<text top="708" left="209" width="25" height="17" font="1">SH</text>
<text top="708" left="398" width="48" height="17" font="1">Sport!</text>
<text top="730" left="3" width="30" height="17" font="1">10b</text>
<text top="730" left="55" width="63" height="17" font="1">3 - 4 Ki</text>
<text top="730" left="157" width="12" height="17" font="1">E</text>
<text top="730" left="209" width="30" height="17" font="1">414</text>
<text top="730" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="751" left="3" width="30" height="17" font="1">10b</text>
<text top="751" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="751" left="102" width="23" height="17" font="4"><i>He</i></text>
<text top="751" left="157" width="23" height="17" font="4"><i>Gk</i></text>
<text top="751" left="209" width="18" height="17" font="1">---</text>
<text top="751" left="251" width="133" height="17" font="1">Entfall für Lehrer</text>
<text top="774" left="3" width="88" height="17" font="1">10bc 5 - 6</text>
<text top="773" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="773" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="774" left="209" width="18" height="17" font="1">---</text>
<text top="774" left="251" width="50" height="17" font="1">Entfall</text>
<text top="796" left="3" width="29" height="17" font="1">10c</text>
<text top="796" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="796" left="102" width="33" height="17" font="4"><i>Ran</i></text>
<text top="796" left="157" width="15" height="17" font="4"><i>M</i></text>
<text top="796" left="209" width="18" height="17" font="1">---</text>
<text top="796" left="251" width="50" height="17" font="1">Entfall</text>
<text top="796" left="398" width="86" height="17" font="1">alle bei Oe</text>
<text top="817" left="3" width="29" height="17" font="1">10c</text>
<text top="817" left="55" width="71" height="17" font="1">3 - 4 Oe</text>
<text top="817" left="157" width="12" height="17" font="1">E</text>
<text top="817" left="209" width="30" height="17" font="1">422</text>
<text top="817" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="839" left="3" width="30" height="17" font="1">10d</text>
<text top="839" left="55" width="74" height="17" font="1">3 - 4 Wd</text>
<text top="839" left="157" width="12" height="17" font="1">E</text>
<text top="839" left="209" width="30" height="17" font="1">416</text>
<text top="839" left="398" width="175" height="17" font="1">Hörverstehensklausur</text>
<text top="862" left="3" width="20" height="17" font="1">11</text>
<text top="862" left="55" width="64" height="17" font="1">3 - 4 At</text>
<text top="862" left="157" width="23" height="17" font="1">D3</text>
<text top="862" left="209" width="30" height="17" font="1">121</text>
<text top="862" left="398" width="48" height="17" font="1">Raum</text>
<text top="883" left="3" width="20" height="17" font="1">11</text>
<text top="883" left="55" width="63" height="17" font="1">3 - 4 Sl</text>
<text top="883" left="157" width="23" height="17" font="1">D2</text>
<text top="883" left="209" width="30" height="17" font="1">415</text>
<text top="883" left="398" width="48" height="17" font="1">Raum</text>
<text top="905" left="3" width="20" height="17" font="1">12</text>
<text top="905" left="55" width="67" height="17" font="1">1 - 2 Lo</text>
<text top="905" left="157" width="32" height="17" font="1">Sp1</text>
<text top="905" left="209" width="30" height="17" font="1">222</text>
<text top="905" left="398" width="61" height="17" font="1">Theorie</text>
<text top="928" left="3" width="20" height="17" font="1">12</text>
<text top="928" left="55" width="67" height="17" font="1">3 - 4 Mf</text>
<text top="928" left="157" width="22" height="17" font="1">E2</text>
<text top="928" left="209" width="30" height="17" font="1">218</text>
<text top="928" left="398" width="48" height="17" font="1">Raum</text>
<text top="949" left="3" width="20" height="17" font="1">12</text>
<text top="949" left="55" width="64" height="17" font="1">3 - 4 Sf</text>
<text top="949" left="157" width="25" height="17" font="1">M3</text>
<text top="949" left="209" width="30" height="17" font="1">322</text>
<text top="949" left="398" width="48" height="17" font="1">Raum</text>
<text top="969" left="3" width="20" height="17" font="1">12</text>
<text top="969" left="55" width="36" height="17" font="1">3 - 4</text>
<text top="969" left="102" width="16" height="17" font="4"><i>Ft</i></text>
<text top="969" left="157" width="25" height="17" font="4"><i>M2</i></text>
<text top="969" left="209" width="18" height="17" font="1">---</text>
<text top="969" left="251" width="50" height="17" font="1">Entfall</text>
<text top="992" left="3" width="20" height="17" font="1">12</text>
<text top="992" left="55" width="36" height="17" font="1">5 - 6</text>
<text top="991" left="102" width="22" height="17" font="4"><i>Ku</i></text>
<text top="991" left="157" width="29" height="17" font="4"><i>ek1</i></text>
<text top="992" left="209" width="18" height="17" font="1">---</text>
<text top="992" left="251" width="50" height="17" font="1">Entfall</text>
</page>
</pdf2xml>

29
shared/shared.qrc Normal file
View file

@ -0,0 +1,29 @@
<RCC>
<qresource prefix="/">
<file>favicon.png</file>
<file>graphics/sheute.png</file>
<file>graphics/smorgen.png</file>
<file>graphics/chat_background.jpg</file>
<file>graphics/icons/back.png</file>
<file>graphics/icons/drawer.png</file>
<file>graphics/icons/menu.png</file>
<file>graphics/icons/hide.png</file>
<file>graphics/icons/view.png</file>
<file>samplehtml/Download File-html.html</file>
<file>samplehtml/Download File.html</file>
<file>samplehtml/Download File.pdf</file>
<file>samplehtml/Download File.xml</file>
<file>circle.png</file>
<file>graphics/images/FannyLogoDark.jpg</file>
<file>graphics/images/FannyLogoLight.png</file>
<file>graphics/images/FannyLogoLightSmall.png</file>
<file>graphics/images/TreffpunktFannyLogoDark.png</file>
<file>graphics/images/TreffpunktFannyLogoLight.png</file>
<file>graphics/icons/logoutBlack.png</file>
<file>graphics/icons/logoutRed.png</file>
<file>graphics/icons/settingsBlack.png</file>
<file>graphics/icons/backDark.png</file>
<file>samplehtml/Download File.txt</file>
<file>graphics/icons/delete.png</file>
</qresource>
</RCC>

View file

@ -1,37 +0,0 @@
#include "headers/appsettings.h"
AppSettings * pGlobalAppSettings = NULL;
AppSettings::AppSettings(QObject* parent)
:QObject(parent)
{
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
qDebug(path.toLatin1());
this->settingsManager = new QSettings(path+"/fannyapp/settings.ini", QSettings::IniFormat);
qDebug("AppSettings konstruktor");
if(loadSetting("init") == "false"){
this->writeSetting("init", 0);
}
}
QString AppSettings::loadSetting(const QString &key)
{
this->settingsManager->beginGroup("AppSettings");
QString value = this->settingsManager->value(key , false).toString();
this->settingsManager->endGroup();
return(value);
}
void AppSettings::writeSetting(const QString &key, const QVariant &variant)
{
this->settingsManager->beginGroup("AppSettings");
this->settingsManager->setValue(key , variant);
this->settingsManager->endGroup();
}
AppSettings::~AppSettings()
{
delete settingsManager;
}

View file

@ -1,353 +0,0 @@
#include "headers/serverconn.h"
ServerConn::ServerConn(QObject *parent) : QObject(parent)
{
qDebug("serverconn konstruktor");
this->networkManager = new QNetworkAccessManager();
this->refreshNetworkManager = new QNetworkAccessManager();
}
ServerConn::~ServerConn()
{
qDebug("serverconn destruktor");
delete this->networkManager;
delete this->refreshNetworkManager;
QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QDir dir(path + "/.fannyapp-tmp");
dir.removeRecursively();
}
QString ServerConn::login(QString username, QString password, bool permanent)
{
// QUrlQuery pdata;
// ReturnData_t ret = this->senddata(QUrl("http://www.fanny-leicht.de/static15/http.intern/sheute.pdf"), pdata);
// qDebug() << ret.text;
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/sheute.pdf" ) );
// Pack in credentials
QString concatenatedCredentials = username + ":" + password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(status_code == 200){
this->username = username;
this->password = password;
if(permanent){
qDebug() << "permanent";
pGlobalAppSettings->writeSetting("permanent", "1");
pGlobalAppSettings->writeSetting("username", username);
pGlobalAppSettings->writeSetting("password", password);
}
return("OK");
}
else if(status_code == 401){
return("Ungültige Benutzerdaten.");
}
else if(status_code == 0){
return("Keine Verbindung zum Server.");
}
else {
QString ret = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toChar();
ret = ret + reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toChar();
return(ret);
}
}
int ServerConn::logout()
{
this->username = "";
this->password = "";
pGlobalAppSettings->writeSetting("permanent", "0");
pGlobalAppSettings->writeSetting("username", "");
pGlobalAppSettings->writeSetting("password", "");
return(200);
}
QString ServerConn::getDay(QString day)
{
this->progress = 0;
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/" + day + ".pdf" ) );
// Pack in credentials
// Pack in credentials
QString concatenatedCredentials = this->username + ":" + this->password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
this->progress = 1;
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(status_code == 200){
QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QDir dir;
dir.mkdir(path + "/.fannyapp-tmp");
QFile file(path + "/.fannyapp-tmp/" + day + ".pdf");
file.remove();
file.open(QIODevice::ReadWrite);
file.write(reply->readAll());
file.close();
QDesktopServices::openUrl(QUrl::fromLocalFile(path + "/.fannyapp-tmp/" + day + ".pdf"));
return("OK");
}
else if(status_code == 401){
return("Ungültige Benutzerdaten.");
}
else if(status_code == 0){
return("Keine Verbindung zum Server.");
}
else {
QString ret = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toChar();
ret = ret + " (" + reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toChar() + ")";
return(ret);
}
}
int ServerConn::checkConn()
{
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/" ) );
// Pack in credentials
// Pack in credentials
//ZedlerDo:LxyJQB
QString concatenatedCredentials = this->username + ":" + this->password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->refreshNetworkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
QEventLoop loop;
loop.connect(this->refreshNetworkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
return(status_code);
}
void ServerConn::updateProgress(qint64 read, qint64 total)
{
int read_int = read;
int total_int = total;
float percent = ((float)read_int / (float)total_int);
this->progress = percent;
percent = (int)percent;
// qDebug() << read << total << percent << "%";
}
float ServerConn::getProgress()
{
return(this->progress);
}
int ServerConn::getFoodPlan()
{
this->progress = 0;
ReturnData_t ret; //this is a custom type to store the returned data
// Call the webservice
QNetworkRequest request(QUrl("http://www.treffpunkt-fanny.de/fuer-schueler-und-lehrer/speiseplan.html"));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
//set ssl configuration
//send a POST request with the given url and data to the server
QNetworkReply* reply;
QUrlQuery pdata;
reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
//wait until the request has finished
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
//get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
this->progress = 1;
if(status_code != 200){
return(status_code.toInt());
}
//initialize the weekplan to store information to it
//m_weekplan.empty(); //empty the weekplan
QList<QList<QString>> temp_weekplan;
//m_weekplan is a list, that contains a list for each day, which contains: cookteam, date, main dish, vagi main dish, garnish(Beilage) and Dessert.
ret.text = QString::fromUtf8(reply->readAll()); //read the whole website
ret.text.replace("\n",""); //remove unnecessary stuff
ret.text.replace("\r","");
ret.text.replace("\t","");
QStringList stringlist_0 = ret.text.split( "<table class=\"speiseplan\">" ); //split the
//prepare the table of the first week
QString table1 = stringlist_0[1];
QStringList stringlist_1 = table1.split( "</table>" ); //remove everything after "</table>"
table1 = stringlist_1[0];
table1.remove(0,71); //remove "<tbody><tr style=\"border: 1px solid #999;\" align=\"center\" valign=\"top\">" at the beginning
table1 = table1.left(table1.length() - 13); //remove "</tr></tbody>" at the end
QStringList table1list = table1.split("<td style=\"width: 25%;\">"); //split at the days to get a list of all days
table1list.takeFirst(); //remove the first item, as it is empty
//prepare the table of the second week
QString table2 = stringlist_0[2];
QStringList stringlist_2 = table2.split( "</table>" ); //remove everything after "</table>"
table2 = stringlist_2[0];
table2.remove(0,39); //remove "<tbody><tr align=\"center\" valign=\"top\">" at the beginning
table2.remove(table2.length() - 13, table2.length()); //remove "</tr></tbody>" at the end
QStringList table2list = table2.split("<td style=\"width: 25%;\">"); //split at the days to get a list of all days
table2list.takeFirst(); //remove the first item, as it is empty
QStringList weeklist = table1list + table2list; //put both weeks into one big list
for (int i = 0; i <=7; i ++){
QString temp = weeklist[i]; //store item temporarly to edit it
weeklist[i] = temp.left(temp.length()-5); //remove "</td>" at the and of the Item
temp = weeklist[i];
//table list[i] looks now like:
//<strong>Red Hot Chili Peppers</strong>
//<br />
//<strong>26.06.2018</strong>
//<hr />Gulasch mit Kartoffeln
//<hr />Pellkartoffeln mit Quark
//<hr />Gemischter Salat
//<hr />Eaton Mess ( Erdbeer-Nachtisch )</td>
QStringList templist = temp.split("<strong>"); //split item at strong, to get the cookteam and the date
//qDebug() << templist << "\n";
temp = "";
for (int i = 0; i <=2; i ++){
temp += templist[i]; //convert the list to a big string
}
temp.replace("<br />","");
templist = temp.split("</strong>");
temp_weekplan.append({templist[0], templist[1]}); //store cookteam and date
temp = templist[2]; //store information in temp (looks like: "<hr />Gulasch mit Kartoffeln<hr />Pellkartoffeln mit Quark<hr />Gemischter Salat<hr />Eaton Mess ( Erdbeer-Nachtisch )")
templist = temp.split("<hr />"); //seperate the information
templist.takeFirst(); //remove first item
temp_weekplan[i].append(templist);
}
//qDebug() << temp_weekplan;
this->m_weekplan = temp_weekplan; //write changes to global foodplan
return(200);
}
QVariantMap ServerConn::getFoodPlanData(int index)
{
//cookteam, date, main dish, vagi main dish, garnish(Beilage) and Dessert.
QStringList ret; //list to return
//qDebug() << index;
for(int i=0;i<=5;i++){
if(m_weekplan.size() > index){
//qDebug() << i << m_weekplan[index].size();
if(m_weekplan[index].size() > i){
ret.append(m_weekplan[index][i]);
//qDebug() << i << m_weekplan[index][i];
}
else {
ret.append(NULL);
}
}
else {
ret.append(NULL);
}
}
QString date_string_on_db = ret[1];
QDate Date = QDate::fromString(date_string_on_db," dd.MM.yyyy");
//date_string_on_db
//qDebug() << Date;
return { {"cookteam", ret[0]}, {"date", Date}, {"main_dish", ret[2]}, {"main_dish_veg", ret[3]}, {"garnish", ret[4]}, {"dessert", ret[5]} };
}
ReturnData_t ServerConn::senddata(QUrl serviceUrl, QUrlQuery pdata)
{
ReturnData_t ret; //this is a custom type to store the returned data
// Call the webservice
QNetworkRequest request(serviceUrl);
QAuthenticator authenticator;
authenticator.setUser("ZedlerDo");
authenticator.setPassword("LxyJQB");
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
//set ssl configuration
//send a POST request with the given url and data to the server
QNetworkReply* reply;
reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//wait until the request has finished
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
//get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
ret.status_code = status_code.toInt();
if(ret.status_code == 0){ //if tehstatus code is zero, the connecion to the server was not possible
ret.status_code = 444;
}
//get the full text response
ret.text = QString::fromUtf8(reply->readAll());
//return the data
return(ret);
}

150
sources/appsettings.cpp Normal file
View file

@ -0,0 +1,150 @@
#include "headers/appsettings.h"
AppSettings * pGlobalAppSettings = nullptr;
AppSettings::AppSettings(QObject* parent)
:QObject(parent)
{
qDebug("+----- AppSettings konstruktor -----");
pGlobalAppSettings = this;
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
qDebug() << "+----- Settings Path:" << path;
this->settingsManager = new QSettings(path+"/fannyapp/settings.ini", QSettings::IniFormat);
if(loadSetting("init") == "false"){
this->writeSetting("init", 0);
}
if(loadSetting("grade") == "false"){
this->writeSetting("grade", 5);
}
this->filtersFile = new QFile(path + "/fannyapp/filters.json");
//QList<QStringList> filters = {{"5", "d"}, {"6", "c"}, {"11", ""}};
//writeFilters(filters);
//qDebug() << readFilters();
}
QString AppSettings::loadSetting(const QString &key)
{
this->settingsManager->beginGroup("AppSettings");
QString value = this->settingsManager->value(key , false).toString();
this->settingsManager->endGroup();
return(value);
}
void AppSettings::writeSetting(const QString &key, const QVariant &variant)
{
this->settingsManager->beginGroup("AppSettings");
this->settingsManager->setValue(key , variant);
this->settingsManager->endGroup();
}
QList<QStringList> AppSettings::readFilters() {
// list to be returned
QList<QStringList> filtersList;
this->filtersFile->open(QFile::ReadOnly | QFile::Text);
QString jsonString = this->filtersFile->readAll();
this->filtersFile->close();
//qDebug() << jsonString;
QJsonDocument jsonFilters = QJsonDocument::fromJson(jsonString.toUtf8());
// array with all filters in it
QJsonArray filtersArray = jsonFilters.array();
foreach(const QJsonValue & value, filtersArray){
// array of a single filter
QJsonArray filterArray = value.toArray();
QStringList tmpFilterList;
// extract values from array
foreach(const QJsonValue & key, filterArray){
tmpFilterList.append(key.toString());
}
while (tmpFilterList.length() < 3) {
tmpFilterList.append("");
}
filtersList.append(tmpFilterList);
}
for(int i = 0; i < filtersList.length(); i++){
QStringList filterList = filtersList[i];
if( filterList[2] == "" ){
filtersList.removeAt(i);
i = i-1;
}
}
return(filtersList);
}
void AppSettings::writeFilters(QList<QStringList> list) {
// string to write to file
QString jsonString;
QJsonArray filtersArray;
for(int i = 0; i < list.length(); i++){
QStringList filterList = list[i];
if( filterList[2] == "" ){
list.removeAt(i);
i = i-1;
}
}
foreach(QStringList filter, list){
QJsonArray filterArray;
while (filter.length() < 3) {
filter.append("");
}
filterArray.append(filter[0]);
filterArray.append(filter[1]);
filterArray.append(filter[2]);
filtersArray.append(filterArray);
}
QJsonDocument filtersDoc(filtersArray);
//qDebug() << filtersDoc.toJson();
this->filtersFile->open(QIODevice::ReadWrite);
this->filtersFile->resize(0);
this->filtersFile->write(filtersDoc.toJson());
this->filtersFile->close();
}
QStringList AppSettings::readFiltersQml() {
QStringList filtersList;
foreach(QStringList filterList, this->readFilters()){
filtersList.append(filterList[0]+"|"+filterList[1]);
}
return(filtersList);
}
void AppSettings::writeFiltersQml(QStringList) {
}
AppSettings::~AppSettings()
{
delete settingsManager;
}

66
sources/eventmodel.cpp Normal file
View file

@ -0,0 +1,66 @@
#include "headers/eventmodel.h"
EventModel::EventModel(QObject *parent) : QAbstractListModel(parent)
{
// event constructor
// is called when the EventView is loaded
// list
m_events.clear();
// convert the stringlist from the serverconn to a Day-list
foreach(QList<QString>day, pGlobalServConn->m_events){
m_events.append({day[0], day[1], day[2], day[3], day[4], day[5], day[6]});
}
}
int EventModel::rowCount(const QModelIndex &) const
{
return m_events.count();
}
QVariant EventModel::data(const QModelIndex &index, int role) const
{
if (index.row() < rowCount())
switch (role) {
case GradeRole: return m_events.at(index.row()).grade;
case HourRole: return m_events.at(index.row()).hour;
case ReplaceRole: return m_events.at(index.row()).replace;
case SubjectRole: return m_events.at(index.row()).subject;
case RoomRole: return m_events.at(index.row()).room;
case ToRole: return m_events.at(index.row()).to;
case TextRole: return m_events.at(index.row()).text;
default: return QVariant();
}
return QVariant();
}
QHash<int, QByteArray> EventModel::roleNames() const
{
static const QHash<int, QByteArray> roles {
{ GradeRole, "grade" },
{ HourRole, "hour" },
{ ReplaceRole, "replace" },
{ SubjectRole, "subject" },
{ RoomRole, "room" },
{ ToRole, "to" },
{ TextRole, "text" }
};
return roles;
}
QVariantMap EventModel::get(int row) const
{
const Day foodPlan = m_events.value(row);
return { {"grade", foodPlan.grade}, {"hour", foodPlan.hour}, {"replace", foodPlan.replace}, {"subject", foodPlan.subject}, {"room", foodPlan.room}, {"to", foodPlan.to}, {"text", foodPlan.text} };
}
QStringList EventModel::getHeader()
{
return(pGlobalServConn->m_eventHeader);
}
EventModel::~EventModel()
{
}

97
sources/filtermodel.cpp Normal file
View file

@ -0,0 +1,97 @@
#include "headers/filtermodel.h"
FilterModel::FilterModel(QObject *parent ) : QAbstractListModel(parent)
{
m_filters.clear();
QList<QStringList> filtersList = pGlobalAppSettings->readFilters();
foreach(QStringList filterList, filtersList){
m_filters.append({filterList[0], filterList[1], filterList[2]});
}
}
int FilterModel::rowCount(const QModelIndex &) const
{
return m_filters.count();
}
QVariant FilterModel::data(const QModelIndex &index, int role) const
{
if (index.row() < rowCount())
switch (role) {
case GradeRole: return m_filters.at(index.row()).grade;
case ClassLetterRole: return m_filters.at(index.row()).classLetter;
case RoleRole: return m_filters.at(index.row()).role;
default: return QVariant();
}
return QVariant();
}
QHash<int, QByteArray> FilterModel::roleNames() const
{
static const QHash<int, QByteArray> roles {
{ GradeRole, "grade" },
{ ClassLetterRole, "classLetter" },
{ RoleRole, "role"}
};
return roles;
}
QVariantMap FilterModel::get(int row) const
{
const Filter filter = m_filters.value(row);
return { {"grade", filter.grade}, {"classLetter", filter.classLetter}, {"role", filter.role} };
}
void FilterModel::append(const QString &grade, const QString &classLetter, const QString &role)
{
foreach(Filter filter, this->m_filters){
if(filter.grade == grade && filter.classLetter == classLetter){
// dublicates aren't allowed
return;
}
}
int row = 0;
while (row < m_filters.count() && grade.toInt() > m_filters.at(row).grade.toInt()){
row++;
}
while (row < m_filters.count() && classLetter > m_filters.at(row).classLetter && grade.toInt() == m_filters.at(row).grade.toInt()) {
row++;
}
beginInsertRows(QModelIndex(), row, row);
m_filters.insert(row, {grade, classLetter, role});
endInsertRows();
QList<QStringList> filtersList;
filtersList.clear();
foreach(Filter filter, this->m_filters){
filtersList.append({filter.grade, filter.classLetter, filter.role});
}
pGlobalAppSettings->writeFilters(filtersList);
}
void FilterModel::remove(int row)
{
if (row < 0 || row >= m_filters.count())
return;
beginRemoveRows(QModelIndex(), row, row);
m_filters.removeAt(row);
endRemoveRows();
QList<QStringList> filtersList;
filtersList.clear();
foreach(Filter filter, this->m_filters){
filtersList.append({filter.grade, filter.classLetter, filter.role});
}
pGlobalAppSettings->writeFilters(filtersList);
}

59
sources/foodplanmodel.cpp Normal file
View file

@ -0,0 +1,59 @@
#include "headers/foodplanmodel.h"
FoodPlanModel::FoodPlanModel(QObject *parent) : QAbstractListModel(parent)
{
// foodplan constructor
// is called when the FoodplanView is loaded
// list
m_foodPlan.clear();
// convert the stringlist from the serverconn to a Dish-list
foreach(QList<QString>day, pGlobalServConn->m_weekplan){
m_foodPlan.append({day[0], day[1], day[2], day[3], day[4], day[5]});
}
}
int FoodPlanModel::rowCount(const QModelIndex &) const
{
return m_foodPlan.count();
}
QVariant FoodPlanModel::data(const QModelIndex &index, int role) const
{
if (index.row() < rowCount())
switch (role) {
case CookteamRole: return m_foodPlan.at(index.row()).cookteam;
case DateRole: return m_foodPlan.at(index.row()).date;
case MainDishRole: return m_foodPlan.at(index.row()).mainDish;
case MainDishVegRole: return m_foodPlan.at(index.row()).mainDishVeg;
case GarnishRole: return m_foodPlan.at(index.row()).garnish;
case DessertRole: return m_foodPlan.at(index.row()).dessert;
default: return QVariant();
}
return QVariant();
}
QHash<int, QByteArray> FoodPlanModel::roleNames() const
{
static const QHash<int, QByteArray> roles {
{ CookteamRole, "cookteam" },
{ DateRole, "date" },
{ MainDishRole, "mainDish" },
{ MainDishVegRole, "mainDishVeg" },
{ GarnishRole, "garnish" },
{ DessertRole, "dessert" }
};
return roles;
}
QVariantMap FoodPlanModel::get(int row) const
{
const Dish foodPlan = m_foodPlan.value(row);
return { {"cookteam", foodPlan.cookteam}, {"date", foodPlan.date}, {"mainDish", foodPlan.mainDish}, {"mainDishVeg", foodPlan.mainDishVeg}, {"garnish", foodPlan.garnish}, {"dessert", foodPlan.dessert} };
}
FoodPlanModel::~FoodPlanModel(){
}

View file

@ -1,13 +1,5 @@
#include <QtWebView/QtWebView>
#include <QMessageBox>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QGuiApplication>
#include <QQuickView>
#include <QQuickStyle> #include <QQuickStyle>
#include <QStandardPaths> #include <QStandardPaths>
#include <QtQml>
#include <QtNetwork> #include <QtNetwork>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QFile> #include <QFile>
@ -21,36 +13,40 @@
#include <QScreen> #include <QScreen>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QtQml/QQmlContext> #include <QtQml/QQmlContext>
#include <QtWebView/QtWebView>
#include "headers/serverconn.h" #include "headers/serverconn.h"
#include "headers/appsettings.h" #include "headers/appsettings.h"
#include "headers/foodplanmodel.h"
#include "headers/eventmodel.h"
#include "headers/filtermodel.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
ServerConn * pServerConn = new ServerConn;
AppSettings * pAppSettings = new AppSettings(); AppSettings * pAppSettings = new AppSettings();
pGlobalAppSettings = pAppSettings; // ServerConn * pServerConn = new ServerConn();
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv); QGuiApplication app(argc, argv);
QtWebView::initialize();
qmlRegisterType<FoodPlanModel>("Backend", 1, 0, "FoodPlanModel");
qmlRegisterType<EventModel>("Backend", 1, 0, "EventModel");
qmlRegisterType<FilterModel>("Backend", 1, 0, "FilterModel");
qmlRegisterType<ServerConn>("Backend", 1, 0, "ServerConn");
QQuickStyle::setStyle("Material"); QQuickStyle::setStyle("Material");
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQmlContext *context = engine.rootContext();
// context->setContextProperty("_cppServerConn", pServerConn);
context->setContextProperty("_cppAppSettings", pAppSettings);
if (engine.rootObjects().isEmpty()) if (engine.rootObjects().isEmpty())
return -1; return -1;
engine.rootContext()->setContextProperty("_cppServerConn", pServerConn);
engine.rootContext()->setContextProperty("_cppAppSettings", pAppSettings);
int ret; int ret;
ret = app.exec(); ret = app.exec();
delete pServerConn; // delete pServerConn;
delete pAppSettings; delete pAppSettings;
return(ret); return(ret);
} }

912
sources/serverconn.cpp Normal file
View file

@ -0,0 +1,912 @@
#include "headers/serverconn.h"
ServerConn * pGlobalServConn = nullptr;
ServerConn::ServerConn(QObject *parent) : QObject(parent)
{
qDebug("+----- serverconn konstruktor -----+");
pGlobalServConn = this;
this->networkManager = new QNetworkAccessManager();
this->refreshNetworkManager = new QNetworkAccessManager();
// check login state
int perm = pGlobalAppSettings->loadSetting("permanent").toInt();
qDebug() << "+-- login state: " << perm;
if(perm == 1){
// permanent login
// restore login
this->username = pGlobalAppSettings->loadSetting("username");
this->password = pGlobalAppSettings->loadSetting("password");
this->setState("loggedIn");
}
else {
this->setState("notLoggedIn");
}
this->checkConnTimer = new QTimer();
this->checkConnTimer->setInterval(1000);
this->checkConnTimer->setSingleShot(true);
connect(checkConnTimer, SIGNAL(timeout()), this, SLOT(checkConn()));
this->checkConnTimer->start();
}
int ServerConn::login(QString username, QString password, bool permanent)
{
// QUrlQuery pdata;
// ReturnData_t ret = this->senddata(QUrl("http://www.fanny-leicht.de/static15/http.intern/sheute.pdf"), pdata);
// qDebug() << ret.text;
// Create network request
QNetworkRequest request;
// call a non-existent file to be fast
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/logintest" ) );
// pack the credentials into a string
QString credentialsString = username + ":" + password;
// convert it to a byte array
QByteArray data = credentialsString.toLocal8Bit().toBase64();
// put it into a string
QString headerData = "Basic " + data;
// and finally write it into the request header
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
// Send GET request to fanny server
QNetworkReply*reply = networkManager->get( request );
// loop to wait until the request has finished before processing the data
QEventLoop loop;
// timer to cancel the request after 3 seconds
QTimer timer;
timer.setSingleShot(true);
// quit the loop when the request finised
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
// or the timer timed out
loop.connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
// start the timer
timer.start(2000);
// start the loop
loop.exec();
// get the status code from the request
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// 404 is a success because a non existent file was called and not 401 was returned -> user data was correct
if(status_code == 404){
// store username and password in the class variables
this->username = username;
this->password = password;
if(permanent){
// if the user wants to say logged in, store the username and password to the settings file
pGlobalAppSettings->writeSetting("permanent", "1");
pGlobalAppSettings->writeSetting("username", username);
pGlobalAppSettings->writeSetting("password", password);
}
this->setState("loggedIn");
// return success
return(200);
}
else {
// if not 404 was returned -> error -> return the return code
this->setState("notLoggedIn");
return(status_code);
}
}
int ServerConn::logout()
{
// reset the data stored in the class
this->username = "";
this->password = "";
// reset the data stored in the settings
pGlobalAppSettings->writeSetting("permanent", "0");
pGlobalAppSettings->writeSetting("username", "");
pGlobalAppSettings->writeSetting("password", "");
this->setState("notLoggedIn");
// return success
return(200);
}
QString ServerConn::getDay(QString day)
{
this->progress = 0;
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/" + day + ".pdf" ) );
// Pack in credentials
QString concatenatedCredentials = this->username + ":" + this->password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
this->progress = 1;
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(status_code == 200){
QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QDir dir;
dir.mkdir(path + "/.fannyapp-tmp");
QFile file(path + "/.fannyapp-tmp/" + day + ".pdf");
file.remove();
file.open(QIODevice::ReadWrite);
file.write(reply->readAll());
file.close();
QUrl url = QUrl::fromLocalFile(path + "/.fannyapp-tmp/" + day + ".pdf");
// QDesktopServices::openUrl(url);
return("OK_" + url.toString());
}
else if(status_code == 401){
return("Ungültige Benutzerdaten.");
}
else if(status_code == 0){
return("Keine Verbindung zum Server.");
}
else {
QString ret = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toChar();
ret = ret + " (" + reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toChar() + ")";
return(ret);
}
}
int ServerConn::checkConn()
{
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/" ) );
// Pack in credentials
// e.g. ZedlerDo:LxyJQB (yes, these do actually work ;)
QString concatenatedCredentials = this->username + ":" + this->password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->refreshNetworkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
QTimer timer;
timer.start(3000);
QEventLoop loop;
loop.connect(this->refreshNetworkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
loop.exec();
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(status_code == 401){
authErrorCount ++;
if(authErrorCount > 3){
logout();
}
}
this->checkConnTimer->start();
return(status_code);
}
void ServerConn::updateProgress(qint64 read, qint64 total)
{
int read_int = int(read);
int total_int = int(total);
float percent = (float(read_int) / float(total_int));
this->progress = percent;
percent = int(percent);
// qDebug() << read << total << percent << "%";
}
float ServerConn::getProgress()
{
return(this->progress);
}
int ServerConn::getEvents(QString day){
/*
this->progress = 0;
ReturnData_t ret; //this is a custom type to store the returned data
// Call the webservice
QNetworkRequest request(QUrl("http://api.itsblue.de/fanny/vertretung.php?uname=" + this->username + "&passwd=" + this->password + "&day=" + day + "&agree=true"));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
//send a POST request with the given url and data to the server
QNetworkReply* reply;
QUrlQuery pdata;
reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
//wait until the request has finished
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
//get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
this->progress = 1;
*/
this->progress = 0;
// Create request
QNetworkRequest request;
request.setUrl( QUrl( "http://www.fanny-leicht.de/static15/http.intern/" + day + ".txt" ) );
// Pack in credentials
QString concatenatedCredentials = this->username + ":" + this->password;
QByteArray data = concatenatedCredentials.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
request.setRawHeader( "Authorization", headerData.toLocal8Bit() );
QUrlQuery pdata;
// Send request and connect all possible signals
QNetworkReply*reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//QNetworkReply*reply = networkManager->get( request );
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
this->progress = 1;
int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(status_code != 200){
// if the request didn't result in a success, clear the old events, as they are probaply incorrect and return the error code
this->m_events.clear();
return(status_code);
}
QString eventString = reply->readAll();
// qDebug() << "reading text file";
// QFile * textFile = new QFile(":/samplehtml/Download File.txt");
// if (!textFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
// qDebug() << "Load XML File Problem Couldn't open xmlfile.xml to load settings for download";
// return 900;
// }
// eventString = textFile->readAll();
// separate all lines into a list
QStringList events = eventString.split("\n");
// a line (one element of the list) looks like this:
// class hour replace subject room to text
// 8a 1-2 Ei Ch --- Entfall KEINE KA
// [ ] <-- at least two spaces between two blocks
// 'to' and 'text' can be blank
for(int i = 0; i < events.length(); i++){
if(events[i] == ""){
events.removeAt(i);
}
}
// all pages of the original Event document have a similar header that gets removed by this command
// (only the first one remains)
events.removeDuplicates();
// temporary list to store the events for the given day
QList<QStringList> tmpEvents;
// temporary list to store the header information
QStringList tmpEventHeader;
// get the filers list for later usage
QList<QStringList> filtersList = pGlobalAppSettings->readFilters();
// remove all elements from the filters list, that do not match the current mode ( teacher / student ) of the app
for(int i = 0; i < filtersList.length(); i++){
QStringList filterList = filtersList[i];
if( !(pGlobalAppSettings->loadSetting("teacherMode") == "true" ? filterList[2] == "t":filterList[2] == "s") ){
filtersList.removeAt(i);
i = i-1;
}
}
// go through the list and process every single row
for(int x = 0; x < events.length(); x++){
// store the event string
QString event = events[x];
// value to count spaces between text
int spaceCount = 0;
// temporary list to store the data of one day
QStringList eventList;
// temporary dtring to store the data of one block
QString tmpString;
// processing works like:
// go through the line char by char
for(int i = 0;i < event.length(); i++){
// store the char temporarly
QCharRef tmpChar = event[i];
// check if the char is a space
if(tmpChar == " "){
// if so, increase the spaceCount by one
spaceCount ++;
}
else {
// if not -> new block or part of a block started
// could be : 8a 1 - 2 OR 8a 1 - 2
// here->| OR here->|
// in the first case, the space counter is higer than one
// in the second case, the space counter is exactly one
if(spaceCount == 1){
// -> append a space to the temp string
tmpString.append(" ");
}
// reset the space counter
spaceCount = 0;
// append the current character
tmpString.append(tmpChar);
}
// check if the space count is 2
if(spaceCount == 2){
// if so -> break between two blocks
// could be: 8a 1 - 2
// here ->|
// -> append the current tmpString to the eventList
eventList.append(tmpString);
// and clear the tmpString
tmpString = "";
}
//qDebug() << "char= " << tmpChar << " string= " << tmpString << " list= " << eventList;
}
// append the remaining tmpString to the eventList
eventList.append(tmpString);
// fill up the eventList with blanks until it reaches the defined length
while (eventList.length() < 7) {
eventList.append("");
}
if(x < 6){
// if the event is in the header
// the header could look like this:
//
// D-70563 FANNY-LEICHT-GYMN. Schuljahr 2018/19 - 1. Halbjahr Untis 2017
// STUTTGART, F.-LEICHT-STR. 13 gültig ab 10. September 2018 (13.12.2018 9:04)
//
//[Klasse 13.12. / Donnerstag Woche-A]
//{Ordnungsdienst: Klasse 10a}
//
// important data:
// () = date and time the document has been created
// [] = date the document is made for
// {} = class that has to clean up the scool :D
// (brackets are not present in the document)
// line 0 and 4 don't contain imporant information -> skip
if (x == 1) {
// the second line contains the creation date
// the creation date is the third block of the line
tmpEventHeader.append(eventList[2]);
}
else if (x == 2) {
// the third line contains the target date of the document
// the target date is the first block of the line
tmpEventHeader.append(eventList[0]);
}
else if (x == 3) {
// the third line contains the cleaning class
// the cleaning class is the first block of the line
tmpEventHeader.append(eventList[0]);
}
else if (x == 4) {
// if the fourth line is reached
// fill the event header
while (tmpEventHeader.length() < 7) {
tmpEventHeader.append("");
}
// check if the header is valid
// variable to count filled blocks
int blocksOK = 0;
foreach(QString block, tmpEventHeader){
if(block != ""){
blocksOK ++;
}
}
if(blocksOK != 3) {
// if there are more or less than 3 filled blocks, the data is invalid
this->m_events.clear();
return(900);
}
// swap creation and target date
tmpEventHeader.swap(0,1);
// and append it to the events list
tmpEvents.append(tmpEventHeader);
}
else if (x == 5) {
// the fifth row contains the labels for the different filds
// -> append it to the events list
tmpEvents.append(eventList);
}
}
else if(filtersList.isEmpty()){
// if there are no filters append the event immideatly
tmpEvents.append(eventList);
}
else {
// if there is at least one filter, check if the event matches it
foreach(QStringList filter, filtersList){
// go through all filters and check if one of them matches the event
if((eventList[0].contains(filter[0]) && eventList[0].contains(filter[1]))){
// append the eventList to the temporary event list
tmpEvents.append(eventList);
// terminate the loop
break;
}
}
}
}
// store the new events into the class variable
this->m_events = tmpEvents;
qDebug() << tmpEvents;
// check if there is any valid data
if(this->m_events.length() < 3){
// remove the last (in this case the second) element, as it is unnecessary
m_events.takeLast();
// return no data
return(901);
}
// return success
return(200);
/*
qDebug() << "reading xml file";
QFile * xmlFile = new QFile(":/samplehtml/Download File.xml");
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "Load XML File Problem Couldn't open xmlfile.xml to load settings for download";
return 900;
}
//QXmlStreamReader * xmlReader = new QXmlStreamReader(eventString);
QXmlStreamReader * xmlReader = new QXmlStreamReader(xmlFile);
//qDebug() << xmlFile->readAll();
QList<QStringList> tmpEvents;
QStringList dayList;
while (dayList.length() < 7) {
dayList.append("");
}
int currTop = 0;
<text top="530" left="3" width="20" height="17" font="1">8a</text>
<text top="530" left="55" width="36" height="17" font="1">1 - 2</text>
<text top="530" left="123" width="16" height="17" font="4"><i>Ei</i></text>
<text top="530" left="178" width="23" height="17" font="4"><i>Ch</i></text>
<text top="530" left="233" width="18" height="17" font="1">---</text>
<text top="530" left="275" width="50" height="17" font="1">Entfall</text>
<text top="530" left="391" width="83" height="17" font="1">KEINE KA</text>
<text top="194" left="3" width="62" height="17" font="1">5abc 1</text>
<text top="194" left="102" width="27" height="17" font="4"><i>We</i></text>
<text top="194" left="157" width="25" height="17" font="4"><i>KR</i></text>
<text top="194" left="209" width="18" height="17" font="1">---</text>
<text top="194" left="251" width="50" height="17" font="1">Entfall</text>
#define eventXmlPosGrade 3
#define eventXmlPosHour 55
#define eventXmlPosReplace 123
#define eventXmlPosSubject 178
#define eventXmlPosRoom 233
#define eventXmlPosTo 275
#define eventXmlPosText 391
QList<int> eventXmlPositions = {eventXmlPosGrade,eventXmlPosHour,eventXmlPosReplace,eventXmlPosSubject,eventXmlPosRoom,eventXmlPosTo,eventXmlPosText};
qDebug() << "start xml parsing";
//Parse the XML until we reach end of it
while(!xmlReader->atEnd()) {
if (xmlReader->readNextStartElement()) {
// read next element
if (xmlReader->name().toString() == "text"){
// text element found
QXmlStreamAttributes attributes = xmlReader->attributes();
QString attribute_value;
int top;
if(attributes.hasAttribute("font")){
attribute_value = attributes.value("font").toString();
}
if(attributes.hasAttribute("top")){
// get the y-Position of the text
top = attributes.value("top").toInt();
if(abs(top - currTop) > 3){
// new line started
if(currTop > 175){
// if not header -> append
qDebug() << dayList;
tmpEvents.append(dayList);
}
dayList.clear();
while (dayList.length() < 7) {
dayList.append("");
}
currTop = top;
}
if(attributes.hasAttribute("left")){
int left = attributes.value("left").toInt();
QString text = xmlReader->readElementText(QXmlStreamReader::IncludeChildElements);
qDebug() << text;
for(int i = 0;i<7;i++){
//qDebug() << i << left << abs(left - eventXmlPositions[i]);
if(abs(left - eventXmlPositions[i]) < 30){
dayList[i] = text;
//qDebug() << i << left << text << dayList << left << abs(left - eventXmlPositions[i]);
}
}
}
else {
qDebug() << " no left";
}
}
else {
qDebug() << " no top";
}
}
}
}
this->m_events = tmpEvents;
if(xmlReader->hasError()) {
qDebug() << "xmlFile.xml Parse Error" << xmlReader->errorString();
//return(900);
}
//close reader and flush file
xmlReader->clear();
xmlFile->close();
*/
}
int ServerConn::getFoodPlan()
{
// set the progress to 0
this->progress = 0;
// Call the webservice
QNetworkRequest request(QUrl("http://www.treffpunkt-fanny.de/fuer-schueler-und-lehrer/speiseplan.html"));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
// send a GET request to the treffpunkt fanny server
QNetworkReply* reply;
reply = this->networkManager->get(request);
// update the progress during the request
connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
// loop to wait until the request has finished before processing the data
QEventLoop loop;
// timer to cancel the request after 3 seconds
QTimer timer;
timer.setSingleShot(true);
// quit the loop when the request finised
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
// or the timer timed out
loop.connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
// start the timer
timer.start(2000);
// start the loop
loop.exec();
// get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
// set the progress to 1
this->progress = 1;
if(status_code != 200){
// if the request didn't result in a success, return the error code
// if the request failed but there is still old data available
if(!this->m_weekplan.isEmpty()){
// set the status code to 902 (old data)
status_code = 902;
}
return(status_code.toInt());
}
// initialize the weekplan to store information to it
QList<QList<QString>> temp_weekplan;
// m_weekplan is a list, that contains a list for each day, which contains: cookteam, date, main dish, vagi main dish, garnish(Beilage) and Dessert.
// read the whole website
QString returnedData = QString::fromUtf8(reply->readAll());
// remove unnecessary stuff
returnedData.replace("\n","");
returnedData.replace("\r","");
returnedData.replace("\t","");
// workaround for changing html syntax
returnedData.replace("style=\"width: 25%;\"", "width=\"25%\"");
// split the string at the beginning of the tables
QStringList documentList = returnedData.split( "<table class=\"speiseplan\">" );
// enshure that the data is valid
if(documentList.length() < 2){
return(900);
}
//---------- prepare the table of the first week ----------
QString table1 = documentList[1];
// enshure that the data is valid
if(table1.split( "</table>" ).length() < 1){
return(900);
}
// remove everything after "</table>"
table1 = table1.split( "</table>" )[0];
// remove "<tbody><tr style=\"border: 1px solid #999;\" align=\"center\" valign=\"top\">" at the beginning
table1.remove(0,71);
//remove "</tr></tbody>" at the end
table1 = table1.left(table1.length() - 13);
//split at the days to get a list of all days
QStringList table1list = table1.split("<td width=\"25%\">");
// enshure that the data is valid
if(table1list.length() < 5){
return(900);
}
//remove the first item, as it is empty
table1list.takeFirst();
//---------- prepare the table of the second week ----------
QString table2 = documentList[2];
// enshure that the data is valid
if(table2.split( "</table>" ).length() < 1){
return(900);
}
//remove everything after "</table>"
table2 = table2.split( "</table>" )[0];
//remove "<tbody><tr align=\"center\" valign=\"top\">" at the beginning
table2.remove(0,39);
//remove "</tr></tbody>" at the end
table2.remove(table2.length() - 13, table2.length());
//split at the days to get a list of all days
QStringList table2list = table2.split("<td width=\"25%\">");
// enshure that the data is valid
if(table2list.length() < 5){
return(900);
}
//remove the first item, as it is empty
table2list.takeFirst();
//---------- put both weeks into one big list ----------
QStringList weeklist = table1list + table2list;
//---------- go through all days and split the day-string into the different types of information ----------
for (int i = 0; i <=7; i ++){
if(i > weeklist.length()){
// if the loop exceeds the length of the wweklist some kind of eror occured
return 900;
}
// store item temporarly to edit it
QString day = weeklist[i];
// remove "</td>" at the and of the Item
day = day.left(day.length()-5);
// table list[i] looks now like: | clould be:
// <strong>cookteam</strong> | <strong>Red Hot Chili Peppers</strong>
// <br /> | <br />
// <strong>date</strong> | <strong>26.06.2018</strong>
// <hr />mainDish | <hr />Gulasch mit Kartoffeln
// <hr />mainDishVeg | <hr />Pellkartoffeln mit Quark
// <hr />garnish | <hr />Gemischter Salat
// <hr />dessert</td> | <hr />Eaton Mess ( Erdbeer-Nachtisch )</td>
// split item at strong, to get the cookteam and the date
QStringList daylist = day.split("<strong>");
day = "";
// convert the list to a big string
for (int i = 0; i <= 2; i ++){
if(i <= daylist.length()){
day += daylist[i];
}
}
day.replace("<br />","");
daylist = day.split("</strong>");
// store cookteam and date in the temp_weekplan
//temp_weekplan.append({daylist[0], daylist[1]});
// store information in day
// (looks like: "<hr />MainDish<hr />MainDishVeg<hr />Garnish<hr />Dessert")
// (could be: "<hr />Gulasch mit Kartoffeln<hr />Pellkartoffeln mit Quark<hr />Gemischter Salat<hr />Eaton Mess ( Erdbeer-Nachtisch )")
day = daylist.takeLast();
// seperate the information
daylist.append(day.split("<hr />"));
// remove the item that is emplty from the list
daylist.removeAt(2);
//---------- check if the day is aleady over ----------
// get the datestring
QString dateString = daylist[1];
// convert it to a valid QDate
QDateTime date = QDateTime::fromString(dateString,"dd.MM.yyyy");
// get the current date and time
QDateTime currentDateTime = QDateTime::currentDateTimeUtc();
// check if the given day is still in the future or today (then it is valid)
if(date.toTime_t() > currentDateTime.toTime_t() || date.date() == currentDateTime.date()){
// add the rest of the information to the temp_weekplan
qDebug() << "day valid:" << daylist;
//---------- convert the date to a readable string ----------
QString readableDateString;
if(date.date() == currentDateTime.date()){
// the given day is today
readableDateString = "Heute";
}
else if (date.toTime_t() < ( currentDateTime.toTime_t() + ( 24 * 60 * 60 ))) {
// the given day is tomorrow
readableDateString = "Morgen";
}
else {
readableDateString = date.toString("dddd, d.M.yy");
}
qDebug() << readableDateString;
// insert the redable tring into the daylist
daylist[1] = readableDateString;
// append the day to the weeklist
temp_weekplan.append({daylist[0], daylist[1], daylist[2], daylist[3], daylist[4], daylist[5]});
}
}
// write data to global foodplan
this->m_weekplan = temp_weekplan;
// check if there is any valid data
if(this->m_weekplan.isEmpty()){
// no data
return(901);
}
// success
return(200);
}
ReturnData_t ServerConn::senddata(QUrl serviceUrl, QUrlQuery pdata)
{
ReturnData_t ret; //this is a custom type to store the returned data
// Call the webservice
QNetworkRequest request(serviceUrl);
QAuthenticator authenticator;
authenticator.setUser("ZedlerDo");
authenticator.setPassword("LxyJQB");
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
//set ssl configuration
//send a POST request with the given url and data to the server
QNetworkReply* reply;
reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
//wait until the request has finished
QEventLoop loop;
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.exec();
//get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
ret.status_code = status_code.toInt();
if(ret.status_code == 0){ //if tehstatus code is zero, the connecion to the server was not possible
ret.status_code = 444;
}
//get the full text response
ret.text = QString::fromUtf8(reply->readAll());
//return the data
return(ret);
}
QString ServerConn::getState() {
return(this->state);
}
void ServerConn::setState(QString state) {
this->state = state;
this->stateChanged(this->state);
}
ServerConn::~ServerConn()
{
qDebug("serverconn destruktor");
delete this->networkManager;
delete this->refreshNetworkManager;
QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QDir dir(path + "/.fannyapp-tmp");
dir.removeRecursively();
}