!7

cmodule BatteryTrayIcon > DynPrintLog {
  transient S value;
  transient JLabel lbl;
  transient bool _startMinimized = true;
  switchable double interval = 10.0; // restart to take effect
  transient double level;
  
  start {
    dm_addTrayIcon(onLeftClick(rThreadEnter dm_showModule,
 lbl = dm_fieldLabel_noAutoToolTip value()));
    doEveryAndNow(interval, r actualUpdate);
    dm_registerAs_direct batteryLevel();
  }
  
  void actualUpdate {
    S value = "-";
    level = oshi_batteryLevel_withZeroPercentFix();
    if (!isNaN(level)) value = iround(level) + "%";
    if (set_trueIfChanged(this, +value))
      fireChangeWithoutPersisting();
    toolTip(lbl, "Battery level: " + value);
  }
}