Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NtuiCreator
#31
Den Verein kannte ich noch gar nicht Big Grin

Na ja, was soll ich nun sagen ?
Mir macht das nix aus, das Tool wird sowieso nicht für jeden interessant sein, weil es sich doch aussschließlich damit befasst mit Ntui Guis zu erstellen...

Am besten wird sein, du machst einen eigenen Thread auf der das Thema behandelt ob du das "darfst" oder nicht, denn ich kann nicht für andere sprechen.
Zitieren
#32
Ich habe mich mal dazu entschlossen den bisherigen Stand der Dinge zu veröffentlichen Confusedhock:

Fehler sind auf alle Fälle noch drin, also Vorsicht mit dem rumprobieren von wichtigen Sachen Wink

Im Readme stehen auch ein paar Dinge.
Was leider nicht drinsteht, ist die Tatsache, das man Attribute durch Doppelklick auch einfügen kann Big Grin
Zitieren
#33
Update:

Version 0.7
Show zeigt nun auch den aktuellen Source der Textbox an.In der Vorversion konnte nur ein
eingeladener Source per Show angezeigt werden.

Wenn kein Fenster erzeugt oder keine Id angegeben wurde,
wird nun eine Fehlermeldung ausgegeben...
Zitieren
#34
Update:

Version 0.8

Neu ist das Menü Edit.
Copy, Past, Undo, Delete sowie Select usw..

Fehler der Textbox sind nun behoben.

Download wie immer im ersten post zu finden
Zitieren
#35
Schön. Was mir aufgefallen ist:

Die Gadget Liste wäre am besten dynamisch, also das Resultat vom Scan. Dann sparst du dir das hardcoden und das Menu ist immer aktuell mit der NTUI Version.

Das geht ungefähr so:
Code:
<SubMenu label='Gadgets' id='NCGadgetListHolder'>
</SubMenu>
Und dan machst du ein Fragment "GadgetListFragment.xml":
Code:
<MenuItem id='NCGagetGetListItem'/>

[ab3]*shclass.ntuiScanHandle = ntui_BeginScanClasses{""}
Repeat
className.s = ntui_GetNextScanName{*shclass}
If (className)
*holder.tuiObject = ntui_GetObjectByID{*ntui,"NCGadgetListHolder"}
If *holder
*fragment.tuiObject = ntui_BuildFromXMLFile{*holder,"NCGadgetListFragment.xml"}
If *fragment
*item = ntui_GetObjectByID{*fragment,"NCGadgetListItem"}
If *item
ntui_SetAttr{*item,#TUIMIA_LABEL,className}
ntui_SetAttr{*item,#TUIMIA_ONCLICK,"Add"+className}
End If
End If
End If
End If
End If
Until className = ""

ntui_EndScan{*shclass}[/ab3]

Dann hast du noch das Problem mit "capitalizing", deshalb würde ich das alles lowercasen, auch das XML.
Noch ein Problem ist wie du die dann erzeugst, wenn du den namen nicht kennst.
Deshalb gibst du denn allen die gleiche "OnClick" Id, und holst den namen aus dem label.
Dann kannst du keine Unterscheidung machen zwischen gruppen, engine, button etc. aber das halte ich auch nicht für wichtig.
Dafür sind die dann alphabetisch sortiert.

Ein kleiner Bug was mir aufgefallen ist:
Das herausfinden der Attribute während dem Tippen funktioniert nur einmal, danach nicht mehr.

Du könnstest zur Verfeinerung noch Attribute, die es nicht gibt, mit Rot unterschlängeln.

Das Menu wäre auch besser in eine MenuBar zu fassen, und dann nicht "DropMenu" sondern "MenuTitle" zu nehmen.
Dann kann der User auch später in den NTUI Prefs entscheiden, ob er es im Fenster (wie z.B. under MS Windows) oder im Screen Title haben will (wie AmigaOS).
Zitieren
#36
Danke für deine Anmerkungen !

Ja das sind gute Hinweise, ich werde versuchen das umzusetzen.
Zitieren
#37
Frage,

Welchen Typ hat bei dir *ntui ? Ist die Engine gemeint oder das Window ?
und welchen Typ hat *item ? .tuiObject ?

Ich habs mal so eingebaut, aber in der Gadgetliste wird dann nichts angezeigt, obwohl der Source brav abgearbeitet wird.

Man könnte dennoch die Unterscheidung einbauen für Window Engine Requester. Die ändern sich doch nicht und könnten statisch bleiben
Muß eben beim Scan nur "ausgelassen" werden
Zitieren
#38
Kurz: *item ist das .tuiMenuItem, *ntui ist die .tuiEngine

Lang:
*item ist hier .tuiMenuItem, du solltest aber .tuiObject nehmen (sonst machst du einen pösen Cast) und dann testen ob das stimmt, denn jemand könnte ja aus dem Fragment.xml auch was anderes machen:

[ab3]*item.tuiObject = ntui_GetObjectByID{*fragment,"NCGadgetListItem"}
if (*item >< Null)
ntui_GetAttr{*item,#TUIA_CLASSID,&classId.l}
If (classId=#TUICLASS_MENUITEM)
...
End If
End If[/ab3]

*ntui ist irgendein übergeordnetes Objekt. Engine, Window, Group. Ich mache immer die Engine selbst global, damit man von überall bequem an die Objekte kommt. Setzt natürlich voraus, dass du die Objekt ID nur einmal hast, also z.B. keine Editor Fenster hast. Sonst musst du erst das entsprechende Fenster/Gruppe suchen, und dann die ID.
Zitieren
#39
Tja, was soll ich sagen, genau so habe ichs angegeben, *engine und tuiObject....
Aber in der GadgetSubmenü wird nix angezeigt, bzw bleibt leer...

Im NtuiMain.xml habe ich das hardcode rausgemacht, den Comment mal gelassen:

Code:
<DropDown Label='Objects' image='button'>
                <SubMenu Label='Gadgets' id='NCGadgetListHolder'>
                </SubMenu>
                <MenuItem Label='Comment'     onClick='AddComment'/>
            </DropDown>

eine neues xml file angelegt mit dem Name NCMenuefragment.xml
dadrin steht nur das : <MenuItem id='NCGadgetListItem'/>

und im Source dann:

Code:
Statement creator_ScanGadgetClasses{}
  SHARED startpath
  Stop

  *shclass.ntuiScanHandle = ntui_BeginScanClasses{""}
  Repeat
    className.s = ntui_GetNextScanName{*shclass}
    If (className)
      *holder.tuiObject = ntui_GetObjectByID{*engine,"NCGadgetListHolder"}
      If *holder
        *fragment.tuiObject = ntui_BuildFromXMLFile{*holder,startpath+"/Layout/NCMenuefragment.xml"}
        If *fragment
          *item.tuiObject = ntui_GetObjectByID{*fragment,"NCGadgetListItem"}
          If *item
            ntui_SetAttr{*item,#TUIMIA_LABEL,className}
            ntui_SetAttr{*item,#TUIMIA_ONCLICK,"Add"+className}
          EndIf
        EndIf
      EndIf
    EndIf
  Until className = ""

  ntui_EndScan{*shclass}

End Statement


wobei fragment und item die selbe Adresse haben ?
Zitieren
#40
Ja, in dem Fall haben Fragment und Item die selbe Adresse weil es nur ein Objekt ist. Aber z.B. könnten die MenuItems in eine Gruppe gepackt werden.
So und nun meinst du die erscheinen nicht?
Probier mal nach dem du das alles bebaut hast am ende ein
[ab3]... GUI manipulieren...
ntui_Rethink{*holder}[/ab3]
Das sollte automatisch passieren, aber das geht glaube ich momentan noch nicht wenn die GUI schon einmal Layouted wude, d.h. du hast zwar die Objecte erstellt, NTUI hat sie aber nicht layouted und deshalb sind sie nicht sichtbar.
Wenn *holder nicht reicht, kannst du auch die ganze Engine neu layouten, schaden tut's nicht.

PS: ich würde "MenuTitle" nehmen und nicht "DropDown". DropDown ist nur für kleine untergeschobene Menues oder auch andere, beliebige Schaltflächen. Wenn das aber wie ein "normales" Menu gehandhabt werden soll, wre MenuTitle richtig.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste