summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Sivak <msivak@redhat.com>2013-03-05 10:44:42 +0100
committerMartin Sivak <msivak@redhat.com>2013-03-05 10:44:42 +0100
commit2fec10595bae9ca4ebf44ad2e80bd3521fa2244b (patch)
tree9143ca24769a090da2190a8af8b255576564e29d
parentd4c6d44ba432ba873c489a25e493ca9c1b0c40f9 (diff)
downloadfirstboot2-2fec10595bae9ca4ebf44ad2e80bd3521fa2244b.tar.gz
firstboot2-2fec10595bae9ca4ebf44ad2e80bd3521fa2244b.tar.xz
firstboot2-2fec10595bae9ca4ebf44ad2e80bd3521fa2244b.zip
Add TUI
-rw-r--r--initial_setup/__main__.py4
-rw-r--r--initial_setup/tui/__init__.py1
-rw-r--r--initial_setup/tui/hubs/__init__.py1
-rw-r--r--initial_setup/tui/hubs/initial_setup.py55
-rw-r--r--initial_setup/tui/spokes/__init__.py0
-rw-r--r--initial_setup/tui/tui.py41
6 files changed, 100 insertions, 2 deletions
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
--- /dev/null
+++ b/initial_setup/tui/spokes/__init__.py
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"))],
+ }
+