public AddinDetailsDialog(Addin addin, Window parent) : base(String.Empty, parent) { SetDefaultSize(400, -1); AddinHeader info = SetupService.GetAddinHeader(addin); HBox box = new HBox(); box.BorderWidth = 10; box.Spacing = 10; VBox.PackStart(box, false, false, 0); Image image = new Image(); image.IconName = "package-x-generic"; image.IconSize = (int)IconSize.Dialog; image.Yalign = 0.0f; box.PackStart(image, false, false, 0); StringBuilder builder = new StringBuilder(); builder.AppendFormat("<b><big>{0}</big></b>\n\n", GLib.Markup.EscapeText(addin.Name)); builder.AppendFormat(GLib.Markup.EscapeText(addin.Description.Description)).Append("\n\n"); builder.Append("<small>"); builder.AppendFormat("<b>{0}</b> {1}\n\n", Catalog.GetString("Version:"), GLib.Markup.EscapeText(addin.Description.Version)); builder.AppendFormat("<b>{0}</b> {1}\n\n", Catalog.GetString("Authors:"), GLib.Markup.EscapeText(addin.Description.Author)); builder.AppendFormat("<b>{0}</b> {1}\n\n", Catalog.GetString("Copyright/License:"), GLib.Markup.EscapeText(addin.Description.Copyright)); if (info.Dependencies.Count > 0) { builder.AppendFormat("<b>{0}</b>\n", Catalog.GetString("Extension Dependencies:")); foreach (AddinDependency dep in info.Dependencies) { builder.Append(GLib.Markup.EscapeText(dep.Name)).Append('\n'); } } builder.Append("</small>"); WrapLabel label = new WrapLabel(); label.Markup = builder.ToString(); box.PackStart(label, true, true, 0); VBox.ShowAll(); AddDefaultCloseButton(); }
void LoadInstalled() { object s = tree.SaveStatus(); int count = 0; tree.Clear(); foreach (Addin ainfo in AddinManager.Registry.GetModules(AddinSearchFlags.IncludeAddins | AddinSearchFlags.LatestVersionsOnly)) { if (Services.InApplicationNamespace(service, ainfo.Id) && !ainfo.Description.IsHidden) { AddinHeader ah = SetupService.GetAddinHeader(ainfo); if (IsFiltered(ah)) { continue; } AddinStatus st = AddinStatus.Installed; if (!ainfo.Enabled || Services.GetMissingDependencies(ainfo).Any()) { st |= AddinStatus.Disabled; } if (addininfoInstalled.GetUpdate(ainfo) != null) { st |= AddinStatus.HasUpdate; } tree.AddAddin(ah, ainfo, st); count++; } } if (count > 0) { tree.RestoreStatus(s); } else { tree.ShowEmptyMessage(); } UpdateAddinInfo(); installedTabLabel.Text = Catalog.GetString("Installed"); if (filterEntry.Text.Length != 0 && count > 0) { installedTabLabel.Text += " (" + count + ")"; } }
void LoadAddins() { object s = tree.SaveStatus(); tree.Clear(); foreach (Addin ainfo in AddinManager.Registry.GetAddins()) { if (Services.InApplicationNamespace(service, ainfo.Id)) { tree.AddAddin(SetupService.GetAddinHeader(ainfo), ainfo, ainfo.Enabled, ainfo.IsUserAddin); } } tree.RestoreStatus(s); UpdateButtons(); }
internal void OnShowInfo(object sender, EventArgs e) { Addin sinfo = (Addin)tree.ActiveAddinData; if (sinfo == null) { return; } AddinInfoDialog dlg = new AddinInfoDialog(SetupService.GetAddinHeader(sinfo)); try { dlg.Run(); } finally { dlg.Destroy(); } }
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 extension package 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 dependencies required by this extension package 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(); } } }