Added links to toolbox

CURA-5676
This commit is contained in:
Aleksei S 2018-08-31 11:03:30 +02:00
parent ed5faae0b9
commit 9258c9a7fc
3 changed files with 111 additions and 21 deletions

View file

@ -82,9 +82,16 @@ Item
} }
spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) spacing: Math.floor(UM.Theme.getSize("narrow_margin").height)
width: childrenRect.width width: childrenRect.width
Label Label
{ {
text: catalog.i18nc("@label", "Contact") + ":" text: catalog.i18nc("@label", "Website") + ":"
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text_medium")
}
Label
{
text: catalog.i18nc("@label", "Email") + ":"
font: UM.Theme.getFont("very_small") font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text_medium") color: UM.Theme.getColor("text_medium")
} }
@ -100,6 +107,26 @@ Item
topMargin: UM.Theme.getSize("default_margin").height topMargin: UM.Theme.getSize("default_margin").height
} }
spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) spacing: Math.floor(UM.Theme.getSize("narrow_margin").height)
Label
{
text:
{
if (details.website)
{
return "<a href=\""+details.website+"\">Link</a>"
}
else
{
return ""
}
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
linkColor: UM.Theme.getColor("text_link")
onLinkActivated: Qt.openUrlExternally(link)
}
Label Label
{ {
text: text:
@ -110,7 +137,7 @@ Item
} }
else else
{ {
return "<a href=\""+details.website+"\">"+details.name+"</a>" return ""
} }
} }
font: UM.Theme.getFont("very_small") font: UM.Theme.getFont("very_small")

View file

@ -8,7 +8,31 @@ import UM 1.1 as UM
Item Item
{ {
id: base
property var packageData property var packageData
property var technical_data_sheet_url
function initiazeLinks()
{
var all_links = packageData.links
for(var index = 0; index < all_links.length; index++)
{
var temp_link = all_links[index]
var title = temp_link["title"]
if(title === "Technical Data Sheet")
{
base.technical_data_sheet_url = temp_link["url"]
}
}
}
Component.onCompleted:
{
initiazeLinks()
}
anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.topMargin: UM.Theme.getSize("default_margin").height
height: visible ? childrenRect.height : 0 height: visible ? childrenRect.height : 0
visible: packageData.type == "material" && packageData.has_configs visible: packageData.type == "material" && packageData.has_configs
@ -132,4 +156,27 @@ Item
width: Math.floor(table.width * 0.1) width: Math.floor(table.width * 0.1)
} }
} }
Label
{
id: technical_data_sheet
anchors.top: table.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height / 2
visible: base.technical_data_sheet_url !== undefined
text:
{
if (base.technical_data_sheet_url !== undefined)
{
return "<a href='%1'>%2</a>".arg(base.technical_data_sheet_url).arg("Technical Data Sheet")
}
return ""
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
linkColor: UM.Theme.getColor("text_link")
onLinkActivated: Qt.openUrlExternally(link)
}
} }

View file

@ -7,6 +7,7 @@ from typing import Dict
from PyQt5.QtCore import Qt, pyqtProperty from PyQt5.QtCore import Qt, pyqtProperty
from UM.Qt.ListModel import ListModel from UM.Qt.ListModel import ListModel
from .ConfigsModel import ConfigsModel from .ConfigsModel import ConfigsModel
from UM.Logger import Logger
## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed.
class PackagesModel(ListModel): class PackagesModel(ListModel):
@ -34,6 +35,8 @@ class PackagesModel(ListModel):
self.addRoleName(Qt.UserRole + 17, "supported_configs") self.addRoleName(Qt.UserRole + 17, "supported_configs")
self.addRoleName(Qt.UserRole + 18, "download_count") self.addRoleName(Qt.UserRole + 18, "download_count")
self.addRoleName(Qt.UserRole + 19, "tags") self.addRoleName(Qt.UserRole + 19, "tags")
self.addRoleName(Qt.UserRole + 20, "links")
self.addRoleName(Qt.UserRole + 21, "website")
# List of filters for queries. The result is the union of the each list of results. # List of filters for queries. The result is the union of the each list of results.
self._filter = {} # type: Dict[str, str] self._filter = {} # type: Dict[str, str]
@ -45,10 +48,18 @@ class PackagesModel(ListModel):
def _update(self): def _update(self):
items = [] items = []
#If a user has a slow internet connection then the metadata might be None
if self._metadata is None:
Logger.logException("w", "Failed to load packages for Toolbox")
self.setItems(items)
return
for package in self._metadata: for package in self._metadata:
has_configs = False has_configs = False
configs_model = None configs_model = None
data_links = []
if "data" in package: if "data" in package:
if "supported_configs" in package["data"]: if "supported_configs" in package["data"]:
if len(package["data"]["supported_configs"]) > 0: if len(package["data"]["supported_configs"]) > 0:
@ -56,6 +67,8 @@ class PackagesModel(ListModel):
configs_model = ConfigsModel() configs_model = ConfigsModel()
configs_model.setConfigs(package["data"]["supported_configs"]) configs_model.setConfigs(package["data"]["supported_configs"])
data_links = package['data']['links'] if 'links' in package['data'] else []
if "author_id" not in package["author"] or "display_name" not in package["author"]: if "author_id" not in package["author"] or "display_name" not in package["author"]:
package["author"]["author_id"] = "" package["author"]["author_id"] = ""
package["author"]["display_name"] = "" package["author"]["display_name"] = ""
@ -80,9 +93,12 @@ class PackagesModel(ListModel):
"has_configs": has_configs, "has_configs": has_configs,
"supported_configs": configs_model, "supported_configs": configs_model,
"download_count": package["download_count"] if "download_count" in package else 0, "download_count": package["download_count"] if "download_count" in package else 0,
"tags": package["tags"] if "tags" in package else [] "tags": package["tags"] if "tags" in package else [],
"links": data_links,
"website": package["website"] if "website" in package else None,
}) })
# Filter on all the key-word arguments. # Filter on all the key-word arguments.
for key, value in self._filter.items(): for key, value in self._filter.items():
if key is "tags": if key is "tags":