Native colors and new message create window

This commit is contained in:
LubuWest 2023-07-27 21:52:16 +02:00
parent 17f25d6809
commit 2debd8f2ab
122 changed files with 3525 additions and 3122 deletions

View File

@ -1,8 +1,8 @@
## v0.6.8 ## v0.6.8
* OAuth * OAuth2 as signup method
* New translation: netherland * New translation: Dutch
## v0.6.7 ## v0.6.7
@ -210,4 +210,4 @@
# Translations # Translations
* German, Spanish * German, Spanish

View File

@ -127,7 +127,8 @@ ToDo
* [Google Playstore](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa) * [Google Playstore](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa)
* Arch User Repository: <https://aur.archlinux.org/packages/friendiqa/> * Arch User Repository: <https://aur.archlinux.org/packages/friendiqa/>
* Flatpak: <https://friendiqa.ma-nic.de/friendiqa.flatpakref> * Flatpak: <https://friendiqa.ma-nic.de/friendiqa.flatpakref>
* Flatpak for Mobile Linux: <https://friendiqa.ma-nic.de/friendiqaMobile.flatpakref>
## License ## License
Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License. Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License.

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.8" android:versionCode="34" android:installLocation="auto"> <manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.8" android:versionCode="34" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31"/> <!--<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="33"/> -->
<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"/>
@ -132,5 +132,9 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
</manifest> </manifest>

View File

@ -6,7 +6,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.2' classpath "com.android.tools.build:gradle:4.1.0"
} }
} }
@ -25,7 +25,7 @@ dependencies {
} }
dependencies { dependencies {
compile 'androidx.appcompat:appcompat:1.1.0' compile 'androidx.appcompat:appcompat:1.4.2'
} }
android { android {
@ -44,8 +44,14 @@ android {
compileSdkVersion androidCompileSdkVersion.toInteger() compileSdkVersion androidCompileSdkVersion.toInteger()
buildToolsVersion '28.0.3' buildToolsVersion '31.0.0'
compileSdkVersion 33
defaultConfig {
minSdkVersion 26
targetSdkVersion 31
resConfigs "en"
}
sourceSets { sourceSets {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
@ -67,10 +73,6 @@ android {
aaptOptions { aaptOptions {
noCompress 'rcc' noCompress 'rcc'
} }
defaultConfig {
resConfigs "en"
}
} }
apply from: "androidnative.gradle" apply from: "androidnative.gradle"
setAndroidNativePath("/../androidnative.pri"); setAndroidNativePath("/../androidnative.pri");

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -10,15 +10,15 @@ import org.qtproject.qt5.android.QtNative;
//import androidnative.friendiqa.FriendiqaQtService; //import androidnative.friendiqa.FriendiqaQtService;
public class FriendiqaService extends JobService{ public class FriendiqaService extends JobService{
private static String TAG = "AndroidNative"; private static String TAG = "FriendiqaService";
//Log.e(TAG,"Service"); //Log.e(TAG,"Service");
@Override @Override
public boolean onStartJob(JobParameters params) { public boolean onStartJob(JobParameters params) {
//Log.d(TAG,"Friendiqa JobService"); Log.d(TAG,"Friendiqa JobService");
Context context = this.getApplicationContext(); Context context = this.getApplicationContext();
AndroidNativeService fs = new AndroidNativeService(); AndroidNativeService fs = new AndroidNativeService();
fs.startQtService(context); fs.startQtService(context);
jobFinished(params,false); jobFinished(params,false);
//Intent serviceIntent = new Intent(this, AndroidNativeService.class); //Intent serviceIntent = new Intent(this, AndroidNativeService.class);

View File

@ -1,62 +0,0 @@
import QtQuick 2.2
import QtQuick.Window 2.1
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import "./theme"
Page {
objectName: "ComponentPage";
property var pages: [
{
name: "Image Picker",
demo: "imagePicker/ImagePickerDemo.qml",
description: "Pick photo via Java language binding"
},{
name: "Toast",
demo: "toast/ToastDemo.qml",
description: "Toast Demonstration"
},{
name: "Notification",
demo: "notification/NotificationDemo.qml",
description: "Demonstrate how to use SystemDispatcher to send notification"
},{
name: "Information",
demo: "info/InfoDemo.qml",
description: "Android System Information"
},{
name: "Status Bar",
demo: "statusbar/StatusBarDemo.qml",
description: "Config Status Bar"
}
];
actionBar: ActionBar {
id : actionBar
iconSource: A.drawable("ic_menu",Constants.black87)
title: "AndroidNative Component List"
showIcon: false
actionButtonEnabled: false
}
VisualDataModel {
id: visualDataModel
delegate: ListItem {
title: modelData.name
subtitle: modelData.description
onClicked: {
present(Qt.resolvedUrl(modelData.demo));
}
}
model: pages;
}
ListView {
anchors.fill: parent
model : visualDataModel
}
}

View File

@ -1,25 +0,0 @@
AndroidNative Example Program
=====================
Prerequisites
-------------
* Qt Android SDK >= 5.6
* Android SDK
Check this article for how to setup Qt and Android SDK:
[Getting Started with Qt for Android](http://qt-project.org/doc/qt-5/androidgs.html)
Build Instruction
-----------------
1. Run `qpm install` to get required packages
1. Open androidnativeexample.pro by Qt Creator
1. Press the "Projects" tab. Make sure the "Android for xxx" kit has been selected
1. Plug a Android device to your computer
1. Press "Build" -> "Run"
1. The program will be deployed to your device. It is so easy!
![Screenshot](https://raw.githubusercontent.com/benlau/androidnative.pri/master/docs/screenshots/example1.png)

View File

@ -1,56 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest package="androidnative.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true"
android:name="org.qtproject.qt5.android.bindings.QtApplication"
android:theme="@style/AppTheme"
android:label="Android Native Example" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
android:name="androidnative.example.ExampleActivity"
android:label="Android Native Example"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="androidnativeexample"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:lib/libQt5QuickParticles.so"/>
<meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidAccessibility.jar:jar/QtAndroid-bundled.jar:jar/QtAndroidAccessibility-bundled.jar"/>
<meta-data android:name="android.app.static_init_classes" android:value=""/>
<!-- Messages maps -->
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
<!-- Messages maps -->
<!-- Splash screen -->
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
<!-- Splash screen -->
</activity>
</application>
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="21"/>
<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.
Remove the comment if you do not require these default permissions. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
Remove the comment if you do not require these default features. -->
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
</manifest>

View File

@ -1,34 +0,0 @@
// Obtain androidPackageSourceDir
// androidPackageSourceDir is the absolute path of the folder containing build.gradle and AndroidManifests.xml
// This code also works with androiddeployqt.
import groovy.json.JsonSlurper
String getAndroidPackageSourceDir() {
String res = System.getProperty("user.dir");
FileTree tree = fileTree(dir: res + "/..").include("android*deployment-settings.json");
if (tree.getFiles().size() > 0) {
def inputFile = tree.getFiles().toArray()[0];
def InputJSON = new JsonSlurper().parseText(inputFile.text);
res = InputJSON["android-package-source-directory"]
} else {
println("android*deployment-settings.json not found. Set androidPackageSourceDir to user.dir");
}
return res;
}
String setAndroidNativePath(String path) {
String androidPackageSourceDir = getAndroidPackageSourceDir();
String androidNativePath = androidPackageSourceDir + path + "/java/src";
LinkedHashSet hash = android.sourceSets.main.java.srcDirs;
hash.add(androidNativePath);
android.sourceSets.main.java.srcDirs = hash;
}
ext {
setAndroidNativePath = this.&setAndroidNativePath;
}

View File

@ -1,60 +0,0 @@
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
}
allprojects {
repositories {
jcenter()
}
}
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
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
}
}
apply from: "androidnative.gradle"
setAndroidNativePath("/../../..");

View File

@ -1,9 +0,0 @@
## This file is automatically generated by QtCreator.
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
androidBuildToolsVersion=25.0.3
androidCompileSdkVersion=25
buildDir=.build
qt5AndroidDir=/home/pankraz/Qt/5.9.1/android_armv7/src/android/java

View File

@ -1,6 +0,0 @@
#Thu Feb 16 01:04:18 HKT 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip

View File

@ -1,160 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View File

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1,6 +0,0 @@
## This file is automatically generated by QtCreator.
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
sdk.dir=/home/pankraz/android-sdk_alt

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF"/>
</shape>
</item>
<item>
<bitmap android:src="@drawable/icon"
android:gravity="center" />
</item>
</layer-list>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash</item>
</style>
</resources>

View File

@ -1,25 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<array name="qt_sources">
<item>https://download.qt-project.org/ministro/android/qt5/qt-5.4</item>
</array>
<!-- The following is handled automatically by the deployment tool. It should
not be edited manually. -->
<array name="bundled_libs">
<!-- %%INSERT_EXTRA_LIBS%% -->
</array>
<array name="qt_libs">
<!-- %%INSERT_QT_LIBS%% -->
</array>
<array name="bundled_in_lib">
<!-- %%INSERT_BUNDLED_IN_LIB%% -->
</array>
<array name="bundled_in_assets">
<!-- %%INSERT_BUNDLED_IN_ASSETS%% -->
</array>
</resources>

View File

@ -1,16 +0,0 @@
package androidnative.example;
import androidnative.AndroidNativeActivity;
/**
* Created by benlau on 8/3/2017.
*/
public class ExampleActivity extends AndroidNativeActivity {
public ExampleActivity() {
super();
QT_ANDROID_THEMES = new String[] {""};
QT_ANDROID_DEFAULT_THEME = "";
}
}

View File

@ -1,96 +0,0 @@
package androidnative.example;
import androidnative.SystemDispatcher;
import android.app.Notification;
import android.app.NotificationManager;
import android.util.Log;
import android.os.Handler;
import android.app.Activity;
import android.view.View;
import android.content.Context;
import java.util.Map;
import org.qtproject.qt5.android.QtNative;
public class ExampleService {
static {
SystemDispatcher.addListener(new SystemDispatcher.Listener() {
NotificationManager m_notificationManager;
Notification.Builder m_builder;
private void notificationManagerNotify(Map data) {
final Activity activity = QtNative.activity();
final Map messageData = data;
Runnable runnable = new Runnable () {
public void run() {
try {
String title = (String) messageData.get("title");
String message = (String) messageData.get("message");
if (m_notificationManager == null) {
m_notificationManager = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
m_builder = new Notification.Builder(activity);
// Small Icon is a must to make notification works.
// And that is why you need to inherit QtActivity
m_builder.setSmallIcon(R.drawable.icon);
}
m_builder.setContentTitle(title);
m_builder.setContentText(message);
m_notificationManager.notify(1, m_builder.build());
// Test function. Remove it later.
SystemDispatcher.dispatch("Notifier.notifyFinished");
} catch (Exception e) {
Log.d("",e.getMessage());
}
};
};
activity.runOnUiThread(runnable);
}
private void hapticFeedbackPerform(Map data) {
final Activity activity = QtNative.activity();
final Map messageData = data;
Runnable runnable = new Runnable () {
public void run() {
int feedbackConstant = (Integer) messageData.get("feedbackConstant");
int flags = (Integer) messageData.get("flags");
Log.d("",String.format("hapticFeedbackPerform(%d,%d)",feedbackConstant,flags));
View rootView = activity.getWindow().getDecorView().getRootView();
rootView.performHapticFeedback(feedbackConstant, flags);
// Test function. Remove it later.
SystemDispatcher.dispatch("hapticFeedbackPerformFinished");
};
};
activity.runOnUiThread(runnable);
}
public void onDispatched(String name , Map data) {
if (name.equals("Notifier.notify")) {
notificationManagerNotify(data);
return;
} else if (name.equals("hapticFeedbackPerform")) {
hapticFeedbackPerform(data);
return;
}
return;
}
});
}
}

View File

@ -1,38 +0,0 @@
TEMPLATE = app
QT += qml quick
SOURCES += main.cpp \
debugwrapper.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH += ../..
android {
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
}
# include(vendor/vendor.pri)
# Default rules for deployment.
include(deployment.pri)
include(../../androidnative.pri)
include(../../../../../../quickandroid/quickandroid.pri)
DISTFILES += \
android-sources/AndroidManifest.xml \
android-sources/src/quickandroid/example/ExampleService.java \
README.md \
android-sources/gradle/wrapper/gradle-wrapper.jar \
android-sources/gradlew \
android-sources/res/values/libs.xml \
android-sources/build.gradle \
android-sources/gradle/wrapper/gradle-wrapper.properties \
android-sources/gradlew.bat \
android-sources/settings.gradle \
android-sources/src/androidnative/example/ExampleService.java
HEADERS += \
../../README.md \
debugwrapper.h

View File

@ -1,392 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.4.0, 2017-10-23T22:04:08. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{8825bc46-5cad-4a59-be78-bf9eeaa7217a}</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">Android</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{8e3757e7-5698-4d0f-9f13-55359b1a832e}</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">/home/pankraz/build/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-25</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="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
<value type="bool" key="UseGradle">true</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">Build</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"></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">/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/build-androidnativeexample-Android-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-25</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="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
<value type="bool" key="UseGradle">true</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">Build</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"></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">/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/build-androidnativeexample-Android-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-25</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="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
<value type="bool" key="UseGradle">true</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">Build</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"></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">Deployment auf Android-Gerät</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">
<value type="QString" key="AndroidDeviceSerialNumber">CB5A22HSB9</value>
</valuemap>
<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">androidnativeexample</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/androidnativeexample/androidnativeexample.pro</value>
<value type="QString" key="QMakeProjectManager.QmakeAndroidRunConfiguration.ProFile">androidnativeexample.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">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,17 +0,0 @@
#include "debugwrapper.h"
#include "AndroidNative/debug.h"
DebugWrapper::DebugWrapper(QObject *parent) : QObject(parent)
{
}
long DebugWrapper::getNativeHeapSize() const
{
return AndroidNative::Debug::getNativeHeapSize();
}
long DebugWrapper::getNativeHeapAllocatedSize() const
{
return AndroidNative::Debug::getNativeHeapAllocatedSize();
}

View File

@ -1,20 +0,0 @@
#ifndef DEBUGWRAPPER_H
#define DEBUGWRAPPER_H
#include <QObject>
class DebugWrapper : public QObject
{
Q_OBJECT
public:
explicit DebugWrapper(QObject *parent = 0);
signals:
public slots:
long getNativeHeapSize() const;
long getNativeHeapAllocatedSize() const;
};
#endif // DEBUGWRAPPER_H

View File

@ -1,27 +0,0 @@
android-no-sdk {
target.path = /data/user/qt
export(target.path)
INSTALLS += target
} else:android {
x86 {
target.path = /libs/x86
} else: armeabi-v7a {
target.path = /libs/armeabi-v7a
} else {
target.path = /libs/armeabi
}
export(target.path)
INSTALLS += target
} else:unix {
isEmpty(target.path) {
qnx {
target.path = /tmp/$${TARGET}/bin
} else {
target.path = /opt/$${TARGET}/bin
}
export(target.path)
}
INSTALLS += target
}
export(INSTALLS)

View File

@ -1,38 +0,0 @@
import QtQuick 2.0
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import "../theme"
Page {
actionBar: ActionBar {
id: actionBar
upEnabled: true
title: qsTr("Dialog Demo")
showTitle: true
onActionButtonClicked: back();
z: 10
}
Button {
id: label
text : "Press to launch dialog"
anchors.centerIn: parent
onClicked: {
dialog.open();
}
}
Dialog {
id: dialog
anchors.centerIn: parent
title: "Dialog"
Text {
text: "Demo"
}
z: 20
acceptButtonText: "OK"
}
}

View File

@ -1,77 +0,0 @@
import QtQuick 2.0
import QuickAndroid 0.1
import AndroidNative 1.0 as AN
import "../theme"
Page {
id: demo
actionBar: ActionBar {
title: "Image Picker Demo"
onActionButtonClicked: back();
}
AN.ImagePicker {
id: imagePicker;
multiple : true
}
Rectangle {
anchors.fill: parent
color: Constants.black100
Image {
id: image
anchors.fill: parent
source: imagePicker.imageUrl
fillMode: Image.PreserveAspectFit
visible: imagePicker.imageUrls.length <= 1
}
Grid {
columns: 3
spacing: 0
visible: !image.visible
Repeater {
model: imagePicker.imageUrls
delegate: Image {
width: demo.width / 3
height: width / 4 * 3
source: modelData
asynchronous: true
fillMode: Image.PreserveAspectCrop
}
}
}
Column {
anchors.right: parent.right
anchors.rightMargin: 16 * A.dp
anchors.bottom: parent.bottom
anchors.bottomMargin: 32 * A.dp
spacing: 16 * A.dp
FloatingActionButton {
iconSource: A.drawable("ic_camera",Constants.black87);
size: Constants.small
backgroundColor: Constants.white100
onClicked: {
imagePicker.takePhoto();
}
}
FloatingActionButton {
iconSource: A.drawable("ic_image",Constants.black87);
size: Constants.small
backgroundColor: Constants.white100
onClicked: {
imagePicker.pickImage();
}
}
}
}
}

View File

@ -1,55 +0,0 @@
import QtQuick 2.0
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import "../theme"
Page {
id: page
actionBar: ActionBar {
id: actionBar
upEnabled: true
title: qsTr("Information")
showTitle: true
onActionButtonClicked: back();
z: 10
}
VisualItemModel {
id: itemModel
ListItem {
title: "Environment.DIRECTORY_DCIM"
subtitle: Environment.DIRECTORY_DCIM
interactive: false
width: page.width
}
ListItem {
title: "Debug.getNativeHeapSize"
subtitle: (Debug.getNativeHeapSize() / 1024 / 1024).toFixed(2) + "MB";
interactive: false
width: page.width
}
ListItem {
title: "Debug.getNativeHeapAllocatedSize"
subtitle: (Debug.getNativeHeapAllocatedSize() / 1024 / 1024).toFixed(2) + "MB";
interactive: false
width: page.width
}
ListItem {
title: "QThread.idealThreadCount"
subtitle: Misc.idealThreadCount;
interactive: false
width: page.width
}
}
ListView {
anchors.fill: parent
model: itemModel
}
}

View File

@ -1,72 +0,0 @@
#include <QtCore>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQmlContext>
#include <QSettings>
//#include "qadrawableprovider.h"
#include "AndroidNative/systemdispatcher.h"
#include "AndroidNative/environment.h"
#include "AndroidNative/debug.h"
#include "AndroidNative/mediascannerconnection.h"
#include "debugwrapper.h"
using namespace AndroidNative;
#ifdef Q_OS_ANDROID
#include <QtAndroidExtras/QAndroidJniObject>
#include <QtAndroidExtras/QAndroidJniEnvironment>
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
Q_UNUSED(vm);
qDebug("NativeInterface::JNI_OnLoad()");
// It must call this function within JNI_OnLoad to enable System Dispatcher
SystemDispatcher::registerNatives();
return JNI_VERSION_1_6;
}
#endif
int main(int argc, char *argv[])
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
app.setApplicationName("Android Native Example");
app.setOrganizationDomain("com.github.benlau.androidnative");
QSettings settings;
settings.setValue("firstTimeLoading", false);
settings.sync();
QVariantMap env;
env["DIRECTORY_DCIM"] = Environment::getExternalStoragePublicDirectory(Environment::DIRECTORY_DCIM);
QVariantMap misc;
misc["idealThreadCount"] = QThread::idealThreadCount();
MediaScannerConnection::scanFile("");
SystemDispatcher::instance()->loadClass("androidnative.example.ExampleService");
QQmlApplicationEngine engine;
/* QuickAndroid Initialization */
engine.addImportPath("qrc:///"); // Add QuickAndroid into the import path
engine.rootContext()->setContextProperty("Environment", env);
engine.rootContext()->setContextProperty("Misc", misc);
engine.rootContext()->setContextProperty("Debug", new DebugWrapper(&engine));
/* End of QuickAndroid Initialization */
// Extra features:
//QADrawableProvider* provider = new QADrawableProvider();
//provider->setBasePath("qrc://res");
//engine.addImageProvider("drawable",provider);
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}

View File

@ -1,76 +0,0 @@
import QtQuick 2.2
import QtQuick.Window 2.2
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import "./theme"
Window {
id: window;
width: 480
height: 640
color: "#FFFFFF"
visible: false;
/* Fast Splash Screen Setup Instruction
1. Create a custom theme (apptheme.qml) and set windowBackground to @drawable/splash.xml (Your splash screen drawable)
2. Within AndroidManifest.xml, set android.app.splash_screen_drawable to @drawable/splash.xml
<!-- Splash screen -->
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
<!-- Splash screen -->
That will show a splash screen while Qt is loading. However, screen flicker will happen when your Window
item is shown. To prevent screen flicker completely, you could setup your main.qml accoroding to step 3.
3. In your main.qml (the one with Window component)
3.1. Set Window.color to a color which is similar to splash screen / Theme.windowBackground
3.2. Set visible of Window to false until your content is loaded. (Keep Android splash screen while loading)
3.3. Use an asynchronous Loader for your content. Set opacity to 0.
3.4. Once everything is ready, set Window.visible to true and perform a fade-in animation on Loader
*/
Loader {
id: loader
parent: null
width: window.width
height: window.height
asynchronous: true
opacity: 0
focus: true;
sourceComponent: PageStack {
id: stack
objectName: "PageStack";
initialPage: Components {
onPresented: {
window.visible = true;
A.setTimeout(function() {
loader.parent = window.contentItem;
loader.opacity = 1;
}, 34);
}
}
}
Behavior on opacity {
NumberAnimation {
duration: 200
easing.type: Easing.OutQuad;
}
}
}
Component.onCompleted: {
ThemeManager.currentTheme = AppTheme
}
}

View File

@ -1,30 +0,0 @@
import QtQuick 2.2
import QtQuick.Window 2.1
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import AndroidNative 1.0 as AN
import "../theme"
Page {
actionBar: ActionBar {
id : actionBar
title: "Notification"
z: 10
upEnabled: true
onActionButtonClicked: back();
}
Button {
id: label
text : "Press to send notification"
anchors.centerIn: parent
onClicked: {
AN.SystemDispatcher.dispatch("Notifier.notify",{
title: "Quick Android Example",
message: "Hello!"
});
}
}
}

View File

@ -1,31 +0,0 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>res/drawable-hdpi/icon.png</file>
<file>Components.qml</file>
<file>res/drawable-xxhdpi/ic_menu.png</file>
<file>dialog/DialogDemo.qml</file>
<file>notification/NotificationDemo.qml</file>
<file>theme/AppTheme.qml</file>
<file>theme/qmldir</file>
<file>res/drawable-hdpi/ic_android_black_48dp.png</file>
<file>res/drawable-xxhdpi/ic_android_black_48dp.png</file>
<file>res/drawable-mdpi/ic_android_black_48dp.png</file>
<file>res/drawable-xhdpi/ic_android_black_48dp.png</file>
<file>res/drawable-xxxhdpi/ic_android_black_48dp.png</file>
<file>res/drawable-hdpi/ic_done_black_24dp.png</file>
<file>res/drawable-mdpi/ic_done_black_24dp.png</file>
<file>res/drawable-xhdpi/ic_done_black_24dp.png</file>
<file>res/drawable-xxhdpi/ic_done_black_24dp.png</file>
<file>res/drawable-xxxhdpi/ic_done_black_24dp.png</file>
<file>theme/ActionBarBackground.qml</file>
<file>res/drawable-xxhdpi/ic_keyboard_backspace.png</file>
<file>res/drawable-xxhdpi/ic_arrow_back.png</file>
<file>res/drawable-xxhdpi/ic_image.png</file>
<file>res/drawable-xxhdpi/ic_camera.png</file>
<file>imagePicker/ImagePickerDemo.qml</file>
<file>info/InfoDemo.qml</file>
<file>toast/ToastDemo.qml</file>
<file>statusbar/StatusBarDemo.qml</file>
</qresource>
</RCC>

View File

@ -1,10 +0,0 @@
{
"name": "",
"description": "",
"dependencies": [
"com.github.benlau.quickandroid@0.1.7"
],
"license": "NONE",
"pri_filename": "",
"webpage": ""
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

View File

@ -1,47 +0,0 @@
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 2.1 as QQC2
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import AndroidNative 1.0 as AN
import "../theme"
Page {
actionBar: ActionBar {
id : actionBar
title: "Status Bar"
z: 10
upEnabled: true
onActionButtonClicked: back();
}
Column {
anchors.centerIn: parent
QQC2.Switch {
text: "Translucent Status Bar"
checked: false
onCheckedChanged: {
AN.SystemDispatcher.dispatch("androidnative.Util.setTranslucentStatusBar", {value: checked});
}
}
QQC2.Switch {
text: "Status Bar Visible"
checked: true
onCheckedChanged: {
AN.SystemDispatcher.dispatch("androidnative.Util.setFullScreen", {value: checked});
}
}
}
Component.onCompleted: {
AN.SystemDispatcher.loadClass("androidnative.Util");
}
}

View File

@ -1,17 +0,0 @@
import QtQuick 2.0
import QuickAndroid 0.1
Item {
MaterialShadow {
asynchronous: true
anchors.fill: parent
depth: 1
}
Rectangle {
color: "#cddc39" // Lime 500
anchors.fill: parent
}
}

View File

@ -1,33 +0,0 @@
import QtQuick 2.0
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
pragma Singleton
Theme {
mediumText.textSize: 18 * A.dp
smallText.textSize : 14 * A.dp
colorPrimary: "#cddc39" // Lime 500
textColorPrimary: Constants.black87
windowBackground: "#eeeeee";
// The default icon of ActionBar is a "back" image
actionBar.iconSource: A.drawable("ic_arrow_back",Constants.black87)
// Background with shadow
actionBar.background: ActionBarBackground {
}
// actionBar.title.textSize is not allowed in QML. You should declare your own TextMaterial and assign directly.
// or modify text , smallText , mediumText and largetText
actionBar.title : customTextMaterial1;
actionBar.iconSourceSize: Qt.size(24 * A.dp , 24 * A.dp)
// Custom Style object.
TextMaterial {
id : customTextMaterial1
textSize: 18 * A.dp
textColor : Constants.black87
}
}

View File

@ -1,2 +0,0 @@
module theme
singleton AppTheme 0.1 AppTheme.qml

View File

@ -1,33 +0,0 @@
import QtQuick 2.2
import QtQuick.Window 2.1
import QuickAndroid 0.1
import QuickAndroid.Styles 0.1
import AndroidNative 1.0 as AN
import "../theme"
Page {
actionBar: ActionBar {
id : actionBar
title: "Toast"
z: 10
upEnabled: true
onActionButtonClicked: back();
}
AN.Toast {
id: toast
text: "Toast"
longDuration: true
}
Button {
id: label
text : "Press to show toast"
anchors.centerIn: parent
onClicked: {
toast.show();
}
}
}

View File

@ -10,6 +10,7 @@ import android.content.Context;
import android.Manifest.permission; import android.Manifest.permission;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidnative.AndroidNativeService;
/** An alternative Activity class for Qt applicaiton. /** An alternative Activity class for Qt applicaiton.
@ -18,7 +19,8 @@ import androidx.core.content.ContextCompat;
public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.QtActivity { public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.QtActivity {
public static final int MY_PERMISSIONS_REQUEST_READ_STORAGE = 0x245285a8; public static final int MY_PERMISSIONS_REQUEST_READ_STORAGE = 0x245285a8;
public static final int MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 0x245285a9;
private static final String TAG = "AndroidNativeActivity";
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@ -29,6 +31,11 @@ public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.Qt
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
AndroidNativeService fs = new AndroidNativeService();
fs.startQtService(this);
//if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) { //if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted // Permission is not granted
@ -75,19 +82,29 @@ public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.Qt
@Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) { @Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
Log.d(TAG,"onRequestPermissionsResult");
switch (requestCode) { switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_STORAGE: { case MY_PERMISSIONS_REQUEST_READ_STORAGE: {
// If request is cancelled, the result arrays are empty. // If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Map message = new HashMap(); Map message = new HashMap();
message.put("multiple",false); message.put("multiple",false);
SystemDispatcher.dispatch("androidnative.ImagePicker.pickImage",message); SystemDispatcher.dispatch("androidnative.ImagePicker.pickImage",message);
} else { } else {
}
} }
case MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Map message = new HashMap();
message.put("multiple",false);
SystemDispatcher.dispatch("androidnative.Util.setPostNotification",message);
} else {
}
}
return; return;
} }
} }
}

View File

@ -20,14 +20,14 @@ public class AndroidNativeService extends QtService
private static String TAG = "AndroidNative"; private static String TAG = "AndroidNative";
public void startQtService(Context ctx) { public void startQtService(Context ctx) {
//Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null)); Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null));
if (QtNative.activity()==null){ if (QtNative.activity()==null){
//Log.d(TAG,"Friendiqasync Stop existing QtService"); Log.d(TAG,"Friendiqasync Stop existing QtService");
ctx.stopService(new Intent(ctx, AndroidNativeService.class)); ctx.stopService(new Intent(ctx, AndroidNativeService.class));
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//Log.d(TAG,"Friendiqasync startForegroundService"); Log.d(TAG,"Friendiqasync startForegroundService");
ctx.startForegroundService(new Intent(ctx, AndroidNativeService.class)); ctx.startForegroundService(new Intent(ctx, AndroidNativeService.class));
} else { } else {
ctx.startService(new Intent(ctx, AndroidNativeService.class)); ctx.startService(new Intent(ctx, AndroidNativeService.class));
@ -35,7 +35,7 @@ public class AndroidNativeService extends QtService
} }
public static void stopQtService(Context ctx) { public static void stopQtService(Context ctx) {
//Log.d(TAG,"Friendiqasync QtServiceStop"); Log.d(TAG,"Friendiqasync QtServiceStop");
ctx.stopService(new Intent(ctx, AndroidNativeService.class)); ctx.stopService(new Intent(ctx, AndroidNativeService.class));
} }
@ -44,11 +44,12 @@ public class AndroidNativeService extends QtService
{ {
Context context; Context context;
context = this.getApplicationContext(); context = this.getApplicationContext();
Log.d(TAG,"Friendiqa onCreate");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent intent = new Intent(context,FriendiqaActivity.class); Intent intent = new Intent(context,FriendiqaActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
String CHANNEL_ID = "channel_02"; String CHANNEL_ID = "channel_02";
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
"Sync Channel", "Sync Channel",

View File

@ -25,6 +25,11 @@ import android.content.Intent;
import java.util.Map; import java.util.Map;
import org.qtproject.friendiqa.R; import org.qtproject.friendiqa.R;
import android.content.pm.PackageManager;
import android.Manifest;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class Util { public class Util {
private static final String TAG = "androidnative.Util"; private static final String TAG = "androidnative.Util";
@ -33,7 +38,8 @@ public class Util {
public static final String SET_FULL_SCREEN = "androidnative.Util.setFullScreen"; public static final String SET_FULL_SCREEN = "androidnative.Util.setFullScreen";
public static final String SET_SCHEDULE = "androidnative.Util.setSchedule"; public static final String SET_SCHEDULE = "androidnative.Util.setSchedule";
public static final String SET_NOTIFICATION = "androidnative.Util.setNotification"; public static final String SET_NOTIFICATION = "androidnative.Util.setNotification";
public static final String SET_POST_NOTIFICATION = "androidnative.Util.setPostNotification";
public static final int MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 0x245285a9;
static { static {
SystemDispatcher.addListener(new SystemDispatcher.Listener() { SystemDispatcher.addListener(new SystemDispatcher.Listener() {
@ -46,6 +52,8 @@ public class Util {
setSchedule(message); setSchedule(message);
} else if (type.equals(SET_NOTIFICATION)) { } else if (type.equals(SET_NOTIFICATION)) {
setNotification(message); setNotification(message);
} else if (type.equals(SET_POST_NOTIFICATION)) {
setPostNotification(message);
} }
} }
}); });
@ -110,14 +118,14 @@ public class Util {
} }
static void setNotification(Map message) { static void setNotification(Map message) {
//Log.d(TAG,"setNotification"); Log.d(TAG,"setNotification");
Context context; Context context;
//Context appcontext; //Context appcontext;
context = QtNative.service().getApplicationContext(); context = QtNative.service().getApplicationContext();
//appcontext = QtNative.activity().getApplicationContext(); //appcontext = QtNative.activity().getApplicationContext();
Intent intent = new Intent(context,FriendiqaActivity.class); Intent intent = new Intent(context,FriendiqaActivity.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
final String textTitle = (String) message.get("title"); final String textTitle = (String) message.get("title");
final String textContent = (String) message.get("message"); final String textContent = (String) message.get("message");
@ -171,14 +179,23 @@ public class Util {
} else { } else {
context = QtNative.activity().getApplicationContext(); context = QtNative.activity().getApplicationContext();
} }
//AndroidNativeService fs = new AndroidNativeService();
//fs.startQtService(context);
if (value==0){ if (value==0){
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.cancelAll(); jobScheduler.cancelAll();
//Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler"); Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler");
} else { } else {
//Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler"); Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler");
ComponentName component = new ComponentName(context, FriendiqaService.class); ComponentName component = new ComponentName(context, FriendiqaService.class);
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
//Log.d(TAG,"Jobinfolist size " + String.valueOf(jobScheduler.getAllPendingJobs().size())); //Log.d(TAG,"Jobinfolist size " + String.valueOf(jobScheduler.getAllPendingJobs().size()));
if (jobScheduler.getAllPendingJobs().size()==0){ if (jobScheduler.getAllPendingJobs().size()==0){
JobInfo.Builder builder = new JobInfo.Builder(2, component) JobInfo.Builder builder = new JobInfo.Builder(2, component)
@ -186,7 +203,7 @@ public class Util {
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true) .setPersisted(true)
.setPrefetch(true); .setPrefetch(true);
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN)); Log.d(TAG,"1 Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
jobScheduler.schedule(builder.build()); jobScheduler.schedule(builder.build());
} else { } else {
for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) { for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) {
@ -197,23 +214,42 @@ public class Util {
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true) .setPersisted(true)
.setPrefetch(true); .setPrefetch(true);
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN)); Log.d(TAG,"2 Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
jobScheduler.schedule(builder.build()); jobScheduler.schedule(builder.build());
} }
} }
} }
//Log.d(TAG,"Active service " + String.valueOf(QtNative.service()!=null)); //Log.d(TAG,"Active service " + String.valueOf(QtNative.service()!=null));
if (QtNative.service() != null){ //if (QtNative.service() != null){
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service"); // Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class); // ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper) // JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
.setMinimumLatency(50) // .setMinimumLatency(50)
.setOverrideDeadline(100); // .setOverrideDeadline(100);
JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); // JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobStopScheduler.schedule(stopbuilder.build()); // jobStopScheduler.schedule(stopbuilder.build());
} //}
} }
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.cancelAll();
//context.stopService(new Intent(context, AndroidNativeService.class)); //context.stopService(new Intent(context, AndroidNativeService.class));
} }
static void setPostNotification(Map message) {
Log.d(TAG,"setPostNotification");
Context context;
if (QtNative.activity() == null){
context = QtNative.service().getApplicationContext();
} else {
context = QtNative.activity().getApplicationContext();
}
Activity activity = org.qtproject.qt5.android.QtNative.activity();
Log.d(TAG,String.valueOf(ContextCompat.checkSelfPermission(context,Manifest.permission.POST_NOTIFICATIONS)));
if (ContextCompat.checkSelfPermission(context,Manifest.permission.POST_NOTIFICATIONS)!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
Log.d(TAG,String.valueOf(PackageManager.PERMISSION_GRANTED));
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.POST_NOTIFICATIONS},MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS);
}
}
} }

View File

@ -1 +1 @@
/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.cpp ../../source-linux/common/oauth.cpp

View File

@ -1 +1 @@
/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.h ../../source-linux/common/oauth.h

View File

@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.1.0) cmake_minimum_required(VERSION 3.16.0)
project(friendiqa VERSION 0.6 LANGUAGES CXX) project(friendiqa VERSION 0.6 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
@ -13,35 +13,38 @@ if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif() endif()
find_package(Qt5 COMPONENTS Widgets Quick Sql DBus NetworkAuth REQUIRED) find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick QuickControls2 Sql DBus NetworkAuth REQUIRED)
qt_standard_project_setup()
set(MOC_SOURCES common/uploadableimage.h set(MOC_SOURCES common/uploadableimage.h
common/xhr.h common/xhr.h
common/filesystem.h common/filesystem.h
common/remoteauthasyncimageprovider.h
common/updatenews.h common/updatenews.h
common/alarm.h common/alarm.h
common/oauth.h) common/oauth.h
common/documenthandler.h)
set(SOURCES common/friendiqa.cpp set(SOURCES common/friendiqa.cpp
common/uploadableimage.cpp common/uploadableimage.cpp
common/xhr.cpp common/xhr.cpp
common/filesystem.cpp common/filesystem.cpp
common/remoteauthasyncimageprovider.cpp
common/updatenews.cpp common/updatenews.cpp
common/alarmlinux.cpp common/alarmlinux.cpp
common/oauth.cpp) common/oauth.cpp
common/documenthandler.cpp)
include_directories(common) include_directories(common)
add_executable(friendiqa ${SOURCES} ${MOC_SOURCES} application.qrc) qt_add_executable(friendiqa ${SOURCES} ${MOC_SOURCES} application.qrc)
target_link_libraries(friendiqa Qt::Core) target_link_libraries(friendiqa PRIVATE Qt6::Core)
target_link_libraries(friendiqa Qt::Widgets) target_link_libraries(friendiqa PRIVATE Qt6::Widgets)
target_link_libraries(friendiqa Qt::Quick) target_link_libraries(friendiqa PRIVATE Qt6::Quick)
target_link_libraries(friendiqa Qt::Sql) target_link_libraries(friendiqa PRIVATE Qt6::QuickControls2)
target_link_libraries(friendiqa Qt::DBus) target_link_libraries(friendiqa PRIVATE Qt6::Sql)
target_link_libraries(friendiqa Qt::NetworkAuth) target_link_libraries(friendiqa PRIVATE Qt6::DBus)
target_link_libraries(friendiqa PRIVATE Qt6::NetworkAuth)
install(TARGETS friendiqa DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS friendiqa DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES images/de.manic.Friendiqa.desktop DESTINATION share/applications) install(FILES images/de.manic.Friendiqa.desktop DESTINATION share/applications)

View File

@ -47,6 +47,7 @@ void ALARM::setAlarm(int interval)
QVariantMap message; QVariantMap message;
message["value"] = interval; message["value"] = interval;
AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util"); AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setPostNotification", message);
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message); AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message);
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message); AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
} }

View File

@ -0,0 +1,262 @@
// This file is part of Friendiqa
// https://github.com/lubuwest/Friendiqa
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QQuickTextDocument>
#include <QTextCharFormat>
#include <QStringDecoder>
#include <QTextDocument>
#include <QTextDocumentFragment>
#include <QTextList>
#include <QDebug>
#include "documenthandler.h"
DocumentHandler::DocumentHandler(QObject *parent)
: QObject(parent)
, m_document(nullptr)
, m_cursorPosition(-1)
, m_selectionStart(0)
, m_selectionEnd(0)
{
}
QQuickTextDocument *DocumentHandler::document() const
{
return m_document;
}
void DocumentHandler::setDocument(QQuickTextDocument *document)
{
if (document == m_document)
return;
if (m_document)
disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
m_document = document;
if (m_document)
connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
emit documentChanged();
}
int DocumentHandler::cursorPosition() const
{
return m_cursorPosition;
}
void DocumentHandler::setCursorPosition(int position)
{
if (position == m_cursorPosition)
return;
m_cursorPosition = position;
emit cursorPositionChanged();
}
int DocumentHandler::selectionStart() const
{
return m_selectionStart;
}
void DocumentHandler::setSelectionStart(int position)
{
if (position == m_selectionStart)
return;
m_selectionStart = position;
emit selectionStartChanged();
}
int DocumentHandler::selectionEnd() const
{
return m_selectionEnd;
}
void DocumentHandler::setSelectionEnd(int position)
{
if (position == m_selectionEnd)
return;
m_selectionEnd = position;
emit selectionEndChanged();
}
QTextCursor DocumentHandler::textCursor() const
{
QTextDocument *doc = textDocument();
if (!doc)
return QTextCursor();
QTextCursor cursor = QTextCursor(doc);
if (m_selectionStart != m_selectionEnd) {
cursor.setPosition(m_selectionStart);
cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor);
} else {
cursor.setPosition(m_cursorPosition);
}
return cursor;
}
QTextDocument *DocumentHandler::textDocument() const
{
if (!m_document)
return nullptr;
return m_document->textDocument();
}
void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
{
QTextCursor cursor = textCursor();
if (!cursor.hasSelection())
cursor.select(QTextCursor::WordUnderCursor);
cursor.mergeCharFormat(format);
}
bool DocumentHandler::modified() const
{
return m_document && m_document->textDocument()->isModified();
}
void DocumentHandler::setModified(bool m)
{
if (m_document)
m_document->textDocument()->setModified(m);
}
QFont DocumentHandler::font() const
{
QTextCursor cursor = textCursor();
if (cursor.isNull())
return m_document->textDocument()->defaultFont();
QTextCharFormat format = cursor.charFormat();
return format.font();
}
void DocumentHandler::setFont(const QFont & font){
QTextCursor cursor = textCursor();
if (!cursor.isNull() && cursor.charFormat().font() == font)
return;
QTextCharFormat format;
format.setFont(font);
mergeFormatOnWordOrSelection(format);
emit fontChanged();
}
bool DocumentHandler::bold() const
{
const QTextCursor cursor = textCursor();
if (cursor.isNull())
return m_document->textDocument()->defaultFont().bold();
return cursor.charFormat().font().bold();
}
void DocumentHandler::setBold(bool bold)
{
const QTextCursor cursor = textCursor();
if (!cursor.isNull() && cursor.charFormat().font().bold() == bold)
return;
QFont font = cursor.charFormat().font();
font.setBold(bold);
QTextCharFormat format;
format.setFont(font);
mergeFormatOnWordOrSelection(format);
emit boldChanged();
}
bool DocumentHandler::italic() const
{
const QTextCursor cursor = textCursor();
if (cursor.isNull())
return m_document->textDocument()->defaultFont().italic();
return cursor.charFormat().font().italic();
}
void DocumentHandler::setItalic(bool italic)
{
const QTextCursor cursor = textCursor();
if (!cursor.isNull() && cursor.charFormat().font().italic() == italic)
return;
QFont font = cursor.charFormat().font();
font.setItalic(italic);
QTextCharFormat format;
format.setFont(font);
mergeFormatOnWordOrSelection(format);
emit italicChanged();
}
bool DocumentHandler::liststyle() const
{
const QTextCursor cursor = textCursor();
if (cursor.isNull())
return false;
return bool(cursor.currentList());
}
void DocumentHandler::setListstyle(bool liststyle)
{
QTextCursor cursor = textCursor();
if (!cursor.isNull() && !liststyle){
cursor.currentList()->remove(cursor.block());
emit liststyleChanged();
}else{
cursor.createList(QTextListFormat::ListDisc);
emit liststyleChanged();
}
}
bool DocumentHandler::codeblock() const
{
const QTextCursor cursor = textCursor();
if (cursor.isNull())
return false;
qDebug()<< QTextDocumentFragment(cursor).toPlainText();
return bool(QTextDocumentFragment(cursor).toMarkdown().contains("```"));
}
void DocumentHandler::setCodeblock(bool codeblock)
{
QTextCursor cursor = textCursor();
if (!cursor.isNull() && !codeblock){
qDebug()<< "!codeblock ```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```";
cursor.insertMarkdown("```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```");
emit codeblockChanged();
}
else{
qDebug()<< "```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```";
cursor.insertMarkdown(QTextDocumentFragment(cursor).toMarkdown().remove("```"));
emit codeblockChanged();
}
}

View File

@ -0,0 +1,114 @@
// This file is part of Friendiqa
// https://github.com/lubuwest/Friendiqa
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef DOCUMENTHANDLER_H
#define DOCUMENTHANDLER_H
//#include <QFont>
#include <QObject>
#include <QTextCursor>
#include <QTextDocument>
#include <QQuickTextDocument>
//QT_BEGIN_NAMESPACE
//class QTextDocument;
//class QQuickTextDocument;
//QT_END_NAMESPACE
class DocumentHandler : public QObject{
Q_OBJECT
Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged)
Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged)
Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged)
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged)
Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged)
Q_PROPERTY(bool liststyle READ liststyle WRITE setListstyle NOTIFY liststyleChanged)
Q_PROPERTY(bool codeblock READ codeblock WRITE setCodeblock NOTIFY codeblockChanged)
Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged)
public:
explicit DocumentHandler(QObject *parent = nullptr);
QQuickTextDocument *document() const;
void setDocument(QQuickTextDocument *document);
int cursorPosition() const;
void setCursorPosition(int position);
int selectionStart() const;
void setSelectionStart(int position);
int selectionEnd() const;
void setSelectionEnd(int position);
QFont font() const;
void setFont(const QFont & font);
bool bold() const;
void setBold(bool bold);
bool italic() const;
void setItalic(bool italic);
bool liststyle() const;
void setListstyle(bool liststyle);
bool modified() const;
void setModified(bool m);
bool codeblock() const;
void setCodeblock(bool codeblock);
signals:
void documentChanged();
void cursorPositionChanged();
void selectionStartChanged();
void selectionEndChanged();
void fontChanged();
void boldChanged();
void italicChanged();
void liststyleChanged();
void codeblockChanged();
void error(const QString &message);
void modifiedChanged();
private:
QTextCursor textCursor() const;
QTextDocument *textDocument() const;
void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
QQuickTextDocument *m_document;
int m_cursorPosition;
int m_selectionStart;
int m_selectionEnd;
};
#endif // DOCUMENTHANDLER_H

View File

@ -177,7 +177,13 @@ void FILESYSTEM::setAutostart(bool autostart) {
QString FILESYSTEM::osType() const QString FILESYSTEM::osType() const
{ {
return QSysInfo::productType(); QString m_osType;
if(QSysInfo::productType()==QString("android")){
m_osType="Android";
}else{
m_osType="Linux";
}
return m_osType;
} }
QString FILESYSTEM::hostname() const QString FILESYSTEM::hostname() const

View File

@ -31,6 +31,7 @@
#include <QApplication> #include <QApplication>
#include <QtQml/QQmlEngine> #include <QtQml/QQmlEngine>
#include <QtQml/qqml.h>
//#include <QtWebEngine> //#include <QtWebEngine>
//#include <QAndroidService> //#include <QAndroidService>
//#include <QtAndroid> //#include <QtAndroid>
@ -38,9 +39,10 @@
#include "xhr.h" #include "xhr.h"
#include "updatenews.h" #include "updatenews.h"
#include "filesystem.h" #include "filesystem.h"
#include "remoteauthasyncimageprovider.h" //#include "remoteauthasyncimageprovider.h"
#include "alarm.h" #include "alarm.h"
#include "oauth.h" #include "oauth.h"
#include "documenthandler.h"
//#include "AndroidNative/systemdispatcher.h" //#include "AndroidNative/systemdispatcher.h"
//#include "AndroidNative/environment.h" //#include "AndroidNative/environment.h"
//#include "AndroidNative/debug.h" //#include "AndroidNative/debug.h"
@ -48,6 +50,7 @@
//#include <QQuickWidget> //#include <QQuickWidget>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#include <QQmlContext> #include <QQmlContext>
#include <QQuickStyle>
// Declare a user-defined data type to work with an icon in QML // Declare a user-defined data type to work with an icon in QML
Q_DECLARE_METATYPE(QSystemTrayIcon::ActivationReason) Q_DECLARE_METATYPE(QSystemTrayIcon::ActivationReason)
@ -59,11 +62,11 @@ Q_DECLARE_METATYPE(QSystemTrayIcon::ActivationReason)
#include <QtAndroidExtras/QAndroidJniEnvironment> #include <QtAndroidExtras/QAndroidJniEnvironment>
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) { JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
Q_UNUSED(vm); Q_UNUSED(vm);
qDebug("NativeInterface::JNI_OnLoad()"); // It must call this function within JNI_OnLoad to enable System Dispatcher qDebug("NativeInterface::JNI_OnLoad()"); // It must call this function within JNI_OnLoad to enable System Dispatcher
AndroidNative::SystemDispatcher::registerNatives(); AndroidNative::SystemDispatcher::registerNatives();
return JNI_VERSION_1_6; return JNI_VERSION_1_6;
} }
#endif #endif
@ -83,45 +86,47 @@ int main(int argc, char *argv[]) {
//return app.exec(); //return app.exec();
} }
else{ else{
//QtWebEngine::initialize(); //QtWebEngine::initialize();
QApplication app(argc, argv); QGuiApplication::setApplicationName("Friendiqa");
QQmlApplicationEngine view; QGuiApplication::setOrganizationName("Friendiqa");
//QQuickView view; QApplication app(argc, argv);
//view.setResizeMode(QQuickView::SizeRootObjectToView); QQmlApplicationEngine view;
app.setWindowIcon(QIcon(":/images/Friendiqa.ico")); //view.setResizeMode(QQuickView::SizeRootObjectToView);
QTranslator qtTranslator; app.setWindowIcon(QIcon(":/images/Friendiqa.ico"));
qtTranslator.load("friendiqa-" + QLocale::system().name(),":/translations"); QTranslator qtTranslator;
app.installTranslator(&qtTranslator); qtTranslator.load("friendiqa-" + QLocale::system().name(),":/translations");
RemoteAuthAsyncImageProvider *imageProvider = new RemoteAuthAsyncImageProvider; app.installTranslator(&qtTranslator);
view.addImageProvider("remoteauthimage",imageProvider); // RemoteAuthAsyncImageProvider *imageProvider = new RemoteAuthAsyncImageProvider;
view.rootContext()->setContextProperty("remoteauth", imageProvider); // view.addImageProvider("remoteauthimage",imageProvider);
XHR* xhr = XHR::instance(); // view.rootContext()->setContextProperty("remoteauth", imageProvider);
view.rootContext()->setContextProperty("xhr", xhr); XHR* xhr = XHR::instance();
FILESYSTEM* filesystem = FILESYSTEM::instance(); view.rootContext()->setContextProperty("xhr", xhr);
if (qstrcmp(argv[1],"-background")==0){ FILESYSTEM* filesystem = FILESYSTEM::instance();
filesystem->setVisibility(false); if (qstrcmp(argv[1],"-background")==0){
} else{filesystem->setVisibility(true);} filesystem->setVisibility(false);
} else{filesystem->setVisibility(true);}
view.rootContext()->setContextProperty("filesystem", filesystem); view.rootContext()->setContextProperty("filesystem", filesystem);
ALARM* alarm = ALARM::instance(); ALARM* alarm = ALARM::instance();
view.rootContext()->setContextProperty("alarm", alarm); view.rootContext()->setContextProperty("alarm", alarm);
UPDATENEWS* updatenews = UPDATENEWS::instance(); UPDATENEWS* updatenews = UPDATENEWS::instance();
view.rootContext()->setContextProperty("updatenews", updatenews); view.rootContext()->setContextProperty("updatenews", updatenews);
updatenews->setDatabase();
OAuthWrapper* oauth2 = OAuthWrapper::instance();
view.rootContext()->setContextProperty("oauth2", oauth2);
qmlRegisterType<DocumentHandler>("io.qt.examples.texteditor", 1, 0, "DocumentHandler");
qmlRegisterType<QSystemTrayIcon>("QSystemTrayIcon", 1, 0, "QSystemTrayIcon");
qRegisterMetaType<QSystemTrayIcon::ActivationReason>("ActivationReason");
view.rootContext()->setContextProperty("iconTrayBlack", QIcon(QPixmap(":/images/friendica-tray-black.svg")));
view.rootContext()->setContextProperty("iconTrayWhite", QIcon(QPixmap(":/images/friendica-tray-white.svg")));
OAuthWrapper* oauth2 = OAuthWrapper::instance(); view.rootContext()->setContextProperty("iconTrayAvailable", QSystemTrayIcon::isSystemTrayAvailable());
view.rootContext()->setContextProperty("oauth2", oauth2); if(updatenews->getStyle() != 0){
QQuickStyle::setStyle("Material");
qmlRegisterType<QSystemTrayIcon>("QSystemTrayIcon", 1, 0, "QSystemTrayIcon"); }
qRegisterMetaType<QSystemTrayIcon::ActivationReason>("ActivationReason"); view.load(QUrl("qrc:/qml/friendiqa.qml"));
view.rootContext()->setContextProperty("iconTray", QIcon(":/images/Friendica_monochrome.png")); view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
view.rootContext()->setContextProperty("iconTrayAvailable", QSystemTrayIcon::isSystemTrayAvailable()); return app.exec();
view.load(QUrl("qrc:/qml/friendiqa.qml"));
//view.show();
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
return app.exec();
} }
} }

View File

@ -89,6 +89,17 @@ void UPDATENEWS::setDatabase()
} }
} }
int UPDATENEWS::getStyle()
{
QSqlQuery syncquery("SELECT * FROM globaloptions",m_db);
while (syncquery.next()){
if (syncquery.value(0).toString()=="view_darkmode"){
return syncquery.value(1).toInt();
}
}
return 0;
}
QJsonArray UPDATENEWS::getAccounts(QString filtername, QString filtervalue){ QJsonArray UPDATENEWS::getAccounts(QString filtername, QString filtervalue){
QString filterstring=""; QString filterstring="";

View File

@ -57,6 +57,7 @@ signals:
public slots: public slots:
void setSyncAll(bool syncAll); void setSyncAll(bool syncAll);
void setDatabase(); void setDatabase();
int getStyle();
void login(); void login();
void timeline(); void timeline();
void replies(); void replies();

View File

@ -227,7 +227,7 @@ void XHR::download()
//connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64))); //connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64)));
connect(reply, &QNetworkReply::finished,this, &XHR::onRequestFinished); connect(reply, &QNetworkReply::finished,this, &XHR::onRequestFinished);
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError); connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError))); connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
} }
void XHR::get() void XHR::get()
@ -254,7 +254,7 @@ void XHR::get()
reply = manager.get(request); reply = manager.get(request);
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess); connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
//connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64))); //connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError))); connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead); connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError); connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
} }
@ -312,7 +312,7 @@ void XHR::post()
reply = manager.post(request, multiPart); reply = manager.post(request, multiPart);
qDebug() << "\t request sent"; qDebug() << "\t request sent";
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess); connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError))); connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead); connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError); connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
} }

View File

@ -0,0 +1,707 @@
<!DOCTYPE html>
<html lang="de-DE" class="theme-forgejo-auto">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Friendiqa/friendica-tray-black.svg an master - Friendiqa - Friendica</title>
<link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiRnJpZW5kaWNhIiwic2hvcnRfbmFtZSI6IkZyaWVuZGljYSIsInN0YXJ0X3VybCI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvIiwiaWNvbnMiOlt7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnN2ZyIsInR5cGUiOiJpbWFnZS9zdmcreG1sIiwic2l6ZXMiOiI1MTJ4NTEyIn1dfQ==">
<meta name="theme-color" content="#6cc644">
<meta name="default-theme" content="forgejo-auto">
<meta name="author" content="MorsMortium">
<meta name="description" content="Friendiqa - Qt/QML App for Friendiqa ">
<meta name="keywords" content="git,forge,forgejo">
<meta name="referrer" content="no-referrer">
<link rel="alternate" type="application/atom+xml" title="" href="/MorsMortium/Friendiqa.atom">
<link rel="alternate" type="application/rss+xml" title="" href="/MorsMortium/Friendiqa.rss">
<link rel="icon" href="/assets/img/favicon.svg" type="image/svg+xml">
<link rel="alternate icon" href="/assets/img/favicon.png" type="image/png">
<link rel="stylesheet" href="/assets/css/index.css?v=1.19.0~2">
<script>
window.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});
window.config = {
appUrl: 'https:\/\/git.friendi.ca\/',
appSubUrl: '',
assetVersionEncoded: encodeURIComponent('1.19.0~2'),
assetUrlPrefix: '\/assets',
runModeIsProd: true ,
customEmojis: {"codeberg":":codeberg:","forgejo":":forgejo:","git":":git:","gitea":":gitea:","github":":github:","gitlab":":gitlab:","gogs":":gogs:"},
useServiceWorker: false ,
csrfToken: 'j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ',
pageData: {},
requireTribute: null ,
notificationSettings: {"EventSourceUpdateTime":10000,"MaxTimeout":60000,"MinTimeout":10000,"TimeoutStep":10000},
enableTimeTracking: true ,
mermaidMaxSourceCharacters: 5000 ,
i18n: {
copy_success: 'Kopiert!',
copy_error: 'Kopieren fehlgeschlagen',
error_occurred: 'Ein Fehler ist aufgetreten',
network_error: 'Netzwerkfehler',
},
};
window.config.pageData = window.config.pageData || {};
</script>
<script src="/assets/js/webcomponents.js?v=1.19.0~2"></script>
<noscript>
<style>
.dropdown:hover > .menu { display: block; }
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; }
</style>
</noscript>
<meta property="og:title" content="Friendiqa">
<meta property="og:url" content="https://git.friendi.ca/MorsMortium/Friendiqa">
<meta property="og:description" content="Qt/QML App for Friendiqa ">
<meta property="og:type" content="object">
<meta property="og:image" content="https://git.friendi.ca/avatars/082870e8cbbfe310f1eb7f6c3e2253f1">
<meta property="og:site_name" content="Friendica">
<link rel="stylesheet" href="/assets/css/theme-forgejo-auto.css?v=1.19.0~2">
</head>
<body>
<div class="full height">
<noscript>Diese Webseite funktioniert besser mit JavaScript.</noscript>
<div class="ui top secondary stackable main menu following bar light no-vertical-tabs">
<nav class="ui container" id="navbar" aria-label="Navigation Bar">
<div class="item brand gt-sb">
<a href="/" aria-label="Startseite">
<img width="30" height="30" src="/assets/img/logo.svg" alt="Logo" aria-hidden="true">
</a>
<div class="gt-df gt-ac">
<button class="ui icon button mobile-only" id="navbar-expand-toggle">
<svg viewBox="0 0 16 16" class="svg octicon-three-bars" width="16" height="16" aria-hidden="true"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"/></svg>
</button>
</div>
</div>
<a class="item " href="/explore/repos">Erkunden</a>
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">Hilfe</a>
<div class="right stackable menu">
<a class="item" href="/user/sign_up">
<svg viewBox="0 0 16 16" class="svg octicon-person" width="16" height="16" aria-hidden="true"><path d="M10.561 8.073a6.005 6.005 0 0 1 3.432 5.142.75.75 0 1 1-1.498.07 4.5 4.5 0 0 0-8.99 0 .75.75 0 0 1-1.498-.07 6.004 6.004 0 0 1 3.431-5.142 3.999 3.999 0 1 1 5.123 0ZM10.5 5a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"/></svg> Registrieren
</a>
<a class="item" rel="nofollow" href="/user/login?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
<svg viewBox="0 0 16 16" class="svg octicon-sign-in" width="16" height="16" aria-hidden="true"><path d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 0 1 0 1.5h-2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 0 1.5h-2.5A1.75 1.75 0 0 1 2 13.25Zm6.56 4.5h5.69a.75.75 0 0 1 0 1.5H8.56l1.97 1.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L6.22 8.53a.75.75 0 0 1 0-1.06l3.25-3.25a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z"/></svg> Anmelden
</a>
</div>
</nav>
</div>
<div role="main" aria-label="Friendiqa/friendica-tray-black.svg an master" class="page-content repository file list ">
<div class="header-wrapper">
<div class="ui container">
<div class="repo-header">
<div class="repo-title-wrap gt-df gt-fc">
<div class="repo-title" role="heading" aria-level="1">
<div class="repo-icon gt-mr-3">
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="32" height="32" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>
</div>
<a href="/MorsMortium">MorsMortium</a>
<div class="gt-mx-2">/</div>
<a href="/MorsMortium/Friendiqa">Friendiqa</a>
<a href="/MorsMortium/Friendiqa.rss"><i class="ui grey icon tooltip gt-ml-3" data-content="RSS Feed" data-position="top center"><svg viewBox="0 0 16 16" class="svg octicon-rss" width="18" height="18" aria-hidden="true"><path d="M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.502 10.502 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7.002 7.002 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.503 5.503 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489ZM2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"/></svg></i></a>
<div class="labels gt-df gt-ac gt-fw">
</div>
</div>
<div class="fork-flag">geforkt von <a href="/lubuwest/Friendiqa">lubuwest/Friendiqa</a></div>
</div>
<div class="repo-buttons">
<form method="post" action="/MorsMortium/Friendiqa/action/watch?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
<div class="ui labeled button tooltip" data-content="Melde dich an, um dieses Repository zu beobachten." data-position="top center">
<button type="submit" class="ui compact small basic button" disabled>
<svg viewBox="0 0 16 16" class="svg octicon-eye" width="16" height="16" aria-hidden="true"><path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"/></svg>Beobachten
</button>
<a class="ui basic label" href="/MorsMortium/Friendiqa/watchers">
1
</a>
</div>
</form>
<form method="post" action="/MorsMortium/Friendiqa/action/star?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
<div class="ui labeled button tooltip" data-content="Bitte melde dich an, um dieses Repository zu favorisieren." data-position="top center">
<button type="submit" class="ui compact small basic button" disabled>
<svg viewBox="0 0 16 16" class="svg octicon-star" width="16" height="16" aria-hidden="true"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"/></svg>Favorisieren
</button>
<a class="ui basic label" href="/MorsMortium/Friendiqa/stars">
0
</a>
</div>
</form>
<div class="ui labeled button
tooltip disabled
"
data-content="Bitte melde dich an, um dieses Repository zu forken."
data-position="top center">
<a class="ui compact small basic button"
>
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="16" height="16" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>Fork
</a>
<div class="ui small modal" id="fork-repo-modal">
<svg viewBox="0 0 16 16" class="close inside svg octicon-x" width="16" height="16" aria-hidden="true"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"/></svg>
<div class="header">
Du hast bereits einen Fork von Friendiqa erstellt
</div>
<div class="content gt-tl">
<div class="ui list">
</div>
</div>
</div>
<a class="ui basic label" href="/MorsMortium/Friendiqa/forks">
0
</a>
</div>
</div>
</div>
</div>
<div class="ui tabs container">
<div class="ui tabular stackable menu navbar">
<a class="active item" href="/MorsMortium/Friendiqa">
<svg viewBox="0 0 16 16" class="svg octicon-code" width="16" height="16" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg> Code
</a>
<a class="item" href="/MorsMortium/Friendiqa/issues">
<svg viewBox="0 0 16 16" class="svg octicon-issue-opened" width="16" height="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"/><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"/></svg> Issues
</a>
<a class="item" href="/MorsMortium/Friendiqa/pulls">
<svg viewBox="0 0 16 16" class="svg octicon-git-pull-request" width="16" height="16" aria-hidden="true"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"/></svg> Pull-Requests
</a>
<a href="/MorsMortium/Friendiqa/packages" class="item">
<svg viewBox="0 0 16 16" class="svg octicon-package" width="16" height="16" aria-hidden="true"><path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"/></svg> Pakete
</a>
<a href="/MorsMortium/Friendiqa/projects" class="item">
<svg viewBox="0 0 16 16" class="svg octicon-project" width="16" height="16" aria-hidden="true"><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"/></svg> Projekte
</a>
<a class="item" href="/MorsMortium/Friendiqa/releases">
<svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg> Releases
</a>
<a class="item" href="/MorsMortium/Friendiqa/wiki" >
<svg viewBox="0 0 16 16" class="svg octicon-book" width="16" height="16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"/></svg> Wiki
</a>
<a class="item" href="/MorsMortium/Friendiqa/activity">
<svg viewBox="0 0 16 16" class="svg octicon-pulse" width="16" height="16" aria-hidden="true"><path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"/></svg> Aktivität
</a>
</div>
</div>
<div class="ui tabs divider"></div>
</div>
<div class="ui container ">
<div class="gt-hidden" id="validate_prompt">
<span id="count_prompt">Du kannst nicht mehr als 25 Themen auswählen</span>
<span id="format_prompt">Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.</span>
</div>
<div class="repo-button-row gt-df gt-ac gt-sb gt-fw">
<div class="gt-df gt-ac gt-fw gt-gap-y-3">
<div class="fitted item choose reference">
<div class="ui floating filter dropdown custom"
data-branch-form=""
data-can-create-branch="false"
data-no-results="Keine Ergebnisse verfügbar."
data-set-action="" data-submit-form=""
data-view-type="branch"
data-ref-name="master"
data-branch-url-prefix="/MorsMortium/Friendiqa/src/branch/"
data-branch-url-suffix="/source-linux/images/friendica-tray-black.svg"
data-tag-url-prefix="/MorsMortium/Friendiqa/src/tag/"
data-tag-url-suffix="/source-linux/images/friendica-tray-black.svg">
<button class="branch-dropdown-button gt-ellipsis ui basic small compact button gt-df" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
<span class="text gt-df gt-ac gt-mr-2">
<span :class="{visible: isViewTag}" v-if="isViewTag" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg></span>
<span :class="{visible: isViewBranch}" v-if="isViewBranch" ><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
<span :class="{visible: isViewTree}" v-if="isViewTree" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
<strong ref="dropdownRefName" class="gt-ml-3">master</strong>
</span>
<svg viewBox="0 0 16 16" class="dropdown icon svg octicon-triangle-down" width="14" height="14" aria-hidden="true"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"/></svg>
</button>
<div class="data gt-hidden" data-mode="branches">
<div class="item branch selected" data-url="master">master</div>
<div class="item tag " data-url="v0.001">v0.001</div>
<div class="item tag " data-url="v0.002">v0.002</div>
<div class="item tag " data-url="v0.004">v0.004</div>
<div class="item tag " data-url="v0.1">v0.1</div>
<div class="item tag " data-url="v0.1.2">v0.1.2</div>
<div class="item tag " data-url="v0.2">v0.2</div>
<div class="item tag " data-url="v0.2.1">v0.2.1</div>
<div class="item tag " data-url="v0.2.2">v0.2.2</div>
<div class="item tag " data-url="v0.3.1">v0.3.1</div>
<div class="item tag " data-url="v0.3.2">v0.3.2</div>
<div class="item tag " data-url="v0.3.3">v0.3.3</div>
<div class="item tag " data-url="v0.3.4">v0.3.4</div>
<div class="item tag " data-url="v0.5">v0.5</div>
<div class="item tag " data-url="v0.5.1">v0.5.1</div>
<div class="item tag " data-url="v0.5.2">v0.5.2</div>
<div class="item tag " data-url="v0.5.3">v0.5.3</div>
<div class="item tag " data-url="v0.5.4">v0.5.4</div>
<div class="item tag " data-url="v0.5.4.1">v0.5.4.1</div>
<div class="item tag " data-url="v0.6">v0.6</div>
<div class="item tag " data-url="v0.6.1">v0.6.1</div>
<div class="item tag " data-url="v0.6.2">v0.6.2</div>
<div class="item tag " data-url="v0.6.3">v0.6.3</div>
<div class="item tag " data-url="v0.6.5">v0.6.5</div>
<div class="item tag " data-url="v0.6.6">v0.6.6</div>
</div>
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
<div class="ui icon search input">
<i class="icon gt-df gt-ac gt-jc gt-m-0"><svg viewBox="0 0 16 16" class="svg octicon-filter" width="16" height="16" aria-hidden="true"><path d="M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5ZM3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75Zm3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"/></svg></i>
<input name="search" ref="searchField" autocomplete="off" v-model="searchTerm" @keydown="keydown($event)" placeholder="Branch oder Tag filtern...">
</div>
<div class="header branch-tag-choice">
<div class="ui grid">
<div class="two column row">
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
<span class="text" :class="{black: mode == 'branches'}">
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>Branches
</span>
</a>
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
<span class="text" :class="{black: mode == 'tags'}">
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg>Tags
</span>
</a>
</div>
</div>
</div>
<div class="scrolling menu" ref="scrollContainer">
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
<a href="#" @click="createNewBranch()">
<div v-show="createTag">
<i class="reference tags icon"></i>
Tag <strong>${ searchTerm }</strong> erstellen
</div>
<div v-show="!createTag">
<svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>
Erstelle Branch <strong>${ searchTerm }</strong>
</div>
<div class="text small">
von „master“
</div>
</a>
<form ref="newBranchForm" action="/MorsMortium/Friendiqa/branches/_new/branch/master" method="post">
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
<input type="hidden" name="new_branch_name" v-model="searchTerm">
<input type="hidden" name="create_tag" v-model="createTag">
<input type="hidden" name="current_path" value="source-linux/images/friendica-tray-black.svg">
</form>
</div>
</div>
<div class="message" v-if="showNoResults">${ noResults }</div>
</div>
</div>
</div>
<span class="ui breadcrumb repo-path gt-ml-2"><a class="section" href="/MorsMortium/Friendiqa/src/branch/master" title="Friendiqa">Friendiqa</a><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux" title="source-linux">source-linux</a></span><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images" title="images">images</a></span><span class="divider">/</span><span class="active section" title="friendica-tray-black.svg">friendica-tray-black.svg</span></span>
</div>
<div class="gt-df gt-ac">
</div>
</div>
<div class="tab-size-8 non-diff-file-content">
<h4 class="file-header ui top attached header gt-df gt-ac gt-sb gt-fw">
<div class="file-header-left gt-df gt-ac gt-py-3 gt-pr-4">
<div class="file-info text grey normal gt-mono">
<div class="file-info-entry">
42 Zeilen
</div>
<div class="file-info-entry">
1.7 KiB
</div>
<div class="file-info-entry">
XML
</div>
</div>
</div>
<div class="file-header-right file-actions gt-df gt-ac gt-fw">
<div class="ui compact icon buttons two-toggle-buttons">
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-black.svg?display=source" class="ui mini basic button tooltip " data-content="Quelltext anzeigen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-code" width="15" height="15" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg></a>
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-black.svg" class="ui mini basic button tooltip active" data-content="Ansicht rendern" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-file" width="15" height="15" aria-hidden="true"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"/></svg></a>
</div>
<div class="ui buttons gt-mr-2">
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg">Originalformat</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/src/commit/8dc907e345eaaebbe8b81b9b098385454e3e8f45/source-linux/images/friendica-tray-black.svg">Permalink</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/blame/branch/master/source-linux/images/friendica-tray-black.svg">Blame</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/commits/branch/master/source-linux/images/friendica-tray-black.svg">Verlauf</a>
</div>
<a download href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg"><span class="btn-octicon tooltip" data-content="Datei herunterladen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-download" width="16" height="16" aria-hidden="true"><path d="M7.47 10.78 3.72 7.03a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.47 2.47V1.75a.75.75 0 0 1 1.5 0v6.69l2.47-2.47a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-3.75 3.75a.75.75 0 0 1-1.06 0ZM3.75 13h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Z"/></svg></span></a>
<a id="copy-content" class="btn-octicon tooltip" data-link="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg" data-content="Copy content"><svg viewBox="0 0 16 16" class="svg octicon-copy" width="14" height="14" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg></a>
<span class="btn-octicon tooltip disabled" data-content="Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-pencil" width="16" height="16" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"/></svg></span>
<span class="btn-octicon tooltip disabled" data-content="Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-trash" width="16" height="16" aria-hidden="true"><path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"/></svg></span>
</div>
</h4>
<div class="ui attached table unstackable segment">
<div class="file-view">
<div class="view-raw ui center">
<img src="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer role="group" aria-label="Footer">
<div class="ui container">
<div class="ui left" role="contentinfo" aria-label="About Software">
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org">Powered by Forgejo</a>
Version:
1.19.0&#43;2
Seite: <strong>37ms</strong>
Template: <strong>1ms</strong>
</div>
<div class="ui right links" role="group" aria-label="Links">
<div class="ui language bottom floating slide up dropdown link item">
<svg viewBox="0 0 16 16" class="svg octicon-globe" width="16" height="16" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"/></svg>
<span>Deutsch</span>
<div class="menu language-menu">
<a lang="id-ID" data-url="/?lang=id-ID" class="item ">Bahasa Indonesia</a>
<a lang="de-DE" data-url="/?lang=de-DE" class="item active selected">Deutsch</a>
<a lang="en-US" data-url="/?lang=en-US" class="item ">English</a>
<a lang="es-ES" data-url="/?lang=es-ES" class="item ">Español</a>
<a lang="fr-FR" data-url="/?lang=fr-FR" class="item ">Français</a>
<a lang="it-IT" data-url="/?lang=it-IT" class="item ">Italiano</a>
<a lang="lv-LV" data-url="/?lang=lv-LV" class="item ">Latviešu</a>
<a lang="hu-HU" data-url="/?lang=hu-HU" class="item ">Magyar nyelv</a>
<a lang="nl-NL" data-url="/?lang=nl-NL" class="item ">Nederlands</a>
<a lang="pl-PL" data-url="/?lang=pl-PL" class="item ">Polski</a>
<a lang="pt-PT" data-url="/?lang=pt-PT" class="item ">Português de Portugal</a>
<a lang="pt-BR" data-url="/?lang=pt-BR" class="item ">Português do Brasil</a>
<a lang="fi-FI" data-url="/?lang=fi-FI" class="item ">Suomi</a>
<a lang="sv-SE" data-url="/?lang=sv-SE" class="item ">Svenska</a>
<a lang="tr-TR" data-url="/?lang=tr-TR" class="item ">Türkçe</a>
<a lang="cs-CZ" data-url="/?lang=cs-CZ" class="item ">Čeština</a>
<a lang="el-GR" data-url="/?lang=el-GR" class="item ">Ελληνικά</a>
<a lang="bg-BG" data-url="/?lang=bg-BG" class="item ">Български</a>
<a lang="ru-RU" data-url="/?lang=ru-RU" class="item ">Русский</a>
<a lang="uk-UA" data-url="/?lang=uk-UA" class="item ">Українська</a>
<a lang="fa-IR" data-url="/?lang=fa-IR" class="item ">فارسی</a>
<a lang="ml-IN" data-url="/?lang=ml-IN" class="item ">മലയാളം</a>
<a lang="ja-JP" data-url="/?lang=ja-JP" class="item ">日本語</a>
<a lang="zh-CN" data-url="/?lang=zh-CN" class="item ">简体中文</a>
<a lang="zh-TW" data-url="/?lang=zh-TW" class="item ">繁體中文(台灣)</a>
<a lang="zh-HK" data-url="/?lang=zh-HK" class="item ">繁體中文(香港)</a>
<a lang="ko-KR" data-url="/?lang=ko-KR" class="item ">한국어</a>
</div>
</div>
<a href="/assets/js/licenses.txt">Lizenzen</a>
<a href="/api/swagger">API</a>
</div>
</div>
</footer>
<script src="/assets/js/index.js?v=1.19.0~2" onerror="alert('Failed to load asset files from ' + this.src + '. Please make sure the asset files can be accessed.')"></script>
</body>
</html>

View File

@ -0,0 +1,707 @@
<!DOCTYPE html>
<html lang="de-DE" class="theme-forgejo-auto">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Friendiqa/friendica-tray-white.svg an master - Friendiqa - Friendica</title>
<link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiRnJpZW5kaWNhIiwic2hvcnRfbmFtZSI6IkZyaWVuZGljYSIsInN0YXJ0X3VybCI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvIiwiaWNvbnMiOlt7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnN2ZyIsInR5cGUiOiJpbWFnZS9zdmcreG1sIiwic2l6ZXMiOiI1MTJ4NTEyIn1dfQ==">
<meta name="theme-color" content="#6cc644">
<meta name="default-theme" content="forgejo-auto">
<meta name="author" content="MorsMortium">
<meta name="description" content="Friendiqa - Qt/QML App for Friendiqa ">
<meta name="keywords" content="git,forge,forgejo">
<meta name="referrer" content="no-referrer">
<link rel="alternate" type="application/atom+xml" title="" href="/MorsMortium/Friendiqa.atom">
<link rel="alternate" type="application/rss+xml" title="" href="/MorsMortium/Friendiqa.rss">
<link rel="icon" href="/assets/img/favicon.svg" type="image/svg+xml">
<link rel="alternate icon" href="/assets/img/favicon.png" type="image/png">
<link rel="stylesheet" href="/assets/css/index.css?v=1.19.0~2">
<script>
window.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});
window.config = {
appUrl: 'https:\/\/git.friendi.ca\/',
appSubUrl: '',
assetVersionEncoded: encodeURIComponent('1.19.0~2'),
assetUrlPrefix: '\/assets',
runModeIsProd: true ,
customEmojis: {"codeberg":":codeberg:","forgejo":":forgejo:","git":":git:","gitea":":gitea:","github":":github:","gitlab":":gitlab:","gogs":":gogs:"},
useServiceWorker: false ,
csrfToken: 'hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw',
pageData: {},
requireTribute: null ,
notificationSettings: {"EventSourceUpdateTime":10000,"MaxTimeout":60000,"MinTimeout":10000,"TimeoutStep":10000},
enableTimeTracking: true ,
mermaidMaxSourceCharacters: 5000 ,
i18n: {
copy_success: 'Kopiert!',
copy_error: 'Kopieren fehlgeschlagen',
error_occurred: 'Ein Fehler ist aufgetreten',
network_error: 'Netzwerkfehler',
},
};
window.config.pageData = window.config.pageData || {};
</script>
<script src="/assets/js/webcomponents.js?v=1.19.0~2"></script>
<noscript>
<style>
.dropdown:hover > .menu { display: block; }
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; }
</style>
</noscript>
<meta property="og:title" content="Friendiqa">
<meta property="og:url" content="https://git.friendi.ca/MorsMortium/Friendiqa">
<meta property="og:description" content="Qt/QML App for Friendiqa ">
<meta property="og:type" content="object">
<meta property="og:image" content="https://git.friendi.ca/avatars/082870e8cbbfe310f1eb7f6c3e2253f1">
<meta property="og:site_name" content="Friendica">
<link rel="stylesheet" href="/assets/css/theme-forgejo-auto.css?v=1.19.0~2">
</head>
<body>
<div class="full height">
<noscript>Diese Webseite funktioniert besser mit JavaScript.</noscript>
<div class="ui top secondary stackable main menu following bar light no-vertical-tabs">
<nav class="ui container" id="navbar" aria-label="Navigation Bar">
<div class="item brand gt-sb">
<a href="/" aria-label="Startseite">
<img width="30" height="30" src="/assets/img/logo.svg" alt="Logo" aria-hidden="true">
</a>
<div class="gt-df gt-ac">
<button class="ui icon button mobile-only" id="navbar-expand-toggle">
<svg viewBox="0 0 16 16" class="svg octicon-three-bars" width="16" height="16" aria-hidden="true"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"/></svg>
</button>
</div>
</div>
<a class="item " href="/explore/repos">Erkunden</a>
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">Hilfe</a>
<div class="right stackable menu">
<a class="item" href="/user/sign_up">
<svg viewBox="0 0 16 16" class="svg octicon-person" width="16" height="16" aria-hidden="true"><path d="M10.561 8.073a6.005 6.005 0 0 1 3.432 5.142.75.75 0 1 1-1.498.07 4.5 4.5 0 0 0-8.99 0 .75.75 0 0 1-1.498-.07 6.004 6.004 0 0 1 3.431-5.142 3.999 3.999 0 1 1 5.123 0ZM10.5 5a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"/></svg> Registrieren
</a>
<a class="item" rel="nofollow" href="/user/login?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
<svg viewBox="0 0 16 16" class="svg octicon-sign-in" width="16" height="16" aria-hidden="true"><path d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 0 1 0 1.5h-2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 0 1.5h-2.5A1.75 1.75 0 0 1 2 13.25Zm6.56 4.5h5.69a.75.75 0 0 1 0 1.5H8.56l1.97 1.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L6.22 8.53a.75.75 0 0 1 0-1.06l3.25-3.25a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z"/></svg> Anmelden
</a>
</div>
</nav>
</div>
<div role="main" aria-label="Friendiqa/friendica-tray-white.svg an master" class="page-content repository file list ">
<div class="header-wrapper">
<div class="ui container">
<div class="repo-header">
<div class="repo-title-wrap gt-df gt-fc">
<div class="repo-title" role="heading" aria-level="1">
<div class="repo-icon gt-mr-3">
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="32" height="32" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>
</div>
<a href="/MorsMortium">MorsMortium</a>
<div class="gt-mx-2">/</div>
<a href="/MorsMortium/Friendiqa">Friendiqa</a>
<a href="/MorsMortium/Friendiqa.rss"><i class="ui grey icon tooltip gt-ml-3" data-content="RSS Feed" data-position="top center"><svg viewBox="0 0 16 16" class="svg octicon-rss" width="18" height="18" aria-hidden="true"><path d="M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.502 10.502 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7.002 7.002 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.503 5.503 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489ZM2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"/></svg></i></a>
<div class="labels gt-df gt-ac gt-fw">
</div>
</div>
<div class="fork-flag">geforkt von <a href="/lubuwest/Friendiqa">lubuwest/Friendiqa</a></div>
</div>
<div class="repo-buttons">
<form method="post" action="/MorsMortium/Friendiqa/action/watch?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
<div class="ui labeled button tooltip" data-content="Melde dich an, um dieses Repository zu beobachten." data-position="top center">
<button type="submit" class="ui compact small basic button" disabled>
<svg viewBox="0 0 16 16" class="svg octicon-eye" width="16" height="16" aria-hidden="true"><path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"/></svg>Beobachten
</button>
<a class="ui basic label" href="/MorsMortium/Friendiqa/watchers">
1
</a>
</div>
</form>
<form method="post" action="/MorsMortium/Friendiqa/action/star?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
<div class="ui labeled button tooltip" data-content="Bitte melde dich an, um dieses Repository zu favorisieren." data-position="top center">
<button type="submit" class="ui compact small basic button" disabled>
<svg viewBox="0 0 16 16" class="svg octicon-star" width="16" height="16" aria-hidden="true"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"/></svg>Favorisieren
</button>
<a class="ui basic label" href="/MorsMortium/Friendiqa/stars">
0
</a>
</div>
</form>
<div class="ui labeled button
tooltip disabled
"
data-content="Bitte melde dich an, um dieses Repository zu forken."
data-position="top center">
<a class="ui compact small basic button"
>
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="16" height="16" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>Fork
</a>
<div class="ui small modal" id="fork-repo-modal">
<svg viewBox="0 0 16 16" class="close inside svg octicon-x" width="16" height="16" aria-hidden="true"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"/></svg>
<div class="header">
Du hast bereits einen Fork von Friendiqa erstellt
</div>
<div class="content gt-tl">
<div class="ui list">
</div>
</div>
</div>
<a class="ui basic label" href="/MorsMortium/Friendiqa/forks">
0
</a>
</div>
</div>
</div>
</div>
<div class="ui tabs container">
<div class="ui tabular stackable menu navbar">
<a class="active item" href="/MorsMortium/Friendiqa">
<svg viewBox="0 0 16 16" class="svg octicon-code" width="16" height="16" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg> Code
</a>
<a class="item" href="/MorsMortium/Friendiqa/issues">
<svg viewBox="0 0 16 16" class="svg octicon-issue-opened" width="16" height="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"/><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"/></svg> Issues
</a>
<a class="item" href="/MorsMortium/Friendiqa/pulls">
<svg viewBox="0 0 16 16" class="svg octicon-git-pull-request" width="16" height="16" aria-hidden="true"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"/></svg> Pull-Requests
</a>
<a href="/MorsMortium/Friendiqa/packages" class="item">
<svg viewBox="0 0 16 16" class="svg octicon-package" width="16" height="16" aria-hidden="true"><path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"/></svg> Pakete
</a>
<a href="/MorsMortium/Friendiqa/projects" class="item">
<svg viewBox="0 0 16 16" class="svg octicon-project" width="16" height="16" aria-hidden="true"><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"/></svg> Projekte
</a>
<a class="item" href="/MorsMortium/Friendiqa/releases">
<svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg> Releases
</a>
<a class="item" href="/MorsMortium/Friendiqa/wiki" >
<svg viewBox="0 0 16 16" class="svg octicon-book" width="16" height="16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"/></svg> Wiki
</a>
<a class="item" href="/MorsMortium/Friendiqa/activity">
<svg viewBox="0 0 16 16" class="svg octicon-pulse" width="16" height="16" aria-hidden="true"><path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"/></svg> Aktivität
</a>
</div>
</div>
<div class="ui tabs divider"></div>
</div>
<div class="ui container ">
<div class="gt-hidden" id="validate_prompt">
<span id="count_prompt">Du kannst nicht mehr als 25 Themen auswählen</span>
<span id="format_prompt">Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.</span>
</div>
<div class="repo-button-row gt-df gt-ac gt-sb gt-fw">
<div class="gt-df gt-ac gt-fw gt-gap-y-3">
<div class="fitted item choose reference">
<div class="ui floating filter dropdown custom"
data-branch-form=""
data-can-create-branch="false"
data-no-results="Keine Ergebnisse verfügbar."
data-set-action="" data-submit-form=""
data-view-type="branch"
data-ref-name="master"
data-branch-url-prefix="/MorsMortium/Friendiqa/src/branch/"
data-branch-url-suffix="/source-linux/images/friendica-tray-white.svg"
data-tag-url-prefix="/MorsMortium/Friendiqa/src/tag/"
data-tag-url-suffix="/source-linux/images/friendica-tray-white.svg">
<button class="branch-dropdown-button gt-ellipsis ui basic small compact button gt-df" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
<span class="text gt-df gt-ac gt-mr-2">
<span :class="{visible: isViewTag}" v-if="isViewTag" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg></span>
<span :class="{visible: isViewBranch}" v-if="isViewBranch" ><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
<span :class="{visible: isViewTree}" v-if="isViewTree" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
<strong ref="dropdownRefName" class="gt-ml-3">master</strong>
</span>
<svg viewBox="0 0 16 16" class="dropdown icon svg octicon-triangle-down" width="14" height="14" aria-hidden="true"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"/></svg>
</button>
<div class="data gt-hidden" data-mode="branches">
<div class="item branch selected" data-url="master">master</div>
<div class="item tag " data-url="v0.001">v0.001</div>
<div class="item tag " data-url="v0.002">v0.002</div>
<div class="item tag " data-url="v0.004">v0.004</div>
<div class="item tag " data-url="v0.1">v0.1</div>
<div class="item tag " data-url="v0.1.2">v0.1.2</div>
<div class="item tag " data-url="v0.2">v0.2</div>
<div class="item tag " data-url="v0.2.1">v0.2.1</div>
<div class="item tag " data-url="v0.2.2">v0.2.2</div>
<div class="item tag " data-url="v0.3.1">v0.3.1</div>
<div class="item tag " data-url="v0.3.2">v0.3.2</div>
<div class="item tag " data-url="v0.3.3">v0.3.3</div>
<div class="item tag " data-url="v0.3.4">v0.3.4</div>
<div class="item tag " data-url="v0.5">v0.5</div>
<div class="item tag " data-url="v0.5.1">v0.5.1</div>
<div class="item tag " data-url="v0.5.2">v0.5.2</div>
<div class="item tag " data-url="v0.5.3">v0.5.3</div>
<div class="item tag " data-url="v0.5.4">v0.5.4</div>
<div class="item tag " data-url="v0.5.4.1">v0.5.4.1</div>
<div class="item tag " data-url="v0.6">v0.6</div>
<div class="item tag " data-url="v0.6.1">v0.6.1</div>
<div class="item tag " data-url="v0.6.2">v0.6.2</div>
<div class="item tag " data-url="v0.6.3">v0.6.3</div>
<div class="item tag " data-url="v0.6.5">v0.6.5</div>
<div class="item tag " data-url="v0.6.6">v0.6.6</div>
</div>
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
<div class="ui icon search input">
<i class="icon gt-df gt-ac gt-jc gt-m-0"><svg viewBox="0 0 16 16" class="svg octicon-filter" width="16" height="16" aria-hidden="true"><path d="M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5ZM3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75Zm3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"/></svg></i>
<input name="search" ref="searchField" autocomplete="off" v-model="searchTerm" @keydown="keydown($event)" placeholder="Branch oder Tag filtern...">
</div>
<div class="header branch-tag-choice">
<div class="ui grid">
<div class="two column row">
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
<span class="text" :class="{black: mode == 'branches'}">
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>Branches
</span>
</a>
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
<span class="text" :class="{black: mode == 'tags'}">
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg>Tags
</span>
</a>
</div>
</div>
</div>
<div class="scrolling menu" ref="scrollContainer">
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
<a href="#" @click="createNewBranch()">
<div v-show="createTag">
<i class="reference tags icon"></i>
Tag <strong>${ searchTerm }</strong> erstellen
</div>
<div v-show="!createTag">
<svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>
Erstelle Branch <strong>${ searchTerm }</strong>
</div>
<div class="text small">
von „master“
</div>
</a>
<form ref="newBranchForm" action="/MorsMortium/Friendiqa/branches/_new/branch/master" method="post">
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
<input type="hidden" name="new_branch_name" v-model="searchTerm">
<input type="hidden" name="create_tag" v-model="createTag">
<input type="hidden" name="current_path" value="source-linux/images/friendica-tray-white.svg">
</form>
</div>
</div>
<div class="message" v-if="showNoResults">${ noResults }</div>
</div>
</div>
</div>
<span class="ui breadcrumb repo-path gt-ml-2"><a class="section" href="/MorsMortium/Friendiqa/src/branch/master" title="Friendiqa">Friendiqa</a><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux" title="source-linux">source-linux</a></span><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images" title="images">images</a></span><span class="divider">/</span><span class="active section" title="friendica-tray-white.svg">friendica-tray-white.svg</span></span>
</div>
<div class="gt-df gt-ac">
</div>
</div>
<div class="tab-size-8 non-diff-file-content">
<h4 class="file-header ui top attached header gt-df gt-ac gt-sb gt-fw">
<div class="file-header-left gt-df gt-ac gt-py-3 gt-pr-4">
<div class="file-info text grey normal gt-mono">
<div class="file-info-entry">
42 Zeilen
</div>
<div class="file-info-entry">
1.7 KiB
</div>
<div class="file-info-entry">
XML
</div>
</div>
</div>
<div class="file-header-right file-actions gt-df gt-ac gt-fw">
<div class="ui compact icon buttons two-toggle-buttons">
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-white.svg?display=source" class="ui mini basic button tooltip " data-content="Quelltext anzeigen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-code" width="15" height="15" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg></a>
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-white.svg" class="ui mini basic button tooltip active" data-content="Ansicht rendern" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-file" width="15" height="15" aria-hidden="true"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"/></svg></a>
</div>
<div class="ui buttons gt-mr-2">
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg">Originalformat</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/src/commit/8dc907e345eaaebbe8b81b9b098385454e3e8f45/source-linux/images/friendica-tray-white.svg">Permalink</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/blame/branch/master/source-linux/images/friendica-tray-white.svg">Blame</a>
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/commits/branch/master/source-linux/images/friendica-tray-white.svg">Verlauf</a>
</div>
<a download href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg"><span class="btn-octicon tooltip" data-content="Datei herunterladen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-download" width="16" height="16" aria-hidden="true"><path d="M7.47 10.78 3.72 7.03a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.47 2.47V1.75a.75.75 0 0 1 1.5 0v6.69l2.47-2.47a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-3.75 3.75a.75.75 0 0 1-1.06 0ZM3.75 13h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Z"/></svg></span></a>
<a id="copy-content" class="btn-octicon tooltip" data-link="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg" data-content="Copy content"><svg viewBox="0 0 16 16" class="svg octicon-copy" width="14" height="14" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg></a>
<span class="btn-octicon tooltip disabled" data-content="Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-pencil" width="16" height="16" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"/></svg></span>
<span class="btn-octicon tooltip disabled" data-content="Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-trash" width="16" height="16" aria-hidden="true"><path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"/></svg></span>
</div>
</h4>
<div class="ui attached table unstackable segment">
<div class="file-view">
<div class="view-raw ui center">
<img src="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer role="group" aria-label="Footer">
<div class="ui container">
<div class="ui left" role="contentinfo" aria-label="About Software">
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org">Powered by Forgejo</a>
Version:
1.19.0&#43;2
Seite: <strong>42ms</strong>
Template: <strong>1ms</strong>
</div>
<div class="ui right links" role="group" aria-label="Links">
<div class="ui language bottom floating slide up dropdown link item">
<svg viewBox="0 0 16 16" class="svg octicon-globe" width="16" height="16" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"/></svg>
<span>Deutsch</span>
<div class="menu language-menu">
<a lang="id-ID" data-url="/?lang=id-ID" class="item ">Bahasa Indonesia</a>
<a lang="de-DE" data-url="/?lang=de-DE" class="item active selected">Deutsch</a>
<a lang="en-US" data-url="/?lang=en-US" class="item ">English</a>
<a lang="es-ES" data-url="/?lang=es-ES" class="item ">Español</a>
<a lang="fr-FR" data-url="/?lang=fr-FR" class="item ">Français</a>
<a lang="it-IT" data-url="/?lang=it-IT" class="item ">Italiano</a>
<a lang="lv-LV" data-url="/?lang=lv-LV" class="item ">Latviešu</a>
<a lang="hu-HU" data-url="/?lang=hu-HU" class="item ">Magyar nyelv</a>
<a lang="nl-NL" data-url="/?lang=nl-NL" class="item ">Nederlands</a>
<a lang="pl-PL" data-url="/?lang=pl-PL" class="item ">Polski</a>
<a lang="pt-PT" data-url="/?lang=pt-PT" class="item ">Português de Portugal</a>
<a lang="pt-BR" data-url="/?lang=pt-BR" class="item ">Português do Brasil</a>
<a lang="fi-FI" data-url="/?lang=fi-FI" class="item ">Suomi</a>
<a lang="sv-SE" data-url="/?lang=sv-SE" class="item ">Svenska</a>
<a lang="tr-TR" data-url="/?lang=tr-TR" class="item ">Türkçe</a>
<a lang="cs-CZ" data-url="/?lang=cs-CZ" class="item ">Čeština</a>
<a lang="el-GR" data-url="/?lang=el-GR" class="item ">Ελληνικά</a>
<a lang="bg-BG" data-url="/?lang=bg-BG" class="item ">Български</a>
<a lang="ru-RU" data-url="/?lang=ru-RU" class="item ">Русский</a>
<a lang="uk-UA" data-url="/?lang=uk-UA" class="item ">Українська</a>
<a lang="fa-IR" data-url="/?lang=fa-IR" class="item ">فارسی</a>
<a lang="ml-IN" data-url="/?lang=ml-IN" class="item ">മലയാളം</a>
<a lang="ja-JP" data-url="/?lang=ja-JP" class="item ">日本語</a>
<a lang="zh-CN" data-url="/?lang=zh-CN" class="item ">简体中文</a>
<a lang="zh-TW" data-url="/?lang=zh-TW" class="item ">繁體中文(台灣)</a>
<a lang="zh-HK" data-url="/?lang=zh-HK" class="item ">繁體中文(香港)</a>
<a lang="ko-KR" data-url="/?lang=ko-KR" class="item ">한국어</a>
</div>
</div>
<a href="/assets/js/licenses.txt">Lizenzen</a>
<a href="/api/swagger">API</a>
</div>
</div>
</footer>
<script src="/assets/js/index.js?v=1.19.0~2" onerror="alert('Failed to load asset files from ' + this.src + '. Please make sure the asset files can be accessed.')"></script>
</body>
</html>

View File

@ -180,7 +180,7 @@ function updateData(database,table, username, key, value, callback,filter,filter
function showMessage(header,message,rootwindow){//print(message); function showMessage(header,message,rootwindow){//print(message);
var cleanmessage=message.replace(/"/g,"-"); var cleanmessage=message.replace(/"/g,"-");
if(cleanmessage.length>200){cleanmessage=cleanmessage.slice(0,200)+'...'} if(cleanmessage.length>200){cleanmessage=cleanmessage.slice(0,200)+'...'}
var messageString='import QtQuick 2.0; import QtQuick.Controls 2.15; import QtQuick.Controls.Material 2.12; Dialog{ visible: true; title:"'+header+'";standardButtons: Dialog.Ok;anchors.centerIn: parent;Label{text:" '+cleanmessage+'"}}'; var messageString='import QtQuick 2.0; import QtQuick.Controls 2.15; Dialog{ visible: true; title:"'+header+'";standardButtons: Dialog.Ok;anchors.centerIn: parent;Label{text:" '+cleanmessage+'"}}';
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput"); var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
} }

View File

@ -313,6 +313,9 @@ function newsfromdb(database,login,messagetype,callback,contact,stop_time){
for(var i = 0; i < newsrs.rows.length; i++) { for(var i = 0; i < newsrs.rows.length; i++) {
newsArray.push(newsrs.rows.item(i)); newsArray.push(newsrs.rows.item(i));
if(newsArray[i].statusnet_html==""){
newsArray[i].statusnet_html=newsArray[i].text
}
newsArray[i].statusnet_html=Qt.atob(newsArray[i].statusnet_html); newsArray[i].statusnet_html=Qt.atob(newsArray[i].statusnet_html);
newsArray[i].text=Qt.atob(newsArray[i].text); newsArray[i].text=Qt.atob(newsArray[i].text);
newsArray[i].id=newsArray[i].status_id; newsArray[i].id=newsArray[i].status_id;

View File

@ -30,7 +30,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls.Material 2.12
//import QtQuick.Controls 2.4 //import QtQuick.Controls 2.4
Item { Item {
@ -51,7 +50,7 @@ Item {
id:daytext id:daytext
anchors.right: parent.right anchors.right: parent.right
anchors.margins: 0.5*mm anchors.margins: 0.5*mm
color:(model.month==monthgrid.month)?Material.primaryTextColor:Material.secondaryTextColor color:(model.month==monthgrid.month)?osSettings.primaryTextColor:osSettings.secondaryTextColor
wrapMode: Text.WrapAnywhere wrapMode: Text.WrapAnywhere
text: model.day text: model.day
font.bold: model.today font.bold: model.today

View File

@ -29,11 +29,10 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0 import QtQuick 2.15
import QtQuick.Controls 2.15 import QtQuick.Controls 6.3
import QtQuick.Controls.Material 2.12
import QtQml 2.2 //import Qt.labs.calendar 1.0
import Qt.labs.calendar 1.0
//import QtQuick.Layouts 1.3 //import QtQuick.Layouts 1.3
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
@ -45,7 +44,7 @@ Rectangle {
// y:1 // y:1
width:parent.width width:parent.width
height:parent.height height:parent.height
color: Material.backgroundColor color: osSettings.backgroundColor
property date currentTime: new Date() property date currentTime: new Date()
property int offsetTime: currentTime.getTimezoneOffset() * 60 * 1000 property int offsetTime: currentTime.getTimezoneOffset() * 60 * 1000
property var events:[] property var events:[]
@ -128,7 +127,7 @@ Rectangle {
anchors.topMargin: 0.5*mm anchors.topMargin: 0.5*mm
anchors.right:calendartabstatusButton.left anchors.right:calendartabstatusButton.left
anchors.rightMargin:mm anchors.rightMargin:mm
width: 2*root.fontFactor*osSettings.bigFontSize; //width: 2*root.fontFactor*osSettings.bigFontSize;
text:"\uf021" text:"\uf021"
onClicked: { onClicked: {
calBusy.running=true; calBusy.running=true;
@ -223,7 +222,7 @@ Rectangle {
orientation: ListView.Horizontal orientation: ListView.Horizontal
highlightRangeMode: ListView.StrictlyEnforceRange highlightRangeMode: ListView.StrictlyEnforceRange
model: CalendarModel {id:calendarModel model: CalendarModel {id:calendarModel
from: new Date() from: new Date()
to: new Date(new Date().valueOf()+93312000000) to: new Date(new Date().valueOf()+93312000000)
} }
@ -236,7 +235,7 @@ Rectangle {
//Layout.fillWidth: true //Layout.fillWidth: true
width: parent.width-root.fontFactor*osSettings.bigFontSize width: parent.width-root.fontFactor*osSettings.bigFontSize
horizontalAlignment:Text.AlignHCenter horizontalAlignment:Text.AlignHCenter
color: Material.primaryTextColor color: osSettings.primaryTextColor
text: model.year text: model.year
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
} }
@ -244,7 +243,7 @@ Rectangle {
width: parent.width-osSettings.bigFontSize width: parent.width-osSettings.bigFontSize
text: Qt.locale().standaloneMonthName(model.month) text: Qt.locale().standaloneMonthName(model.month)
//Layout.fillWidth: true //Layout.fillWidth: true
color: Material.primaryTextColor color: osSettings.primaryTextColor
horizontalAlignment:Text.AlignHCenter horizontalAlignment:Text.AlignHCenter
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
} }

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Controls 1.4 as Oldcontrols import QtQuick.Controls 1.4 as Oldcontrols
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
@ -56,7 +55,7 @@ Flickable{
id: eventRect id: eventRect
width: root.width width: root.width
height: textColumn.height + 6*root.fontFactor*osSettings.bigFontSize height: textColumn.height + 6*root.fontFactor*osSettings.bigFontSize
color: Material.backgroundColor color: osSettings.backgroundColor
MButton{ MButton{
id:closeButton id:closeButton
anchors.top: parent.top anchors.top: parent.top
@ -74,7 +73,7 @@ Flickable{
height: root.fontFactor*osSettings.bigFontSize height: root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
//verticalAlignment: TextInput.AlignBottom //verticalAlignment: TextInput.AlignBottom
color: Material.primaryTextColor color: osSettings.primaryTextColor
text:qsTr("Start") text:qsTr("Start")
} }
@ -139,7 +138,7 @@ Flickable{
width: 3*root.fontFactor*osSettings.bigFontSize width: 3*root.fontFactor*osSettings.bigFontSize
height: root.fontFactor*osSettings.bigFontSize height: root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
color: Material.primaryTextColor color: osSettings.primaryTextColor
text:qsTr("End") text:qsTr("End")
} }
TextField { TextField {
@ -293,7 +292,7 @@ Flickable{
} }
Rectangle{ Rectangle{
color: Material.backgroundColor color: osSettings.backgroundColor
radius: 0.5*mm radius: 0.5*mm
width: parent.width-root.fontFactor*osSettings.bigFontSize width: parent.width-root.fontFactor*osSettings.bigFontSize
height:Math.max(bodyField.contentHeight+root.fontFactor*osSettings.bigFontSize,2.5*root.fontFactor*osSettings.bigFontSize) height:Math.max(bodyField.contentHeight+root.fontFactor*osSettings.bigFontSize,2.5*root.fontFactor*osSettings.bigFontSize)
@ -391,7 +390,7 @@ Flickable{
Label { Label {
text: formatText(Tumbler.tumbler.count, modelData) text: formatText(Tumbler.tumbler.count, modelData)
opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2) opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
color:Material.primaryTextColor color: osSettings.primaryTextColor
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
@ -39,7 +38,7 @@ import "qrc:/qml/calendarqml"
Rectangle{ Rectangle{
id:eventList id:eventList
color: Material.backgroundColor color: osSettings.backgroundColor
property var daylist:[] property var daylist:[]
property int dayint: 0 property int dayint: 0
property var events:[] property var events:[]
@ -50,6 +49,7 @@ Rectangle{
anchors.topMargin: 1*mm anchors.topMargin: 1*mm
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 1*mm anchors.rightMargin: 1*mm
width: 2*root.fontFactor*osSettings.bigFontSize;
text: "\uf057" text: "\uf057"
onClicked:{rootstackView.pop()} onClicked:{rootstackView.pop()}
} }

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
@ -43,8 +42,8 @@ Rectangle{
property var currEvent: event property var currEvent: event
width:parent.width width:parent.width
height:Math.max(eventNameText.height+eventDetailsText.height,profileImage.height)+mm height:Math.max(eventNameText.height+eventDetailsText.height,profileImage.height)+mm
border.color: Material.backgroundDimColor //border.color: osSettings.backgroundDimColor
color: Material.backgroundColor color: osSettings.backgroundColor
border.width: 1 border.width: 1
radius: 0.5*mm radius: 0.5*mm
Image { Image {
@ -61,7 +60,7 @@ Rectangle{
x: 8*mm x: 8*mm
width:parent.width-8*mm width:parent.width-8*mm
height:contentHeight height:contentHeight
color: Material.primaryTextColor color: osSettings.primaryTextColor
textFormat: Text.RichText textFormat: Text.RichText
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text: new Date(event.start).toLocaleString(Qt.locale(),Locale.NarrowFormat)+ " - " +((event.end>0)&&(event.end!=null)?new Date(event.end).toLocaleString(Qt.locale(),Locale.NarrowFormat):"\u221E")+":<br>"+(status=="large"?"<b>"+event.title+"</b>":event.title) text: new Date(event.start).toLocaleString(Qt.locale(),Locale.NarrowFormat)+ " - " +((event.end>0)&&(event.end!=null)?new Date(event.end).toLocaleString(Qt.locale(),Locale.NarrowFormat):"\u221E")+":<br>"+(status=="large"?"<b>"+event.title+"</b>":event.title)
@ -74,7 +73,7 @@ Rectangle{
z:4 z:4
width: parent.width-8*mm width: parent.width-8*mm
height: contentHeight height: contentHeight
color: Material.primaryTextColor color: osSettings.primaryTextColor
textFormat: Text.RichText textFormat: Text.RichText
text: status!="large"?"":Qt.atob(event.desc) + (event.location==""?"":"<br><br>"+qsTr("Location")+": "+event.location) text: status!="large"?"":Qt.atob(event.desc) + (event.location==""?"":"<br><br>"+qsTr("Location")+": "+event.location)
anchors.top: eventNameText.bottom anchors.top: eventNameText.bottom

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.12
Dialog { Dialog {
id: rulesDialog id: rulesDialog
@ -57,8 +56,8 @@ Dialog {
x:1; y:1 x:1; y:1
width: root.width-4*root.fontFactor*osSettings.bigFontSize width: root.width-4*root.fontFactor*osSettings.bigFontSize
wrapMode: TextEdit.Wrap wrapMode: TextEdit.Wrap
color: Material.primaryTextColor color: osSettings.primaryTextColor
linkColor: Material.accentColor linkColor: osSettings.secondaryTextColor
textFormat: Text.PlainText textFormat: Text.PlainText
font.family: "Noto Sans" font.family: "Noto Sans"
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize

File diff suppressed because it is too large Load Diff

View File

@ -30,179 +30,218 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Dialogs 1.2 //import QtQuick.Dialogs 1.2
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/qml/configqml" import "qrc:/qml/configqml"
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
Page{ Page{
//anchors.fill: parent width: parent.width
width:root.width height: parent.height
height:root.height ScrollView{
anchors.fill: parent
contentHeight: 40*root.fontFactor*osSettings.bigFontSize
contentWidth: root.width
clip:true
Label { Label {
text: qsTr("News as") text: qsTr("News as")
font.pointSize:osSettings.systemFontSize font.pointSize:osSettings.systemFontSize
x: root.fontFactor*osSettings.bigFontSize; y: 2*root.fontFactor*osSettings.bigFontSize x: root.fontFactor*osSettings.bigFontSize; y: 2*root.fontFactor*osSettings.bigFontSize
}
Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
color: Material.dialogColor//"#F3F3F3"
radius: 0.5*mm
Label{
id: newsTypeField
anchors.fill: parent
font.pointSize:osSettings.bigFontSize
text:qsTr("Conversations")
} }
MouseArea{
anchors.fill:parent
onClicked:newstypemenu.popup()
}
}
Menu {
id:newstypemenu
width:12*root.fontFactor*osSettings.bigFontSize
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Timeline")
onTriggered: {newsTypeField.text=qsTr("Timeline");
Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
}
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Conversations")
onTriggered: {newsTypeField.text=qsTr("Conversations");
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
}
}
Rectangle{
Label { x: root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
text: qsTr("Max. News") width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.systemFontSize color: osSettings.backgroundDimColor//"#F3F3F3"
x: root.fontFactor*osSettings.bigFontSize; y:8*root.fontFactor*osSettings.bigFontSize radius: 0.5*mm
} Label{
id: newsTypeField
Slider{ id: maxNews anchors.fill: parent
x:6*root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize; font.pointSize:osSettings.bigFontSize
width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize text:qsTr("Conversations")
from: 0;to:2000; stepSize: 100 }
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000 MouseArea{
} anchors.fill:parent
onClicked:newstypemenu.popup()
Rectangle{
color: Material.dialogColor
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
radius: 0.5*mm
TextEdit{id:maxNewsText;
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight
color: Material.primaryTextColor
text:maxNews.value
selectByMouse: true
onTextChanged: {
Service.updateglobaloptions(root.db,"max_news",text);
} }
} }
} Menu {
id:newstypemenu
CheckBox{ width:12*root.fontFactor*osSettings.bigFontSize
id: nsfwCheckbox MenuItem {
x: root.fontFactor*osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
y: 14*root.fontFactor*osSettings.bigFontSize text: qsTr("Timeline")
font.pointSize: osSettings.bigFontSize onTriggered: {newsTypeField.text=qsTr("Timeline");
text: qsTr("Hide #nsfw?") Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
checked:(globaloptions["hide_nsfw"]==1)?true:false
onClicked: {
toggle();
if(nsfwCheckbox.checked==true){
Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
} }
else{ MenuItem {
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true; font.pointSize: osSettings.bigFontSize
text: qsTr("Conversations")
onTriggered: {newsTypeField.text=qsTr("Conversations");
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
} }
} }
}
// CheckBox{ Label {
// id: darkmodeCheckbox text: qsTr("Max. News")
// tristate:true font.pointSize: osSettings.systemFontSize
// x: root.fontFactor*osSettings.bigFontSize x: root.fontFactor*osSettings.bigFontSize; y:8*root.fontFactor*osSettings.bigFontSize
// y: 24*root.fontFactor*osSettings.bigFontSize }
// font.pointSize: osSettings.bigFontSize
// text: qsTr("Dark Mode")
// checked:(globaloptions["view_darkmode"]==1)?true:false
// onClicked: {
// toggle();
// if(darkmodeCheckbox.checked==true){
// Service.updateglobaloptions(root.db,"view_darkmode",0);darkmodeCheckbox.checked=false;
// root.Material.theme=Material.Light
// }
// else{
// Service.updateglobaloptions(root.db,"view_darkmode",1);darkmodeCheckbox.checked=true;
// root.Material.theme=Material.Dark
// }
// }
// }
Column{
x: root.fontFactor*osSettings.bigFontSize
y: 18*root.fontFactor*osSettings.bigFontSize
Label{
text: qsTr("Dark Mode")
font.pointSize: osSettings.systemFontSize}
RadioButton{ Slider{ id: maxNews
text: qsTr("System") x:6*root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
checked: (globaloptions["view_darkmode"]==0 || globaloptions["view_darkmode"]==undefined)?true:false width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize
from: 0;to:2000; stepSize: 100
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
}
Rectangle{
color: osSettings.backgroundDimColor
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
radius: 0.5*mm
TextEdit{id:maxNewsText;
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight
color: osSettings.primaryTextColor
text:maxNews.value
selectByMouse: true
onTextChanged: {
Service.updateglobaloptions(root.db,"max_news",text);
}
}
}
CheckBox{
id: nsfwCheckbox
x: root.fontFactor*osSettings.bigFontSize
y: 14*root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
text: qsTr("Hide #nsfw?")
checked:(globaloptions["hide_nsfw"]==1)?true:false
onClicked: { onClicked: {
if(checked==true){ toggle();
Service.updateglobaloptions(root.db,"view_darkmode",0); if(nsfwCheckbox.checked==true){
root.Material.theme=Material.System Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
} }
else{
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true;
}
} }
} }
RadioButton{
text: qsTr("Dark")
checked: (globaloptions["view_darkmode"]==1)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",1);
root.Material.theme=Material.Dark
}
}
}
RadioButton{
text: qsTr("Light")
checked: (globaloptions["view_darkmode"]==2)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",2);
root.Material.theme=Material.Light
}
}
}
}
MButton {
anchors.right: parent.right; //anchors.rightMargin: mm; // CheckBox{
anchors.top: parent.top // id: darkmodeCheckbox
anchors.topMargin: 2*root.fontFactor*osSettings.bigFontSize // tristate:true
width: 2*root.fontFactor*osSettings.bigFontSize; // x: root.fontFactor*osSettings.bigFontSize
text: "?" // y: 24*root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.bigFontSize // font.pointSize: osSettings.bigFontSize
onClicked:{ // text: qsTr("Dark Mode")
rootstackView.push("qrc:/qml/configqml/InfoBox.qml"); // checked:(globaloptions["view_darkmode"]==1)?true:false
// onClicked: {
// toggle();
// if(darkmodeCheckbox.checked==true){
// Service.updateglobaloptions(root.db,"view_darkmode",0);darkmodeCheckbox.checked=false;
// root.Material.theme=Material.Light
// }
// else{
// Service.updateglobaloptions(root.db,"view_darkmode",1);darkmodeCheckbox.checked=true;
// root.Material.theme=Material.Dark
// }
// }
// }
Column{
visible: osSettings.osType=="Android"
x: root.fontFactor*osSettings.bigFontSize
y: 18*root.fontFactor*osSettings.bigFontSize
Label{
text: qsTr("Dark Mode")
font.pointSize: osSettings.systemFontSize}
RadioButton{
text: qsTr("System")
checked: (globaloptions["view_darkmode"]==0 || globaloptions["view_darkmode"]==undefined)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",0);
root.Material.theme=Material.System
}
}
}
RadioButton{
text: qsTr("Dark")
checked: (globaloptions["view_darkmode"]==1)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",1);
root.Material.theme=Material.Dark
}
}
}
RadioButton{
text: qsTr("Light")
checked: (globaloptions["view_darkmode"]==2)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",2);
root.Material.theme=Material.Light
}
}
}
}
Column{
x: root.fontFactor*osSettings.bigFontSize
y: 28*root.fontFactor*osSettings.bigFontSize
Label{
text: qsTr("Toolbar Postion")
font.pointSize: osSettings.systemFontSize}
RadioButton{
text: qsTr("Top")
checked: (globaloptions["toolbarposition"]==0 || globaloptions["toolbarposition"]==undefined)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"roottoolbarposition",0);
globaloptions.toolbarposition=0;
root.roottoolbar.position=ToolBar.Header
}
}
}
RadioButton{
text: qsTr("Bottom")
checked: (globaloptions["toolbarposition"]==1)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"roottoolbarposition",1);
globaloptions.toolbarposition=1;
root.roottoolbar.position=ToolBar.Footer
}
}
}
}
MButton {
anchors.right: parent.right; anchors.rightMargin: mm;
anchors.top: parent.top
anchors.topMargin: 3*root.fontFactor*osSettings.bigFontSize
//width: 2*root.fontFactor*osSettings.bigFontSize;
text: "?"
font.pointSize: osSettings.bigFontSize
onClicked:{
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
}
} }
} }
// MButton{ // MButton{

View File

@ -30,10 +30,9 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Dialogs 1.2 //import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
import "qrc:/qml/configqml" import "qrc:/qml/configqml"
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
@ -119,7 +118,7 @@ Page{
MButton{ MButton{
id:closeButton id:closeButton
// height: 2*root.fontFactor*osSettings.bigFontSize // height: 2*root.fontFactor*osSettings.bigFontSize
width: 2*root.fontFactor*osSettings.bigFontSize; //width: 2*root.fontFactor*osSettings.bigFontSize;
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin:2*root.fontFactor*osSettings.bigFontSize anchors.topMargin:2*root.fontFactor*osSettings.bigFontSize
anchors.right: parent.right anchors.right: parent.right

View File

@ -31,8 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
Page{ Page{
//anchors.fill: parent //anchors.fill: parent

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
Page{ Page{
@ -41,9 +40,9 @@ Page{
textFormat: Text.RichText textFormat: Text.RichText
width: root.width-mm width: root.width-mm
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
color:Material.primaryTextColor color: osSettings.primaryTextColor
wrapMode: Text.WrapAtWordBoundaryOrAnywhere wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: "<b>Friendiqa v0.6.8 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+ text: "<b>Friendiqa v0.6.9 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
"Website <a href='https://friendiqa.ma-nic.de'>https://friendiqa.ma-nic.de</a><br>"+ "Website <a href='https://friendiqa.ma-nic.de'>https://friendiqa.ma-nic.de</a><br>"+
"Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+ "Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+
"Privacy Policy: <a href='https://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md'>http://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md</a><br>"+ "Privacy Policy: <a href='https://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md'>http://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md</a><br>"+

View File

@ -51,6 +51,7 @@ ScrollView{
spacing: 0.7*root.fontFactor*osSettings.bigFontSize spacing: 0.7*root.fontFactor*osSettings.bigFontSize
Label{ Label{
width:implicitWidth width:implicitWidth
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text: "\uf085 "+ qsTr("Settings") text: "\uf085 "+ qsTr("Settings")
MouseArea{ MouseArea{
@ -63,6 +64,7 @@ ScrollView{
Label{y: 2*root.fontFactor*osSettings.bigFontSize Label{y: 2*root.fontFactor*osSettings.bigFontSize
width:implicitWidth width:implicitWidth
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text: "\uf2bb " + qsTr("Accounts") text: "\uf2bb " + qsTr("Accounts")
MouseArea{ MouseArea{
@ -75,6 +77,7 @@ ScrollView{
Label{y: 4*root.fontFactor*osSettings.bigFontSize Label{y: 4*root.fontFactor*osSettings.bigFontSize
width:implicitWidth width:implicitWidth
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text: "\uf08b " +qsTr("Quit") text: "\uf08b " +qsTr("Quit")
MouseArea{ MouseArea{

View File

@ -31,16 +31,40 @@
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls.Material 2.12
QtObject{ QtObject{
property int appWidth: Screen.desktopAvailableWidth property int appWidth: Screen.desktopAvailableWidth
property int appHeight: Screen.desktopAvailableHeight property int appHeight: Screen.desktopAvailableHeight
property int backKey: Qt.Key_Back property int backKey: Qt.Key_Back
//property string attachImageDir:filesystem.cameraPath+"/" //property string attachImageDir:filesystem.cameraPath+"/"
property string osType: "Android" property string osType: "Android"
property int systemFontSize: root.font.pointSize*1.1 property int systemFontSize: root.font.pointSize*1.1
property int bigFontSize: systemFontSize*1.3 property int bigFontSize: systemFontSize*1.3
property string imagePickQml: "ImagePicker" property string imagePickQml: "ImagePicker"
property string imagePicker:'import QtQuick 2.0; import "qrc:/qml/genericqml";'+ property string imagePicker:'import QtQuick 2.0; import "qrc:/qml/genericqml";'+
imagePickQml+'{multiple : true;onReady: {attachImageURLs.push(imageUrl);'+ imagePickQml+'{multiple : true;onReady: {attachImageURLs.push(imageUrl);'+
'attachImage(imageUrl)}}' 'attachImage(imageUrl)}}'
Material.theme: Material.System
property color backgroundColor: Material.backgroundColor
property color backgroundDimColor:Material.backgroundDimColor
property color primaryTextColor: Material.primaryTextColor
property color secondaryTextColor: Material.secondaryTextColor
property color dialogColor: Material.dialogColor
property color accentColor: Material.accentColor
property color buttonColor: Material.buttonColor
function setTheme(theme){
if (theme=="system"){
Material.theme=Material.System
}
else if (theme=="dark"){
Material.theme=Material.Dark
}
else if (theme=="light"){
Material.theme=Material.Light
}
}
} }

View File

@ -30,7 +30,9 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import QtQuick 2.0 import QtQuick 6.3
import QtQuick.Controls 6.3
QtObject{ QtObject{
property real appWidth: Screen.desktopAvailableWidth/4*3 property real appWidth: Screen.desktopAvailableWidth/4*3
property real appHeight: Screen.desktopAvailableHeight/4*3 property real appHeight: Screen.desktopAvailableHeight/4*3
@ -40,4 +42,25 @@ QtObject{
property int bigFontSize: systemFontSize*1.5 property int bigFontSize: systemFontSize*1.5
//property string attachImageDir:filesystem.homePath+"/Pictures/" //property string attachImageDir:filesystem.homePath+"/Pictures/"
property string imagePickQml: "ImagePickerLinux" property string imagePickQml: "ImagePickerLinux"
//SystemPalette { id: sysPalette; colorGroup: SystemPalette.Active }
//property SystemPalette name: value
property color backgroundColor: palette.window
property color backgroundDimColor: palette.button
property color primaryTextColor: palette.windowText
property color secondaryTextColor: palette.buttonText
property color dialogColor: palette.base
property color accentColor: palette.highlightedText
property color buttonColor: palette.button
function setTheme(theme){
if (theme=="system"){
//Material.theme=Material.System
}
else if (theme=="dark"){
//Material.theme=Material.Dark
}
else if (theme=="light"){
//Material.theme=Material.Light
}
}
} }

View File

@ -32,12 +32,11 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/configqml" import "qrc:/qml/configqml"
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
Rectangle{ Rectangle{
color: Material.dialogColor color: osSettings.dialogColor
property string adapter: "" property string adapter: ""
width: parent.width width: parent.width
height: 4*root.fontFactor*osSettings.bigFontSize height: 4*root.fontFactor*osSettings.bigFontSize

View File

@ -31,7 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/configqml" import "qrc:/qml/configqml"
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
@ -59,14 +58,14 @@ Page{
Rectangle{ Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y:4*root.fontFactor*osSettings.bigFontSize; x: root.fontFactor*osSettings.bigFontSize; y:4*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize; width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
color: Material.dialogColor color: osSettings.dialogColor
radius: 0.5*mm radius: 0.5*mm
TextEdit{ TextEdit{
id: messageIntervalField id: messageIntervalField
anchors.fill: parent anchors.fill: parent
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight verticalAlignment:TextEdit.AlignRight
color: Material.primaryTextColor color: osSettings.primaryTextColor
text:messageIntervalSlider.value text:messageIntervalSlider.value
focus: true focus: true
selectByMouse: true selectByMouse: true

View File

@ -31,7 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
@ -115,7 +114,7 @@ Page{
x:1.5*root.fontFactor*osSettings.systemFontSize; x:1.5*root.fontFactor*osSettings.systemFontSize;
width:root.width-(7*root.fontFactor*osSettings.systemFontSize+mm); width:root.width-(7*root.fontFactor*osSettings.systemFontSize+mm);
height: 2.5*root.fontFactor*osSettings.systemFontSize; height: 2.5*root.fontFactor*osSettings.systemFontSize;
color:Material.dialogColor color:osSettings.dialogColor
selfdestroying:false selfdestroying:false
} }
@ -132,10 +131,10 @@ Page{
Rectangle { Rectangle {
width: contactsSearchView.width width: contactsSearchView.width
height: childrenRect.height height: childrenRect.height
color: Material.backgroundColor color: osSettings.backgroundColor
required property string section required property string section
Text { Text {
color: Material.secondaryTextColor color: osSettings.secondaryTextColor
text: parent.section text: parent.section
font.bold: true font.bold: true
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize

View File

@ -31,7 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
@ -146,14 +145,15 @@ Item{
Rectangle { Rectangle {
id:searchComponent id:searchComponent
x: mm; y:mm x: mm; y:mm
color: Material.backgroundColor color: osSettings.backgroundColor
radius:0.5*mm radius:0.5*mm
width: 10*root.fontFactor*osSettings.bigFontSize width: 10*root.fontFactor*osSettings.bigFontSize
height: 2*root.fontFactor*osSettings.bigFontSize height: 2*root.fontFactor*osSettings.bigFontSize
TextField { TextField {
id: searchText id: searchText
color: Material.primaryTextColor color: osSettings.primaryTextColor
focus: true focus: true
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
wrapMode: Text.Wrap wrapMode: Text.Wrap
anchors.fill:parent anchors.fill:parent
@ -193,10 +193,10 @@ Item{
Rectangle { Rectangle {
width: friendsView.width width: friendsView.width
height: childrenRect.height height: childrenRect.height
color: Material.backgroundColor color: osSettings.backgroundColor
required property string section required property string section
Text { Text {
color: Material.secondaryTextColor color: osSettings.secondaryTextColor
text: parent.section text: parent.section
font.bold: true font.bold: true
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
@ -208,11 +208,12 @@ Item{
Component { id:headerComponent Component { id:headerComponent
Rectangle{ Rectangle{
color: Material.dialogColor color: osSettings.dialogColor
width:friendsView.width width:friendsView.width
height:6*mm height:6*mm
Text{ Text{
color: Material.primaryTextColor color: osSettings.primaryTextColor
font.family: fontAwesome.name
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
anchors.centerIn: parent anchors.centerIn: parent
text:"\uf234" text:"\uf234"

View File

@ -31,7 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
@ -42,7 +41,7 @@ import "qrc:/qml/genericqml"
Rectangle { Rectangle {
y:1 y:1
color: Material.backgroundColor//"white" color: osSettings.backgroundColor
function showContactdetails(contact){ function showContactdetails(contact){
// rootstack.currentIndex=0; // rootstack.currentIndex=0;

View File

@ -31,7 +31,6 @@
import QtQuick 2.11 import QtQuick 2.11
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/news.js" as Newsjs import "qrc:/js/news.js" as Newsjs
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
@ -56,7 +55,7 @@ Item {
height: parent.height-mm height: parent.height-mm
radius: 0.5*mm radius: 0.5*mm
border.color: "grey" border.color: "grey"
color:Material.backgroundColor color:osSettings.backgroundColor
Rectangle{ Rectangle{
id:namelabelRect id:namelabelRect
@ -65,13 +64,13 @@ Item {
width: wrapper.width-2 width: wrapper.width-2
height: 3*root.fontFactor*osSettings.bigFontSize height: 3*root.fontFactor*osSettings.bigFontSize
//border.color: "light grey" //border.color: "light grey"
color:Material.backgroundColor color: osSettings.backgroundColor
TextInput { TextInput {
id: namelabel id: namelabel
anchors.fill: parent anchors.fill: parent
readOnly: true readOnly: true
text: group.new?"":group.groupname text: group.new?"":group.groupname
color: Material.secondaryTextColor//"#303030" color: osSettings.secondaryTextColor//"#303030"
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
} }
} }
@ -122,7 +121,7 @@ Item {
Rectangle{ Rectangle{
id: detailsrectangle id: detailsrectangle
anchors.top: namelabelRect.bottom anchors.top: namelabelRect.bottom
color: Material.backgroundColor color: osSettings.backgroundColor
//anchors.topMargin: mm //anchors.topMargin: mm
x:mm x:mm
width: parent.width-2*mm width: parent.width-2*mm

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
@ -39,7 +38,7 @@ Rectangle {
// width:parent.width-2*mm // width:parent.width-2*mm
// height:parent.height-14*mm // height:parent.height-14*mm
anchors.fill:parent anchors.fill:parent
color: Material.backgroundColor//color:"white" color: osSettings.backgroundColor
property var profile:({}) property var profile:({})
property var attachImageURLs:[] property var attachImageURLs:[]
property var createdAtDate: new Date(profile.friendica_owner.created_at) property var createdAtDate: new Date(profile.friendica_owner.created_at)
@ -176,6 +175,7 @@ Rectangle {
Text { Text {
id:phototext id:phototext
z:4 z:4
font.family: fontAwesome.name
text: "\uf040" text: "\uf040"
width:5*mm width:5*mm
anchors.top: photoImage.top anchors.top: photoImage.top
@ -206,7 +206,7 @@ Rectangle {
anchors.topMargin: 0 anchors.topMargin: 0
anchors.left: photoImage.left anchors.left: photoImage.left
wrapMode: Text.Wrap wrapMode: Text.Wrap
color: Material.secondaryTextColor//"#303030" color: osSettings.secondaryTextColor
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
anchors.top: photoImage.bottom anchors.top: photoImage.bottom
} }
@ -217,13 +217,13 @@ Rectangle {
Rectangle{ Rectangle{
id:profileRect id:profileRect
width:profileView.width width:profileView.width
color: Material.backgroundColor color: osSettings.backgroundColor
height: 5*mm+profiletextfield.height height: 5*mm+profiletextfield.height
Text{ Text{
y:mm y:mm
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text:"<b>"+qsTr("profile id")+": </b> "+profileid+"<br>" text:"<b>"+qsTr("profile id")+": </b> "+profileid+"<br>"
color:Material.primaryTextColor//"black" color:osSettings.primaryTextColor
} }
Text{ Text{
id:profiletextfield id:profiletextfield
@ -233,7 +233,7 @@ Rectangle {
wrapMode: Text.Wrap wrapMode: Text.Wrap
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text:profiletext text:profiletext
color:Material.primaryTextColor color: osSettings.primaryTextColor
onLinkActivated: Qt.openUrlExternally(link) onLinkActivated: Qt.openUrlExternally(link)
} }
} }
@ -242,7 +242,7 @@ Rectangle {
id:textcomponent id:textcomponent
Text{ Text{
id:namelabeltext id:namelabeltext
color:Material.primaryTextColor color: osSettings.primaryTextColor
width: namelabelflickable.width width: namelabelflickable.width
height: implicitHeight height: implicitHeight
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize

View File

@ -33,7 +33,7 @@ import QtQuick 2.5
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import QtQuick.Controls 2.4 import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import QSystemTrayIcon 1.0 import QSystemTrayIcon 1.0
import "qrc:/js/news.js" as Newsjs import "qrc:/js/news.js" as Newsjs
@ -45,7 +45,7 @@ ApplicationWindow{
id:root id:root
title: "Friendiqa" title: "Friendiqa"
property var globaloptions: Service.readGO(db) property var globaloptions: Service.readGO(db)
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsLinux.qml");return tmp.createObject(root)} property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettings"+filesystem.osType+".qml");return tmp.createObject(root)}
width: globaloptions.hasOwnProperty("appWidth")?globaloptions.appWidth:osSettings.appWidth width: globaloptions.hasOwnProperty("appWidth")?globaloptions.appWidth:osSettings.appWidth
height:globaloptions.hasOwnProperty("appHeight")?globaloptions.appHeight:osSettings.appHeight height:globaloptions.hasOwnProperty("appHeight")?globaloptions.appHeight:osSettings.appHeight
visible: filesystem.Visibility// true visible: filesystem.Visibility// true
@ -75,10 +75,6 @@ ApplicationWindow{
property var contactposts:[] property var contactposts:[]
property bool imagePicking: false property bool imagePicking: false
Material.theme: Material.System
color: Material.backgroundColor
function onLoginChanged(login){ function onLoginChanged(login){
if(login=="" || login==null){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")} if(login=="" || login==null){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")}
else{ else{
@ -187,16 +183,18 @@ ApplicationWindow{
else {rootstack.currentIndex=0;close.accepted=false} else {rootstack.currentIndex=0;close.accepted=false}
} }
Rectangle{ Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundColor color: osSettings.backgroundColor
} }
header: ToolBar{ footer: ToolBar{
id: roottoolbar
//position: ToolBar.Footer//globaloptions.roottoolbarposition==0 || globaloptions.roottoolbarposition==undefined?ToolBar.Header:ToolBar.Footer
width:root.width
background: Rectangle{ background: Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundDimColor color: osSettings.backgroundDimColor
} }
RowLayout{ RowLayout{
anchors.fill: parent anchors.fill: parent
@ -209,38 +207,42 @@ ApplicationWindow{
try{while(rootstackView.depth>1){rootstackView.pop()}}catch(e){} try{while(rootstackView.depth>1){rootstackView.pop()}}catch(e){}
} }
TabButton { TabButton {
font.family: fontAwesome.name
text: "\uf03a" text: "\uf03a"
background:Rectangle{ background:Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundDimColor color: osSettings.backgroundDimColor
} }
ToolTip.visible: pressed || hovered ToolTip.visible: pressed || hovered
ToolTip.text: qsTr("Posts") ToolTip.text: qsTr("Posts")
onDoubleClicked: {newstypeSignal("refresh")} onDoubleClicked: {newstypeSignal("refresh")}
} }
TabButton { TabButton {
font.family: fontAwesome.name
text: "\uf0c0" text: "\uf0c0"
background:Rectangle{ background:Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundDimColor color: osSettings.backgroundDimColor
} }
ToolTip.visible: pressed || hovered ToolTip.visible: pressed || hovered
ToolTip.text: qsTr("Contacts") ToolTip.text: qsTr("Contacts")
} }
TabButton { TabButton {
font.family: fontAwesome.name
text: "\uf03e" text: "\uf03e"
background:Rectangle{ background:Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundDimColor color: osSettings.backgroundDimColor
} }
ToolTip.visible: pressed || hovered ToolTip.visible: pressed || hovered
ToolTip.text: qsTr("Photos") ToolTip.text: qsTr("Photos")
} }
TabButton { TabButton {
font.family: fontAwesome.name
text: "\uf073" text: "\uf073"
background:Rectangle{ background:Rectangle{
anchors.fill: parent anchors.fill: parent
color: Material.backgroundDimColor color: osSettings.backgroundDimColor
} }
ToolTip.visible: pressed || hovered ToolTip.visible: pressed || hovered
ToolTip.text: qsTr("Calendar") ToolTip.text: qsTr("Calendar")
@ -249,11 +251,12 @@ ApplicationWindow{
} }
} }
StackView{id:rootstackView
StackView{id:rootstackView //y:roottoolbar.height
width:root.width //anchors.fill: parent
height: root.height width:root.width
initialItem: StackLayout{ height: root.height-roottoolbar.contentHeight
initialItem: StackLayout{
id:rootstack id:rootstack
width:rootstackView.width width:rootstackView.width
height: rootstackView.height height: rootstackView.height
@ -283,7 +286,6 @@ StackView{id:rootstackView
} }
} }
QSystemTrayIcon { QSystemTrayIcon {
id: systemTray id: systemTray
visible: false visible: false
@ -299,7 +301,7 @@ StackView{id:rootstackView
} }
} }
Component.onCompleted: { Component.onCompleted: {
icon = iconTray icon = root.color<palette.text?iconTrayWhite:iconTrayBlack//iconTray
toolTip = qsTr("Click to open Friendiqa") toolTip = qsTr("Click to open Friendiqa")
//&hide() //&hide()
} }
@ -309,9 +311,9 @@ StackView{id:rootstackView
Component.onCompleted: { Component.onCompleted: {
onLoginChanged(login); onLoginChanged(login);
globaloptions=Service.readGO(db); globaloptions=Service.readGO(db);
if(globaloptions.view_darkmode==1){Material.theme=Material.Dark} if(globaloptions.view_darkmode==1){osSettings.setTheme("dark")}
else if (globaloptions.view_darkmode==2){Material.theme=Material.Light} else if (globaloptions.view_darkmode==2){osSettings.setTheme("light")}
else {Material.theme=Material.System} else {osSettings.setTheme("system")}
if(!filesystem.Visibility){ if(!filesystem.Visibility){
systemTray.icon = iconTray; systemTray.icon = iconTray;
// systemTray.toolTip = qsTr("Click to open Friendiqa"); // systemTray.toolTip = qsTr("Click to open Friendiqa");
@ -324,7 +326,7 @@ StackView{id:rootstackView
var IntentReceiverQml = component.createObject(root); var IntentReceiverQml = component.createObject(root);
} }
else if (osSettings.osType=="Linux"){ else if (osSettings.osType=="Linux"){
if (login!=""){newstypeSignal("refresh")} //if (login!=""){newstypeSignal("refresh")}
var component = Qt.createComponent("qrc:/qml/genericqml/LinuxSync.qml"); var component = Qt.createComponent("qrc:/qml/genericqml/LinuxSync.qml");
var LinuxSyncQml = component.createObject(root); var LinuxSyncQml = component.createObject(root);
} }

View File

@ -30,7 +30,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls.Material 2.12
Rectangle{ Rectangle{
id: blueButton id: blueButton
width: Math.max(mainText.width+2*mm,5*mm) width: Math.max(mainText.width+2*mm,5*mm)
@ -48,7 +47,7 @@ Rectangle{
Text{ Text{
id:mainText id:mainText
color: Material.primaryTextColor//"black" color: osSettings.primaryTextColor
anchors.centerIn: parent anchors.centerIn: parent
width: contentWidth width: contentWidth
height: contentHeight height: contentHeight
@ -67,7 +66,7 @@ Rectangle{
states: [ states: [
State { name: "Pressed" State { name: "Pressed"
PropertyChanges { target: blueButton; color: Material.buttonColor} } PropertyChanges { target: blueButton; color: osSettings.buttonColor} }
] ]
transitions: [ transitions: [
Transition { to:"*" Transition { to:"*"

View File

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
Item { Item {
@ -46,8 +45,8 @@ Item {
width:parent.width width:parent.width
height: parent.height height: parent.height
radius: 0.5*mm radius: 0.5*mm
border.color: Material.backgroundDimColor border.color: osSettings.backgroundDimColor
color: Material.backgroundColor color: osSettings.backgroundColor
Image { Image {
id: photoImage id: photoImage
x:0.5*mm x:0.5*mm
@ -70,7 +69,7 @@ Item {
height: 1.1*root.fontFactor*osSettings.bigFontSize height: 1.1*root.fontFactor*osSettings.bigFontSize
text: contact.name text: contact.name
elide: contentWidth>wrapper.width-4*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone elide: contentWidth>wrapper.width-4*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
color: Material.secondaryTextColor color: osSettings.secondaryTextColor
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
} }
Label { Label {
@ -79,7 +78,7 @@ Item {
height: 1.1*root.fontFactor*osSettings.bigFontSize height: 1.1*root.fontFactor*osSettings.bigFontSize
text: "(@"+contact.screen_name+")" text: "(@"+contact.screen_name+")"
elide: contentWidth>wrapper.width-4*root.fontFactor*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone elide: contentWidth>wrapper.width-4*root.fontFactor*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
color: Material.secondaryTextColor color: osSettings.secondaryTextColor
font.pointSize: osSettings.bigFontSize font.pointSize: osSettings.bigFontSize
} }
Label { Label {
@ -89,7 +88,7 @@ Item {
maximumLineCount:2 maximumLineCount:2
text: Qt.atob(contact.description)!=""?contact.description:"" text: Qt.atob(contact.description)!=""?contact.description:""
elide:Text.ElideRight elide:Text.ElideRight
color: Material.secondaryTextColor color: osSettings.secondaryTextColor
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
} }
} }

View File

@ -29,8 +29,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0 import QtQuick 2.15
import QtQuick.Controls 2.12 import QtQuick.Controls 6.3
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
Item { Item {
@ -50,6 +50,7 @@ Item {
Label{ Label{
y:2*root.fontFactor*osSettings.bigFontSize y:2*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
text: "\uf021 " + qsTr("Refresh") text: "\uf021 " + qsTr("Refresh")
MouseArea{ MouseArea{
@ -69,6 +70,7 @@ Item {
Label{ Label{
y:3.5*root.fontFactor*osSettings.bigFontSize y:3.5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Timeline" font.bold: account.username==login.username && currentnewstabstatus=="Timeline"
text: "\uf1da " + qsTr("Timeline") text: "\uf1da " + qsTr("Timeline")
@ -87,6 +89,7 @@ Item {
Label{ Label{
y:5*root.fontFactor*osSettings.bigFontSize y:5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Conversations" font.bold: account.username==login.username && currentnewstabstatus=="Conversations"
text: "\uf086 " + qsTr("Conversations") text: "\uf086 " + qsTr("Conversations")
@ -107,6 +110,7 @@ Item {
Label{ Label{
y:6.5*root.fontFactor*osSettings.bigFontSize y:6.5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Replies" font.bold: account.username==login.username && currentnewstabstatus=="Replies"
text: "\uf0ec " + qsTr("Replies") text: "\uf0ec " + qsTr("Replies")
@ -125,6 +129,7 @@ Item {
Label{ Label{
y:8*root.fontFactor*osSettings.bigFontSize y:8*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="DirectMessages" font.bold: account.username==login.username && currentnewstabstatus=="DirectMessages"
text: "\uf0e0 " + qsTr("Direct Messages") text: "\uf0e0 " + qsTr("Direct Messages")
@ -141,6 +146,7 @@ Item {
Label{ Label{
y:9.5*root.fontFactor*osSettings.bigFontSize y:9.5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Favorites" font.bold: account.username==login.username && currentnewstabstatus=="Favorites"
text: "\uf005 " + qsTr("Favorites") text: "\uf005 " + qsTr("Favorites")
@ -159,6 +165,7 @@ Item {
Label{ Label{
y:11*root.fontFactor*osSettings.bigFontSize y:11*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Public Timeline" font.bold: account.username==login.username && currentnewstabstatus=="Public Timeline"
text: "\uf0ac " + qsTr("Public Timeline") text: "\uf0ac " + qsTr("Public Timeline")
@ -177,6 +184,7 @@ Item {
Label{ Label{
y:12.5*root.fontFactor*osSettings.bigFontSize y:12.5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Groupnews" font.bold: account.username==login.username && currentnewstabstatus=="Groupnews"
text: "\uf0c0 " + qsTr("Group news") text: "\uf0c0 " + qsTr("Group news")
@ -195,6 +203,7 @@ Item {
Label{ Label{
y:14*root.fontFactor*osSettings.bigFontSize y:14*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Search" font.bold: account.username==login.username && currentnewstabstatus=="Search"
text: "\uf002 " + qsTr("Search") text: "\uf002 " + qsTr("Search")
@ -213,6 +222,7 @@ Item {
Label{ Label{
y:15.5*root.fontFactor*osSettings.bigFontSize y:15.5*root.fontFactor*osSettings.bigFontSize
width:parent.width width:parent.width
font.family: fontAwesome.name
font.pointSize: osSettings.systemFontSize font.pointSize: osSettings.systemFontSize
font.bold: account.username==login.username && currentnewstabstatus=="Notifications" font.bold: account.username==login.username && currentnewstabstatus=="Notifications"
text: "\uf0f3 " + qsTr("Notifications") text: "\uf0f3 " + qsTr("Notifications")

Some files were not shown because too many files have changed in this diff Show More