I’m curious about comparing Filmulator to other photo editors’ code architecture.
One part of the benefit of open source is that we can steal algorithms from each other, but another is that if you don’t want to start your own project, it’s conceivable to add your own functionality to existing software if you’re so inclined.
Two days ago, in about an hour’s work, I added a new small feature to Filmulator, which is an option to append a hash to every filename on import. While simple as far as features go, it made me wonder what a new contributor would experience in trying to add a feature of the same scale.
In Filmulator, each tab of the interface has its own UI markup file, a Qt model as the backend, and some things access a persistent settings object. So here’s what needed to be made:
- Add a ToolSwitch (standardized switch UI element) to the Import tab; base the implementation directly on the adjacent “enqueue on import” switch.
- Add a new q_property “appendHash” to the ImportModel, which entails making a member variable, getter, setter, and signal, and declaring it as a q_property.
- Add the same to the settings object, but this time the getter and setter are more complicated and access the settings.
- Add the actual functionality, which involved in this case changing a structure, several function signatures, and actually writing the code that derives base-62 from the MD5 and appends it to the filename.
It’s slightly harder to create a new photo editing tool that doesn’t exist, because instead of adding a settings property you have to actually change the database schema to accommodate.
On the other hand, there are smaller UI features that could be added with no C++ at all, in as little as five or ten minutes, provided you are familiar with QML.
Developers: how involved would it be to add a new tool to your editor for someone unfamiliar?
How complicated does Filmulator sound to you?