Giter VIP home page Giter VIP logo

davetcc / tcmenu Goto Github PK

View Code? Open in Web Editor NEW
274.0 274.0 25.0 13.01 MB

Menu library for Arduino, mbed and ESP with designer UI and remote control capabilities.

Home Page: https://www.thecoderscorner.com/products/arduino-libraries/tc-menu/

License: Apache License 2.0

C++ 5.24% Java 93.58% CSS 0.10% C 0.82% Inno Setup 0.07% Batchfile 0.01% HTML 0.10% Shell 0.01% CMake 0.06%
arduino iot mbed menu menu-tree oled remote-control rs232 tft

tcmenu's People

Contributors

davetcc avatar dependabot[bot] avatar ptapping avatar vzahradnik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tcmenu's Issues

Minor improvements to editor and controller UI usability

There are a number of minor improvements needed in both UI's

  • Make the controller UI production ready by making editability better, and use a sustainable method of handling updates.
  • Add new sub-menus to the designer UI for recently edited projects, all sketch directories that contain menu (EMF) files and all examples packed in tcMenu.
  • Auto save after generation, source of lost changes!
  • Ensure structure is not dirty before any menu load operation

For visual micro compatibility the menu definition files need to be changed

In order to compile in visual micro the .cpp and .h files containing the menu definition (which are currently the same name as the project) need to be renamed. They will be renamed in 1.2 to projectName-menu.h & cpp

This needs to be done in each of the examples too in order to avoid confusion. A note on the release must indicate that the old files be removed.

TcMenu generator not able to express lcd backlight

At the moment the combination of no backlight setting on LiquidCrystalIO and no option for it in the generator means it is not possible to set the backlight out of the box.

The workaround is to manually set the backlight on the IO device by keeping a reference to it, and setting the backlight pin as output with the appropriate setting.

Support the notion of read-only and local-only in the designer

The designer should be able to set the read-only and local-only status of any menu item and create code for that case.

This is in progress, so far done is the work in the UI to render the extra fields and the work in the API to hold these fields.

Left to do, change the generator to generate suitable code.

Embedded code wont compile without AdaFruitGFX and AT24Cx libraries

At the moment there is an oversight in the distribution and library structure. This means that AT24Cx and AdaFruitGFX libraries always must be on the path, but are not included with tcMenu / IoAbstraction. Workaround: copy these two libs into your libraries directory manually for now..

AT24:
Look into how to package AT24Cx as part of TcMenu and IoAbstraction such that no such installation problems are

AdaGFX:
Move the renderer into a separate module of it's own, or look at making the renderer so that it's copied into the users program directory with sensible defaults. This would make more sense as then custom rendering is much easier, and will probably be quite common.

Generated Menu item names should include submenu

When naming a menu variable it should include the submenu for example

If the submenu were named settings and the item named contrast:

menuSettingsContrast.

To be determined: should only the immediate submenu be included in this or every submenu back to root? Doing recursive back to root would end up with

menuSettingsAdvancedItemName.

One option would be a setting to control this that had three options:

  • Do not include submenu name
  • Include only nearest submenu name
  • recursively include all submenu names.

Completely decouple CPP language from the menu structure generator

The last area of hardwired code generation is in the menu structure initializers in the Java generation code. This needs to be replaced with a more generic system that will make it cleaner on 32-bit boards, especially ESP8266 where the compiler really doesn't like all the progmem declarations (which make no sense on 32-bit boards that are not Harvard arch. anyway.

The embedded arduino code should have basic unit tests

Common theme here, the Arduino code should have some basic unit tests that provide a degree of confidence that the library is working properly. To start with maybe something that confirms proper functioning of the menu manager / items would be enough.

Dependence on availableForWrite being available in core on Stream class.

Not really a bug, but something to look at in that there is a dependence on a very recent commit to the Print.h file - availableForWrite.

See how things pan out to see if its supported on at least AVR, SAMD and ESP8266.
Workaround: go to board manager in your IDE (Arduino IDE at the top of the board options) and update your boards.

The main dialogs and controllers should be tested using integration tests.

Given that the UI Generator has now become pretty much the defacto way to generate menus, at least a degree of testing needs to be added to it, to provide some degree of automated testing, saving a lot of time during release, and increasing confidence in release quality.

This first JIRA should set the stage by testing some core flows in the UI, along with the other associated JIRA that will ensure the generator itself is fully tested.

Issue with editing the name on large menu structures in UI

It appears that on large menu structures the name editing does not work as expected. The below appears to work on smaller menus, but the menu in question is quite large. Create a unit test that tests this case with over 200 items in three level nestings.

Copied from forum:

  1. I have an item named "1Light 1".
  2. I backspace the first "1" so it looks like "Light 1".
  3. I type "1" and only the entry field updates everything else still says "Light 1".
  4. I type "0" after the "1" and everything updates and says "10Light 1".
  5. I backspace the "0" and only the field updates to "1Light 1". Everything else looks like "10Light 1".
  6. I backspace the "1" and everything updates to "Light 1".
  7. I write "1" once more to try to get to my original "1Light 1" but it only shows up in the field everything else says "Light 1"

Support ESP8266 WIFI chip

Support the ESP 8266 wifi chip integrating with the example.

This should be able to configure and use the ESP8266 based wifi library.

In the example app, show how to indicate using an icon if there's a connected client, and indicate the signal strength.

Complete the plugin refactoring in designer

The designer UI plugin facilities should be completed so that they can be shipped in separate jar files completely separate to the main UI. It is still an open question if one or more than one should be used for the initial basic set.

These plugins will contain all the code generators for displays, remotes and input. These will be automatically added to the Code generator. The idea of an I’d will be replaced by uuid, making it easy to handle shared plugins.

One of the open source projects should be used as the exemplar for others building a plugin.

Add menuitem types for Floats, Remote status and Action types

Float menu item: read only item that is backed by a floating point 32 bit value. Useful for status etc. Number of decimal places should be settable.

Remote menu item: for rendering information about who's connected remotely onto the menu itself.

Action menu item: for cases where no state is needed, just fire an event when selected.

Add capability for menu to be controlled remotely by RS232

We need to write a connector facility into the menu that allows them to be controlled remotely. Initial implementation will be RS232 with the Java API publicly available.

Initial protocol will be a text based protocol using simple tag value pairs that is very easy to decode. This will also allow other languages with less competent network and byte order handling to have easy APIs.

The remote layer and protocol shall be replaceable at runtime, such that other implementations can be later added.

Productionise the protocol ready for wider usage

For remote connections there are a few things that need to happen to make it production ready. These are listed below:

  • A basic level of authentication should be available that at least uses a key or pass-code before accepting connections. This is not for over internet situations, rather just for simple LAN security.
  • Each menu should have a UUID generated by the designer application, this should never change during the application lifetime.
  • When a menu item is updated remotely, the server should respond with a special update that also forms as an acknowledgment too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.