/components/desktop/os-welcome/files/os-next-steps.py
Python | 241 lines | 172 code | 42 blank | 27 comment | 5 complexity | ff9821cfba0c9fa79fa0c1d802e682e2 MD5 | raw file
Possible License(s): CPL-1.0, AGPL-3.0, IPL-1.0, Apache-2.0, MPL-2.0-no-copyleft-exception, Unlicense, CC-BY-SA-4.0, AGPL-1.0, GPL-3.0, LGPL-2.0, LGPL-2.1, CC-BY-3.0, MIT, ISC, EPL-1.0, GPL-2.0, BSD-3-Clause-No-Nuclear-License-2014, BSD-3-Clause, LGPL-3.0, BSD-2-Clause, 0BSD, JSON
- #!/usr/bin/python2.7
- # -*- coding: utf-8 -*-
- #
- # Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- import locale
- import gettext
- from gettext import gettext as _
- import os
- import socket
- import string
- import subprocess
- import re
- import gi
- gi.require_version('Gtk', '3.0')
- from gi.repository import GObject, Gtk, Gdk, GdkPixbuf, Gio
- def N_(message): return message
- PACKAGE = "os-next-steps"
- VERSION = "12"
- GETTEXT_PACKAGE = "os-welcome"
- LOCALEDIR = "/usr/share/locale"
- release_string = "Oracle Solaris 12"
- # There's probably a nicer way of including UTF-8 strings than this
- bullet_point = u'\u2022'
- default_link_color = Gdk.Color (0, 0, 65535)
- # This needs to stay in sync with the method in /lib/svc/method/svc-webui-server
- # for generating the hostname used in the site certificate to avoid TLS errors.
- def get_solaris_dashboard_url():
- hostname = socket.gethostname()
- if hostname != '':
- p = subprocess.Popen(["/usr/sbin/host", hostname],
- stdin=None, stdout=subprocess.PIPE,
- stderr=None, shell=False, close_fds=True,
- bufsize=-1)
- (stdoutdata, stderrdata) = p.communicate()
- if p.returncode == 0:
- hostname = stdoutdata.split(' ', 1)[0]
- if hostname == '':
- hostname = "localhost"
- return "https://%s:6787/" % hostname
- help_link= {
- 'header' : N_("Learn More about Oracle Solaris"),
- 'icon' : "resources.png",
- 'url_links' : [ ["http://docs.oracle.com/cd/E53394_01/pdf/E54847.pdf", N_("##What's new## with <b>Oracle Solaris 11.3</b>")], ["http://www.oracle.com/us/support/systems/index.html", N_("##Get world class support## with <b>Oracle Premier Support</b>")], [get_solaris_dashboard_url(), N_("##Explore## the <b>Oracle Solaris Dashboard</b> with system analytics and more")] ],
- }
- personalize_link= {
- 'header' : N_("Use the GNOME Desktop"),
- 'icon' : "gnome.png",
- 'program_links' : [ ["yelp.desktop", N_("##Get Help## using the <b>GNOME Desktop</b>")], ["gnome-control-center.desktop", N_("##Change desktop settings## with <b>GNOME Control Center</b>")], ["gnome-universal-access-panel.desktop", N_("##Enable Accessibility## with <b>Settings > Universal Access</b>")] ],
- }
- participate_link= {
- 'header' : N_("Participate"),
- 'icon' : "participate.png",
- 'url_links' : [ ["https://community.oracle.com/community/server_%26_storage_systems/solaris", N_("##Join in on the discussion## of the <b>Oracle Solaris Forums</b>")], ["http://www.oracle.com/technetwork/server-storage/solaris11/community/index.html", N_("##Catch the latest## from the <b>Oracle Solaris Community</b>")] ],
- }
- ICON_PATH = "/usr/share/os-about/"
- DESKTOP_ITEM_PATH = "/usr/share/applications/"
- class DialogOSNextSteps(Gtk.Dialog):
- def __init__(self, parent=None):
- Gtk.Dialog.__init__(self, self.__class__.__name__, parent, 0, None)
- self.connect('destroy', lambda *w: Gtk.main_quit())
- Gtk.Window.set_default_icon_from_file ("/usr/share/os-about/about-os-window-icon.png")
- self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('white'))
- # Set the dialog default spacing for about
- self.set_title(_("Start here with Oracle Solaris 12"))
- self.set_border_width(5)
- self.set_resizable(False)
- self.vbox.set_border_width(2)
- self.action_area.set_border_width(5)
- vbox = Gtk.VBox(False, 8)
- vbox.set_border_width(5)
- self.vbox.pack_start(vbox, False, False, 0)
- # Logo
- logo = Gtk.Image()
- pixbuf = GdkPixbuf.Pixbuf.new_from_file (ICON_PATH + "about-os-logo.png")
- # scale = 48.0 / pixbuf.get_height()
- # width_scale = pixbuf.get_width() * scale
- # height_scale = pixbuf.get_height() * scale
- # pixbuf = pixbuf.scale_simple (int(width_scale), int(height_scale), GdkPixbuf.InterpType.BILINEAR)
- logo.set_from_pixbuf (pixbuf)
- logo_hbox = Gtk.HBox(True, 0)
- logo_hbox.pack_start(logo, False, False, 0)
- vbox.pack_start(logo_hbox, False, False, 0)
- close_button=self.add_button(Gtk.STOCK_CLOSE,Gtk.ResponseType.CANCEL)
- self.set_default_response (Gtk.ResponseType.CANCEL)
- close_button.grab_default()
- close_button.grab_focus()
- close_button.connect('clicked', lambda *w: Gtk.main_quit())
- self.create_section(help_link, vbox)
- self.create_section(personalize_link, vbox)
- self.create_section(participate_link, vbox)
- self.show_all()
- def create_section(self, section_link, vbox):
- section_hbox = Gtk.HBox(False, 10)
- vbox.pack_start(section_hbox, True, True, 10)
- header = Gtk.Image()
- header.set_from_file (ICON_PATH + section_link['icon'])
- section_hbox.pack_start(header, False, False, 2)
- header_vbox = Gtk.VBox(False, 0)
- section_hbox.pack_start(header_vbox, False, False, 0)
- label = Gtk.Label()
- label.set_alignment(0, 0)
- label.set_markup("<span><b>%s</b></span>" % _(section_link['header']))
- label.set_justify(Gtk.Justification.LEFT)
- header_vbox.pack_start(label, False, False, 2)
- detail_vbox = Gtk.VBox(False, 0)
- detail_vbox.set_spacing(2)
- header_vbox.pack_start(detail_vbox, False, False, 0)
- self.fill_section(section_link, detail_vbox)
- def launch_app(self,label,uri):
- try:
- ditem = Gio.DesktopAppInfo.new (uri)
- ditem.launch ([])
- except Exception, e:
- print '''Warning: could not execute file "%s" : %s''' % (uri, e)
- return True
- def fill_section (self, section_link, vbox):
- if 'program_links' in section_link:
- for i in section_link['program_links']:
- hbox = Gtk.HBox(False, 0)
- label = Gtk.Label()
- label.set_markup(bullet_point + " ")
- label.set_justify(Gtk.Justification.LEFT)
- hbox.pack_start(label, False, False, 0)
- tmp = _(i[1]).split('##')
- label = Gtk.Label()
- label.set_markup(tmp[0])
- hbox.pack_start(label, False, False, 0)
- link_button = Gtk.Label()
- link_button.connect("activate-link", self.launch_app)
- markup = "<b><a href='%s'>%s</a></b>" % (i[0],tmp[1])
- link_button.set_markup(markup)
- hbox.pack_start(link_button, False, False, 0)
- label = Gtk.Label()
- label.set_markup(tmp[2])
- hbox.pack_start(label, False, False, 0)
- vbox.pack_start(hbox, False, False, 0)
- if 'url_links' in section_link:
- for i in section_link['url_links']:
- hbox = Gtk.HBox(False, 0)
- label = Gtk.Label()
- label.set_markup(bullet_point + " ")
- label.set_justify(Gtk.Justification.LEFT)
- hbox.pack_start(label, False, False, 0)
- tmp = _(i[1]).split('##')
- label = Gtk.Label()
- label.set_markup(tmp[0])
- hbox.pack_start(label, False, False, 0)
- link_button = Gtk.Label()
- markup = "<b><a href='%s'>%s</a></b>" % (i[0],tmp[1])
- link_button.set_markup(markup)
- hbox.pack_start(link_button, False, False, 0)
- label = Gtk.Label()
- label.set_markup(tmp[2])
- hbox.pack_start(label, False, False, 0)
- vbox.pack_start(hbox, False, False, 0)
- def main():
- locale.setlocale (locale.LC_ALL, "")
- gettext.textdomain (GETTEXT_PACKAGE)
- gettext.install (GETTEXT_PACKAGE, LOCALEDIR)
- style_provider = Gtk.CssProvider()
- css = """
- GtkDialog {
- background-image: url('/usr/share/os-about/about-os-background.jpg');
- background-position: left top;
- }
- """
- style_provider.load_from_data(css)
- Gtk.StyleContext.add_provider_for_screen(
- Gdk.Screen.get_default(),
- style_provider,
- Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
- )
- DialogOSNextSteps()
- Gtk.main()
- if __name__ == '__main__':
- main()