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.
8
.gitignore
vendored
@@ -1,6 +1,4 @@
|
||||
.qmake.stash
|
||||
moc_*
|
||||
qrc_*
|
||||
*.o
|
||||
Makefile
|
||||
qteletextmaker
|
||||
build*/
|
||||
cmake-build-*/
|
||||
.idea
|
||||
|
||||
60
CMakeLists.txt
Normal 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})
|
||||
16
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.
|
||||
|
||||
@@ -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
|
||||
7
src/qteletextdecoder/CMakeLists.txt
Normal 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)
|
||||
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
@@ -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++;
|
||||
5
src/qteletextdecoder/teletextfonts.qrc
Normal file
@@ -0,0 +1,5 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>fontimages/teletextfont.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 852 B After Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -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());
|
||||