From 2fec10595bae9ca4ebf44ad2e80bd3521fa2244b Mon Sep 17 00:00:00 2001 From: Martin Sivak Date: Tue, 5 Mar 2013 10:44:42 +0100 Subject: Add TUI --- initial_setup/__main__.py | 4 +-- initial_setup/tui/__init__.py | 1 + initial_setup/tui/hubs/__init__.py | 1 + initial_setup/tui/hubs/initial_setup.py | 55 +++++++++++++++++++++++++++++++++ initial_setup/tui/spokes/__init__.py | 0 initial_setup/tui/tui.py | 41 ++++++++++++++++++++++++ 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 initial_setup/tui/__init__.py create mode 100644 initial_setup/tui/hubs/__init__.py create mode 100644 initial_setup/tui/hubs/initial_setup.py create mode 100644 initial_setup/tui/spokes/__init__.py create mode 100644 initial_setup/tui/tui.py diff --git a/initial_setup/__main__.py b/initial_setup/__main__.py index ec5bfba..2e6fde9 100644 --- a/initial_setup/__main__.py +++ b/initial_setup/__main__.py @@ -1,7 +1,7 @@ #!/bin/python import os -if "DISPLAY" in os.environ: +if "DISPLAY" in os.environ and os.environ["DISPLAY"]: mode="gui" else: mode="tui" @@ -55,7 +55,7 @@ else: tui.InitialSetupTextUserInterface.update_paths(addon_module_paths) # Initialize the UI - ui = gui.InitialSetupTextUserInterface(None, None, None) + ui = tui.InitialSetupTextUserInterface(None, None, None) # Pass the data object to user inteface ui.setup(data) diff --git a/initial_setup/tui/__init__.py b/initial_setup/tui/__init__.py new file mode 100644 index 0000000..bef6164 --- /dev/null +++ b/initial_setup/tui/__init__.py @@ -0,0 +1 @@ +from .tui import InitialSetupTextUserInterface diff --git a/initial_setup/tui/hubs/__init__.py b/initial_setup/tui/hubs/__init__.py new file mode 100644 index 0000000..5d166d6 --- /dev/null +++ b/initial_setup/tui/hubs/__init__.py @@ -0,0 +1 @@ +from .initial_setup import InitialSetupMainHub diff --git a/initial_setup/tui/hubs/initial_setup.py b/initial_setup/tui/hubs/initial_setup.py new file mode 100644 index 0000000..b17f651 --- /dev/null +++ b/initial_setup/tui/hubs/initial_setup.py @@ -0,0 +1,55 @@ +from pyanaconda.ui.tui.hubs import TUIHub +from pyanaconda.ui.tui.spokes import TUISpoke +from pyanaconda.ui.common import collect +import os + +__all__ = ["InitialSetupMainHub"] + +# localization +_ = lambda t: t +N_ = lambda t: t + +def collect_spokes(mask_paths): + """Return a list of all spoke subclasses that should appear for a given + category. Look for them in files imported as module_path % basename(f) + + :param mask_paths: list of mask, path tuples to search for classes + :type mask_paths: list of (mask, path) + + :return: list of Spoke classes belonging to category + :rtype: list of Spoke classes + + """ + spokes = [] + for mask, path in mask_paths: + spokes.extend(collect(mask, path, + lambda obj: issubclass(obj, Spoke) and obj.should_run("firstboot", None))) + + print spokes + return spokes + + +class InitialSetupMainHub(TUIHub): + categories = ["password"] + title = _("Initial setup of Fedora") + + def _collectCategoriesAndSpokes(self): + """collects categories and spokes to be displayed on this Hub + + :return: dictionary mapping category class to list of spoke classes + :rtype: dictionary[category class] -> [ list of spoke classes ] + """ + + ret = {} + + # Collect all the categories this hub displays, then collect all the + # spokes belonging to all those categories. + candidate_spokes = collect_spokes(self.paths["spokes"]) + spokes = [spoke for spoke in candidate_spokes \ + if spoke.should_run("firstboot", self.data)] + + for spoke in spokes: + ret.setdefault(spoke.category, []) + ret[spoke.category].append(spoke) + + return ret diff --git a/initial_setup/tui/spokes/__init__.py b/initial_setup/tui/spokes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/initial_setup/tui/tui.py b/initial_setup/tui/tui.py new file mode 100644 index 0000000..f175a38 --- /dev/null +++ b/initial_setup/tui/tui.py @@ -0,0 +1,41 @@ +from pyanaconda.ui.tui import TextUserInterface +#from .product import productName, productVersion +from .hubs import InitialSetupMainHub +from pyanaconda.ui.tui.spokes import StandaloneSpoke +import pyanaconda.ui.tui.spokes +from pyanaconda.ui.common import collect, FirstbootSpokeMixIn +import os +import logging +from di import inject, usesclassinject + +# localization +_ = lambda t: t +N_ = lambda t: t + +productTitle = lambda: "Initial Setup of Fedora" +isFinal = lambda: False + +QUIT_MESSAGE = N_("Are you sure you want to quit the configuration process?\n" + "You might end up with unusable system if you do.") + +@inject(productTitle = productTitle, isFinal = isFinal) +class InitialSetupTextUserInterface(TextUserInterface): + """This is the main text based firstboot interface. It inherits from + anaconda to make the look & feel as similar as possible. + """ + + @usesclassinject + def __init__(self, storage, payload, instclass): + TextUserInterface.__init__(self, storage, payload, instclass, + productTitle, isFinal, quitMessage = QUIT_MESSAGE) + + def _list_hubs(self): + return [InitialSetupMainHub] + + basemask = "firstboot.tui" + basepath = os.path.dirname(__file__) + paths = TextUserInterface.paths + { + "spokes": [(basemask + ".spokes.%s", os.path.join(basepath, "spokes"))], + "categories": [(basemask + ".categories.%s", os.path.join(basepath, "categories"))], + } + -- cgit