+ if (role == Qt::DisplayRole) {
+ return item->description;
+ } else if (role == Qt::DecorationRole) {
+ return item->thumbnail();
+ } else if (role == AircraftPathRole) {
+ return item->path;
+ } else if (role == AircraftAuthorsRole) {
+ return item->authors;
+ } else if ((role >= AircraftRatingRole) && (role < AircraftVariantDescriptionRole)) {
+ return item->ratings[role - AircraftRatingRole];
+ } else if (role >= AircraftThumbnailRole) {
+ return item->thumbnail();
+ } else if (role == AircraftPackageIdRole) {
+ // can we fake an ID? otherwise fall through to a null variant
+ } else if (role == AircraftPackageStatusRole) {
+ return PackageInstalled; // always the case
+ } else if (role == Qt::ToolTipRole) {
+ return item->path;
+ }
+
+ return QVariant();
+}
+
+QVariant AircraftItemModel::dataFromPackage(const PackageRef& item, quint32 variantIndex, int role) const
+{
+ if (role == Qt::DisplayRole) {
+ return QString::fromStdString(item->description());
+ } else if (role == AircraftPathRole) {
+ // can we return the theoretical path?
+ } else if (role == AircraftPackageIdRole) {
+ return QString::fromStdString(item->id());
+ } else if (role == AircraftPackageStatusRole) {
+ bool installed = item->isInstalled();
+ if (installed) {
+ InstallRef i = item->existingInstall();
+ if (i->isDownloading()) {
+ return PackageDownloading;
+ }
+ if (i->hasUpdate()) {
+ return PackageUpdateAvailable;
+ }
+
+ return PackageInstalled;
+ } else {
+ return PackageNotInstalled;
+ }
+ }
+
+ return QVariant();
+}