Port to CMake from qmake, and split decoder into subdirectory

Qt 5 has had to be dropped as CMakeLists.txt uses qt_* specific commands
which are implemented in Qt 6 onwards.

cmake --install is only working on Linux at the moment; it installs the
executable and the bundled example tti files into /usr/local/share/doc

The teletext decoder with its document storage has been moved to a
subdirectory with the intention of making it possible to use in other
projects, but some further separation of editing stuff will be needed.
This commit is contained in:
G.K.MacGregor
2024-08-11 15:32:45 +01:00
parent cf6c4855ce
commit 40fc1e38d8
59 changed files with 92 additions and 63 deletions

8
.gitignore vendored
View File

@@ -1,6 +1,4 @@
.qmake.stash
moc_*
qrc_*
*.o
Makefile
qteletextmaker
build*/
cmake-build-*/
.idea

60
CMakeLists.txt Normal file
View File

@@ -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})

View File

@@ -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.

View File

@@ -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

View File

@@ -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)

View File

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -19,6 +19,7 @@
#include <QBitmap>
#include <QColor>
#include <QDir>
#include <QImage>
#include <QPainter>
#include <QPixmap>
@@ -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++;

View File

@@ -0,0 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>fontimages/teletextfont.png</file>
</qresource>
</RCC>

View File

@@ -1,6 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/teletextfont.png</file>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/new.png</file>

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 852 B

After

Width:  |  Height:  |  Size: 852 B

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -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());