AmiBlitz³

Normale Version: NTUI: Enable Disable
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Ich habe heute ein komisches verhalten bei NtuiCreator unter MorphOS festgestellt. Und zwar funktioniert das Enablen/Disablen nur einmal !

Wenn ich auf Button1 klicke, dann disabled sich Button1 und enabled sich Button2. Klicke ich auf Button2 dann bleibt alles so wie es ist...

Ich habe dazu nun auch ein kleines simples Testprogramm geschrieben:

Hier der Code:

Code:
WBStartup                                    ; WbStart erlauben

; /*========== Include NTUI ========== */
XINCLUDE "ntui.include.ab3"                  ; includieren der NTUI Funktionalitaet


; /*========== Init Program ========== */    ; anlegen einer neuen Engine aus dem XML Datenfile
*engine.tuiEngine = ntui_GetEngine{ntui_BuildFromXMLFile{#NULL,"Layouts/EnableDisable.xml"}}
If (*engine = #NULL) Then error{"unable to create NTUI environment!"} : Goto exit
If ntui_ShowWindowByID{*engine,"EDMainWindow"} = False Then error{"unable to show EDMainwindow!"} : Goto exit ; zeige das Hauptfenster

; /*========== Message Loop ========== */
.mainloop
While quit.b=False
  Wait_ $FFFFFFFF
  Repeat
    *Notify.tuiNotify = ntui_GetNotify{*engine}                 ; Notify aus der Engine bekommen
    Select ntui_GetNotifyID{*Notify}                            ; Notify auswerten...
      Case "EDClose"
        quit = True

      Case "Button1"
        ntui_SetAttrByID{*engine,"Button1",#TUIA_DISABLED,True}
        ntui_SetAttrByID{*engine,"Button2",#TUIA_ENABLED,True}
        message{"Buttons should change now"}

      Case "Button2"
        ntui_SetAttrByID{*engine,"Button1",#TUIA_ENABLED,True}
        ntui_SetAttrByID{*engine,"Button2",#TUIA_DISABLED,True}
        message{"Buttons should change now"}

    End Select
  Until *Notify = Null
Wend

.exit
; /*========== Aufraeumen    ==========*/
ntui_FreeEngine{*engine} ; die Engine freigeben (und alle Fenster schliessen)
End

und hier das xmlfile,der Pfad im Source sollte dann eben angepasst werden.

Code:
<Engine id='engine' appname='EnableDisable' appicontext='EnableDisable' oniconify='Iconify' onpopup='PopUp' useaiss='true'/>
<Window id='EDMainWindow' title='Enable Disable Example' onClose='EDClose'>
    <VGroup>
        <Toolbutton text='Button1' id='Button1' onClick='Button1' align='left' image='TBImages:button' help='click to enable the second Button and disable first'/>
        <Toolbutton text='Button2' id='Button2' onClick='Button2' align='left' image='TBImages:button' disabled='True' help='click to enable the first Button and disable second'/>
    </VGroup>
</Window>

Ich werde mal versuchen jedes Problem das mir nun im Zusammenhang mit Ntui auffällt auch ein Beispiel zu liefern auch als fertiges exe.
Evtl. hilft das ja manchen Usern doch mal kurz zu testen anstatt dann alles selbst zu kompilieren.

Mußte Zip nehmen, Lha ist nicht erlaubt.
hm... funktioniert bei mir wie es soll. Du kannst übrigends das XML auch gleich mit reinpacken, dann ist es einfacher zu testen. kleiner nit-pick: "TBImages:" kannst du weglassen. Wenn du TBImages: angibtst, dann legst du dich auf AISS hardcoded fest. Wenn du aber z.B. statt "TBImagesConfusedave" einfach "save" machst, dann sucht NTUI zuerst im GUI Pfad des Programms, dann in AISS. So kannst du Bilder nur für dein Programm mitliefern, austauschen oder auch eine komplett andere Bilder Bibliothek benutzen, z.B. OpenIcon oder so.

[ab3]WBStartup ; WbStart erlauben

; /*========== Include NTUI ========== */
XINCLUDE "ntui.include.ab3" ; includieren der NTUI Funktionalitaet


; /*========== Init Program ========== */ ; anlegen einer neuen Engine aus dem XML Datenfile
*engine.tuiEngine = ntui_GetEngine{ntui_BuildFromXMLMem{#NULL, ?layout}}
If (*engine = #NULL) Then error{"unable to create NTUI environment!"} : Goto exit
If ntui_ShowWindowByID{*engine,"EDMainWindow"} = False Then error{"unable to show EDMainwindow!"} : Goto exit ; zeige das Hauptfenster

; /*========== Message Loop ========== */
.mainloop
While quit.b=False
Wait_ $FFFFFFFF
Repeat
*Notify.tuiNotify = ntui_GetNotify{*engine} ; Notify aus der Engine bekommen
Select ntui_GetNotifyID{*Notify} ; Notify auswerten...
Case "EDClose"
quit = True

Case "Button1"
ntui_SetAttrByID{*engine,"Button1",#TUIA_DISABLED,True}
ntui_SetAttrByID{*engine,"Button2",#TUIA_ENABLED,True}
;message{"Buttons should change now"}

Case "Button2"
ntui_SetAttrByID{*engine,"Button1",#TUIA_ENABLED,True}
ntui_SetAttrByID{*engine,"Button2",#TUIA_DISABLED,True}
;message{"Buttons should change now"}

End Select
Until *Notify = Null
Wend

.exit
; /*========== Aufraeumen ==========*/
ntui_FreeEngine{*engine} ; die Engine freigeben (und alle Fenster schliessen)
End


layout:
Dc.b "<Engine id='engine' appname='EnableDisable' appicontext='EnableDisable' oniconify='Iconify' onpopup='PopUp' useaiss='true'/>"
Dc.b "<Window id='EDMainWindow' title='Enable Disable Example' onClose='EDClose'>"
Dc.b " <VGroup>"
Dc.b " <Toolbutton text='Button1' id='Button1' onClick='Button1' align='left' image='button' help='click To Enable the second Button AND Disable first'/>"
Dc.b " <Toolbutton text='Button2' id='Button2' onClick='Button2' align='left' image='button' disabled='True' help='click To Enable the first Button AND Disable second'/>"
Dc.b " </VGroup>"
Dc.b "</Window>",0[/ab3]
Hmmm, wenns bei dir funktioniert, macht MOS da was verkehrt bzw, funktioniert da nicht

Der nachteil eines "reingepackten" xmlfiles ist aber das ich das Programm wenn ich Änderungen mache jedes mal neu kompilieren muß...

Ps:
Ich schau mir nun mal die neu eingecheckten Includes an, evtl wird nun alles besser Big Grin
Bei mir funktioniert dein Demo auch ohne Probleme.

Das es bei dir nicht funktioniert könnte mit deinem bekannten Problem der strptr.include zusammen hängen da str_cmp{} aufgerufen wird durch ntui_SetAttrByID{..} ==> ntui_GetObjectByID{..} ==> str_cmp{..}.


Ps: Dies ist sehr gut nachzuverfolgen indem man PEDs Label/Includefunktions-Sprung nutzt dafür den Cursor auf den Funktionaufruf und dann ALT + Pfeil rechts drücken und in neuen Tab öffnet sich die entsprechende Includedatei und der Cursor springt an die entsprechende Funktion.