Seite 2 von 3

Re: SplitView

Verfasst: 01.07.2019 22:39
von Josh
RSBasic hat geschrieben:
Josh hat geschrieben:Ich habe mir überlegt, ob du es vielleicht so hinbekommen könntest, dass dass ursprüngliche Sci-Gadget immer in dem Splitterteil liegt, das gerade den Focus hat. D.h., wenn ich vom oberen Teil in den Unteren wechsle, dann müsstest du die beiden Sci-Gadgets austauschen.
Wenn ich je nach Fokus die ScintillaGadgets austausche, dann ist es für den User nur verwirrend, da er z.B. zwei verschiedene Scrollpositionen hat und wenn plötzlich das obere ScintillaGadget unten ist und das andere oben, kann das sehr unübersichtlich beim Programmieren sein.
Nein, ich habe mir das schon so gedacht, dass der User gar nicht merkt, dass du die beiden Sci-Gadgets tauscht. Dazu müsstest du natürlich den Code und den Curser so positionieren, wie es im ursprünglichen Splitterteil war. D.h., wenn im unteren Sci-Gadget der Code ab Zeile 257 angezeigt wurde und der Cursor auf Zeile 265, Spalte 20 positioniert wurde, dann wird nach dem Swap der beiden Sci-Gadgets das Untere genau wieder auf Zeile 257 und der Cursor auf 265/20 gesetzt.

Somit arbeitet der User immer im original Sci-Gadget und hat immer vollen Zugriff auf Menü, Kontextmenü, kopieren etc. etc.
Dein eigenes Kontextmenü und alle sonstigen selbstgebastelten Befehle könntest du dir in diesem Fall sparen.



RSBasic hat geschrieben:Hast du zufällig wieder einen schnellen Befehl für mich? Ich erinnere mich ja noch an die Konsante #SCI_FOLDLINE, die sehr langsam ist, die ich anfangs in meinem Code Cleaner zuerst eingebaut habe.
Freak schreibt am Ende der Sourcefiles seine IDE-Optionen. Da gibt es eine Zeile, die ungefähr so aussieht:
"; Folding = AOBAAAAAAAAAAAAAAAA+"

Ich bin mir nicht sicher, aber ich glaube dieser String kommt von Scintilla. Wenn dem so ist, dann könntest du im einen Splitterteil so die Faltungen lesen und im anderen damit wieder setzen. Ich muss mal gucken, ob das von Sci kommt.

Re: SplitView

Verfasst: 02.07.2019 06:19
von Josh
RSBasic hat geschrieben:Hinzugefügt: Im Kontextmenü kann ausgewählt werden, ob die aktuelle Datei oder ob eine Datei aus einem anderen Tab angezeigt werden soll.
Da du ja keine Tabnamen im Kontextmenü anzeigst, ist die Reihenfolge ganz wichtig. Aber da stimmt irgendwas nicht.

Die aktuellen Tabs in der richtigen Reihenfolge erhältst du mit 'GetEnvironmentVariable("PB_TOOL_FileList")'. Leider sind da keine ungespeicherten Sources enthalten. Da ungespeicherte Sourcecodes meistens am Ende der Tabs stehen, wird dies in der Praxis weniger Rolle spielen. Einfach einen Hinweis in der Beschreibung und gut ist ^^

Re: SplitView

Verfasst: 02.07.2019 08:25
von RSBasic
Josh hat geschrieben:Nein, ich habe mir das schon so gedacht, dass der User gar nicht merkt, dass du die beiden Sci-Gadgets tauscht. Dazu müsstest du natürlich den Code und den Curser so positionieren, wie es im ursprünglichen Splitterteil war. D.h., wenn im unteren Sci-Gadget der Code ab Zeile 257 angezeigt wurde und der Cursor auf Zeile 265, Spalte 20 positioniert wurde, dann wird nach dem Swap der beiden Sci-Gadgets das Untere genau wieder auf Zeile 257 und der Cursor auf 265/20 gesetzt.
Ich kann es später mal testen. Mal schauen, wie sich das verhält.
Josh hat geschrieben:Da du ja keine Tabnamen im Kontextmenü anzeigst, ist die Reihenfolge ganz wichtig. Aber da stimmt irgendwas nicht.
Das stimmt, aber da kann ich leider nicht viel dagegen machen. Ich lese die Tabs bzw. die vorhandenen ScintillaGadgets mit EnumChildWindows_() aus. Da gibt es leider kein SQL-Order by. :D
Josh hat geschrieben:Die aktuellen Tabs in der richtigen Reihenfolge erhältst du mit 'GetEnvironmentVariable("PB_TOOL_FileList")'. Leider sind da keine ungespeicherten Sources enthalten. Da ungespeicherte Sourcecodes meistens am Ende der Tabs stehen, wird dies in der Praxis weniger Rolle spielen. Einfach einen Hinweis in der Beschreibung und gut ist ^^
Das Problem ist, dass die von PB bereitgestellten Umgebungsvariablen nur einmalig erstellt und nicht aktualisiert werden.
Mit EnumChildWindows_() erhalte ich immer die aktuelle Tabliste (nur manchmal nicht in der richtigen Reihenfolge).
Da die Tabliste ein CanvasGadget ist, kann ich leider auch keine Tab-Texte auslesen wie beim PanelGadget.
Mehr Möglichkeiten habe ich leider nicht.
Wenn man diese Funktion (Datei aus anderem Tab) nutzen nöchte, muss man nach Gefühl durchklicken, um die gewünschte Datei zu finden.
Alternativ wäre es möglich, die ersten X Zeichen des jeweiligen Quellcodes als Vorschau anzuzeigen. Entweder im MenuItem oder falls es möglich ist, per MouseOver.

Re: SplitView

Verfasst: 02.07.2019 08:31
von IB-Software
RSBasic hat geschrieben: Alternativ wäre es möglich, die ersten X Zeichen des jeweiligen Quellcodes als Vorschau anzuzeigen. Entweder im MenuItem oder falls es möglich ist, per MouseOver.
:allright:

Re: SplitView

Verfasst: 02.07.2019 08:53
von #NULL
RSBasic hat geschrieben:Das Problem ist, dass die von PB bereitgestellten Umgebungsvariablen nur einmalig erstellt und nicht aktualisiert werden.
Ich weiß nicht genau was ihr da macht bzw worum es geht, da ich auf Linux bin, aber ich hab wieder mal eine Idee :) . Vielleicht kannst du ein separates Tool über einen Menüpunkt starten, wie du es für 'new Tab' machst, welches dir dann die aktuelle PB_TOOL_FileList mitteilt.

Re: SplitView

Verfasst: 03.07.2019 13:47
von dige
Hallo RSBasic, vielen Dank für dieses Tool. Ich komme ich noch nicht so richtig damit zurecht,
bzw. verstehe den Anwendungsfall nicht.

Im unteren Fenster wird der vollständige (ungefaltene) Code nochmal angezeigt - man kann somit an zwei
verschiedenen Stellen desselben Codes "gleichzeitig" arbeiten, da Änderungen automatisch synchronisiert
werden, richtig?

Dadurch kann ich hin- und herspringen vermeiden (was aber durch dein Tools MultiColorProcs jetzt
deutlich effizienter gelingt) :D

Ist das so in etwa der Usecase oder nutzt ihr das ganz anders?

Ich habe spontan eine Steuerung / Synchronisierung des zweiten Fensters vermisst,
mit deren Hilfe ich die gleiche Qullcode Zeile anspringen kann, wie im oberen Fenster. Da Doppelklick
auf die Prozeduren Liste nur auf das obere Fenster wirkt.

Da ich viel mit Spiderbasic in Kombination mit SpiderBite arbeite, habe ich oft das Problem, dass
gern an die letzte Zeile springen möchte, an der ich vor dem compilieren gearbeitet habe.

Grund: da Purebasic und Spiderbasic Code in einer Datei werden und beim Compilieren gesplittet werden,
ermittelt der Compiler eine falsche Zeilennummer..

Ist sowas möglich?

Ciao Dige

Re: SplitView

Verfasst: 03.07.2019 15:46
von Kurzer
Vielen Dank für die neue Version, RSBasic. :allright: Copy/Paste usw. klappt hervorragend. Damit wären meine Wünsche vollständig erfüllt. Herzlichen Dank!
dige hat geschrieben:Im unteren Fenster wird der vollständige (ungefaltene) Code nochmal angezeigt - man kann somit an zwei
verschiedenen Stellen desselben Codes "gleichzeitig" arbeiten, da Änderungen automatisch synchronisiert
werden, richtig?
Dadurch kann ich hin- und herspringen vermeiden (was aber durch dein Tools MultiColorProcs jetzt
deutlich effizienter gelingt) :D
Jo genau dafür ist das Tool gedacht. Ich bin z.B. ein "visueller Mensch", von daher ist es sehr hilfreich, wenn man sich im zweiten View z.B. ein paar Sachen aus bereits bestehendem Code oder fertigen Prozeduren nochmal ansehen kann, während man an einer neuen Prozedur arbeitet. Im Code hin- und herspringen macht mich irre. Ich verliere dadurch ziemlich oft den Faden.

Ist sicher auch für Leute interessant, die an mehreren Stellen in einer Datei parallel coden. Manchmal läuft es ja zwangsläufig darauf hinaus, wenn man Coderevision betreibt und irgendwas ändert, weil man eine bessere Lösung hat. Dann kann es sein, dass man diese Änderungen an mehreren Stellen durchführen muss.

Re: SplitView

Verfasst: 03.07.2019 22:15
von RSBasic
Josh hat geschrieben:Somit arbeitet der User immer im original Sci-Gadget und hat immer vollen Zugriff auf Menü, Kontextmenü, kopieren etc. etc.
Dein eigenes Kontextmenü und alle sonstigen selbstgebastelten Befehle könntest du dir in diesem Fall sparen.
Ich habe deinen Vorschlag jetzt in einem Kopie-Projekt testweise umgesetzt und scheint auch gut zu funktionieren. Beide ScintillaGadgets werden nach dem Klick auf das untere ScintillaGadgets vertauscht inkl. Setzung des Cursors und der Scrollposition. Leider flackert es manchmal kurz.
Kannst du die folgende Beta-Version testen?
@All: Ihr könnt auch gerne testen und mir sagen, ob diese Vorgehensweise besser ist.
Beta-Version: https://www.rsbasic.de/temp/SplitView.zip

Diese Austausch-Funktion würde aber nur für die eigene PB-Datei Sinn ergeben. Wenn man stattdessen den Code aus einem anderen Tab anzeigen möchte, würde das nicht funktionieren, da beide Codes in den ScintillaGadgets komplett verschieden sind.

Re: SplitView

Verfasst: 04.07.2019 08:38
von Josh
Prinzipiell müsste es so funktionieren. Folgendes habe ich festgestellt:
  • Angenommen das obere Gadget hat Platz für 38 Zeilen und das Untere Platz für 50 Zeilen
  • Angenommen ich habe keine Faltungen oder alle Faltungen sind in beiden Gadgets geöffnet
  • Wenn ich nun von dem oberen Gadget in das untere wechsle und innerhalb der ersten 38 Zeilen (also die Anzahl der möglichen Zeilen im oberen Gadget) bleibe, passt alles.
  • Wenn ich allerdings auf Zeile 39 im unteren Gadget wechsle, dann verschiebt sich die Anzeige um eine Zeile, bei Klick auf Zeile 40 um zwei Zeilen (usw.), obwohl das nicht sein sollte. Da hast du irgendeinen Fehler in den Berechnungen.
  • Irgendwie hast du dein selbstgemachtes Kontextmenü noch drinnen. Ist mir schon ein paar mal aufgepoppt, obwohl normal das native Pb-Kontextmenü kommen sollte und meistens auch kommt.
  • Ich weiß nicht was passiert, aber schau mal auf deinen Dummytab (den mit deiner roten Erklärung), da flackert es ganz wild rum.
Das mit den Faltungen schau ich mir noch an, ob mir da was dazu einfällt. Weiß nicht, ob ich heute dazu Zeit habe, spätestens morgen sollte es klappen.

Da du in diesem Fall ja kein eigenes Kontextmenü mehr hast, fehlt auch die Auswahlmöglichkeit auf Codes aus anderen Tabs. Da habe ich mir überlegt, ob du dafür nicht ein Kontextmenü basteln könntest, das mit einem Rechtsklick auf den Splitter aufgeht.

Rein aus Interesse (könnte auch für die Codefaltungen notwendig sein): Hast du einen Hook auf die SCI-Notifications?

RSBasic hat geschrieben:Diese Austausch-Funktion würde aber nur für die eigene PB-Datei Sinn ergeben. Wenn man stattdessen den Code aus einem anderen Tab anzeigen möchte, würde das nicht funktionieren, da beide Codes in den ScintillaGadgets komplett verschieden sind.
Würde schon Sinn machen, wenn du dir das SCI Gadget aus dem original Tab 'ausleihst' und im unteren Gadget anzeigst. Ein Swap beim Wechsel vom oberen ins untere Gadget wäre dann nicht notwendig, allerdings müsstest du das SCI Gadget auch wieder an den original Tab 'zurückgeben'.

Re: SplitView

Verfasst: 04.07.2019 09:20
von RSBasic
Guten Morgen,

das Kontextmenüs und den Dummytab habe ich bewusst ignoriert. Es soll erstmal nur eine Beta-Version für die Austauschfunktion sein.
Wenn das funktioniert, dann kann ich alles andere ebenfalls anpassen.
Josh hat geschrieben:
RSBasic hat geschrieben:Diese Austausch-Funktion würde aber nur für die eigene PB-Datei Sinn ergeben. Wenn man stattdessen den Code aus einem anderen Tab anzeigen möchte, würde das nicht funktionieren, da beide Codes in den ScintillaGadgets komplett verschieden sind.
Würde schon Sinn machen, wenn du dir das SCI Gadget aus dem original Tab 'ausleihst' und im unteren Gadget anzeigst. Ein Swap beim Wechsel vom oberen ins untere Gadget wäre dann nicht notwendig, allerdings müsstest du das SCI Gadget auch wieder an den original Tab 'zurückgeben'.
Genau das meinte ich ja. Diese Austauschfunktion (oberes -> unteres ScintillaGadget und umgekehrt) wäre nicht notwendig.
Aus Klauen aus dem Dummy-Tab bleibt bestehen.
Josh hat geschrieben:Wenn ich allerdings auf Zeile 39 im unteren Gadget wechsle, dann verschiebt sich die Anzeige um eine Zeile, bei Klick auf Zeile 40 um zwei Zeilen (usw.), obwohl das nicht sein sollte. Da hast du irgendeinen Fehler in den Berechnungen.
Schau ich mir später mal an.