void ShowAddin(object data)
{
AddinHeader sinfo = null;
Addin installed = null;
AddinHeader updateInfo = null;
string repo = "";
string downloadSize = null;
topHeaderBox.Hide ();
if (data is Addin) {
installed = (Addin) data;
sinfo = SetupService.GetAddinHeader (installed);
var entry = GetUpdate (installed);
if (entry != null) {
updateInfo = entry.Addin;
selectedEntry.Add (entry);
}
foreach (var prop in sinfo.Properties) {
if (prop.Name.StartsWith ("PreviewImage"))
previewImages.Add (new ImageContainer (installed, prop.Value));
}
string icon32 = sinfo.Properties.GetPropertyValue ("Icon32");
if (icon32.Length > 0)
titleIcon = new ImageContainer (installed, icon32);
}
else if (data is AddinRepositoryEntry) {
AddinRepositoryEntry entry = (AddinRepositoryEntry) data;
sinfo = entry.Addin;
installed = AddinManager.Registry.GetAddin (Addin.GetIdName (sinfo.Id));
if (installed != null && Addin.CompareVersions (installed.Version, sinfo.Version) > 0)
updateInfo = sinfo;
selectedEntry.Add (entry);
string rname = !string.IsNullOrEmpty (entry.RepositoryName) ? entry.RepositoryName : entry.RepositoryUrl;
repo = "<small><b>" + Catalog.GetString ("Available in repository:") + "</b>\n" + GLib.Markup.EscapeText (rname) + "\n\n</small>";
foreach (var prop in sinfo.Properties) {
if (prop.Name.StartsWith ("PreviewImage"))
previewImages.Add (new ImageContainer (entry, prop.Value));
}
string icon32 = sinfo.Properties.GetPropertyValue ("Icon32");
if (icon32.Length > 0)
titleIcon = new ImageContainer (entry, icon32);
int size;
if (int.TryParse (sinfo.Properties.GetPropertyValue ("DownloadSize"), out size)) {
float fs = ((float)size) / 1048576f;
downloadSize = fs.ToString ("0.00 MB");
}
} else
selectedEntry.Clear ();
if (installed != null)
selectedAddin.Add (installed);
string missingDepsTxt = null;
if (sinfo == null) {
btnDisable.Visible = false;
btnUninstall.Visible = false;
btnUpdate.Visible = false;
} else {
string version;
string newVersion = null;
if (installed != null) {
btnInstall.Visible = false;
btnUpdate.Visible = updateInfo != null && AllowInstall;
btnDisable.Visible = true;
btnDisable.Label = installed.Enabled ? Catalog.GetString ("Disable") : Catalog.GetString ("Enable");
btnDisable.Visible = installed.Description.CanDisable;
btnUninstall.Visible = installed.Description.CanUninstall;
version = installed.Version;
var missingDeps = Services.GetMissingDependencies (installed);
if (updateInfo != null) {
newVersion = updateInfo.Version;
labelHeader.Markup = "<b><span color='black'>" + Catalog.GetString ("Update available") + "</span></b>";
// topHeaderBox.BackgroundColor = new Gdk.Color (0, 132, 208);
imageHeader.Pixbuf = Gdk.Pixbuf.LoadFromResource ("update-16.png");
topHeaderBox.BackgroundColor = new Gdk.Color (255, 176, 0);
topHeaderBox.Show ();
}
else if (missingDeps.Any ()) {
labelHeader.Markup = "<b><span color='black'>" + Catalog.GetString ("This add-in can't be loaded due to missing dependencies") + "</span></b>";
topHeaderBox.BackgroundColor = new Gdk.Color (255, 176, 0);
imageHeader.SetFromStock (Gtk.Stock.DialogWarning, Gtk.IconSize.Menu);
topHeaderBox.Show ();
missingDepsTxt = "";
foreach (var mdep in missingDeps) {
if (mdep.Found != null)
missingDepsTxt += "\n" + string.Format (Catalog.GetString ("Required: {0} v{1}, found v{2}"), mdep.Addin, mdep.Required, mdep.Found);
else
missingDepsTxt += "\n" + string.Format (Catalog.GetString ("Missing: {0} v{1}"), mdep.Addin, mdep.Required);
}
}
} else {
btnInstall.Visible = AllowInstall;
btnUpdate.Visible = false;
btnDisable.Visible = false;
btnUninstall.Visible = false;
version = sinfo.Version;
}
labelName.Markup = "<b><big>" + GLib.Markup.EscapeText(sinfo.Name) + "</big></b>";
string ver;
if (newVersion != null) {
ver = "<small><b>" + Catalog.GetString ("Installed version") + ":</b> " + version + "</small>\n";
ver += "<small><b>" + Catalog.GetString ("Repository version") + ":</b> " + newVersion + "</small>";
}
else
ver = "<small><b>" + Catalog.GetString ("Version") + " " + version + "</b></small>";
if (downloadSize != null)
ver += "\n<small><b>" + Catalog.GetString ("Download size") + ":</b> " + downloadSize + "</small>";
if (missingDepsTxt != null)
ver += "\n\n" + GLib.Markup.EscapeText (Catalog.GetString ("The following depedencies required by this add-in are not available:")) + missingDepsTxt;
labelVersion.Markup = ver;
string desc = GLib.Markup.EscapeText (sinfo.Description);
labelDesc.Markup = repo + GLib.Markup.EscapeText (desc);
foreach (var img in previewImages)
vboxDesc.PackStart (img, false, false, 0);
urlButton.Visible = !string.IsNullOrEmpty (sinfo.Url);
infoUrl = sinfo.Url;
if (titleIcon != null) {
boxTitle.PackEnd (titleIcon, false, false, 0);
labelName.WidthRequest = titleWidth - 32;
labelVersion.WidthRequest = titleWidth - 32;
} else {
labelName.WidthRequest = titleWidth;
labelVersion.WidthRequest = titleWidth;
}
if (IsRealized)
SetComponentsBg ();
}
}