Tool [B4X] JsonLayouts - synchronize json and binary layouts

The purpose of this tool is to automatically generate json layout files, and synchronize them as they are updated. This can be useful when working with a source control and especially when multiple developers work on the same project.

Usage:
1. Download jar and put in additional libraries folder: https://www.b4x.com/b4j/files/JsonLayouts.jar
2. Add this code to Main module:
B4X:
#Macro: After Save, Sync Layouts, ide://run?File=%ADDITIONAL%\JsonLayouts.jar&Args=%PROJECT%&Args=%PROJECT_NAME%
#Macro: Title, JsonLayouts folder, ide://run?File=%WINDIR%\explorer.exe&Args=%PROJECT%\JsonLayouts

The tool will run whenever the project is saved, and that includes running the project if "auto save" is enabled.
A folder named JsonLayouts will be created with the json layouts (Ctrl + 1 will open it). The files will be synchronized when the layouts are updated.

Notes
- The synchronization is at the file level, which means that if both the binary layout and the json layout are updated at the same time, then the tool will show a message about a conflict and will not make any change.
- There is a notion of the layout owner which is the source of the last conversion. If the owner is deleted then the converted layout is also deleted (moved to recycle bin).
- As this tool is compatible with B4A, B4J and B4i, it is recommended to put the jar in the B4X additional folder (https://www.b4x.com/android/forum/threads/b4x-additional-libraries-folder.103165/#content) and change the "After Save" macro to (thanks @aeric ):
B4X:
#Macro: After Save, Sync Layouts, ide://run?File=%ADDITIONAL%\..\B4X\JsonLayouts.jar&Args=%PROJECT%&Args=%PROJECT_NAME%

The B4J code is attached.
 

Attachments

  • JsonLayouts.zip
    6.3 KB · Views: 256
Last edited:

aeric

Expert
Licensed User
Longtime User
Then it would be better to put it in the B4X folder and edit the macro, right?
Some B4X developers work only on a single platform.
If he/she is only working on B4A, he/she can just put the jar in the additonal libraries folder of B4A.
For me, yes because I work with more than 1 platform.
Some B4X developers may not have the B4X additional folder. It is just a recommended folder structure but not mandatory.
 

aeric

Expert
Licensed User
Longtime User
3. Only from @aeric's post did I understand that B4J JSON files are also created (I think).
Yes, the purpose of this tool; to create the JSON files for B4A / B4i / B4J.
From the source code, you can notice this line:
B4X:
For Each extension As String In  Array(".b4a", ".b4j", ".b4i")
So it means it is a tool for these 3 platforms.

Edit: And also the title has emphasized that it has [B4X] prefix.

Tool [B4X] JsonLayouts​


If you are curious then study further what the rest of the code do in this tool.
 

aeric

Expert
Licensed User
Longtime User
4. bal to bil and vice versa (on site), but this also creates bjl (?!)
This tool has nothing to do with the conversion between bal to bil.
Maybe previous questions by other members made a little confusion.
The main purpose of this tool is explained in the first 2 lines of the first post.
 

aeric

Expert
Licensed User
Longtime User
5. The project contains a BalConverter class; so? It only converts bal files?
I think this is a hidden bonus. 😅

I may want to agree with you, Erel should have clarified that BalConverter is also converting BJL (and BiL!) and hence

[B4X] BalConverter - Convert the layouts files to JSON (and vice versa)​

should retitled as

[B4X] BxlConverter - Convert the layouts files to JSON (and vice versa)​


Edit: Or better just call it Layout2JsonConverter
Maybe Erel's decsion not to rename it is due to historical reason and it could break existing projects.

 

LucaMs

Expert
Licensed User
Longtime User
O.T.

That dear Copilot wrote a class for me that generates a text file (with TABs, useful for Excel) based on those JSON files.
Copilot took 2 seconds, maybe less! :confused:

1771839466919.png
 
Last edited:
Top