diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1c59f0a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,83 @@ +cmake_minimum_required(VERSION 3.5) + +project(CuteSchedule 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) + +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) + +file(GLOB_RECURSE PROJECT_SOURCES "src/**.cpp" "src/**.cxx" "src/**.h" "src/**.hpp") +list(APPEND PROJECT_SOURCES "main.cpp") + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(CuteSchedule + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET CuteSchedule 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 +else() + if(ANDROID) + add_library(CuteSchedule 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(CuteSchedule + ${PROJECT_SOURCES} + ) + endif() +endif() + +# --- External projects include --- # +# Add yaml-cpp +include(ExternalProject) +set(EXTERNAL_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/external) + +ExternalProject_Add(yaml-cpp-src + GIT_REPOSITORY "https://github.com/jbeder/yaml-cpp" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} +) + +include_directories(${EXTERNAL_INSTALL_LOCATION}/include) +link_directories(${EXTERNAL_INSTALL_LOCATION}/lib) + +add_library(yaml-cpp UNKNOWN IMPORTED) +add_dependencies(CuteSchedule yaml-cpp-src) + +set_target_properties(yaml-cpp PROPERTIES + IMPORTED_LOCATION ${EXTERNAL_INSTALL_LOCATION}/lib/libyaml-cpp.a +) + +# --- End external projects --- # + +target_link_libraries(CuteSchedule + PRIVATE + Qt${QT_VERSION_MAJOR}::Widgets + yaml-cpp +) + +set_target_properties(CuteSchedule PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +install(TARGETS CuteSchedule + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(CuteSchedule) +endif() diff --git a/main.cpp b/main.cpp index 1af76c2..3939866 100644 --- a/main.cpp +++ b/main.cpp @@ -12,24 +12,31 @@ #endif #include +#include #include #include "src/config/config.h" -#include "src/sysutil.h" #include "src/mainwindow.h" +#include "src/util/userutil.h" int main(int argc, char *argv[]) { + QApplication a(argc, argv); + Config config; - std::cout << config.loadDefaultConfig() << '\n'; - return 0; + if (!config.loadDefaultConfig()) { + UserUtil::showError( + QString("Cannot load config:\n") + + "\n" + + "Error code: 0x" + QString::number(config.getLastErrorCode()) + "\n" + ); + return config.getLastErrorCode(); + } - QApplication a(argc, argv); MainWindow w; w.show(); - return a.exec(); } diff --git a/src/config/config.cpp b/src/config/config.cpp index d748459..c095372 100644 --- a/src/config/config.cpp +++ b/src/config/config.cpp @@ -4,3 +4,40 @@ Config::Config() { } + +bool Config::loadDefaultConfig() +{ + QString confDir = Config::getDefaultConfigDir(); + QDir configs(confDir); + + if (!configs.exists()) + { + this->errorCode = CONF_ERR_NO_DIR; + return false; + } + + return true; +} + +QString Config::getDefaultConfigDir() +{ +#ifdef _WIN32 + return QString("C:\\Users\\") + SysUtil::getUserName() + "\\AppData\\Local\\CuteSchedule"; +#endif + +#ifdef linux + return QString("/home/") + SysUtil::getUserName() + "/.config/CuteSchedule"; +#endif + + return ""; +} + +QString Config::getConfigProperty(QString path) +{ + return ""; +} + +int Config::getLastErrorCode() +{ + return this->errorCode; +} diff --git a/src/config/config.h b/src/config/config.h index def04db..7bbf68e 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -2,11 +2,29 @@ #define CONFIG_H #include +#include +#include + +#include "../util/sysutil.h" + +#define CONF_ERR_NO_DIR 1 class Config { +private: + QString plainConfig; + YAML::Node config; + int errorCode; public: Config(); + int getLastErrorCode(); + + // Files + bool loadDefaultConfig(); + static QString getDefaultConfigDir(); + + // Config + QString getConfigProperty(QString path); }; #endif // CONFIG_H diff --git a/src/sysutil.cpp b/src/util/sysutil.cpp similarity index 100% rename from src/sysutil.cpp rename to src/util/sysutil.cpp diff --git a/src/sysutil.h b/src/util/sysutil.h similarity index 100% rename from src/sysutil.h rename to src/util/sysutil.h diff --git a/src/util/userutil.cpp b/src/util/userutil.cpp new file mode 100644 index 0000000..f797a81 --- /dev/null +++ b/src/util/userutil.cpp @@ -0,0 +1,14 @@ +#include "userutil.h" + +UserUtil::UserUtil() +{ + +} + +void UserUtil::showError(QString message) +{ + QMessageBox box; + box.critical(0, "Error", message); + // box.setFixedSize(500,200); + box.show(); +} diff --git a/src/util/userutil.h b/src/util/userutil.h new file mode 100644 index 0000000..1f8e18c --- /dev/null +++ b/src/util/userutil.h @@ -0,0 +1,18 @@ +#ifndef USERUTIL_H +#define USERUTIL_H + +#include +#include + +#include + +class UserUtil : public QObject +{ + Q_OBJECT +public: + UserUtil(); + + static void showError(QString message); +}; + +#endif // USERUTIL_H