From 09ecd8b72c52b37430b51d84f8178e28f79ade2d Mon Sep 17 00:00:00 2001 From: D3V1L0N <167227445+D3V1L0N@users.noreply.github.com> Date: Wed, 24 Apr 2024 04:34:48 +0530 Subject: [PATCH] create ui.AboutDialog.py --- blackbox/ui/AboutDialog.py | 192 +++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 blackbox/ui/AboutDialog.py diff --git a/blackbox/ui/AboutDialog.py b/blackbox/ui/AboutDialog.py new file mode 100644 index 0000000..32391a4 --- /dev/null +++ b/blackbox/ui/AboutDialog.py @@ -0,0 +1,192 @@ +# This class stores static information about the app, and is displayed in the about dialog +import os +import gi + +from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib + +gi.require_version("Gtk", "3.0") + +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + +# base_dir = os.path.dirname(os.path.realpath(__file__)) + + +class AboutDialog(Gtk.Dialog): + def __init__(self): + Gtk.Dialog.__init__(self) + + app_name = "Blackbox" + app_title = "About Blackbox" + app_main_description = "%s - %s" % (app_name, "Software Installer Remover") + app_secondary_message = "Install or remove software" + app_secondary_description = "Report issues to make it even better" + app_version = "pkgversion-pkgrelease" + # app_discord = "https://discord.gg/stBhS4taje" + app_website = "https://snigdhaos.org" + app_github = "https://github.com/Snigdha-OS/snigdhaos-blackbox" + app_authors = [] + app_authors.append(("Cameron Percival", None)) + app_authors.append(("Fennec", None)) + app_authors.append(("Erik Dubois", None)) + + pixbuf = GdkPixbuf.Pixbuf().new_from_file_at_size( + os.path.join(base_dir, "images/blackbox.png"), 100, 100 + ) + app_image = Gtk.Image().new_from_pixbuf(pixbuf) + + self.set_resizable(False) + self.set_size_request(560, 350) + self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png")) + self.set_border_width(10) + + headerbar = Gtk.HeaderBar() + headerbar.set_show_close_button(True) + headerbar.set_title(app_title) + self.set_titlebar(headerbar) + + btn_about_close = Gtk.Button(label="OK") + btn_about_close.connect("clicked", self.on_response, "response") + + stack = Gtk.Stack() + stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN) + stack.set_transition_duration(350) + stack.set_hhomogeneous(False) + stack.set_vhomogeneous(False) + + stack_switcher = Gtk.StackSwitcher() + stack_switcher.set_orientation(Gtk.Orientation.HORIZONTAL) + stack_switcher.set_stack(stack) + stack_switcher.set_homogeneous(True) + + lbl_main_description = Gtk.Label(xalign=0, yalign=0) + lbl_main_description.set_markup( + " %s" % app_main_description + ) + + lbl_secondary_message = Gtk.Label(xalign=0, yalign=0) + lbl_secondary_message.set_text( + " %s" % app_secondary_message + ) + + lbl_secondary_description = Gtk.Label(xalign=0, yalign=0) + lbl_secondary_description.set_text( + " %s" % app_secondary_description + ) + + lbl_version = Gtk.Label(xalign=0, yalign=0) + lbl_version.set_markup( + " Version: %s" % app_version + ) + + ivbox_about = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) + ivbox_about.pack_start(app_image, True, True, 0) + ivbox_about.pack_start(lbl_main_description, True, True, 0) + ivbox_about.pack_start(lbl_version, True, True, 0) + ivbox_about.pack_start(lbl_secondary_message, True, True, 0) + ivbox_about.pack_start(lbl_secondary_description, True, True, 0) + + stack.add_titled(ivbox_about, "About BlackBox", "About") + + grid_support = Gtk.Grid() + + lbl_padding1 = Gtk.Label(xalign=0, yalign=0) + lbl_padding1.set_text(" ") + + grid_support.attach(lbl_padding1, 0, 1, 1, 1) + + lbl_support_title = Gtk.Label(xalign=0, yalign=0) + lbl_support_title.set_markup("Discord ") + + lbl_support_value = Gtk.Label(xalign=0, yalign=0) + lbl_support_value.set_markup("%s" % (app_discord, app_discord)) + + lbl_website_title = Gtk.Label(xalign=0, yalign=0) + lbl_website_title.set_markup("ArcoLinux website ") + + lbl_website_value = Gtk.Label(xalign=0, yalign=0) + lbl_website_value.set_markup("%s" % (app_website, app_website)) + + lbl_github_title = Gtk.Label(xalign=0, yalign=0) + lbl_github_title.set_markup("GitHub ") + + lbl_github_value = Gtk.Label(xalign=0, yalign=0) + lbl_github_value.set_markup("%s" % (app_github, app_github)) + + grid_support.attach(lbl_support_title, 0, 2, 1, 1) + + grid_support.attach_next_to( + lbl_support_value, lbl_support_title, Gtk.PositionType.RIGHT, 20, 1 + ) + + grid_support.attach(lbl_website_title, 0, 3, 1, 1) + grid_support.attach_next_to( + lbl_website_value, lbl_website_title, Gtk.PositionType.RIGHT, 20, 1 + ) + + grid_support.attach(lbl_github_title, 0, 4, 1, 1) + grid_support.attach_next_to( + lbl_github_value, lbl_github_title, Gtk.PositionType.RIGHT, 20, 1 + ) + + stack.add_titled(grid_support, "Support", "Support") + + box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) + box_outer.set_border_width(10) + + lbl_padding2 = Gtk.Label(xalign=0, yalign=0) + lbl_padding2.set_text(" ") + + lbl_padding3 = Gtk.Label(xalign=0, yalign=0) + lbl_padding3.set_text(" ") + + lbl_authors_title = Gtk.Label(xalign=0, yalign=0) + lbl_authors_title.set_text( + "The following people have contributed to the development of %s" % app_name + ) + + listbox = Gtk.ListBox() + listbox.set_selection_mode(Gtk.SelectionMode.NONE) + + box_outer.pack_start(lbl_authors_title, True, True, 0) + box_outer.pack_start(listbox, True, True, 0) + + treestore_authors = Gtk.TreeStore(str, str) + for item in app_authors: + treestore_authors.append(None, list(item)) + + treeview_authors = Gtk.TreeView(model=treestore_authors) + + renderer = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, renderer, text=0) + + treeview_authors.append_column(column) + + path = Gtk.TreePath.new_from_indices([0]) + + selection = treeview_authors.get_selection() + + selection.select_path(path) + + treeview_authors.expand_all() + treeview_authors.columns_autosize() + + row_authors = Gtk.ListBoxRow() + vbox_authors = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) + row_authors.add(vbox_authors) + + vbox_authors.pack_start(treeview_authors, True, True, 0) + + listbox.add(row_authors) + + stack.add_titled(box_outer, "Authors", "Authors") + + self.connect("response", self.on_response) + + self.vbox.add(stack_switcher) + self.vbox.add(stack) + + self.show_all() + + def on_response(self, dialog, response): + self.hide() + self.destroy()