support a controller being shown more than once

This commit is contained in:
Michael Hudson-Doyle 2019-03-07 12:03:54 +13:00
parent 51113aaea9
commit 9aea579027
2 changed files with 34 additions and 4 deletions

View File

@ -105,3 +105,19 @@ class BaseController(ABC):
self.loop.set_alarm_in(
delay,
lambda *args: self._run_iterator(it, delay/1.1))
class RepeatedController(BaseController):
def __init__(self, orig, index):
self.orig = orig
self.index = index
def register_signals(self):
pass
def default(self):
self.orig.default(self.index)
def cancel(self):
self.orig.cancel()

View File

@ -26,6 +26,7 @@ import tty
import urwid
import yaml
from subiquitycore.controller import RepeatedController
from subiquitycore.signals import Signal
from subiquitycore.prober import Prober, ProberException
@ -291,6 +292,8 @@ class Application:
if opts.screens:
self.controllers = [c for c in self.controllers
if c in opts.screens]
else:
self.controllers = self.controllers[:]
ui.progress_completion = len(self.controllers)
self.common['controllers'] = dict.fromkeys(self.controllers)
self.controller_index = -1
@ -475,10 +478,21 @@ class Application:
self.run_scripts(self.common['opts'].scripts)
controllers_mod = __import__('%s.controllers' % self.project,
None, None, [''])
for k in self.controllers:
log.debug("Importing controller: {}".format(k))
klass = getattr(controllers_mod, k+"Controller")
self.common['controllers'][k] = klass(self.common)
for i, k in enumerate(self.controllers):
if self.common['controllers'][k] is None:
log.debug("Importing controller: {}".format(k))
klass = getattr(controllers_mod, k+"Controller")
self.common['controllers'][k] = klass(self.common)
else:
count = 1
for k2 in self.controllers[:i]:
if k2 == k or k2.startswith(k + '-'):
count += 1
orig = self.common['controllers'][k]
k += '-' + str(count)
self.controllers[i] = k
self.common['controllers'][k] = RepeatedController(
orig, count)
log.debug("*** %s", self.common['controllers'])
initial_controller_index = 0