I have been working with Nextion IDE for a month, but there are some very very missing features in the "scripting" language, and IDE:
- text value indexing:
- "function" node: if i would like to use code sequences more times
now i have to hacking with timer, bugging the tim.en property.
- there is no indirection between functions, and variables:
page 1 // works
page next_page //
page va0.txt // does not work
page va0.val // does not work
- I have a page where user can modify parameters. I would like to use this page from different pages.
- I would like to store in variable the name or id of the parent page, and then user push OK or CANCEL button jump back to the page where I came from.
It's very basic but I have to hack it with totally unnecessary duplication of the setup pages... If there will be change on setup pages, i have to do changes multiple times...
- array type of variable object would be very useful:
If I do a list or combo, or wheel control like advance control for parameter changing, selecting, I had to hack code with long long if.. then... case sequences, with a lot of hard wired strings, or values. :(
This missing stuff can solve a lot of problem with one shot...
Of course indexing possibility is needed, like va0[idx].val.
- Antialiased generated text: Texts would be more nice looking, and not poping out when I mixing texts with bitmap based gui.
- Color Variable, Color Array, or/and directly editable color int field, or/and better colorpicker: Less Sweat!
- Escape sequences, useful excapesequence: minimum requirement \r \n
- Inverted text ( not vital, but sometimes useful ): on full text-like controls, or with in-text inverting on/off escape squence like \i1 (inverting on), \i0 (inverting off).
Full text inverting useful if I would like to "flash" text.
Escape on/off like intext,subtext inverting, highlighting, flashing can be useful aswell. Nowadays I tried to do textbox field with minimal keypad view, but I can't do easy way, only HACK,HACK,HACK, because no tools in my hands of text indexing, subcripting, substring, and cursor-like effect. Subtext inverting, inverting the current character in the text control useful for cursor-like effect...
- TOP global variables: not the part of the page, can be accessible from every page not in this form page0.myGlobalVariable, only myGlobalVariable keyword is needed.
- Popup-like page: Controls layout of the page can be show over the actual page like a popup window. Can be hacked with vis ctr,x command, but not too elegant. And "popup" controls hides the underlying ones...
These are my missing features in nextion IDE, but very COOL and I like so much!
I hope that, the time will come in some months or years, when all of these kind features will have been already built in nextion IDE.
ps: sorry for my english, not my primary language.
Such a long list of requests =) I will attempt to address all. Allow me a moment
The first understandings that the current Nextion firmware is actually implemented in such a small space and on a more limited MCU than a desktop computer has to be taken into consideration. In this regard it is not a "scripting language" but a series of text based commands. So somethings would most definitely not be possible, and others may be possible but by ditching some existing functionalities.
1) Text value indexing, might perhaps be a possible recommendation as t0.txt, but for parsing on the index and other much more advanced use, would consume more firmware space than desired.
2) the "function" node - yeah, certainly harder to implement a user function, it would have to work within the non complex expressions that exist, parsing becomes an issue again. Certainly easier to hack a hotspot and use the click command to trigger - providing two such "function" holders.
3) dp is a system variable for the current page. The page command if not taking the page component .objname attribute most certainly requires a numeric value. dp=va0.val certainly works where page va0.val does not. Variables can be called and set on a single page by setting them to global and then used from other pages. In one such project I do this. In your "settings" page, also capture the page to return to prior to jumping to your settings page, then once complete, return to the calling page. I refuse to duplicate the pages unnecessarily - so I will reuse the same page and return to the calling page.
4) there is one component array that works with all the components. This is the b[id] array. To simulate an array of checkboxes, the checkbox .id values need to be sequential. This may require using the arrow up and arrow down bring Top/Bottom to accomplish this sequential requirement. Then it becomes a b[x+offset].attribute access. All that this really accomplishes is being able to access the components by numbers rather than by looking up the components' .objname - many mistakes are probable if not exercising care - perhaps advanced, not all components contain the same attributes - failure is quick.
5) I believe that anti-aliased text is beyond possibility. The graphics routines required would chew up more firmware space than desired - and for so little gains. However, following some of the concepts employed in anti-aliasing, choosing your text .pco colors more carefully as to not pop as hard is within user control.
6) This is certainly on the list of features being considered and has already been relayed to the development team. Perhaps this one maybe realized shortly.
7) Escape has already been implemented in a minimalistic fashion. \r is recognized in a .txt assignment as in the example t0.txt="new\rtxt", but not within the editor. The current request to expand this is presently being begged for including the \x extension to access upper ascii characters.
8) Inverting is probably not going to be one of the escape sequences making the cut. This requires much more parsing and additional code. Flashing can be achieved, but more crafty approaches required.
9) The HMI design is by components, the page component being the first in the list until the next page component is encountered. Changing pages, dumps the loaded page to make space for the next page. Setting a components .vscope attribute global does save the .txt or .val attribute in space outside the page, so this is indeed implemented, but will still require the page0 or like to be prefixed.
10) Not so much of a fan of pop-ups ... I would opt for a full screen page change and return over deploying so many other components for a mere visual effect.
So some of these have been implemented, some there are means to accomplish, some are unlikely. But when considering the small MCU that Is actually driving the HMI - it is rather impressive. Over time, it does get better. Most feature requests that benefit all user HMI implementations have the better chances of being adopted - those with specialized and few will force less HMI firmware space on those who have no need. If it can already be accomplished via code, this still leaves the firmware space untouched.
Your recommendations have been noted
Thanks you very much for this detailed explanation.
hey, it is our pleasure and passion to help where we can ... not everything is possible, but we try our best ...
Have fun with your Nextion
Nonsense! Is it a trivial, simple, primitive error, or is there another method for concatenating strings, characters, that works?
Patrick! Could you please help me?!
I am getting fed up with always HACKING! :)
str.txt=t0.txt // a text variable
Oh, it works! LOL! So ugly, but I did! :)
Low level programming rules! :) Old great memories...
This is in our list of "known bugs". First realize that there are no complex statements.
The second version works because you are not using an assign-to-self expression
Personally, I don't find it hacking anymore. My expectations align more and more with
mcu logic and less and less of desktop logic.
it is kind of like when you use an HP-42S Calculator and are faced with RPN, it isn't the
calculator that is screwed up, its the methodology IS different.
Likewise when you learn to work with it, better things happen
Although this would give a different answer on a desktop ...
it is because of the "no complex expressions" that it unfolds as
Once you see what it happening it is easier to build expressions in less keystrokes
I would like to use custom, user defined response like: print "\x65\x80\x05\x00\xff\xff\xff"
Can I do it any way in this format?
If I can not, It would be a great New Feature!
The \x escape sequence is already on the list \xFF
However, your print it is already implemented:
printh 65 80 05 00 FF FF FF