diff --git a/.gitignore b/.gitignore index fe55ee7..1e5f58c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -.qmake.stash -moc_* -qrc_* -*.o Makefile -qteletextmaker +build*/ +cmake-build-*/ +.idea diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5769d5d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,60 @@ +cmake_minimum_required(VERSION 3.16.0) + +project(qteletextmaker VERSION 1.0.0 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +find_package(Qt6 COMPONENTS Core Widgets REQUIRED) + +qt_standard_project_setup() + +add_subdirectory(src/qteletextdecoder) + +file (GLOB SOURCES src/qteletextmaker/*.cpp) +qt_add_executable(qteletextmaker ${SOURCES} src/qteletextmaker/actionicons.qrc) + +target_link_libraries(qteletextmaker PRIVATE qteletextdecoder Qt::Widgets) + +set_target_properties(qteletextmaker PROPERTIES + WIN32_EXECUTABLE ON +) + +if(UNIX) + include(GNUInstallDirs) + + set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(DOC_INSTALL_DIR "${CMAKE_INSTALL_DOCDIR}") + set(EXAMPLES_INSTALL_DIR "${DOC_INSTALL_DIR}/examples") +else() + set(BIN_INSTALL_DIR ".") + set(DOC_INSTALL_DIR ".") + set(EXAMPLES_INSTALL_DIR "./examples") +endif() + +install(TARGETS qteletextmaker + BUNDLE DESTINATION . + RUNTIME DESTINATION ${BIN_INSTALL_DIR} +) + +install(FILES + ${CMAKE_CURRENT_LIST_DIR}/README.md + ${CMAKE_CURRENT_LIST_DIR}/LICENSE + DESTINATION ${DOC_INSTALL_DIR} +) + +install(DIRECTORY + ${CMAKE_CURRENT_LIST_DIR}/examples/ + DESTINATION ${EXAMPLES_INSTALL_DIR} +) + +qt_generate_deploy_app_script( + TARGET qteletextmaker + FILENAME_VARIABLE deploy_script + NO_UNSUPPORTED_PLATFORM_ERROR +) +install(SCRIPT ${deploy_script}) diff --git a/README.md b/README.md index b28c9b1..0a30b93 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # QTeletextMaker QTeletextMaker is a teletext page editor with an emphasis on Level 2.5 enhancement editing, released under the GNU General Public License v3.0 -It is written in C++ using the Qt 5 widget libraries but should also compile with Qt 6. +It is written in C++ using the Qt 6 widget libraries. Features - Load and save teletext pages in .tti format. @@ -20,11 +20,19 @@ Although designed on and developed for Linux, the Qt libraries are cross platfor ## Building ### Linux -Install version 5 or 6 of the QtCore, QtGui and QtWidgets libraries and build headers, along with the qmake tool. Depending on how qmake is installed, type `qmake && make -j3` or `qmake5 && make -j3` or `qmake6 && make -j3` in a terminal to build, you can replace -j3 with the number of processor cores used for the compile process. +Install version 6 of the QtCore, QtGui and QtWidgets libraries and build headers, along with CMake. -The above should place the qteletextmaker executable in the same directory as the source, type `./qteletextmaker` in the terminal to launch. Some Qt installs may place the executable into a "release" directory. +Change into the source directory and run the following commands. -j8 can be replaced with the number of processor cores used for the compile process +``` +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release .. +make -j8 +``` -Optionally, type `make install` afterwards to place the executable into /usr/local/bin. +The above should place the qteletextmaker executable into the build directory created by the above commands. Within the build directory type `./qteletextmaker` in the terminal to launch. + +Optionally, type `cmake --install .` to place the executable into /usr/local/bin and the example .tti files into /usr/local/share/doc/qteletextmaker. ## Current limitations The following X/26 enhancement triplets are not rendered by the editor, although the list is fully aware of them. diff --git a/qteletextmaker.pro b/qteletextmaker.pro deleted file mode 100644 index cd78884..0000000 --- a/qteletextmaker.pro +++ /dev/null @@ -1,51 +0,0 @@ -QT += widgets -requires(qtConfig(filedialog)) - -HEADERS = decode.h \ - document.h \ - hamming.h \ - keymap.h \ - levelonecommands.h \ - levelonepage.h \ - loadsave.h \ - mainwidget.h \ - mainwindow.h \ - pagebase.h \ - pagex26base.h \ - pagecomposelinksdockwidget.h \ - pageenhancementsdockwidget.h \ - pageoptionsdockwidget.h \ - palettedockwidget.h \ - render.h \ - x26commands.h \ - x26dockwidget.h \ - x26menus.h \ - x26model.h \ - x26triplets.h \ - x28commands.h -SOURCES = decode.cpp \ - document.cpp \ - levelonecommands.cpp \ - levelonepage.cpp \ - loadsave.cpp \ - main.cpp \ - mainwidget.cpp \ - mainwindow.cpp \ - pagebase.cpp \ - pagex26base.cpp \ - pagecomposelinksdockwidget.cpp \ - pageenhancementsdockwidget.cpp \ - pageoptionsdockwidget.cpp \ - palettedockwidget.cpp \ - render.cpp \ - x26commands.cpp \ - x26dockwidget.cpp \ - x26menus.cpp \ - x26model.cpp \ - x26triplets.cpp \ - x28commands.cpp -RESOURCES = qteletextmaker.qrc - -# install -target.path = /usr/local/bin -INSTALLS += target diff --git a/src/qteletextdecoder/CMakeLists.txt b/src/qteletextdecoder/CMakeLists.txt new file mode 100644 index 0000000..dc4ae5b --- /dev/null +++ b/src/qteletextdecoder/CMakeLists.txt @@ -0,0 +1,7 @@ +file (GLOB SOURCES *.cpp) + +add_library(qteletextdecoder ${SOURCES} teletextfonts.qrc) + +target_include_directories(qteletextdecoder PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +target_link_libraries(qteletextdecoder Qt::Widgets) diff --git a/decode.cpp b/src/qteletextdecoder/decode.cpp similarity index 100% rename from decode.cpp rename to src/qteletextdecoder/decode.cpp diff --git a/decode.h b/src/qteletextdecoder/decode.h similarity index 100% rename from decode.h rename to src/qteletextdecoder/decode.h diff --git a/document.cpp b/src/qteletextdecoder/document.cpp similarity index 100% rename from document.cpp rename to src/qteletextdecoder/document.cpp diff --git a/document.h b/src/qteletextdecoder/document.h similarity index 100% rename from document.h rename to src/qteletextdecoder/document.h diff --git a/images/teletextfont.png b/src/qteletextdecoder/fontimages/teletextfont.png similarity index 100% rename from images/teletextfont.png rename to src/qteletextdecoder/fontimages/teletextfont.png diff --git a/levelonepage.cpp b/src/qteletextdecoder/levelonepage.cpp similarity index 100% rename from levelonepage.cpp rename to src/qteletextdecoder/levelonepage.cpp diff --git a/levelonepage.h b/src/qteletextdecoder/levelonepage.h similarity index 100% rename from levelonepage.h rename to src/qteletextdecoder/levelonepage.h diff --git a/pagebase.cpp b/src/qteletextdecoder/pagebase.cpp similarity index 100% rename from pagebase.cpp rename to src/qteletextdecoder/pagebase.cpp diff --git a/pagebase.h b/src/qteletextdecoder/pagebase.h similarity index 100% rename from pagebase.h rename to src/qteletextdecoder/pagebase.h diff --git a/pagex26base.cpp b/src/qteletextdecoder/pagex26base.cpp similarity index 100% rename from pagex26base.cpp rename to src/qteletextdecoder/pagex26base.cpp diff --git a/pagex26base.h b/src/qteletextdecoder/pagex26base.h similarity index 100% rename from pagex26base.h rename to src/qteletextdecoder/pagex26base.h diff --git a/render.cpp b/src/qteletextdecoder/render.cpp similarity index 99% rename from render.cpp rename to src/qteletextdecoder/render.cpp index 2ecbe17..486f536 100644 --- a/render.cpp +++ b/src/qteletextdecoder/render.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -34,8 +35,10 @@ QImage *TeletextFontBitmap::s_fontImage = nullptr; TeletextFontBitmap::TeletextFontBitmap() { + Q_INIT_RESOURCE(teletextfonts); + if (s_instances == 0) { - s_fontBitmap = new QBitmap(":/images/teletextfont.png"); + s_fontBitmap = new QBitmap(":/fontimages/teletextfont.png"); s_fontImage = new QImage(s_fontBitmap->toImage()); } s_instances++; diff --git a/render.h b/src/qteletextdecoder/render.h similarity index 100% rename from render.h rename to src/qteletextdecoder/render.h diff --git a/src/qteletextdecoder/teletextfonts.qrc b/src/qteletextdecoder/teletextfonts.qrc new file mode 100644 index 0000000..b8908a3 --- /dev/null +++ b/src/qteletextdecoder/teletextfonts.qrc @@ -0,0 +1,5 @@ + + + fontimages/teletextfont.png + + diff --git a/x26triplets.cpp b/src/qteletextdecoder/x26triplets.cpp similarity index 100% rename from x26triplets.cpp rename to src/qteletextdecoder/x26triplets.cpp diff --git a/x26triplets.h b/src/qteletextdecoder/x26triplets.h similarity index 100% rename from x26triplets.h rename to src/qteletextdecoder/x26triplets.h diff --git a/qteletextmaker.qrc b/src/qteletextmaker/actionicons.qrc similarity index 88% rename from qteletextmaker.qrc rename to src/qteletextmaker/actionicons.qrc index 0f692ff..0166f52 100644 --- a/qteletextmaker.qrc +++ b/src/qteletextmaker/actionicons.qrc @@ -1,6 +1,5 @@ - images/teletextfont.png images/copy.png images/cut.png images/new.png diff --git a/hamming.h b/src/qteletextmaker/hamming.h similarity index 100% rename from hamming.h rename to src/qteletextmaker/hamming.h diff --git a/images/copy.png b/src/qteletextmaker/images/copy.png similarity index 100% rename from images/copy.png rename to src/qteletextmaker/images/copy.png diff --git a/images/cut.png b/src/qteletextmaker/images/cut.png similarity index 100% rename from images/cut.png rename to src/qteletextmaker/images/cut.png diff --git a/images/new.png b/src/qteletextmaker/images/new.png similarity index 100% rename from images/new.png rename to src/qteletextmaker/images/new.png diff --git a/images/open.png b/src/qteletextmaker/images/open.png similarity index 100% rename from images/open.png rename to src/qteletextmaker/images/open.png diff --git a/images/paste.png b/src/qteletextmaker/images/paste.png similarity index 100% rename from images/paste.png rename to src/qteletextmaker/images/paste.png diff --git a/images/redo.png b/src/qteletextmaker/images/redo.png similarity index 100% rename from images/redo.png rename to src/qteletextmaker/images/redo.png diff --git a/images/save.png b/src/qteletextmaker/images/save.png similarity index 100% rename from images/save.png rename to src/qteletextmaker/images/save.png diff --git a/images/undo.png b/src/qteletextmaker/images/undo.png similarity index 100% rename from images/undo.png rename to src/qteletextmaker/images/undo.png diff --git a/keymap.h b/src/qteletextmaker/keymap.h similarity index 100% rename from keymap.h rename to src/qteletextmaker/keymap.h diff --git a/levelonecommands.cpp b/src/qteletextmaker/levelonecommands.cpp similarity index 100% rename from levelonecommands.cpp rename to src/qteletextmaker/levelonecommands.cpp diff --git a/levelonecommands.h b/src/qteletextmaker/levelonecommands.h similarity index 100% rename from levelonecommands.h rename to src/qteletextmaker/levelonecommands.h diff --git a/loadsave.cpp b/src/qteletextmaker/loadsave.cpp similarity index 100% rename from loadsave.cpp rename to src/qteletextmaker/loadsave.cpp diff --git a/loadsave.h b/src/qteletextmaker/loadsave.h similarity index 100% rename from loadsave.h rename to src/qteletextmaker/loadsave.h diff --git a/main.cpp b/src/qteletextmaker/main.cpp similarity index 98% rename from main.cpp rename to src/qteletextmaker/main.cpp index 3d58838..e7298f4 100644 --- a/main.cpp +++ b/src/qteletextmaker/main.cpp @@ -24,7 +24,7 @@ int main(int argc, char *argv[]) { - Q_INIT_RESOURCE(qteletextmaker); + Q_INIT_RESOURCE(actionicons); QApplication app(argc, argv); QApplication::setApplicationName("QTeletextMaker"); QApplication::setApplicationDisplayName(QApplication::applicationName()); diff --git a/mainwidget.cpp b/src/qteletextmaker/mainwidget.cpp similarity index 100% rename from mainwidget.cpp rename to src/qteletextmaker/mainwidget.cpp diff --git a/mainwidget.h b/src/qteletextmaker/mainwidget.h similarity index 100% rename from mainwidget.h rename to src/qteletextmaker/mainwidget.h diff --git a/mainwindow.cpp b/src/qteletextmaker/mainwindow.cpp similarity index 100% rename from mainwindow.cpp rename to src/qteletextmaker/mainwindow.cpp diff --git a/mainwindow.h b/src/qteletextmaker/mainwindow.h similarity index 100% rename from mainwindow.h rename to src/qteletextmaker/mainwindow.h diff --git a/pagecomposelinksdockwidget.cpp b/src/qteletextmaker/pagecomposelinksdockwidget.cpp similarity index 100% rename from pagecomposelinksdockwidget.cpp rename to src/qteletextmaker/pagecomposelinksdockwidget.cpp diff --git a/pagecomposelinksdockwidget.h b/src/qteletextmaker/pagecomposelinksdockwidget.h similarity index 100% rename from pagecomposelinksdockwidget.h rename to src/qteletextmaker/pagecomposelinksdockwidget.h diff --git a/pageenhancementsdockwidget.cpp b/src/qteletextmaker/pageenhancementsdockwidget.cpp similarity index 100% rename from pageenhancementsdockwidget.cpp rename to src/qteletextmaker/pageenhancementsdockwidget.cpp diff --git a/pageenhancementsdockwidget.h b/src/qteletextmaker/pageenhancementsdockwidget.h similarity index 100% rename from pageenhancementsdockwidget.h rename to src/qteletextmaker/pageenhancementsdockwidget.h diff --git a/pageoptionsdockwidget.cpp b/src/qteletextmaker/pageoptionsdockwidget.cpp similarity index 100% rename from pageoptionsdockwidget.cpp rename to src/qteletextmaker/pageoptionsdockwidget.cpp diff --git a/pageoptionsdockwidget.h b/src/qteletextmaker/pageoptionsdockwidget.h similarity index 100% rename from pageoptionsdockwidget.h rename to src/qteletextmaker/pageoptionsdockwidget.h diff --git a/palettedockwidget.cpp b/src/qteletextmaker/palettedockwidget.cpp similarity index 100% rename from palettedockwidget.cpp rename to src/qteletextmaker/palettedockwidget.cpp diff --git a/palettedockwidget.h b/src/qteletextmaker/palettedockwidget.h similarity index 100% rename from palettedockwidget.h rename to src/qteletextmaker/palettedockwidget.h diff --git a/x26commands.cpp b/src/qteletextmaker/x26commands.cpp similarity index 100% rename from x26commands.cpp rename to src/qteletextmaker/x26commands.cpp diff --git a/x26commands.h b/src/qteletextmaker/x26commands.h similarity index 100% rename from x26commands.h rename to src/qteletextmaker/x26commands.h diff --git a/x26dockwidget.cpp b/src/qteletextmaker/x26dockwidget.cpp similarity index 100% rename from x26dockwidget.cpp rename to src/qteletextmaker/x26dockwidget.cpp diff --git a/x26dockwidget.h b/src/qteletextmaker/x26dockwidget.h similarity index 100% rename from x26dockwidget.h rename to src/qteletextmaker/x26dockwidget.h diff --git a/x26menus.cpp b/src/qteletextmaker/x26menus.cpp similarity index 100% rename from x26menus.cpp rename to src/qteletextmaker/x26menus.cpp diff --git a/x26menus.h b/src/qteletextmaker/x26menus.h similarity index 100% rename from x26menus.h rename to src/qteletextmaker/x26menus.h diff --git a/x26model.cpp b/src/qteletextmaker/x26model.cpp similarity index 100% rename from x26model.cpp rename to src/qteletextmaker/x26model.cpp diff --git a/x26model.h b/src/qteletextmaker/x26model.h similarity index 100% rename from x26model.h rename to src/qteletextmaker/x26model.h diff --git a/x28commands.cpp b/src/qteletextmaker/x28commands.cpp similarity index 100% rename from x28commands.cpp rename to src/qteletextmaker/x28commands.cpp diff --git a/x28commands.h b/src/qteletextmaker/x28commands.h similarity index 100% rename from x28commands.h rename to src/qteletextmaker/x28commands.h