Commit Graph

336 Commits

Author SHA1 Message Date
Gavin MacGregor eea73592f9 Add additional escape key sequences for AZERTY layouts
Using the Escape key followed by Shift and a number key to insert a
foreground mosaic attribute doesn't work on an AZERTY keyboard layout where
the Shift key is always needed to type a number.

The additional escape keys are on the top row of letters situated below the
equivalent number key as those letters were not previously not used.

Red:     1 or A
Green:   2 or Z
Yellow:  3 or E
Blue:    4 or R
Magenta: 5 or T
Cyan:    6 or Y
White:   7 or U
Black:   0 or P
2025-11-23 22:01:54 +00:00
Gavin MacGregor f708765d7b Set FLOF links just once when loading a TTI 2025-11-09 13:43:59 +00:00
Gavin MacGregor 7ce848b4cf Initialise DCLUT with QByteArrayLiteral 2025-11-09 13:17:04 +00:00
Gavin MacGregor e6a90c061e Extend packet coding function to take packet numbers 2025-11-04 21:59:30 +00:00
Gavin MacGregor 973aeaa6cf Drop unknown page function and packet coding 2025-11-04 19:56:00 +00:00
Gavin MacGregor 1efa8c196d Handle invalid triplets
"Invalid triplets" are triplets that have failed Hamming 24/18 decoding.

Previously, invalid triplets were converted at load time to either all zero
bits or, in the case of X/26 enhancement triplets, to "dummy" triplets of
reserved mode 11110 with a row address group that hopefully have no effect.
Now the X/26 enhancement triplet list can explicitly store invalid triplets
and will show them as "error decoding triplet".

Invalid triplets in other packets such as X/28/0 will still be zeroed out at
load time.

Since the TTI format has no provision for storing invalid triplets, saving a
page will convert the invalid triplets to reserved mode 11110 as described
above.

The actual bits of invalid triplets are not stored on the assumption that
they are not recoverable. Thus exporting to t42 format will write an invalid
triplet as a Hamming coded result of all zero bits which will still cause a
Hamming decoding failure.
2025-11-04 17:56:04 +00:00
Gavin MacGregor 1b3623d61b Move some getters from headers 2025-10-29 19:37:56 +00:00
Gavin MacGregor 6c46aba687 Tag version 0.8.1-beta 0.8.1-beta 2025-10-26 14:20:04 +00:00
Gavin MacGregor 07abbdf928 Fix deeper zooms not being saved properly 2025-10-26 10:53:13 +00:00
Gavin MacGregor 30bff43a14 Restore geometry and state after central widget creation
Attempts to fix a bug where the central page editing widget was sometimes
squashed to a tiny size in the corner.

Also introduces a schema for settings storage. There are no changes in this
schema; this is (mis)used to forget the geometry and state when version
0.8.1 is started for the first time to make sure the central widget is
usuable again.
2025-10-24 22:49:35 +01:00
Gavin MacGregor d9c93cfe66 Ensure decoder and gif library are built in 2025-10-21 14:43:02 +01:00
Gavin MacGregor f18cf60b27 Add Clear Files option to Recent Files 2025-10-19 16:17:52 +01:00
Gavin MacGregor 877478859c Tag version 0.8-beta 0.8-beta 2025-10-14 15:57:49 +01:00
Gavin MacGregor f4fe4aaa2e Purge qt_* specific stuff from CMake
Appears to solve a spurious qt.conf being installed in bin directory.
2025-10-14 13:22:55 +01:00
Gavin MacGregor 34bff3965b Add DRCS examples 2025-10-13 21:22:16 +01:00
Gavin MacGregor 6d9c31e7bc Select Level 3.5 if X/28/1 DCLUT packet is found 2025-10-12 19:14:05 +01:00
Gavin MacGregor feffca85f8 Add a desktop entry file 2025-10-07 21:32:21 +01:00
Gavin MacGregor b573ee52b1 Fix CMake deprecation warning
Minimum Qt version is now 6.5
2025-10-06 15:45:33 +01:00
Gavin MacGregor 9a17a3624f Change border from blue to GUI background colour 2025-10-05 21:48:11 +01:00
Gavin MacGregor 3a084e1561 Export region to zxnet editor 2025-09-11 21:14:39 +01:00
Gavin MacGregor 14ee3fb39a Avoid reserved values when creating G0 diacriticals 2025-08-31 21:53:00 +01:00
Gavin MacGregor 06ca1e13ae Rename a couple of DRCS widgets 2025-07-29 18:35:23 +01:00
Gavin MacGregor 5b250beedc Ensure DRCS mode doesn't affect past DRCS characters 2025-07-29 18:04:47 +01:00
Gavin MacGregor ead6700002 Add transparency to exported images 2025-07-27 14:10:06 +01:00
Gavin MacGregor 4ef0b016aa Improve appearance of capital letters with diacriticals
Added reduced-height Latin G0 capital letters to the font to make room for
diacritical marks to sit on top.
2025-07-23 15:20:12 +01:00
Gavin MacGregor d326748371 Add DCLUT editing 2025-07-20 15:32:13 +01:00
Gavin MacGregor d8e0a2f3e2 Implement exporting subpage image to clipboard 2025-07-13 19:20:44 +01:00
Gavin MacGregor dad86a80f4 Fix compiling with Qt 6.9 2025-06-29 13:46:22 +01:00
Gavin MacGregor 541654a7f7 Implement DRCS context menus 2025-06-19 16:10:41 +01:00
Gavin MacGregor 962d308b56 Avoid reserved values when creating DRCS Mode triplets 2025-06-19 11:56:36 +01:00
Gavin MacGregor ebee613a22 Read DCLUTs from X/28/1
DCLUTs cannot be edited yet.
2025-06-18 12:28:00 +01:00
Gavin MacGregor 0fd581925a Uncolour mode 1-3 PTUs on monochrome rendering modes 2025-06-16 20:22:37 +01:00
Gavin MacGregor 7f0de4410b Do some checks for malformed tti files, wrt GH-10 2025-06-15 19:09:52 +01:00
Gavin MacGregor e574526ca4 Workaround for DRCS menu sections on Windows 2025-06-10 12:45:53 +01:00
Gavin MacGregor e1ba67484f Implement DRCS rendering
External pages with DRCS definitions can be loaded using the options in the
"DRCS pages" submenu within the "View" menu. Two DRCS pages can be loaded,
one for Global DRCS definitions and the other for Normal DRCS definitions.

Level 2.5 mode 0 PTUs are fully supported.

Partial support for Level 3.5 mode 1, 2 and 3 PTUs. DCLUTs defined in X/28/1
on the main page are not yet implemented; the characters currently appear in
the default DCLUTs described in D.1.6 and D.2.2 of the ETSI spec.
2025-06-09 18:57:16 +01:00
Gavin MacGregor 519c961cff Tweak flashing logic 2025-06-01 12:50:33 +01:00
Gavin MacGregor 07c6eed3fe Add getter for decoder level 2025-05-27 18:39:19 +01:00
Gavin MacGregor 8675cef6c5 Load files into QList of PageBase objects
A document is first loaded as a generic PageBase before being converted to
level one pages afterwards.

This is preparation for loading pages of other types such as DRCS and Public
Object Pages. The latter will need further work as the non-TTI file loaders
blindly assume X/1 to X/25 are 7-bit odd parity coded.

This also reverts 0a1c018 putting back the copy constructor that allows
a PageBase to be converted to a LevelOnePage.
2025-05-27 17:34:18 +01:00
Gavin MacGregor 42fd870749 Make setting NOS bits and Fastext links more agnostic
Uses generic setControlBit and setPacket instead of the Level One document
calls to set the NOS bits and FLOF links.
2025-05-25 22:01:42 +01:00
Gavin MacGregor 041a35a597 Move page function and packet coding 2025-05-25 14:42:03 +01:00
Gavin MacGregor 395f3769cb Separate metadata loading
"Metadata" is data which is stored in a teletext file format but is not part
of the page itself, such as DE description and CT cycle time in the TTI file
format.
2025-05-25 12:54:14 +01:00
Gavin MacGregor 3f93da8c1a Fix copy assignment 2025-04-02 19:05:22 +01:00
Gavin MacGregor cc5219a16b Move document class 2025-04-02 14:44:30 +01:00
Gavin MacGregor a1e2c743f3 Tag version 0.7.2-beta 0.7.2-beta 2025-03-30 12:19:40 +01:00
Gavin MacGregor 14568f9d93 Add a Level 3.5 example 2025-03-26 17:39:48 +00:00
Gavin MacGregor e647b3e67a Decide to activate export option from loading class 2025-03-25 18:58:23 +00:00
Gavin MacGregor 8751783cb2 Port from std::vector to QList 2025-03-18 19:03:45 +00:00
Gavin MacGregor 4a15d9a206 Port from QVector to QList 2025-03-18 16:24:12 +00:00
Gavin MacGregor 0493f0e270 Allow header row editing 2025-03-18 14:48:03 +00:00
Gavin MacGregor 1d462f4355 Merge branch 'refactor/packets' 2025-03-09 11:57:25 +00:00