This is a program to design a surface for a touch panel. Where touch panel means usually a phone (Android or iOS). There exists the company AMX who offers, beside other things, some commercial touch panels. This panels require also a controller. They have a proprietary protocol and there exists the program TPDesigner to design a surface for the touch panels of them.
Some years ago I started to develop the application TPanel which is a free implementation of this kind of touch panels. It is available for all operating systems (except gaming consoles like Windows). Unfortunately the application TPDesign is only available for Windows. This is unsatisfactory and therefore I decided to implement this application myself. I call it TSurface and it will have mostly if not all features the original have. Beside that, it will have some additional features like presenting GPS coordinates (if the device supports it).
TSurface will be able to read TP4 and TP5 files, generated by the original TPDesiner. It converts this files in its own file format. Instead of using XML for the page configuration TSurface uses JSON. The internal handling of JSON is a lot easier than handling XML. TSurface uses the format of tar to safe all files into one. It also compresses the resulting file to safe space. This allows anybody to simply unzip the file with the following command:
tar -xf <file>
Tsurface will be able to encrypt the contents of the file. It is planned to encrypt the JSON files only. The user can select in the preferences dialog a password. The files will then be encrypted with an AES algorithm. This means, that the file is lost once the password is lost π€·.
Currently the program is under heavy development and in an early state. At the moment it is not usable because too much is missing. The following matrix shows what is already implemented and what is still missing.
| Part | Fully functional | Partly implemented | Missing | Priority | Comment |
|---|---|---|---|---|---|
| Menu: File | |||||
| Create a new file | β | High | |||
| Open an existing file | β | High | |||
| Close an open file | β | Medium | |||
| Save a loaded file | β | High | |||
| Save a file with another name | β | High | |||
| Save as different panel type | β | Low | |||
| β | Low | ||||
| Print preview | β | Low | |||
| Print Setup | β | Low | |||
| Menu: Edit | |||||
| Selection Tool | β | High | |||
| Button Draw Tool | β | High | |||
| Show Grid | β | High | |||
| Snap to Grid | βοΈ | High | Works currently only on moving | ||
| Quick Input | β | Low | |||
| Undo | β | Medium | |||
| Redo | β | Medium | |||
| Cut | β | Medium | |||
| Copy | β | Medium | |||
| Paste | β | Medium | |||
| Replace | β | Medium | |||
| Delete | β | Medium | |||
| Rename | β | Medium | |||
| Find | β | Low | |||
| Find and Replace | β | Low | |||
| Select All | βοΈ | Medium | Works but is not well tested | ||
| Apply to All | β | Medium | |||
| Edit Previous | β | Low | |||
| Edit Next | β | Low | |||
| Preferences | β | High | |||
| Menu: Panel | |||||
| Add Page | βοΈ | High | Still errors on first creation | ||
| Add Popup Page | βοΈ | High | Still errors on first creation | ||
| Add Application Window | β | High | |||
| Edit Sub-Page Sets | β | Medium | |||
| Edit Drop-Target Groups | β | Low | |||
| Resource Manager | βοΈ | High | Undo/Redo is not implemented currently | ||
| Refresh Dynamic Images | β | Low | |||
| Edit Palettes | β | High | |||
| Export Page Images | β | Low | |||
| Verify Function Maps | β | Low | |||
| Verify Event Actions | β | Low | |||
| Synchronize Fonts | β | Low | |||
| Generate Programmer's Report | β | Low | |||
| View Conversion Log | β | Low | |||
| Delete Conversion Log | β | Low | |||
| Menu: Page | |||||
| Show Popup Page | βοΈ | High | Works only on double click on the name in page tree | ||
| Hide Popup Page | βοΈ | High | Works only on double click on the name in page tree | ||
| Hide all Popup Pages and Application Windows | β | High | |||
| Show Application Window | β | High | |||
| Hide Application Window | β | High | |||
| Show External Controls | β | High | |||
| Copy Image to Clipboard | β | Low | |||
| Menu: Button | |||||
| Reset Display | β | Low | May be removed because I see no need for this | ||
| Display Previous State | β | Medium | |||
| Display Next State | β | Medium | |||
| Choose Display State | β | Medium | |||
| Add States | β | High | |||
| Insert States | β | High | |||
| Animation Wizard | β | Low | |||
| Power Assign | β | Low | |||
| Paste Controls | β | Low | |||
| Preview | β | Low | Will work only together with TPanel | ||
| Menu: States | |||||
| Reverse States | β | Medium | |||
| Set As Display State | β | Low | |||
| Tweeners | β | Medium | |||
| Menu: Layout | |||||
| Bring to Front | β | High | |||
| Send To Back | β | High | |||
| Shift Button Up | β | High | |||
| Shift Button Down | β | High | |||
| Align | β | High | |||
| Center in Page | β | High | |||
| Make Same Size | β | High | |||
| Size To Image | β | High | |||
| Size for Video | β | Medium | |||
| Horizontal Spacing | β | High | |||
| Vertical Spacing | β | High | |||
| Alignment and Sizing | β | High | |||
| Menu: Transfer | |||||
| Connect | β | High | |||
| Disconnect From Master | β | Low | This will disconnect from TPanel only! | ||
| Send To Panel | β | High | |||
| Send File To Panel | β | High | |||
| Receive From Panel | β | Low | |||
| Redo Last Transfer | β | Medium | |||
| Cancel Transfer | β | Medium | |||
| Cancel All Pending Transfers | β | Medium | |||
| Clear Transfer | β | Low | |||
| Clear All Completed Transfers | β | Low | |||
| Close Status When Empty | β | Low | |||
| Menu: View | |||||
| Toolbars | βοΈ | High | There will be only one toolbar | ||
| Workspace | βοΈ | High | |||
| Properties | βοΈ | High | Not all settings are working currently | ||
| State Manager | β | High | |||
| Button Preview | β | Medium | |||
| Magnifier | β | Low | |||
| Transfer Status | β | Low | |||
| Status Bar | β | Medium | |||
| Dock All Floating Windows | β | Low | |||
| Property Painter | β | Low | |||
| Display Function And State Overlay | β | Medium | |||
| Errors and Warnings Report | β | Low | |||
| MDI Page Tabs | β | Low | May be removed because the implemented function is different | ||
| Customize | β | Low | |||
| Menu: Tools | |||||
| View Readme | β | Low | |||
| Paint | β | Low | Currently there's no decision which application to use on the different platforms. | ||
| G4 Utility | β | Very Low | May be removed | ||
| Menu: Window | |||||
| Zoom | β | Low | |||
| Stack | β | Low | |||
| Cascade | β | Low | |||
| Menu: Help | β | Low |
The program is developed in C++ under Linux and a Mac. It uses the Qt6 framework. If you like to help me develop it, you need a Linux machine or a Mac. You need to install the following packages:
- Qt6 (Get and install Qt)
- Fontconfig (part of distribution)
- Openssl (part of distribution)
- Freetype (part of distribution)
- Archive (part of distribution)
- Qt6 (Get and install Qt)
- Homebrew
The following packages should be installed in Homebrew:
- Fontconfig
- Openssl
- Freetype
- Archive
TSurface is internally divided into blocks to separate the parts. The following primitive ASCII graphic may give you an idea which parts exist and how they work together.
+--------------------------+ +------------------+ +--------------------------+
| Class: TWorkspaceHandler | | Class: TSurface | | MDI windows |
| Type: Singleton |<--->| Type: Main class |---->| Class: TCanvasWidget |
| +-----------------+ | +------------------+ | Class: TResizableWidget |
| | Workspace | | | Type: Graphical handling |
| | | | +--------------------------+
| | * Pages | | +----------------------+ |
| | * Function Maps | | | Class: TPageHandler | |
| +-----------------+ |<--->| Type: Singleton | |
| | | Purpose: Handles all | |
| +---------------+ | | kind of pages. | |
| | Properties | | +----------------------+ |
| | | | | |
| | * General | | β |
| | * Programming | | +-----------------------+ |
| | * States | | | Class: TObjectHandler | |
| | * Events | |<--->| Type: Singleton | |
| +---------------+ | | Purpose: Handles all |<-------------+
+--------------------------+ | object on any kind |
| of pages. |
+-----------------------+
I'm using the IDE from Qt called QtCreator. This makes it very easy to write the code and using the Qt framework. But you can also use the Qt version coming with your Linux distribution if it is not too old. I suggest to install the Qt framework.
On Linux compile and install the application by typing the following commands:
cmake -B build -S . -G Ninja -DCMAKE_PREFIX_PATH="/<path>/<to>/Qt/6.x.x/gcc_64/lib/cmake"
cmake --build build
sudo cmake --install build
Replace
/<path>/<to>/with the path to your Qt installation (usualy/opt/Qt).
cmake -B build -S . -G Ninja -DCMAKE_PREFIX_PATH="/<path>/<to>/Qt/6.x.x/macos/lib/cmake:/<path>/<to>/homebrew/lib/cmake"
cmake --build build
sudo cmake --install build
Replace
/<path>/<to>/with the path to your Qt installation and to homebrew (usualy$HOME/Qt,/opt/homebrew).
You'll find the application in build/tsurface.app/Contents/MacOS/tsurface. Start it from the command line like:
build/tsurface.app/Contents/MacOS/tsurface