DialogDesign0R V1.84

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.16

Beitrag von HeX0R »

V1.17
  • Fehler beim Drag&Drop behoben (Parents konnten u.U. in eigene Clients verschoben werden, das geht natürlich gar nicht!)
  • Die Markierungen folgen nun Resizeoperationen
  • Den Fehler beim Splitter behoben
  • Vorbereitet für den Feature Request von hjf*
*Ich habe im Moment wenig Zeit, da muss ich etwas mehr Gehirnschmalz reinstecken, ich denke ich mache das per Drag&Drop vom Explorer.
Also einfach eine Dialog.xml auf das TreeGadget droppen und die enthaltenen Windows werden zusätzlich eingefügt.
Muss dann aber auch darauf achten, dass keine IDs und/oder Namen doppelt vorkommen.

So mal die Idee, Drag&Drop habe ich auch schon eingebaut, nur die Dateien verarbeite ich noch nicht.
hjf
Beiträge: 52
Registriert: 12.02.2014 20:02

Re: DialogDesign0R V1.17

Beitrag von hjf »

Ich habe den "dd.xml" ein bissl verändert, als Vorschlag versteht sich!

Es ist unschön, wenn einzelne Props, z.B. die ID, der Name oder auch
der Text im DD nicht vollständig zu sehen sind. Gerade die ID
kann lang werden, z.B. "#Win_Main_Spl_Props_Frm_Close_Btn_Cancel". Deshalb sind für die
drei die Felder der Gridbox angepasst.

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>

<dialogs>
  <window flags="#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_ScreenCentered" minheight="700" minwidth="600" name="Window_Main">
    <vbox expand="item:2">
      <!--Buttonbar etc.-->
      <hbox align="center" expand="no">
        <buttonimage width="20" height="20" name="newfile" onevent="OnEventNewDialog()"/>
        <buttonimage width="20" height="20" name="loadfile" onevent="OnEventLoadDialog()"/>
        <buttonimage width="20" height="20" name="savefile" onevent="OnEventSaveDialog()"/>
        <buttonimage width="20" height="20" name="savefileas" onevent="OnEventSaveDialog()"/>
        <empty width="35"/>
        <buttonimage width="20" height="20" name="showall" onevent="OnClickShowAll()"/>
        <buttonimage width="20" height="20" name="hideall" onevent="OnClickHideAll()"/>
        <empty width="10"/>
        <text text="Dialog Definition:"/>
        <vbox>
          <combobox width="100" name="definition" onevent="OnChangeDef()"/>
          <empty/>
        </vbox>
        <text text="Dialog Refresh Time:"/>
        <trackbar width="100" min="1" max="10" flags="#PB_TrackBar_Ticks" value="2" name="refreshdelay" onevent="OnRefreshDelay()"/>
        <text text="1000 ms" name="refreshtime"/> 
      </hbox>
      <hbox expand="yes">
        <splitter flags="#PB_Splitter_Vertical | #PB_Splitter_Separator" name="splitter">
          <!--Left, Objects-->
          <frame text="Objects:">
            <tree flags="#PB_Tree_AlwaysShowSelection" name="tree_objects" onchange="OnObjectTreeClick()" ondragstart="OnObjectTreeDrag()" onrightclick="OnObjectTreeRClick()"/> 
          </frame>
          <!--Right, Props-->
          <vbox expand="item:4">
            <!--Props-->
            <frame text="Properties">
              <gridbox columns="4" colexpand="item:4" rowexpand="no">
                <text text="ID:"/>
                <string colspan="3" name="_id" onchange="OnStringChanged()"/>
                <text text="Name:"/>
                <string colspan="3" name="_name" onchange="OnStringChanged()"/>
                <text text="Text:"/>
                <string colspan="3" name="text" onchange="OnStringChanged()"/>
                <text text="Width:"/>
                <string width="80" name="width" onchange="OnStringChanged()"/>
                <frame colspan="2" text="Flags" rowspan="7">
                  <tree flags="#PB_Tree_NoLines | #PB_Tree_CheckBoxes" name="flags" onleftclick="OnTreeClick()"/> 
                </frame>
                <text text="Height:"/>
                <string name="height" onchange="OnStringChanged()"/>
                <text text="Min:"/>
                <string name="min" onchange="OnStringChanged()"/>
                <text text="Max:"/>
                <string name="max" onchange="OnStringChanged()"/>
                <text text="Value:"/>
                <string name="value" onchange="OnStringChanged()"/>
                <text text="Group:"/>
                <string name="group" onchange="OnStringChanged()"/>
                <text text="Page:"/>
                <string name="page" onchange="onstringchanged()"/>
                <checkbox text="Invisible" name="invisible" onevent="OnCheckBoxChanged()"/>
                <frame text="Event Procedures" colspan="3" rowspan="3">
                  <vbox>
                    <combobox name="onevents" onchange="OnComboBoxChanged()"/>
                    <string name="onevent_proc" onchange="OnStringChanged()"/>
                  </vbox> 
                </frame>
                <checkbox text="Disabled" name="disabled" onevent="OnCheckBoxChanged()"/>
                <empty/>
                <hbox colspan="2" align="" expand="no">
                  <buttonimage width="24" height="24" name="userattributes" onevent="OnUserAttributes()"/>
                  <buttonimage width="24" height="24" name="refresh" onevent="OnClickRefresh()"/>
                  <buttonimage width="24" height="24" name="move_up" onevent="OnMenuMoveUp()"/>
                  <buttonimage width="24" height="24" name="move_down" onevent="OnMenuMoveDown()"/>
                </hbox> 
              </gridbox> 
            </frame>
            <!--Spec. Props-->
            <frame text="Special Properties">
              <multibox>
                <container invisible="yes" name="container_window">
                  <gridbox columns="4">
                    <text text="MinWidth:"/>
                    <string name="minwidth" onchange="OnStringChanged()"/>
                    <text text="MinHeight:"/>
                    <string name="minheight" onchange="OnStringChanged()"/>
                    <text text="MaxWidth:"/>
                    <string name="maxwidth" onchange="OnStringChanged()"/>
                    <text text="MaxHeight:"/>
                    <string name="maxheight" onchange="OnStringChanged()"/>
                  </gridbox> 
                </container>
                <container invisible="yes" name="container_boxes">
                  <gridbox columns="4">
                    <text text="Spacing:"/>
                    <string name="spacing" onchange="OnStringChanged()"/>
                    <text text="Align:"/>
                    <combobox name="alignbox" onchange="OnComboBoxChanged()"/>
                    <text text="Expand:"/>
                    <combobox name="expandbox" onchange="OnComboBoxChanged()"/>
                    <text text="Item:"/>
                    <string name="expandboxitem" onchange="OnStringChanged()"/>
                  </gridbox> 
                </container>
                <container invisible="yes" name="container_gridbox">
                  <gridbox columns="4" invisible="yes">
                    <text text="Columns:"/>
                    <string name="columns" onchange="OnStringChanged()"/>
                    <text text="Colspacing:"/>
                    <string name="colspacing" onchange="OnStringChanged()"/>
                    <empty colspan="2"/>
                    <text text="Rowspacing:"/>
                    <string name="rowspacing" onchange="OnStringChanged()"/>
                    <text text="Colexpand:"/>
                    <combobox name="colexpand" onchange="OnComboBoxChanged()"/>
                    <text text="Item:"/>
                    <string name="colexpanditem" onchange="OnStringChanged()"/>
                    <text text="Rowexpand:"/>
                    <combobox name="rowexpand" onchange="OnComboBoxChanged()"/>
                    <text text="Item:"/>
                    <string name="rowexpanditem" onchange="OnStringChanged()"/> 
                  </gridbox> 
                </container>
                <container invisible="yes" name="container_multibox"/>
                <container invisible="yes" name="container_singlebox">
                  <gridbox columns="4" colexpand="yes" rowexpand="no">
                    <text text="Margin:"/>
                    <combobox width="100" name="margincombo" onchange="OnComboBoxChanged()"/>
                    <text text="Value:"/>
                    <string width="120" name="marginext" onchange="OnStringChanged()"/>
                    <text text="Expand:"/>
                    <combobox name="expandsingle" onchange="OnComboBoxChanged()"/>
                    <text text="Align:"/>
                    <tree flags="#PB_Tree_NoButtons | #PB_Tree_CheckBoxes" rowspan="3" width="120" name="alignsingle" onleftclick="OnTreeClick()"/>
                    <text text="ExpWidth:"/>
                    <string name="expandwidth" onchange="OnStringChanged()"/>
                    <empty/>
                    <text text="ExpHeight:"/>
                    <string name="expandheight" onchange="OnStringChanged()"/> 
                  </gridbox> 
                </container>
                <container invisible="yes" name="container_splitter">
                  <gridbox columns="4">
                    <text text="FirstMin:"/>
                    <string name="firstmin" onchange="OnStringChanged()"/>
                    <text text="SecondMin:"/>
                    <string name="secondmin" onchange="OnStringChanged()"/>
                  </gridbox> 
                </container>
                <container invisible="yes" name="container_scrollarea">
                  <gridbox columns="4">
                    <text text="Scrolling:"/>
                    <combobox name="scrolling" onchange="oncomboboxchanged()"/>
                    <empty colspan="2"/>
                    <text text="InnerHeight:"/>
                    <string name="innerheight" onchange="onstringchanged()"/>
                    <text text="InnerWidth:"/>
                    <string name="innerwidth" onchange="onstringchanged()"/> 
                  </gridbox> 
                </container>
                <container name="container_comment">
                  <hbox expand="item:2">
                    <text text="Comment:"/>
                    <editor name="comment" onevent="OnStringChanged()"/>
                  </hbox> 
                </container> 
              </multibox> 
            </frame>
            <!--Gridbox Childs-->
            <frame text="GridBox Childs">
              <hbox expand="yes" alignbox="top/left">
                <text text="Colspan:"/>
                <string name="colspan" onchange="OnStringChanged()"/>
                <text text="Rowspan:"/>
                <string name="rowspan" onchange="OnStringChanged()"/>
              </hbox> 
            </frame>
            <!--Log-->
            <frame text="Log:">
              <editor flags="#PB_Editor_ReadOnly" height="60" name="log"/> 
            </frame> 
          </vbox> 
        </splitter> 
      </hbox> 
    </vbox> 
  </window>
  <window flags="#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_Invisible | #PB_Window_Tool | #PB_Window_WindowCentered" minwidth="400" text="Special Attributes" name="Win_Attrib">
    <hbox expand="item:2">
      <frame text="User defined attributes" rowspan="8" width="160" height="180">
        <listview name="userattribs" onleftclick="OnUserAttribChange()"/> 
      </frame>
      <vbox align="" expand="no">
        <hbox expand="item:2">
          <text text="Name:"/>
          <string name="attrib_name" onchange="OnChangeAttribName()"/>
        </hbox>
        <hbox expand="item:2">
          <text text="Value:"/>
          <string name="attrib_value" onchange="OnChangeAttribValue()"/>
        </hbox>
        <hbox align="" expand="no">
          <buttonimage width="24" height="24" name="attrib_add" onevent="OnClickAttribAdd()"/>
          <buttonimage width="24" height="24" name="attrib_del" onevent="OnClickAttribDel()"/>
        </hbox> 
      </vbox> 
    </hbox> 
  </window>
</dialogs>
Ich verstehe nicht, warum die rechte Seite des Splitters beim
verkleinern des Fensters "rechts untergeschoben" wird, ab einer
bestimmten Fensterbreite. Mit dem Splitter laßt sie sich aber verkleinern.

Beim DragnDrop im Tree gibts noch ein anderes Problem:
Wenn sich z.B. in einem Frame eine Gridbox befindet, die viele Gadgets enthält, dann
ist diese Konstruktion im Tree nicht komplett sichtbar.

Will man nun zum Einfügen einer SingleBox Teile des Tree in ein temoräres Window Draggen,
dann ist dieses nicht sichtbar, weil es sich ganz unten im Tree befindet. Zuklappen geht hier
nur bedingt.

Ein bissl würde hier das Verschieben des temp-Windows im Tree nach Oben helfen, wesser wäre
aber der Tree würde beim Draggen scrollen bis das temp-Window sichtbar wird.
Eine Copy/Paste für Gadgads würde auch helfen.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.17

Beitrag von HeX0R »

Das SplitterGadget in PB ist ziemlich schlecht und verhält sich wie es gerade will.
Dieses alternative, auf Canvas basierende Ding, das Bisonte irgendwo verlinkt hatte, finde ich viel zu aufwändig für diesen Anwendungsfall und werde ich sicherlich nicht einbauen.
Wir müssen also mit diesem Mistding leben, bis es evtl. mal in irgendeiner PB Version verbessert wird.

Dass der Tree nicht scrollt beim draggen hat mich auch schon genervt, das ist aber erst mal nichts, was ich angreifen werde.
Ich müsste mich wieder mit GTK-Irrsinn beschäftigen, damit das unter Linux dann auch zuckt (oder tut es das evtl. sogar schon?).
Da bin ich erst mal geheilt.

D&D eines externen Dialogs hatte ich gestern erfolgreich eingebaut, aber dann einmal ein eingefrorenes Fenster gehabt.
Den Grund habe ich noch nicht gefunden und reproduzieren konnte ich es auch nicht mehr.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.18

Beitrag von HeX0R »

V1.18
  • Windows können hoch und runter geschoben werden
  • Beim draggen zum Rand, scrollt der Tree (nur Windows)
  • Weitere Dialog xml Dateien können per Drag&Drop hinzugefügt werden (also vom Explorer auf den Tree schieben)
  • Aktualisieren der Dialoge etwas verbessert
  • Ein paar der ComboBoxen mit dem Standardwert initialisiert
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: DialogDesign0R V1.18

Beitrag von PureLust »

Hi HeXOR,

wau ... hab' mit Deinem Designer zwar noch nicht rumspielen können, aber sieht ja seeehr vielversprechend aus. :allright:

Dabei kam mir sofort eine geniale Funktion beim Atari-ST in den Sinn, die ich bei anderen PCs schon immer vermisst hatte und die man mit Deinem Designer meiner Einschätzung nach umsetzen könnte.

Und zwar waren beim ST die GUIs als Resource in die EXE eingebunden und konnten durch einen Resourcen-Editor auch im nachhinein noch in der bestehenden EXE geändert werden. Man hatte also ein ausführbares Programm und konnte dessen GUI über einen Editor ändern (es gab natürlich die Möglichkeit, das mit Passwort zu schützen).

Genial wäre also, wenn Dein Editor auch Dialoge aus EXE-Resourcen einlesen und schreiben könnte und Du für den Programmierer ggfl. noch einige Funktionen für den einfachen Zugriff auf die Dialoge aus Resourcen zur Verfügung stellen könntest (z.B.: GetXMLfromRessource(...) ).

Ich fand die Möglichkeit beim ST, die GUI in einer kompilierten EXE anpassen zu können damals genial und hab da als Amiga-Programmierer immer neidisch rüber geschaut.
Gerade während der Entwicklungsphase hat das viele Vorteile gebracht, da man 'mal eben schnell' eine Änderung an der GUI vornehmen und testen konnte, ohne immer wieder direkt den Compiler anschmeißen zu müssen.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: DialogDesign0R V1.18

Beitrag von Sicro »

@HeXOR:
Tolle Arbeit :allright:
Schaue ich mir demnächst mal genauer an.

@PureLust:
Bei Windows benutzen manche Installer.exe-Dateien auch Resource-Dialogs. Das ist mir aufgefallen, als ich mich mit dem Auslesen der Version-Informationen beschäftigt habe (Modul "FileInfo").
Anstatt dafür die WinAPI-Funktionen zu verwenden, könnte man auch einfach einen String an das Ende der EXE-Datei hängen, der das generierte XML vom DD enthält. So wäre es dann auch OS-unabhängig.
Zuletzt geändert von Sicro am 31.03.2018 12:54, insgesamt 1-mal geändert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.18

Beitrag von HeX0R »

Das wäre sicherlich möglich, allerdings mag ich die Idee nicht besonders, das fest in den Sourcecode einzubauen.
Der DD soll Cross-Platform sein, und ausserdem wollte ich alles in einem Sourcecode haben, leider bietet PB keine nativen Resource-Handling-Befehle an, ich muss also wieder API nutzen (und wegen Linux Drag&Drop musste ich da eh schon viel zu viel einbauen).

Was ich mir vorstellen könnte, wäre ein Add-On System, das beim Laden und Speichern aufgerufen wird.
Dann könnte man so ein Add-On zusätzlich anbieten, dem DD ist es letztendlich ja egal, wo das XML herkommt, ich wollte ihn darauf beschränken, XML zu laden, zu bearbeiten und zu speichern.
Es sollte dann z.B. auch möglich sein ein Add-On zu basteln, das XML Dialoge direkt aus PB-Sourcecodes extrahiert und wieder zurückschreibt oder aber eben aus Resourcen.

Wäre das auch eine Idee?

Ich würde die Add-Ons dann allerdings eher als .dll/.so einbinden.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.19

Beitrag von HeX0R »

V1.19
  • Drag&Drop by Linux war kaputt...
  • Droppen vom DateiExplorer unter Linux geht nicht (ohne alles umzubauen), also habe ich ein neues Menü hinzugefügt (Load additional Dialogs).
  • AddOn System hinzugefügt
  • Beispiel AddOn (Lade/Speichere Dialog aus Source Code) hinzugefügt. Muss als AddOn_LadePB.dll o.ä. kompiliert werden. Wichtig ist das AddOn_ das folgende wird dann als Name genutzt
  • Kleinere Designveränderungen
Wegen der AddOns:
Am besten in DD_Addon_LoadPB.pb schauen, da sollte alles beschrieben sein.
Mit diesem System sollte es auch möglich sein auf Resourcen zuzugreifen, vielleicht macht ja mal ausnahmsweise jemand anders als ich so ein AddOn...

Ich mache jetzt einen Feature-Freeze!
Zuviele Dinge einzubauen birgt die Gefaht zuviele Dinge kaputt zu machen, also lasse ich das so und beseitige nur noch die Fehler.
Feature Requests sind natürlich dennoch willkommen, werden aber dann evtl. erst irgendwann umgesetzt (oder selber machen, Source ist ja da).
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: DialogDesign0R V1.19

Beitrag von Shardik »

Seit der Einführung der Addons in V 1.19 lässt sich leider der DialogDesign0r unter MacOS nicht mehr starten, weil PureBasic unter MacOS mehrere Library-Funktionen nicht unterstützt, z.B. ExamineLibraryFunctions(). Es wäre hilfreich, wenn Du den Aufruf InitAddOns() in main() in ein CompilerIf-Konstrukt setzen könntest:

Code: Alles auswählen

  CompilerIf #PB_Compiler_OS <> #PB_OS_MacOS
    InitAddOns()
  CompilerEndIf
Zusätzlich müsste dann noch die komplette Prozedur InitAddOns() in ein solches CompilerIf-Konstrukt gesetzt werden. Dann können zwar keine Addons in MacOS genutzt werden, aber der DialogDesign0r 1.19 lässt sich dann zumindest wieder unter MacOS starten und benutzen, obwohl dann immer noch Einschränkungen in der MacOS-Version bestehen, weil Drag 'n Drop nicht funktioniert, aber das ist dann natürlich der fehlenden Drag 'n Drop Unterstützung von PureBasic für TreeGadgets in MacOS geschuldet...
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.20

Beitrag von HeX0R »

Stimmt, MacOS konnte das gar nicht.
Ich habe das mal abgeändert, AddOns sollten nun auch für MacOS funktionieren.
Antworten