abstract sclass DynQuickSearch extends DynCalculatedList { transient S query; transient new RestartableCountdown autoHide; start { calculateWhenHidden = true; ownTimer(vmBus_onMessage('topInput, voidfunc(S s) { doSearch(s) })); } void update { S s = unnullTrim(dm_getInterestingString()); if (neq(s, query)) doSearch(s); } void doSearch(S s) { temp enter(); query = s; super.update(); if (nempty(query) && nempty(results)) { dm_placeModuleUnderAIBar(this, query); dm_autoHide(autoHide); } else dm_hideModule(); } final L calc() { if (empty(query)) ret emptyList(); ret calc2(); } abstract LS calc_impl(); }