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