Components:
Components are the highest-level building-blocks in Kube. Components are individually loadable, always contain a main.qml and have a purpose. Typical components could be:
- Kube.Components.Main: The complete application
- Kube.Components.Mail: The mail view only.
- Kube.Components.Calendar: The calendar view only
- Kube.Components.CalendarView: A calendar view (as in the monthview itself).
- Kube.Components.MailView: View of an individual mail
- Kube.Components.PersonView: View of an individual person.
Components can provide different versions for different formfactors (mechanism is yet to be defined though).
Components are loadable by external applications as well.
Framework:
The framework provides the building blocks to create the components.
It consists of QML files, C++ qml plugins and additional C++ code to support those plugins.
The framework is always imported as "Kube" in all qml code.
Things the framework provides:
- Kube.Theme
- Kube.Icon
- Kube.Button
- Kube.Maillist
- Kube.Folderlist
- Kube.Action
- Kube.Notification
The framework doesn't contain additional structure because it is largely useless:
- Differentiating between different domains (mail/calendar/...) is not overly useful as we want to move a model where we differentiate less between them, and we will inevitably run into situations where we have parts that fit into any of them.
- A controls component could work, but doesn't provide any additional useful information. The buttons, icons, ... are by definition kube specific and Kube.Controls.Button doesn't add anything over Kube.Button (except more import statements)
- Unless we have large parts of functionality that we only want to load conditionally we can just as well have everything in on blob.