diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b24d71e --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# These are some examples of commonly ignored file patterns. +# You should customize this list as applicable to your project. +# Learn more about .gitignore: +# https://www.atlassian.com/git/tutorials/saving-changes/gitignore + +# Node artifact files +node_modules/ +dist/ + +# Compiled Java class files +*.class + +# Compiled Python bytecode +*.py[cod] + +# Log files +*.log + +# Package files +*.jar + +# Maven +target/ +dist/ + +# JetBrains IDE +.idea/ + +# Unit test reports +TEST*.xml + +# Generated by MacOS +.DS_Store + +# Generated by Windows +Thumbs.db + +# Applications +*.app +*.exe +*.war + +# Large media files +*.mp4 +*.tiff +*.avi +*.flv +*.mov +*.wmv + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5e859da --- /dev/null +++ b/Makefile @@ -0,0 +1,470 @@ +############################################################################# +# Makefile for building: NewYearCountdown +# Generated by qmake (3.1) (Qt 5.9.5) +# Project: NewYearCountdown.pro +# Template: app +# Command: /usr/lib/qt5/bin/qmake -o Makefile NewYearCountdown.pro +############################################################################# + +MAKEFILE = Makefile + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtMultimedia -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -isystem /usr/include/libdrm -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = NewYearCountdown1.0.0 +DISTDIR = /home/technomag/QtProjects/newyearcountdown/.tmp/NewYearCountdown1.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) -lQt5Widgets -lQt5Multimedia -lQt5Gui -lQt5Network -lQt5Core -lGL -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + Settings/settings.cpp \ + mycalendar.cpp \ + updatelefttimethread.cpp qrc_appresources.cpp \ + moc_mainwindow.cpp \ + moc_updatelefttimethread.cpp +OBJECTS = main.o \ + mainwindow.o \ + settings.o \ + mycalendar.o \ + updatelefttimethread.o \ + qrc_appresources.o \ + moc_mainwindow.o \ + moc_updatelefttimethread.o +DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + NewYearCountdown.pro mainwindow.h \ + Settings/settings.h \ + mycalendar.h \ + updatelefttimethread.h main.cpp \ + mainwindow.cpp \ + Settings/settings.cpp \ + mycalendar.cpp \ + updatelefttimethread.cpp +QMAKE_TARGET = NewYearCountdown +DESTDIR = +TARGET = NewYearCountdown + + +first: all +####### Build rules + +$(TARGET): $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: NewYearCountdown.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + NewYearCountdown.pro \ + appresources.qrc \ + /usr/lib/x86_64-linux-gnu/libQt5Widgets.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Multimedia.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Gui.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Network.prl \ + /usr/lib/x86_64-linux-gnu/libQt5Core.prl + $(QMAKE) -o Makefile NewYearCountdown.pro +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +NewYearCountdown.pro: +appresources.qrc: +/usr/lib/x86_64-linux-gnu/libQt5Widgets.prl: +/usr/lib/x86_64-linux-gnu/libQt5Multimedia.prl: +/usr/lib/x86_64-linux-gnu/libQt5Gui.prl: +/usr/lib/x86_64-linux-gnu/libQt5Network.prl: +/usr/lib/x86_64-linux-gnu/libQt5Core.prl: +qmake: FORCE + @$(QMAKE) -o Makefile NewYearCountdown.pro + +qmake_all: FORCE + + +all: Makefile $(TARGET) + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents appresources.qrc $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.h Settings/settings.h mycalendar.h updatelefttimethread.h $(DISTDIR)/ + $(COPY_FILE) --parents main.cpp mainwindow.cpp Settings/settings.cpp mycalendar.cpp updatelefttimethread.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: qrc_appresources.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_appresources.cpp +qrc_appresources.cpp: appresources.qrc \ + /usr/lib/qt5/bin/rcc \ + tree1.png \ + chime.wav + /usr/lib/qt5/bin/rcc -name appresources appresources.qrc -o qrc_appresources.cpp + +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -O2 -std=gnu++11 -Wall -W -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: moc_mainwindow.cpp moc_updatelefttimethread.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp moc_updatelefttimethread.cpp +moc_mainwindow.cpp: updatelefttimethread.h \ + mycalendar.h \ + Settings/settings.h \ + mainwindow.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/technomag/QtProjects/newyearcountdown -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -I/usr/include/c++/7/backward -I/usr/lib/gcc/x86_64-linux-gnu/7/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp + +moc_updatelefttimethread.cpp: mycalendar.h \ + updatelefttimethread.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/technomag/QtProjects/newyearcountdown -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/x86_64-linux-gnu/c++/7 -I/usr/include/c++/7/backward -I/usr/lib/gcc/x86_64-linux-gnu/7/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include updatelefttimethread.h -o moc_updatelefttimethread.cpp + +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + +####### Compile + +main.o: main.cpp mainwindow.h \ + updatelefttimethread.h \ + mycalendar.h \ + Settings/settings.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + updatelefttimethread.h \ + mycalendar.h \ + Settings/settings.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +settings.o: Settings/settings.cpp Settings/settings.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o settings.o Settings/settings.cpp + +mycalendar.o: mycalendar.cpp mycalendar.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mycalendar.o mycalendar.cpp + +updatelefttimethread.o: updatelefttimethread.cpp updatelefttimethread.h \ + mycalendar.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o updatelefttimethread.o updatelefttimethread.cpp + +qrc_appresources.o: qrc_appresources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_appresources.o qrc_appresources.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +moc_updatelefttimethread.o: moc_updatelefttimethread.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_updatelefttimethread.o moc_updatelefttimethread.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/NewYearCountdown.pro b/NewYearCountdown.pro new file mode 100644 index 0000000..e98f07b --- /dev/null +++ b/NewYearCountdown.pro @@ -0,0 +1,28 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2021-07-21T11:28:27 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets multimedia + +TARGET = NewYearCountdown +TEMPLATE = app +CONFIG += c++11 + +SOURCES += main.cpp\ + mainwindow.cpp \ + Settings/settings.cpp \ + mycalendar.cpp \ + updatelefttimethread.cpp + +HEADERS += mainwindow.h \ + Settings/settings.h \ + mycalendar.h \ + updatelefttimethread.h + +RESOURCES += \ + appresources.qrc + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e748f92 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +NewYearCountdown 1.0 +================ +Last update : 8 augost 2021 + +AUTHOR +====== + Kobzev Iliya aka TechnoMag (technomag82@gmail.com) + +DESCRIPTION +=========== + Desktop application for coundown daya and time to New Year + + Application is supported skins. For apply skins, copy skins + directory to pash $HOME/.newyear and restart application. + +MAKE PROGRAM FROM SOURCE +======================== + Project for make program is ready! + You must only run "make" command in source directory for create binary file! + +CONTACTS +======== + technomag82@gmail.com + +LICENSE: +======== +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License; + +************** +Copyright (C) TechnoMag 21 july 2021 +************** diff --git a/Settings/settings.cpp b/Settings/settings.cpp new file mode 100644 index 0000000..eee1b4e --- /dev/null +++ b/Settings/settings.cpp @@ -0,0 +1,24 @@ +#include "settings.h" + +Settings::Settings() +{ + QSettings settings; + pathToSkin = settings.value("skin").toString(); + windowPosition.setX(settings.value("xpos").toInt()); + windowPosition.setY(settings.value("ypos").toInt()); + updateDelay = settings.value("updateDelay", 500).toInt(); + bellEachHour = settings.value("bell", true).toBool(); + onTop = settings.value("onTop", true).toBool(); +} + +Settings::~Settings() +{ + QSettings settings; + settings.setValue("skin", pathToSkin); + settings.setValue("xpos", windowPosition.x()); + settings.setValue("ypos", windowPosition.y()); + settings.setValue("updateDelay", updateDelay); + settings.setValue("bell", bellEachHour); + settings.setValue("onTop", onTop); +} + diff --git a/Settings/settings.h b/Settings/settings.h new file mode 100644 index 0000000..cb07980 --- /dev/null +++ b/Settings/settings.h @@ -0,0 +1,21 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include + +class Settings +{ + public: + Settings(); + ~Settings(); + + QString pathToSkin; + QPoint windowPosition; + int updateDelay; + bool bellEachHour; + bool onTop; +}; + +#endif // SETTINGS_H diff --git a/appresources.qrc b/appresources.qrc new file mode 100644 index 0000000..889fde1 --- /dev/null +++ b/appresources.qrc @@ -0,0 +1,8 @@ + + + tree1.png + + + chime.wav + + diff --git a/chime.wav b/chime.wav new file mode 100644 index 0000000..3cccd7c Binary files /dev/null and b/chime.wav differ diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..cfd5125 --- /dev/null +++ b/main.cpp @@ -0,0 +1,15 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QCoreApplication::setOrganizationName("TechnoMag"); + QCoreApplication::setApplicationName("NewYearCountdown"); + QCoreApplication::setApplicationVersion("1.0"); + MainWindow mainWin; + mainWin.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..130eafd --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,198 @@ +#include "mainwindow.h" + +const QString PROGRAM_DIR = QDir::homePath() + "/.newyear/skins"; + +MainWindow::MainWindow() +{ + settings = new Settings(); + setAttribute(Qt::WA_TranslucentBackground); + updateWindowFlags(settings->onTop); + move(settings->windowPosition); + + treeLabel = new QLabel(); + treeLabel->setAttribute(Qt::WA_TranslucentBackground); + treeLabel->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); + setCentralWidget(treeLabel); + + updateThread = new UpdateLeftTimeThread(); + updateThread->setUpdateDelay(settings->updateDelay); + updateThread->setBellEnable(settings->bellEachHour); + connect(updateThread, SIGNAL(drawTree(QPixmap*)), this, SLOT(display(QPixmap*))); + applySkin(settings->pathToSkin); + + treeLabel->setContextMenuPolicy(Qt::CustomContextMenu); + initContextMenu(); + connect(treeLabel, SIGNAL(customContextMenuRequested(QPoint)), + SLOT(customMenuRequested(QPoint))); +} + +MainWindow::~MainWindow() +{ + updateThread->deleteLater(); + delete treeLabel; + delete settings; +} + +void MainWindow::initContextMenu() +{ + mainMenu = new QMenu(this); + findSkins(); + + QMenu *delayMenu = new QMenu(tr("Delay"), mainMenu); + + QActionGroup *group = new QActionGroup(delayMenu); + group->setExclusive(true); + + QAction *action = new QAction(tr("0.5 sec"), this); + action->setObjectName("Delay1000"); + action->setActionGroup(group); + action->setCheckable(true); + action->setChecked(settings->updateDelay == 500); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + delayMenu->addAction(action); + + action = new QAction(tr("1 sec"), this); + action->setObjectName("Delay1000"); + action->setActionGroup(group); + action->setCheckable(true); + action->setChecked(settings->updateDelay == 1000); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + delayMenu->addAction(action); + + action = new QAction(tr("1.5 sec"), this); + action->setObjectName("Delay1500"); + action->setActionGroup(group); + action->setCheckable(true); + action->setChecked(settings->updateDelay == 1500); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + delayMenu->addAction(action); + + action = new QAction(tr("2 sec"), this); + action->setObjectName("Delay2000"); + action->setActionGroup(group); + action->setCheckable(true); + action->setChecked(settings->updateDelay == 2000); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + delayMenu->addAction(action); + + mainMenu->addMenu(delayMenu); + + action = new QAction(tr("Bell"), this); + action->setObjectName("Bell"); + action->setCheckable(true); + action->setChecked(settings->bellEachHour == true); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + mainMenu->addAction(action); + + action = new QAction(tr("On top"), this); + action->setObjectName("OnTop"); + action->setCheckable(true); + action->setChecked(settings->onTop == true); + connect(action, &QAction::triggered, this, &MainWindow::menuClicked); + mainMenu->addAction(action); + + action = new QAction(tr("Exit"), this); + mainMenu->addAction(action); + connect(action, &QAction::triggered, this, &QMainWindow::close); +} + +void MainWindow::customMenuRequested(QPoint pos) { + mainMenu->popup(treeLabel->mapToGlobal(pos)); +} + +void MainWindow::menuClicked(bool checked) +{ + if (checked) { + if (sender()->objectName().compare("Delay500") == 0) { + settings->updateDelay = 500; + updateThread->setUpdateDelay(500); + } + if (sender()->objectName().compare("Delay1000") == 0) { + settings->updateDelay = 1000; + updateThread->setUpdateDelay(1000); + } + if (sender()->objectName().compare("Delay1500") == 0) { + settings->updateDelay = 1500; + updateThread->setUpdateDelay(1500); + } + if (sender()->objectName().compare("Delay2000") == 0) { + settings->updateDelay = 2000; + updateThread->setUpdateDelay(2000); + } + } + if (sender()->objectName().compare("Bell") == 0) { + settings->bellEachHour = checked; + updateThread->setBellEnable(checked); + } + if (sender()->objectName().compare("OnTop") == 0) { + settings->onTop = checked; + } +} + +void MainWindow::skinClicked(bool checked) +{ + if (checked) { + applySkin(sender()->objectName()); + } +} + +void MainWindow::display(QPixmap *treePixmap) +{ + treeLabel->setPixmap(*treePixmap); + treeLabel->setFixedWidth(treePixmap->width()); + treeLabel->setFixedHeight(treePixmap->height()); + setFixedWidth(treePixmap->width()); + setFixedHeight(treePixmap->height()); + setMask(treePixmap->mask()); +} + +void MainWindow::findSkins() +{ + QDir dir(PROGRAM_DIR); + if (dir.exists(PROGRAM_DIR) == false) { + dir.mkpath(PROGRAM_DIR); + } + QDirIterator it(PROGRAM_DIR, + QStringList() << "*", + QDir::NoDotAndDotDot | QDir::Dirs); + QMenu *skinsMenu = nullptr; + QActionGroup *group = nullptr; + QAction *action = nullptr; + if (it.hasNext()) { + skinsMenu = new QMenu(tr("Skins"), mainMenu); + group = new QActionGroup(skinsMenu); + group->setExclusive(true); + } + while (it.hasNext()) { + QString path = it.next(); + QDir skin(path); + action = new QAction(skin.dirName(), this); + action->setObjectName(path); + action->setActionGroup(group); + action->setCheckable(true); + action->setChecked(false); + connect(action, &QAction::triggered, this, &MainWindow::skinClicked); + skinsMenu->addAction(action); + } + if (skinsMenu != nullptr) { + mainMenu->addMenu(skinsMenu); + } +} + +void MainWindow::applySkin(QString pathToSkin) +{ + updateThread->applySkin(pathToSkin); + if (!updateThread->isRunning()) { + updateThread->start(); + } + settings->pathToSkin = pathToSkin; +} + +void MainWindow::updateWindowFlags(bool onTop) +{ + if (onTop) { + setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); + } else { + setWindowFlags(Qt::Window | Qt::FramelessWindowHint); + } +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..e0f3c0a --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,55 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "updatelefttimethread.h" +#include "Settings/settings.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT + + public: + MainWindow(); + ~MainWindow(); + + private slots: + void customMenuRequested(QPoint pos); + void menuClicked(bool checked); + void skinClicked(bool checked); + void display(QPixmap *treePixmap); + + private: + Settings *settings = nullptr; + QPoint winPosition; + QLabel *treeLabel = nullptr; + QMenu *mainMenu = nullptr; + UpdateLeftTimeThread *updateThread = nullptr; + + void findSkins(); + void applySkin(QString pathToSkin); + void updateWindowFlags(bool onTop); + void initContextMenu(); + + protected: + virtual void mousePressEvent(QMouseEvent* pe) + { + winPosition = pe->pos(); + }; + virtual void mouseMoveEvent(QMouseEvent* pe) + { + move(pe->globalPos() - winPosition); + settings->windowPosition = pe->globalPos() - winPosition; + }; + +}; + +#endif // MAINWINDOW_H diff --git a/mycalendar.cpp b/mycalendar.cpp new file mode 100644 index 0000000..e30aa75 --- /dev/null +++ b/mycalendar.cpp @@ -0,0 +1,35 @@ +#include "mycalendar.h" + +MyCalendar::MyCalendar() +{ +} + +time_t MyCalendar::dateToTimeT(int month, int day, int year) { + std::tm tmp = tm(); + tmp.tm_mday = day; + tmp.tm_mon = month - 1; + tmp.tm_year = year; + tmp.tm_hour = 0; + tmp.tm_min = 0; + tmp.tm_sec = 0; + return mktime(&tmp); +} + +QString MyCalendar::leftToNY() +{ + time_t now = time(0); + tm *ltm = localtime(&now); + time_t newYear = dateToTimeT(01, 01, ltm->tm_year + 1); + double sec = difftime(newYear, now); + uint leftDays = static_cast(sec / secondsInDay); + uint diffSecs = sec - (leftDays * secondsInDay); + uint leftHours = diffSecs / secondsInHour; + uint remainingSeconds = diffSecs - (leftHours * secondsInHour); + uint leftMinutes = remainingSeconds / secondsInMinute; + uint leftSeconds = remainingSeconds - (leftMinutes * secondsInMinute); + isTimeToBell = leftMinutes == 0 && leftSeconds == 0; + return timeStr.arg(leftDays) + .arg(leftHours) + .arg(leftMinutes, 2, 10, QChar('0')) + .arg(leftSeconds, 2, 10, QChar('0')); +} diff --git a/mycalendar.h b/mycalendar.h new file mode 100644 index 0000000..92f4742 --- /dev/null +++ b/mycalendar.h @@ -0,0 +1,24 @@ +#ifndef MYCALENDAR_H +#define MYCALENDAR_H + +#include + +#include + +class MyCalendar +{ + public: + MyCalendar(); + QString leftToNY(); + bool isTimeToBell = false; + + private: + const int secondsInHour = 60 * 60; + const int secondsInMinute = 60; + const int secondsInDay = secondsInHour * 24; + const QString timeStr = "%1 %2:%3:%4"; + + time_t dateToTimeT(int month, int day, int year); +}; + +#endif // MYCALENDAR_H diff --git a/skins/ball/ball.png b/skins/ball/ball.png new file mode 100755 index 0000000..4a73875 Binary files /dev/null and b/skins/ball/ball.png differ diff --git a/skins/ball/skin.config b/skins/ball/skin.config new file mode 100644 index 0000000..14cc74b --- /dev/null +++ b/skins/ball/skin.config @@ -0,0 +1,3 @@ +font: Arial +font-size: 21 +font-color: #ff00ff #ffffff #ffff00 \ No newline at end of file diff --git a/skins/ball2/ball2.png b/skins/ball2/ball2.png new file mode 100755 index 0000000..be269d0 Binary files /dev/null and b/skins/ball2/ball2.png differ diff --git a/skins/ball3/ball3.png b/skins/ball3/ball3.png new file mode 100755 index 0000000..5d8a063 Binary files /dev/null and b/skins/ball3/ball3.png differ diff --git a/skins/ball3/skin.config b/skins/ball3/skin.config new file mode 100644 index 0000000..4bcd45c --- /dev/null +++ b/skins/ball3/skin.config @@ -0,0 +1,3 @@ +font: Times +font-size: 21 +font-color: #ff00ff #ffffff #ffff00 \ No newline at end of file diff --git a/skins/greentree/greentree.png b/skins/greentree/greentree.png new file mode 100755 index 0000000..8a75e78 Binary files /dev/null and b/skins/greentree/greentree.png differ diff --git a/skins/nice/nice.png b/skins/nice/nice.png new file mode 100755 index 0000000..3eab5ea Binary files /dev/null and b/skins/nice/nice.png differ diff --git a/skins/nice1/nice1.png b/skins/nice1/nice1.png new file mode 100755 index 0000000..d2b6872 Binary files /dev/null and b/skins/nice1/nice1.png differ diff --git a/skins/nice2/nice2.png b/skins/nice2/nice2.png new file mode 100755 index 0000000..479ba2b Binary files /dev/null and b/skins/nice2/nice2.png differ diff --git a/skins/nice3/nice3.png b/skins/nice3/nice3.png new file mode 100755 index 0000000..416bd9f Binary files /dev/null and b/skins/nice3/nice3.png differ diff --git a/skins/nice4/nice4.png b/skins/nice4/nice4.png new file mode 100755 index 0000000..b00d78f Binary files /dev/null and b/skins/nice4/nice4.png differ diff --git a/skins/snowtree/snowtree.png b/skins/snowtree/snowtree.png new file mode 100755 index 0000000..c301a28 Binary files /dev/null and b/skins/snowtree/snowtree.png differ diff --git a/skins/tree/tree.png b/skins/tree/tree.png new file mode 100755 index 0000000..d45a6b3 Binary files /dev/null and b/skins/tree/tree.png differ diff --git a/skins/tree2/tree2.png b/skins/tree2/tree2.png new file mode 100755 index 0000000..ad55685 Binary files /dev/null and b/skins/tree2/tree2.png differ diff --git a/skins/tree3/tree3.png b/skins/tree3/tree3.png new file mode 100755 index 0000000..9dbc886 Binary files /dev/null and b/skins/tree3/tree3.png differ diff --git a/skins/treebg/treebig.png b/skins/treebg/treebig.png new file mode 100755 index 0000000..03630df Binary files /dev/null and b/skins/treebg/treebig.png differ diff --git a/skins/treestars/skin.config b/skins/treestars/skin.config new file mode 100644 index 0000000..14cc74b --- /dev/null +++ b/skins/treestars/skin.config @@ -0,0 +1,3 @@ +font: Arial +font-size: 21 +font-color: #ff00ff #ffffff #ffff00 \ No newline at end of file diff --git a/skins/treestars/tree1.png b/skins/treestars/tree1.png new file mode 100644 index 0000000..8c1d0a8 Binary files /dev/null and b/skins/treestars/tree1.png differ diff --git a/skins/treestars/tree2.png b/skins/treestars/tree2.png new file mode 100644 index 0000000..2650904 Binary files /dev/null and b/skins/treestars/tree2.png differ diff --git a/skins/treestars/tree3.png b/skins/treestars/tree3.png new file mode 100644 index 0000000..b5d047a Binary files /dev/null and b/skins/treestars/tree3.png differ diff --git a/skins/white/white.png b/skins/white/white.png new file mode 100755 index 0000000..f798e73 Binary files /dev/null and b/skins/white/white.png differ diff --git a/tree1.png b/tree1.png new file mode 100644 index 0000000..20ef236 Binary files /dev/null and b/tree1.png differ diff --git a/updatelefttimethread.cpp b/updatelefttimethread.cpp new file mode 100644 index 0000000..8e29737 --- /dev/null +++ b/updatelefttimethread.cpp @@ -0,0 +1,197 @@ +#include "updatelefttimethread.h" + +UpdateLeftTimeThread::UpdateLeftTimeThread() +{ + calendar = new MyCalendar(); + imageList = new QList(); + moveToThread(this); +} + +UpdateLeftTimeThread::~UpdateLeftTimeThread() +{ + delete calendar; + delete imageList; + delete image; + delete timeFontMetrics; +} + +void UpdateLeftTimeThread::run() +{ + while (true) { + if (isActive) { + QThread::msleep(500); + countdownSleep += 500; + if (imageList->size() > 0) { + imageSleep += 500; + } + updateTime(); + } + } +} + +void UpdateLeftTimeThread::updateTime() +{ + if (!isActive) + return; + if (imageList->size() > 0 && imageSleep >= updateDelay) { + imageSleep = 0; + selectNextImage(); + } + if (countdownSleep >= 1000) { + timeString = calendar->leftToNY(); + countdownSleep = 0; + if (isBellEnabled && calendar->isTimeToBell) { + QSound::play(":/sound/chime.wav"); + } + } + treePixmap->fill(Qt::transparent); + QPainter *painter = new QPainter(treePixmap); + QRect rect = QRect(treePixmap->width() / 2 - image->width() / 2, + 0, + image->width(), + image->height()); + painter->drawImage(rect, *image, image->rect()); + painter->setPen(getPen()); + painter->setFont(*timeFont); + painter->drawText(treePixmap->width() / 2 - timeFontMetrics->width(timeString) / 2, + image->height() + timeFontMetrics->ascent(), + timeString); + delete painter; + emit drawTree(treePixmap); +} + +void UpdateLeftTimeThread::applySkin(QString pathToSkin) +{ + isActive = false; + timeString = calendar->leftToNY(); + releaseObject(image); + imageList->clear(); + releaseObject(fontGradient); + setupFont("Arial", 21); + if (pathToSkin.isEmpty()) { + image = new QImage(":/skin/tree1.png"); + } else { + fillCache(pathToSkin); + imageIterator = 0; + if (imageList->size() > 0) { + image = imageList->at(imageIterator); + loadSkinConfig(pathToSkin); + } else { + image = new QImage(":/skin/tree1.png"); + } + } + releaseObject(treePixmap); + int fontWidth = timeFontMetrics->width(timeString); + if (fontWidth > image->width()) { + treePixmap = new QPixmap(fontWidth, + image->height() + timeFontMetrics->ascent()); + } else { + treePixmap = new QPixmap(image->width(), + image->height() + timeFontMetrics->ascent()); + } + isActive = true; + updateTime(); +} + +void UpdateLeftTimeThread::setUpdateDelay(unsigned long delay) +{ + this->updateDelay = delay; +} + +void UpdateLeftTimeThread::setBellEnable(bool enabled) +{ + isBellEnabled = enabled; +} + +void UpdateLeftTimeThread::fillCache(QString pathToSkin) +{ + qDeleteAll(*imageList); + QDirIterator it(pathToSkin, + QStringList() << "*.png", + QDir::Files); + while (it.hasNext()) { + imageList->append(new QImage(it.next())); + } +} + +void UpdateLeftTimeThread::loadSkinConfig(QString pathToSkin) +{ + QFile skinConfig(pathToSkin + "/skin.config"); + if (skinConfig.open(QIODevice::ReadOnly | QIODevice::Text) == true) { + QTextStream config(&skinConfig); + config.setCodec("UTF-8"); + QString temp; + QString font = "Arial"; + int fontSize = 21; + while (config.atEnd() != true) + { + temp = config.readLine(0); + if (temp.startsWith("font: ")) { + font = temp.remove(0, 6); + if (font.isEmpty()) { + font = "Arial"; + } + } + if (temp.startsWith("font-size: ")) { + QString size = temp.remove(0, 11); + bool ok; + fontSize = size.toInt(&ok, 10); + if (!ok) { + fontSize = 21; + } + } + if (temp.startsWith("font-color: ")) { + QString color = temp.remove(0, 12); + QStringList colors = color.split(' '); + int colorCount = colors.size(); + fontGradient = new QLinearGradient(0, 0, image->width(), 0); + qreal pos = 0; + for (int i = 0; i < colorCount; i++) { + fontGradient->setColorAt(pos, QColor(colors.at(i))); + pos += 0.5; + } + } + } + skinConfig.close(); + setupFont(font, fontSize); + } +} + +void UpdateLeftTimeThread::selectNextImage() +{ + ++imageIterator; + if (imageIterator >= imageList->size()) { + imageIterator = 0; + } + image = imageList->at(imageIterator); +} + +void UpdateLeftTimeThread::setupFont(QString fontName, int fontSize) +{ + releaseObject(timeFontMetrics); + if (timeFont == nullptr) { + timeFont = new QFont(fontName, fontSize, QFont::Normal); + } else { + timeFont->setFamily(fontName); + timeFont->setPointSize(fontSize); + } + timeFontMetrics = new QFontMetrics(*timeFont); +} + +QPen UpdateLeftTimeThread::getPen() +{ + if (fontGradient != nullptr) { + return QPen(*fontGradient, 6); + } else { + return QPen(Qt::white, 6); + } +} + +template +void UpdateLeftTimeThread::releaseObject(T &pointer) +{ + if (pointer != nullptr) { + delete pointer; + pointer = nullptr; + } +} diff --git a/updatelefttimethread.h b/updatelefttimethread.h new file mode 100644 index 0000000..b002855 --- /dev/null +++ b/updatelefttimethread.h @@ -0,0 +1,65 @@ +#ifndef UPDATELEFTTIMETHREAD_H +#define UPDATELEFTTIMETHREAD_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mycalendar.h" + +class UpdateLeftTimeThread : public QThread +{ + Q_OBJECT + public: + UpdateLeftTimeThread(); + ~UpdateLeftTimeThread(); + void applySkin(QString pathToSkin); + void setUpdateDelay(unsigned long delay); + void setBellEnable(bool enabled); + void run(); + + signals: + void drawTree(QPixmap*); + + public slots: + void updateTime(); + + private: + QImage *image = nullptr; + MyCalendar *calendar = nullptr; + QPixmap *treePixmap = nullptr; + QString timeString; + QFont *timeFont = nullptr; + QFontMetrics *timeFontMetrics = nullptr; + QLinearGradient *fontGradient = nullptr; + + QList *imageList = nullptr; + int imageIterator = 0; + uint countdownSleep = 0; + uint imageSleep = 0; + bool isActive = false; + bool isBellEnabled = false; + unsigned long updateDelay = 500; + void fillCache(QString pathToSkin); + void loadSkinConfig(QString pathToSkin); + void selectNextImage(); + void setupFont(QString fontName, int fontSize); + QPen getPen(); + + template + void releaseObject(T &pointer); +}; + +#endif // UPDATELEFTTIMETHREAD_H