Initial commit
This commit is contained in:
1
.gitignore
vendored
Executable file
1
.gitignore
vendored
Executable file
@@ -0,0 +1 @@
|
||||
.direnv
|
||||
3
.vscode/settings.json
vendored
Executable file
3
.vscode/settings.json
vendored
Executable file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"cmake.sourceDirectory": "/home/dark/qyouradio/qyouradio"
|
||||
}
|
||||
41
build.nix
Executable file
41
build.nix
Executable file
@@ -0,0 +1,41 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
, clang
|
||||
, qtbase
|
||||
, qtdeclarative
|
||||
, qtmultimedia
|
||||
, qtlocation
|
||||
, qtwebview
|
||||
, qtwayland
|
||||
, libglvnd
|
||||
, cmake
|
||||
, wrapQtAppsHook
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "qyouradio";
|
||||
version = "1.0";
|
||||
|
||||
src = ./qyouradio;
|
||||
|
||||
buildInputs = [
|
||||
qtbase
|
||||
qtdeclarative
|
||||
qtlocation
|
||||
qtmultimedia
|
||||
qtwebview
|
||||
] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
|
||||
qtwayland
|
||||
libglvnd
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
clang
|
||||
cmake
|
||||
wrapQtAppsHook
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp qyouradio $out/bin/
|
||||
'';
|
||||
}
|
||||
60
flake.lock
generated
Executable file
60
flake.lock
generated
Executable file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759362264,
|
||||
"narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1760036653,
|
||||
"narHash": "sha256-FJOwW7YMxtnMi3R+MxwiVsUsrOtm3ubIBo8Jdc1nH6w=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b6bae5b8d26ef00d8df42206ac24d0665640286b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1754788789,
|
||||
"narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "a73b9c743612e4244d865a2fdee11865283c04e6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
33
flake.nix
Executable file
33
flake.nix
Executable file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
inputs = {
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
nixpkgs.url = "github:nixos/nixpkgs";
|
||||
};
|
||||
|
||||
outputs = inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = [ "aarch64-linux" "x86_64-linux" ];
|
||||
perSystem = { config, pkgs, ... }: {
|
||||
packages.default = pkgs.qt6Packages.callPackage ./build.nix { };
|
||||
devShells.default = pkgs.mkShell {
|
||||
inputsFrom = [ config.packages.default ];
|
||||
buildInputs = with pkgs; [
|
||||
gdb
|
||||
qtcreator
|
||||
qt6.qttools
|
||||
|
||||
# this is for the shellhook portion
|
||||
qt6.wrapQtAppsHook
|
||||
makeWrapper
|
||||
bashInteractive
|
||||
];
|
||||
# set the environment variables that unpatched Qt apps expect
|
||||
shellHook = ''
|
||||
bashdir=$(mktemp -d)
|
||||
makeWrapper "$(type -p bash)" "$bashdir/bash" "''${qtWrapperArgs[@]}"
|
||||
exec "$bashdir/bash"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
82
qyouradio/.gitignore
vendored
Executable file
82
qyouradio/.gitignore
vendored
Executable file
@@ -0,0 +1,82 @@
|
||||
# This file is used to ignore files which are generated
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
*~
|
||||
*.autosave
|
||||
*.a
|
||||
*.core
|
||||
*.moc
|
||||
*.o
|
||||
*.obj
|
||||
*.orig
|
||||
*.rej
|
||||
*.so
|
||||
*.so.*
|
||||
*_pch.h.cpp
|
||||
*_resource.rc
|
||||
*.qm
|
||||
.#*
|
||||
*.*#
|
||||
core
|
||||
!core/
|
||||
tags
|
||||
.DS_Store
|
||||
.directory
|
||||
*.debug
|
||||
Makefile*
|
||||
*.prl
|
||||
*.app
|
||||
moc_*.cpp
|
||||
ui_*.h
|
||||
qrc_*.cpp
|
||||
Thumbs.db
|
||||
*.res
|
||||
*.rc
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
|
||||
# qtcreator generated files
|
||||
*.pro.user*
|
||||
*.qbs.user*
|
||||
CMakeLists.txt.user*
|
||||
|
||||
# xemacs temporary files
|
||||
*.flc
|
||||
|
||||
# Vim temporary files
|
||||
.*.swp
|
||||
|
||||
# Visual Studio generated files
|
||||
*.ib_pdb_index
|
||||
*.idb
|
||||
*.ilk
|
||||
*.pdb
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcproj
|
||||
*vcproj.*.*.user
|
||||
*.ncb
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.vcxproj
|
||||
*vcxproj.*
|
||||
|
||||
# MinGW generated files
|
||||
*.Debug
|
||||
*.Release
|
||||
|
||||
# Python byte code
|
||||
*.pyc
|
||||
|
||||
# Binaries
|
||||
# --------
|
||||
*.dll
|
||||
*.exe
|
||||
|
||||
# Directories with generated files
|
||||
.moc/
|
||||
.obj/
|
||||
.pch/
|
||||
.rcc/
|
||||
.uic/
|
||||
/build*/
|
||||
84
qyouradio/CMakeLists.txt
Executable file
84
qyouradio/CMakeLists.txt
Executable file
@@ -0,0 +1,84 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(qyouradio VERSION 0.1 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
FUNCTION(PREPEND var )
|
||||
SET(listVar "")
|
||||
FOREACH(f ${${var}})
|
||||
LIST(APPEND listVar "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
|
||||
ENDFOREACH(f)
|
||||
SET(${var} "${listVar}" PARENT_SCOPE)
|
||||
ENDFUNCTION()
|
||||
|
||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Quick LinguistTools)
|
||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick LinguistTools)
|
||||
|
||||
add_subdirectory(locale/)
|
||||
add_subdirectory(src/)
|
||||
|
||||
set(PROJECT_SOURCES
|
||||
${CXX_FILES}
|
||||
${QML_FILES}
|
||||
${TS_FILES}
|
||||
)
|
||||
|
||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||
qt_add_executable(qyouradio
|
||||
MANUAL_FINALIZATION
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
# Define target properties for Android with Qt 6 as:
|
||||
# set_property(TARGET qyouradio APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
|
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
|
||||
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
|
||||
|
||||
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR}/locale ${TS_FILES})
|
||||
else()
|
||||
if(ANDROID)
|
||||
add_library(qyouradio SHARED
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
# Define properties for Android with Qt 5 after find_package() calls as:
|
||||
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
|
||||
else()
|
||||
add_executable(qyouradio
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
endif()
|
||||
|
||||
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR}/locale ${TS_FILES})
|
||||
endif()
|
||||
|
||||
target_link_libraries(qyouradio
|
||||
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick)
|
||||
|
||||
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
||||
# If you are developing for iOS or macOS you should consider setting an
|
||||
# explicit, fixed bundle identifier manually though.
|
||||
if(${QT_VERSION} VERSION_LESS 6.1.0)
|
||||
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER xyz.nonmesoft.qyouradio)
|
||||
endif()
|
||||
set_target_properties(qyouradio PROPERTIES
|
||||
${BUNDLE_ID_OPTION}
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
||||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
||||
MACOSX_BUNDLE TRUE
|
||||
WIN32_EXECUTABLE TRUE
|
||||
)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS qyouradio
|
||||
BUNDLE DESTINATION .
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
|
||||
if(QT_VERSION_MAJOR EQUAL 6)
|
||||
qt_import_qml_plugins(qyouradio)
|
||||
qt_finalize_executable(qyouradio)
|
||||
endif()
|
||||
7
qyouradio/locale/CMakeLists.txt
Normal file
7
qyouradio/locale/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
set(TS_FILES
|
||||
qyouradio_en_US.ts
|
||||
qyouradio_pl_PL.ts
|
||||
)
|
||||
|
||||
PREPEND(TS_FILES)
|
||||
set(TS_FILES ${TS_FILES} PARENT_SCOPE)
|
||||
3
qyouradio/locale/qyouradio_en_US.ts
Executable file
3
qyouradio/locale/qyouradio_en_US.ts
Executable file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="en_US"></TS>
|
||||
3
qyouradio/locale/qyouradio_pl_PL.ts
Executable file
3
qyouradio/locale/qyouradio_pl_PL.ts
Executable file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="pl_PL"></TS>
|
||||
8
qyouradio/src/CMakeLists.txt
Normal file
8
qyouradio/src/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
add_subdirectory(qml)
|
||||
set(QML_FILES ${QML_FILES} PARENT_SCOPE)
|
||||
|
||||
set(CXX_FILES
|
||||
main.cpp
|
||||
)
|
||||
PREPEND(CXX_FILES)
|
||||
set(CXX_FILES ${CXX_FILES} PARENT_SCOPE)
|
||||
34
qyouradio/src/main.cpp
Executable file
34
qyouradio/src/main.cpp
Executable file
@@ -0,0 +1,34 @@
|
||||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
|
||||
#include <QLocale>
|
||||
#include <QTranslator>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
#endif
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
QTranslator translator;
|
||||
const QStringList uiLanguages = QLocale::system().uiLanguages();
|
||||
for (const QString &locale : uiLanguages) {
|
||||
const QString baseName = "qyouradio_" + QLocale(locale).name();
|
||||
if (translator.load(":/i18n/" + baseName)) {
|
||||
app.installTranslator(&translator);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
const QUrl url(QStringLiteral("qrc:/main.qml"));
|
||||
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
|
||||
&app, [url](QObject *obj, const QUrl &objUrl) {
|
||||
if (!obj && url == objUrl)
|
||||
QCoreApplication::exit(-1);
|
||||
}, Qt::QueuedConnection);
|
||||
engine.load(url);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
9
qyouradio/src/qml/CMakeLists.txt
Normal file
9
qyouradio/src/qml/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
set(QML_FILES
|
||||
qml.qrc
|
||||
# main.qml
|
||||
|
||||
components/qml.qrc
|
||||
# components/Button.qml
|
||||
)
|
||||
PREPEND(QML_FILES)
|
||||
set(QML_FILES ${QML_FILES} PARENT_SCOPE)
|
||||
18
qyouradio/src/qml/components/Button.qml
Normal file
18
qyouradio/src/qml/components/Button.qml
Normal file
@@ -0,0 +1,18 @@
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15 as QC
|
||||
|
||||
QC.Button {
|
||||
highlighted: true
|
||||
background: Rectangle {
|
||||
color: hovered ? "#0056b3" : "#007bff"
|
||||
radius: 5
|
||||
}
|
||||
|
||||
implicitHeight: 36
|
||||
|
||||
Component.onCompleted: {
|
||||
contentItem.color = "#f4f4f4";
|
||||
font.family = "Arial";
|
||||
font.pointSize = 12;
|
||||
}
|
||||
}
|
||||
13
qyouradio/src/qml/components/CheckBox.qml
Normal file
13
qyouradio/src/qml/components/CheckBox.qml
Normal file
@@ -0,0 +1,13 @@
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.155 as QC
|
||||
|
||||
QC.CheckBox {
|
||||
implicitWidth: 14
|
||||
implicitHeight: 14
|
||||
contentItem: Rectangle {
|
||||
radius: 2
|
||||
color: parent.checked ? (parent.hovered ? "#0056b3" : "#007bff") : "#ffffff"
|
||||
border.color: parent.checked ? (parent.hovered ? "#0056b3" : "#007bff") : "#ffffff"
|
||||
border.width: 1
|
||||
}
|
||||
}
|
||||
62
qyouradio/src/qml/components/Slider.qml
Normal file
62
qyouradio/src/qml/components/Slider.qml
Normal file
@@ -0,0 +1,62 @@
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15 as QC
|
||||
|
||||
QC.Slider {
|
||||
from: 0.0
|
||||
value: 0.5
|
||||
stepSize: 0.1
|
||||
to: 1.1
|
||||
snapMode: Slider.SnapAlways
|
||||
|
||||
implicitWidth: 130
|
||||
implicitHeight: 20
|
||||
|
||||
background: Rectangle {
|
||||
color: "#555"
|
||||
radius: 5
|
||||
|
||||
// OpacityAnimator on opacity {
|
||||
// from: 0.7
|
||||
// to: 1
|
||||
// duration: 200
|
||||
// target: parent
|
||||
// running: parent.hovered
|
||||
// }
|
||||
|
||||
// OpacityAnimator on opacity {
|
||||
// from: 1
|
||||
// to: 0.7
|
||||
// duration: 200
|
||||
// target: parent
|
||||
// running: !parent.parent.hovered
|
||||
// }
|
||||
}
|
||||
|
||||
handle: Rectangle {
|
||||
x: parent.leftPadding + parent.visualPosition * (parent.availableWidth - width)
|
||||
y: parent.topPadding + parent.availableHeight / 2 - height / 2
|
||||
width: 20
|
||||
height: 20
|
||||
radius: 10
|
||||
color: "#007bff"
|
||||
|
||||
OpacityAnimator on opacity{
|
||||
from: 0.7
|
||||
to: 1
|
||||
duration: 200
|
||||
target: parent
|
||||
running: parent.hovered
|
||||
}
|
||||
OpacityAnimator on opacity{
|
||||
from: 1
|
||||
to: 0.7
|
||||
duration: 200
|
||||
target: parent
|
||||
running: !parent.hovered
|
||||
}
|
||||
}
|
||||
|
||||
onMoved: function() {
|
||||
value = Math.max(value, 0.1);
|
||||
}
|
||||
}
|
||||
7
qyouradio/src/qml/components/qml.qrc
Executable file
7
qyouradio/src/qml/components/qml.qrc
Executable file
@@ -0,0 +1,7 @@
|
||||
<RCC>
|
||||
<qresource prefix="/components">
|
||||
<file>Button.qml</file>
|
||||
<file>CheckBox.qml</file>
|
||||
<file>Slider.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
22
qyouradio/src/qml/main.qml
Executable file
22
qyouradio/src/qml/main.qml
Executable file
@@ -0,0 +1,22 @@
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Window 2.15
|
||||
import "components/"
|
||||
|
||||
Window {
|
||||
width: 640
|
||||
height: 480
|
||||
visible: true
|
||||
title: qsTr("Hello World")
|
||||
|
||||
Button {
|
||||
text: qsTr("Play")
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
|
||||
}
|
||||
|
||||
Slider {
|
||||
|
||||
}
|
||||
}
|
||||
5
qyouradio/src/qml/qml.qrc
Executable file
5
qyouradio/src/qml/qml.qrc
Executable file
@@ -0,0 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>main.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
Reference in New Issue
Block a user