UpdateFormField für items im ExpansionPanel

Moin Liebes Symcon Team,

hab mal wieder 3 Funktionswünsche.

  1. Ich musste leider grade feststellen, dass ich den Inhalt der ExpansionPanel gar nicht ändern darf.

items Liste mit Formularfeldern innerhalb des Expansion Panels (nicht änderbar)

Gibt es einen Grund, warum dies über mit der Funktion UpdateFormField nicht gewollt ist.
Ich brauche für mein neues Modul, Boxen, die ich modular mit Inhalten füllen kann, die Expansion Panel waren da schon die alternative. Vor allen, wenn es im Rowlayout auch geht?

  1. Hatte ich glaube ich schonmal erwähnt, aber es wäre toll. Wenn man bei Inhalten des Rowlayouts prozentuale Breiten angeben kann(Hier z.B. ein Object des Typ Labels => width: „30%“)
    Hier arbeite ich deshalb aktuell mit festen Breiten, dies ist aber für Geräte mit unterschiedlichen Auflösungen suboptimal.

  2. Für Objekte des Types Labels wäre eine Schriftausrichtung ebenfalls toll, also rechtsbündig, mittig und linksbündig.

Der erste Punkt wäre mir tatsächlich sehr wichtig, da ich sonst nicht mit meinen Modul weiter machen kann.

Danke für eure Arbeit.

Swen

Glaube das mit 1) hatte ich auch, aber beim PopupButton.
Ich meine das ich einfach alle Items auf unsichtbar gesetzt habe.
Und je nachdem was benötigt wird, diese sichtbar gesetzt und mit weiteren Werten befüllt wird.
Die eigentlichen Elemente innerhalb von items kannst du ja wieder verändern.
2) sollte laut Doku gehen.
Michael

Geht leider nicht weil, die Anzahl und der Inhalt immer unterschiedlich ist, also ich erzeuge darunter z.B. mehrere Rowlayouts.

Beim Popup wäre es das gleiche.

Swen

Das RowLayout kannst du ändern.
Also einfach 10 Stück reinhauen und die dynamisch ändern.
Michael

Wie gesagt es sind dann aber nicht nur 10, könnten auch mal 50 sein, man könnte die sicher alle erstellen und dann unsichtbar schalten, finde ich aber nicht unbedingt zielführend.

Erstmal schauen, was die Entwickler von Symcon sagen, da die oben beschriebene Lösung etwas aufwendiger wäre.

Notfalls muss ich das dann so machen.
@Nall-chan danke für den Tipp.

Swen

Eigentlich brauchst du nur einen, als Platzhalter.
Kannst dort drunter dann ja alle anderen dynamisch erstellen.
Und wenn es innerhalb den Rowland wieder untereinander soll, das ColumnLayout nutzen.
Michael

Das hab ich übersehen, ich schaue mal morgen, ob ich es damit realisiert bekommen danke.

Swen

@Nall-chan so klappt es, danke für die Idee mit den ColumnLayout, die macht es mir sogar noch einfacher.

Swen

1 „Gefällt mir“

@Nall-chan habe grade ein erneutes Problem festgestellt, hab jetzt kein extra Thread aufgemacht, kann es sein das man bei Listen im Action Bereich keine Werte auslesen kann?
Sonst würde ich das hier nochmal das Feature Request aufnehmen.

Vielleicht hast du auch eine Idee für die Umsetzung.

Hier ein versuch den ich probiert habe.

{ "type": "Button", "caption": "Ausgabe", "onClick": "print_r($InstanceList);" },
{
      "type": "List",
      "name": "InstanceList",
      "caption": "Select Instance-List",
      "onEdit": "SymconJSLiveConfigStore_OnChangeInstanceList($id, InstanceList);",
      "rowCount": 12,
      "add": false,
      "delete": false,
      "sort": {
          "column": "Name",
          "direction": "ascending"
      },
      "columns": [{
          "caption": "InstanceID",
          "name": "InstanceID", 
          "width": "100px",
          "add": 0
      }, {
          "caption": "Name",
          "name": "Name",
          "width": "auto",
          "add": ""
      }, {
          "caption": "Select",
          "name": "Select",
          "width": "80px",
          "add": false,
          "edit": { "type": "CheckBox" }
      }],
      "values": [
          {
              "InstanceID": 12435,
              "Name": "Name des Moduels",
              "State": false
          },
          {
              "InstanceID": 12436,
              "Name": "Name des Moduels2",
              "State": false
          }
      ]
  }

Beim Button kommt leider Undefined variable, mir scheint, dass die für Listen im Action Bereich nicht gesetzt wird.
OnEdit habe ich ebenfalls versucht, leider ohne Erfolg.
image

Swen

OK, ich habe es mal teste weise in einem anderen Modul getestet, da geht es. Ich suche also mal den Fehler, den ich gemacht habe.

Er scheint ein Problem mit den Namen InstanceList zu haben, denn mit Instance_List geht es jetzt.

Swen

War die Liste vielleicht in einem geschlossenen ExpansionPanel? Ich bin tatsächlich nicht sicher, wie der aktuelle Stand ist, aber es könnte sein, dass Elemente in ExpansionPanels, die noch nicht geöffnet wurden nicht verfügbar sind. Passt das auf deine Situation?

Hatte zwisch zeitig wieder das Problem, es scheint nur aufzutreten wenn man die Module per Befehl neulädt, und dabei das Modul in der console offen hat.

Swen

Bezüglich der Frage, ob das expension panel geschlossen war, nein dieses wird bereits geöffnet geladen. ( „expanded“: true,)

Ich glaube, dass ich das reproduzieren kann, ich würde sonst mal am Wochenende ein Dummymodul bauen.

Swen

1 „Gefällt mir“

@Dr.Niels Brauch kein Dummy bauen, hab den Fehler gefunden.
Scheint ein Bug zu sein.

Er tritt immer dann auf, wenn ich mit
$this->UpdateFormField("Instance_List", "values", json_encode($this->GetInstanceList()));
die Liste update, dann kann ich im Anschluss nicht mehr mit dem Formular auf den Inhalt der Liste zugreifen.

Also ich hab einen Button, der als, übergab den, Inhalt der Liste hat, vorher und auch nach Öffnen des Konfigurators klappt alles, ändere ich dann den Inhalt der Liste kommt der oben besagte Fehler.

Falls du noch ein Dummy-Modul brauchst, gib Bescheid, denke aber das sollte dir helfen.

Swen

Ich hab das jetzt bei mir gefixt, indem ich die werte in einen Buffer zwischen speichere,
Scheinbar kann onEdit bei der liste auf die werte nach einer Änderung zugreifen, aber nicht über einen externen Button.

Swen

Hmm, ich frage mich was bei dir anders läuft als bei mir. Ich habe gerade mal den DynamicTest aus SymconTest angepasst, sodass man auch eine bearbeitbare Spalte anzeigen kann. Dabei klappt aber alles super. Ich kann via Dynamik die bearbeitbare Spalte anzeigen, dann über Dynamik 3 Dummy-Werte reinschreiben und diese dann problemlos bearbeiten. Die Liste ist auch in einem Expansion Panel. Du kannst ja mal schauen. SymconTest findest du sonst hier: GitHub - symcon/SymconTest: Symcon modules for demonstration and testing Das müsstest du über das Module Control installieren, da es aufgrund seiner Testnatur nicht im Module Store steckt :slight_smile:
Dann kannst du ja mal schauen, was das Modul anders macht als deins…

Schau ich mir am Wochenende mal an, sonnst muss ich wirklich noch meinen Dummy bauen, mir fehlt aktuell wieder die Zeit so dass ich nicht sagen kann bis wann ich es erstellt habe

Swen

Ja, schau einfach mal, wenn du die Zeit findest. Danke schonmal für die Analyse!