GUI: wie programmiert man ein Notify?
-
hallo,
es geht mir um die ganz low-level ebene. Ich schreibe an einem GUI system und möchte eine (List)View mit Slidern verbinden und umgekehrt.
dazu könnte ich jedem widget eine liste mit notify-verbindungen anhängen, das ist ein struct mit nem zeiger auf das zielobjekt und ein paar datenfeldern, was ich im verlauf dieses themas noch näher erörtern werde, so wie ich es verstehe.
meine basisfragen dazu sind aber jetzt:
- wie vermeidet man schleifen, wenn das empfängerwidget auch mit dem sender zurück verbunden ist? ne liste kann zb auch gescrollt werden, wenn man das mausrad darüber bewegt, der slider muss dann angepasst werden.
- wie, wo oder wann wird das notify druchgeführt? zentral in der SetAttr() funktion des GUI toolkits, oder im dispatcher der klasse immer wenn sich ein wert ändert? Muss der dispatcher bei ner werteänderung ne funktion zum notifizieren aufrufen? ich habe keine ahnung.
Tja, Notify, wie geht das im Grunde?
-
Welches GUI Tk?
-
Ein eigenes, ich frage wie man sowas im toolkit selbst implementiert damit es das kann.
-
Was soll dein setAttr machen? Was der Dispatcher? Was meinst du konkret mit notify?
Wie definierst du konkret diese Vokablen?
-
Ein Dispatcher bearbeitet eingehende methoden. ein SetAttr() gibt die methode SET ein, mit einer attributID und einem wert dazu. ZB SetAttr(fensterwidget, fensterbreite, 200). Ein Notify ist eine Verbindung von einem Widget zu einem anderen, über die zb sich ändernde attribute ausgetauscht werden können.
-
Ich hab jetzt in jedes widget ne liste mit notifys gemacht und eine funktion Notify (quelle, methodID, data). Wenn man ein attribut setzen möchte, übergibt man das in data und als methode SET. In den strukturen in der liste steht bisher nur der zeiger auf einen zeiger mit dem target widget (zweiger auf zeiger weil tatsächliche adresse beim erzeugen der objekte noch nicht bekannte sein kann (reihenfolge)) ... als nächstes möchte ich implementieren, dass die eingabe-attribut-id durch eine andere ausgetauscht wird. das macht sinn, wenn ein vertikaler slider zB an eine horizontale gauge senden möchte.