Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/feature-qt6'
Browse files Browse the repository at this point in the history
  • Loading branch information
mgn-norm committed Mar 17, 2022
2 parents 785ce6b + d3cc4ea commit ae84460
Show file tree
Hide file tree
Showing 45 changed files with 736 additions and 294 deletions.
3 changes: 2 additions & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[submodule "libs/SortFilterProxyModel"]
path = libs/SortFilterProxyModel
url = https://github.com/oKcerG/SortFilterProxyModel.git
url = https://github.com/CasparKielwein/SortFilterProxyModel.git
branch = feature/full_integration_to_qt6
89 changes: 59 additions & 30 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.14)

project(Tachidesk-qtui)
project(qtui)

include(cmake/ProjectSettings.cmake)

Expand All @@ -9,59 +9,88 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(
Qt5
Qt6
COMPONENTS Core
Gui
Quick
Network
Widgets
WebSockets
REQUIRED)
find_package(Qt5QuickCompiler)

add_subdirectory(libs/SortFilterProxyModel)

qt_add_executable(qtui MACOSX_BUNDLE MANUAL_FINALIZATION)

if (ANDROID)
include(${CMAKE_SOURCE_DIR}/../android_openssl/CMakeLists.txt)
endif()

function(include_directories_recurse dir)
include_directories(${dir})
file(GLOB subs "${dir}/*")
foreach(sub ${subs})
if (IS_DIRECTORY ${sub})
include_directories_recurse(${sub})
endif (IS_DIRECTORY ${sub})
endforeach(sub ${subs})
endfunction(include_directories_recurse dir)

include_directories(${CMAKE_CURRENT_BINARY_DIR})
endif()

# Locate all the source and header files for svs
file(RELATIVE_PATH RELATIVE_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
file(GLOB_RECURSE src_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "src/*.cpp" "src/*.c")
file(GLOB_RECURSE header_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "src/*.h")
file(GLOB_RECURSE qml_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "src/*.qml")
file(GLOB_RECURSE icon_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png" "android/res/*.png")

list(APPEND src_files ${add_src_files})

include_directories_recurse(src)

set(lib_srcs ${src_files})
qt_add_qml_module(qtui
URI Tachidesk.qtui
VERSION 1.0
SOURCES
${src_files}
${header_files}
QML_FILES
${qml_files}
RESOURCES
${icon_files}
android/AndroidManifest.xml
android/res/values/styles.xml
IMPORTS
QtQml
QtQuick
QtQuick.Controls
QtQuick.Layouts
SortFilterProxyModel)

target_include_directories(qtui PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/models>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/utils>)

if (ANDROID)
set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android CACHE INTERNAL "")
add_library(Tachidesk-qtui SHARED ${lib_srcs} src/qml/qml.qrc android/AndroidManifest.xml android/res/values/styles.xml)
set_target_properties(qtui PROPERTIES
QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android)

set_property(TARGET qtui PROPERTY
QT_ANDROID_EXTRA_LIBS ${ANDROID_EXTRA_LIBS})

#set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android CACHE INTERNAL "")

#add_library(qtui SHARED ${lib_srcs} android/AndroidManifest.xml android/res/values/styles.xml)
else()
add_executable(Tachidesk-qtui ${lib_srcs} src/qml/qml.qrc)
endif()

target_link_libraries(Tachidesk-qtui
Qt::Quick
Qt::Core
Qt::Widgets
Qt::Gui
Qt::WebSockets
SortFilterProxyModel)
if (APPLE)
set_target_properties(qtui PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER "com.suwayomi.tachidesk-qtui"
MACOSX_BUNDLE_BUNDLE_VERSION 1
MACOSX_BUNDLE_SHORT_VERSION_STRING 1.0)

SET_SOURCE_FILES_PROPERTIES(${RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
SET_PROPERTY(TARGET qtui PROPERTY MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/ios/Info.plist)
endif()

endif()

target_include_directories(Tachidesk-qtui PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
target_link_libraries(qtui
PRIVATE
Qt6::Quick
Qt6::Core
Qt6::Widgets
Qt6::Gui
Qt6::WebSockets
SortFilterProxyModel)

qt_finalize_executable(qtui)
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ I don't currently have a road map as i'm working on getting basic features imple
2. Install the dependencies
- `gcc` and `g++`
- `cmake >= 3.14`
- `qt5 >= 5.15.0` (must include development pacakges!)
- `qt5-base`
- `qt5-websockets`
- `qt5-quickcontrols`
- `qt5-quickcontrols2`
- `qt5 >= 6.2.0` (must include development pacakges!)
- `qt6-base`
- `qt6-websockets`
- `qt6-quickcontrols`
- `qt6-quickcontrols2`
- `ninja` (optional)
4. From the project root dir run:
- Debug config
Expand Down
115 changes: 30 additions & 85 deletions android/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,85 +1,30 @@
<?xml version="1.0"?>
<manifest package="org.suwayomi.tachideskqtui" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="-- %%INSERT_VERSION_NAME%% --" android:versionCode="-- %%INSERT_VERSION_CODE%% --" android:installLocation="auto">
<!-- 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. -->
<!-- %%INSERT_PERMISSIONS -->

<!-- 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. -->
<!-- %%INSERT_FEATURES -->

<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>

<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Tachidesk Qtui" android:extractNativeLibs="true" android:icon="@drawable/icon" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop" android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

<!-- Application arguments -->
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
<!-- Application arguments -->

<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<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="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>

<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs_resource_id" android:resource="@array/load_local_libs"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
<!-- Used to specify custom system library path to run with local system libs -->
<!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
<!-- 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"/>
<meta-data android:value="@string/unsupported_android_version" android:name="android.app.unsupported_android_version"/>
<!-- Messages maps -->

<!-- Splash screen -->
<!-- Orientation-specific (portrait/landscape) data is checked first. If not available for current orientation,
then android.app.splash_screen_drawable. For best results, use together with splash_screen_sticky and
use hideSplashScreen() with a fade-out animation from Qt Android Extras to hide the splash screen when you
are done populating your window with content. -->
<!-- meta-data android:name="android.app.splash_screen_drawable_portrait" android:resource="@drawable/logo_portrait" / -->
<!-- meta-data android:name="android.app.splash_screen_drawable_landscape" android:resource="@drawable/logo_landscape" / -->
<!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
<!-- Splash screen -->

<!-- Background running -->
<!-- Warning: changing this value to true may cause unexpected crashes if the
application still try to draw after
"applicationStateChanged(Qt::ApplicationSuspended)"
signal is sent! -->
<meta-data android:name="android.app.background_running" android:value="false"/>
<!-- Background running -->

<!-- auto screen scale factor -->
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
<!-- auto screen scale factor -->

<!-- extract android style -->
<!-- available android:values :
* default - In most cases this will be the same as "full", but it can also be something else if needed, e.g., for compatibility reasons
* full - useful QWidget & Quick Controls 1 apps
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
* none - useful for apps that don't use any of the above Qt modules
-->
<meta-data android:name="android.app.extract_android_style" android:value="minimal"/>
<!-- extract android style -->
</activity>

<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->

</application>

</manifest>
<?xml version="1.0"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.suwayomi.qtui" android:installLocation="auto" android:versionCode="1" android:versionName="1.0">

<uses-sdk android:minSdkVersion="30" android:targetSdkVersion="16"/>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/>

<application android:name="org.qtproject.qt.android.bindings.QtApplication" android:allowNativeHeapPointerTagging="false" android:debuggable="true" android:extractNativeLibs="true" android:hardwareAccelerated="true" android:label="Tachidesk Qtui"
android:requestLegacyExternalStorage="true"
android:icon="@drawable/icon"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:name="org.qtproject.qt.android.bindings.QtActivity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:label="Tachidesk-qtui" android:launchMode="singleTop" android:screenOrientation="unspecified" android:theme="@style/AppTheme">
<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="qtui"/>
<meta-data android:name="android.app.arguments" android:value=""/>
<meta-data android:name="android.app.extract_android_style" android:value="default"/>
</activity>
</application>

<!-- %%INSERT_PERMISSIONS -->
<!-- %%INSERT_FEATURES -->
</manifest>
10 changes: 4 additions & 6 deletions android/res/values/libs.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<array name="qt_sources">
<item>https://download.qt.io/ministro/android/qt5/qt-5.14</item>
</array>

<!-- The following is handled automatically by the deployment tool. It should
not be edited manually. -->
<!-- DO NOT EDIT THIS: This file is populated automatically by the deployment tool. -->

<array name="bundled_libs">
<!-- %%INSERT_EXTRA_LIBS%% -->
Expand All @@ -19,4 +14,7 @@
<!-- %%INSERT_LOCAL_LIBS%% -->
</array>

<string name="static_init_classes"><!-- %%INSERT_INIT_CLASSES%% --></string>
<string name="use_local_qt_libs"><!-- %%USE_LOCAL_QT_LIBS%% --></string>
<string name="bundle_local_qt_libs"><!-- %%BUNDLE_LOCAL_QT_LIBS%% --></string>
</resources>
1 change: 1 addition & 0 deletions cmake/ProjectFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ if(MSVC)
/external:anglebrackets
/external:templates-
/external:W0
/Zc:__cplusplus
)
endif()
else()
Expand Down
26 changes: 26 additions & 0 deletions ios/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.suwayomi.tachidesk-qtui</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UILaunchImageFile</key>
<string>LaunchImage</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
</dict>
</plist>
3 changes: 1 addition & 2 deletions src/App.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <QDebug>
#include <QUrl>
#include <QRegExp>
#include <tuple>
#include <QDir>
#include <qstringbuilder.h>
Expand Down Expand Up @@ -38,7 +37,7 @@ QUrl App::makeUrl(const QString& path) const
return QUrl::fromLocalFile(QDir(qmldir).absoluteFilePath(path));
}
else {
return QUrl(QStringLiteral("qrc:/") % path);
return QUrl(QStringLiteral("qrc:/Tachidesk/qtui/src/qml/") % path);
}
}

Expand Down
Loading

0 comments on commit ae84460

Please sign in to comment.