I’m seeing a lot of requests for global operations. Here are a couple examples of challenges that I’ve faced, in addition to the common text search/replace requested many times.
In a project for a website I have a browser container on every mockup. It’s positioned at 20,20. I’d like a way to reposition “the browser at 20,20 and all controls that appear within the scope of that control” to 1,1? By “scope” I mean any control that intersects with the base control regardless of it’s front/back Z level. This would include a Comment control that’s half on/off the browser.
Or … “Shift the x,y for all controls by -19,-19”?
Within each browser I have a consistent header position. To establish consistency through the entire project, I made the browser a symbol, added the header, and in each mockup removed the browser and header controls and replaced them with an instance of the new symbol. That’s a huge hassle. It would have been easier to have had a query to say in effect :
- select all mockups, and in each mockup…
- delete all Browser controls
- find Title controls within 0,0 to 900,150, delete
- add MyBrowser symbol
- position MyBrowser instance to 20,20
Is this the beginning of BQL … the Balsamiq Query Language?
To my understanding from this thread, we’re now working in SqlLite rather than BMML, no? Maybe it’s time to expose a definition of how that’s structured. Then even if there is no official BQL, we might be able to create our own external libraries which use queries to do global operations like this.
As a developer, a few years ago I already create a utility that manipulated BMML for myself. (I really should have published that.) But now I would still relish the idea of creating and using (and selling?) external tools to manipulate Balisamiq project files. This would be a huge gain for Peldi and company as it would establish a sort of third-party market/community around the platform rather than taking on the burden of making every change internally to the product. Consider this request for text variables, which could easily be implemented externally, but it’s been on the ToDo list for Balsamiq for a couple years.
To get moving, perhaps we could have a separate area to discuss internal structures, and maybe come up with an API which can be implemented by anyone to manipulate the files? Balsamiq doesn’t need to accept responsibility for third-party products. And there is no vulnerability here. Balsamiq can be like any other product that offers extensibility, which most of us use and understand. If the company doesn’t want to participate in this there actually isn’t a need. Any developer could really look at the files, work out the structures, and then create custom tools, just like I did for BMML. But encouragement and nurturing from Balsamiq would be much better in the eyes of Marketing and the community perception of such initiatives.
I understand that the product is supported on multiple platforms and that this isn’t a global solution. People on different platforms will still be looking for specific functionality. But until some functionality is available for everyone, why inhibit everyone from having features that they could probably get much sooner?
How about it @peldi?