+
+def load_screens(dirname):
+ modnames = []
+ for fn in os.listdir(dirname):
+ if not fn.endswith(".py"):
+ continue
+ modname = fn.rsplit(".py",1)[0]
+ if modname == "sfascreen":
+ # ignore this, it's the base class, not a screen
+ continue
+ modnames.append(modname)
+
+ # we want the stock screens to show up in a specific order. plugins can
+ # show up in any order afterward.
+
+ sort_order = ["mainscreen", "configscreen", "helpscreen"]
+ sort_order.reverse()
+ for modname in sort_order:
+ if modname in modnames:
+ modnames.remove(modname)
+ modnames.insert(0,modname)
+
+ # import each module and find whatever class(es) is descendant from
+ # SfaScreen within the module. Might be a better idea to just define a
+ # screens=[] variable in each module
+
+ screens = []
+ for modname in modnames:
+ try:
+ mod = __import__("sface.screens." + modname, fromlist=["modname"])
+ except:
+ print "Exception while importing screen", modname
+ traceback.print_exc()
+ continue
+
+ for object in dir(mod):
+ object = getattr(mod, object)
+ if hasattr(object, "__bases__") and sface.screens.sfascreen.SfaScreen in object.__bases__:
+ screens.append(object)
+
+ return screens