🏡 index : quine-global-labs/bazaar.git

using Gtk 4.0;

template $BzInstalledTile: $BzListTile {
  accessibility {
    labelled-by: title_label;
    described-by: description_label;
  }

  child: Box {
    orientation: horizontal;
    spacing: 10;

    $BzTransactIcon {
      margin-start: 10;
      margin-top: 10;
      margin-bottom: 10;
      width-request: 64;
      height-request: 64;
      valign: center;
      halign: center;

      info: $BzTransactIconInfo {
        group: bind template.group as <$BzEntryGroup>;
        paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable;
      };
    }

    Box {
      orientation: vertical;
      valign: center;
      spacing: 4;

      Label title_label {
        xalign: 0.0;
        ellipsize: end;
        single-line-mode: true;
        tooltip-text: bind template.group as <$BzEntryGroup>.id;
        label: bind template.group as <$BzEntryGroup>.title;
      }

      Label description_label {
        halign: start;
        ellipsize: end;
        single-line-mode: true;
        label: bind $format_description(template.group as <$BzEntryGroup>.installed-size, template.group as <$BzEntryGroup>.installed-versions) as <string>;
        styles ["dimmed", "caption", "installed-size"]
      }

      Label {
        xalign: 0.0;
        ellipsize: end;
        single-line-mode: true;
        visible: bind template.group as <$BzEntryGroup>.installed-eol;
        label: _("Stopped Receiving Updates");
        styles ["warning", "caption"]
      }
    }

    Button support_button {
      styles [
        "circular",
        "flat",
        "suggested-action",
        "support"
      ]

      tooltip-text: bind template.group as <$BzEntryGroup>.donation-url;

      width-request: 32;
      height-request: 32;
      valign: center;
      icon-name: "heart-filled-symbolic";
      visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.donation-url) as <bool>) as <bool>;

      clicked => $support_cb() swapped;

      accessibility {
        label: _("Donate");
      }
    }

    Box {
      orientation: horizontal;
      spacing: 8;
      margin-end: 8;
      hexpand: true;
      halign: end;

      Button addons_button {
        styles [
          "flat"
        ]

        tooltip-text: _("Manage Add-Ons");
        visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.n-addons as <int>) as <bool>) as <bool>;
        valign: center;
        icon-name: "application-x-addon-symbolic";

        clicked => $install_addons_cb() swapped;
      }

      Button remove_button {
        styles [
          "flat",
        ]

        tooltip-text: _("Remove");
        valign: center;
        icon-name: "user-trash-symbolic";
        visible: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable) as <bool>) as <bool>;
        sensitive: bind $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable-and-available) as <bool>) as <bool>;

        clicked => $remove_cb() swapped;
      }

      Image {
        pixel-size: 14;
        icon-name: "go-next-symbolic";
        margin-end: 4;
        styles ["dimmed"]
      }
    }
  };
}