Get meta data per sidebar view in sidebar view model

This commit is contained in:
ChrisTerBeke 2017-12-04 12:37:29 +01:00
parent f2b4cbe182
commit 713055e320
3 changed files with 55 additions and 4 deletions

View file

@ -13,4 +13,42 @@ class SidebarViewModel(ListModel):
def __init__(self, parent = None):
super().__init__(parent)
self._controller = Application.getInstance().getSidebarController()
# register Qt list roles
self.addRoleName(self.IdRole, "id")
self.addRoleName(self.NameRole, "name")
self.addRoleName(self.ActiveRole, "active")
## Update the model when new views are added or another view is made the active view.
def _onSidebarViewsChanged(self):
items = []
sidebar_views = self._controller.getAllSidebarViews()
current_view = self._controller.getActiveSidebarView()
for sidebar_view_id, sidebar_view in sidebar_views.items():
plugin_metadata = PluginRegistry.getInstance().getMetaData(sidebar_view_id)
if plugin_metadata:
# Check if the registered view came from a plugin and extract the metadata if so.
sidebar_view_metadata = plugin_metadata.get("sidebar_view", {})
else:
# Get the meta data directly from the plugin
sidebar_view_metadata = sidebar_view.getMetaData()
# Skip view modes that are marked as not visible
if "visible" in sidebar_view_metadata and not sidebar_view_metadata["visible"]:
continue
name = sidebar_view_metadata.get("name", id)
weight = sidebar_view_metadata.get("weight", 0)
items.append({
"id": sidebar_view_id,
"name": name,
"active": sidebar_view_id == current_view.getPluginId(),
"weight": weight
})
# Sort the views by weight
items.sort(key=lambda t: t["weight"])
self.setItems(items)