ich wollt mir mit Boopsi ein Up/Down Propgadget basteln, das ich ueber
SetGadgetAttrs() so steuern kann, dass mit Up, Down, PageUp und PageDown
PGA_Top entsprechend geaendert wird. Dazu habe ich von propgclass
ein Gadget abgeleitet dessen Dispatcher aus
case OM_SET:
case OM_UPDATE:
besteht. Alle anderen Messages werden direkt an die superclass
weitergeben.
In OM_SET/UPDATE werden die Tags ausgewertet. PGA_Top neu berechnet
(aktueller Wert wird mit DoSuperMethod(..OM_GET..) geholt) und dann
in der Funktion NotifyTop() neu gesetzt. Dabei wird zwar der Wert von
PGA_Top geaendert aber der visuelle Zustand des Propgadgets bleibt
unveraendert. Nur warum funktioniert es nicht?
Aufruf erfolgt mit:
#define OP_SET ((struct opSet *)msg)
YUDP_NotifyTop(cl, o, OP_SET->ops_GInfo, 0);
void YUDP_NotifyTop(Class *cl, Object *o, struct GadgetInfo *gi, ULONG top)
{
struct TagItem tt[3];
tt[0].ti_Tag = PGA_Top;
tt[0].ti_Data = 5; /* Zu testzwecken auf 5 */
tt[1].ti_Tag = TAG_DONE;
KPrintF("Notify\n");
DoSuperMethod(cl, o, OM_SET, tt, gi);
}
Test:
- PGA_Top steht auf 0
- SetGadgetAttrs(prop, w, NULL, YUDP_Up, 1, TAG_END);
- GetAttr(PGA_Top, prop, &top);
- printf("Top: %i\n", top);
=> 5
Nur aendert sich der visuelle Zustand des Propgadgets nicht und wenn
es dann bewegt wird springt es auch nicht nach 5, sondern nach 1
(bei entsprechenden OM_UPDATE, OM_NOTIFY Messages siehts auch nicht
besser aus).
Ich hatte es auch mal mit einen Stringgadget probiert(neuen Inhalt
setzen). Dabei wird der Inhalt geaendert, die Aenderung wird aber erst
dann sichtbar, wenn das Stringgadget neu aktiviert wird.
tschuess
[|8:)