Re: Bug in FOX 1.7.79: FXFileSelector::getFilenames() splits selected filenames.

Jeroen van der Zijp <[email protected]>
Newsgroups gmane.comp.lib.fox-toolkit.user
Organization FOX Toolkit
Message-ID <20220905212018.0b14b961@leviathan>
On Fri, 2 Sep 2022 03:15:01 +0200
Daniël Hörchner <[email protected]> wrote:

>> Gesendet: Donnerstag, 01. September 2022 um 23:56 Uhr
>> Von: [email protected]
>> An: "Daniël Hörchner" <[email protected]>
>> Betreff: Re: Bug in FOX 1.7.79: FXFileSelector::getFilenames() splits selected filenames.
>> On 2022-09-01 03:56, Daniël Hörchner wrote:  
>> > Hallo Jeroen,
>> >
>> > We hebben meer dan 15 jaar geleden wat e-mails uitgewisseld, dus ik
>> > weet dat we in het Nederlands kunnen communiceren :-)
>> >
>> > Tijdens het bijwerken van een oude applicatie voor FOX 1.7.79 kwam ik
>> > een bug tegen in FXFileSelector. FXFileSelector::getFilenames()
>> > retourneert bestandsnamen die eerder geselecteerd waren met
>> > FXFileSelector::setFilename() in delen (als meerdere bestandsnamen)
>> > als die bestandsnamen spaties bevatten *en*
>> > FXFileSelector::setSelectMode(SELECTFILE_MULTIPLE_ALL) is aangeroepen.
>> > Het argument SELECTFILE_MULTIPLE geeft hetzelfde resultaat.
>> > Bestandnamen geselecteerd via de GUI worden correct geretourneerd. Als
>> > FXFileSelector::setSelectMode() niet wordt aangeroepen worden de
>> > bestandnamen ook correct geretourneerd.
>> >
>> > Zou je hier naar willen kijken?  
>> 
>> Hallo, Daniel,
>> 
>> Het idee is dat in SELECTFILE_MULTIPLE en SELECTFILE_MULTIPLE_ALL de
>> getFilenames() API wordt gebruikt. Maar als je dus setFilename()
>> gebruikt on de filename te zetten, wordt de string zonder encoding
>> in de textbox gestopd.
>> 
>> Misschien moet het altijd met encoding gebeuren [i.e. encodeer als
>> er spaties (etc) in zitten. Ongeacht de selection mode.
>> 
>> Ik moet bedenken hoe we het gaan aanpakken, e.g. waneer iemand de
>> FXFileSelector gebruikt om een naam in te tikken. Liefst zou het
>> dan niet nodig moeten zijn om met de hand de name te encoderen,
>> natuurlijk.
>> 
>> Dus dan hebben we het dat soms de text WEL, en soms de text NIET
>> gecodeerd is.
>> 
>> Het is niet duidelijk hoe dat moet worden behandeld (automatisch
>> coderen? Of iets anders?).  
>
>Hallo Jeroen,
>
>Bedankt voor het snelle antwoord.
>
>Ik liep hier tegenaan, omdat het ongewenst nieuw gedrag is ten opzichte van FOX
>1.4 en FOX 1.6. Ik denk dat het voor een gebruiker van FOX transparant zou
>moeten zijn hoe FOX text codeert. Als het op een of andere manier relevant is,
>zou dat het in de documentatie (/header bestand) te vinden moeten zijn.
>
>Ik snap niet wat je bedoelt met "niet coderen". Text is altijd op een bepaalde
>manier gecodeert natuurlijk. Misschien bedoel je converteren?
>
>Maar in mijn usecase komt er geen typen aan te pas. Ik synchroniseer een
>FXFileDialog met een FXFileSelector. Ik gebruik FXFileSelector::getFilenames()
>en FXFileDialog::setFilename() voor elk bestand, voordat de FXFileDialog
>geopend wordt. Nadat de gebruiker een of meerdere bestand heeft
>ge(de)selecteerd (met de muis) gebruik ik FXFileDialog::getFilenames() en
>FXFileSelector::setFilename() voor elk bestand.
>
>Het *lijkt* erop dat er geen conversie nodig zou moeten zijn op een GNU/Linux
>systeem. Merk op dat ik schreef dat bestanden die door de gebruiker worden
>geselecteerd in FXFileDialog *wel* correct in de FXFileSelector terecht komen,
>dus dat is tenminste een inconsistentie.
>
>Mvg,
>Daniël
>



Een mogelijke oplossing [s.v.p. test de nieuwe snapshot], is hetvolgende:

	1) Andere encoding voor files in SELECTFILE_MULTIPLE en SELECTFILE_MULTIPLE_ALL
           mode: gebruik geen quotes, gewoon de on-veranderde filenamen,

	2) Als er >1 filenaam is, schijdt ze met ','.

	3) Als er een ',' of '\' voorkomt in de filenaam, plak er een '\' voor.

Regel (3) is 99.9% van de tijd niet van toepassing, omdat gebruik van kommas
in filenamen niet gebruikelijk is; maar voor het geval dat, kan met toepassing
van regel (3) alsnog zo'n filename gebruikt worden.

Verder:

	4) In SELECTFILE_MULTIPLE en SELECTFILE_MULTIPLE_ALL gaat setFilename()
 	   regel (3) toepassen indien nodig.

	5) In SELECTFILE_ANY of SELECTFILE_EXISTING of SELECTFILE_DIRECTORY modes,
 	   wordt regel (3) niet toegepast en wordt de filenaam onaangetast door-
	   geven.

	6) De getFilename() past in SELECTFILE_MULTIPLE of SELECTFILE_MULTIPLE_ALL mode
	   regel (3) in omgekeerde richting om, en haalt de '\' erweer vanaf.

	7) In SELECTFILE_ANY of SELECTFILE_EXISTING of SELECTFILE_DIRECTORY modes, geeft
	   getFilename() de text onaangetast terug.

	8) De getFilenames() doet hetzelfde als getFilename(), alleen geeft resultaten
	   als een array van strings, om zodoende meerdere filenamen te retourneren.

Er zijn ongetwijfeld "corner cases" waar dit nieuwe schema fout gaat, maar IMHO is het
een stuk beter dan voorheen.  Het wordt dus ook makkelijker om meerdere filenamen
in te tikken.




				-- JVZ


P.S. Mogelijk is dat de keuze van '\' als escape code op Windows misschien niet ideaal
is.  We kunnen wellicht op Windows de '^' gebruiken in plaats van '\' omdat anders
het intikken van een relatief direcory-path wat lastiger wordt.




-- 
+----------------------------------------------------------------------------+
| Copyright (C) 21:00 09/ 5/2022 Jeroen van der Zijp.   All Rights Reserved. |
+----------------------------------------------------------------------------+


_______________________________________________
Foxgui-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/foxgui-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.