getSite function

List<Widget> getSite (
  1. MissileSite site,
  2. Config cfg,
  3. MissileSiteFactory sf
)

Return MissileSite widget tree.

At this point we have the Config data collected from the user and know the screen dimensions.

These values are used to compute the size of the MissileSite and return a widget accordingly.

Implementation

List<Widget> getSite(MissileSite site,Config cfg,MissileSiteFactory sf) {
  BankFactory bankMold   = BankFactory(BK.values);
  double wid = Rocket.boxWid + 4; // 184.0 * 3;
  double hgt = Rocket.boxHgt + 4; // 184.0 * 3;
  //List<Widget> logLines =  [Text("logger line 1"),Text("logger line 2")];
  List<Widget> hdrList  = [];
  List<Widget> banks    = [];

  for (var name in "Patriot/Scud/Cruise".split("/")) {
    int numBanks = int.parse(cfg.getHot('bnk$name'));
    int depth   = int.parse(cfg.getHot('dep$name'));
    if (numBanks > 0) {
      hdrList.add(getHeader(name,numBanks,depth,wid,sf._colMap[name],MissileSite.hdrHgt));
      for (var i = 0; i < numBanks; i++) {
        banks.add(samInject(getBank(site,bankMold,cfg,name,i+1,wid,hgt,depth,sf._colMap[name])));
      }
    }
  }

  List<Widget> list = [];
  list.add(getSiteHeader(site,wid*(max(3,banks.length))));
  list.add(Row(children: hdrList));
  Row body = Row(children:banks);
  list.add(body);
  MissileSite.bankSiloHgt = MissileSite.siloHdrHgt + (hgt * MissileSite.bankMissileDepth);
  double logHgt = cfg.mediaHgt - MissileSite.hdrHgt - MissileSite.bankSiloHgt - MissileSite.frameHgt - MissileSite.bannerHgt;
  if (logHgt < 0) {
    MissileSite.bankMissileDepth = 2;
    MissileSite.bankSiloHgt = MissileSite.siloHdrHgt + (hgt * MissileSite.bankMissileDepth);
    logHgt = cfg.mediaHgt - MissileSite.hdrHgt - MissileSite.bankSiloHgt - MissileSite.frameHgt - MissileSite.bannerHgt;
  }
  if (!cfg.bIsMaterial) logHgt -= 20; //adjustment for IOS
  site.logger = Logger(site,'logger',(wid * max(3,banks.length)) + (2 * (banks.length - 2)),logHgt,color:Color.fromRGBO(250,249,253,1));
  assert(log("Calc logHgt $logHgt ${cfg.mediaHgt} material=${cfg.bIsMaterial}"));
  list.add(Row(children:[site.logger]));
  return list;
}