Portál AbcLinuxu, 30. dubna 2025 23:34
typedef struct FilesPanelEntry{ Glib::ustring name; Glib::ustring ext; Glib::ustring size; Glib::ustring date; Glib::ustring rwx; Glib::ustring owner; Glib::ustring group; };Pak mám objekt s TreeViewem. Objekt má kromě jiných i tyto metody metody:
virtual void addEntry( const FilesPanelEntry& entry ); virtual void clear(); virtual off64_t count(); virtual bool getEntry( off64_t n, FilesPanelEntry& entry ); virtual bool setEntry( off64_t n, FilesPanelEntry& entry );Metody získávají/nastavují jednotlivé položky TreeViewu. Ve FilesPanelEntry::size můžou být tyto hodnoty:
<DIR> = adresář <BLKD> = blokové zařízení <CHRD> = znakové zařízení <FIFO> = fifo Velikost = souborProtože mi to už nemyslí, potřebuju si dát pauzu. Jenže zas nechci zbytečně ztrácet čas, a proto bych od někoho potřeboval dopsat fci na seřazení těch souborů. První by měly být adresáře seřazené dle abecedy, poté soubory dle abecedy, poté bloková zařízení, znaková zařízení a nakonec FIFO. Potřeboval bych to doplnit sem:
void JXPCommander::sortFiles( bool left ) { FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight); bool orderChanged = true; FilesPanelEntry e1,e2; while(orderChanged){ orderChanged = false; for( off64_t i = 0; i < fp->count()-1; ++i ) { fp->getEntry( i, e1 ); fp->getEntry( i+1, e2 ); /* * Tu proveďte nějaké ty porovnání, v případě * že mají být položky prohozeno tak proveďte: * * fp->setEntry( i,e2 ); * fp->setEntry( i+1,e1 ); * * a nezapomeňte nastavit orderChanged na true. * * Stringy se nebojte porovnávat znaménky < a > * o utf8 se již stará sama třída Glib::ustring */ } } }
Tiskni
Sdílej:
void JXPCommander::sortFiles( bool left ) { FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight);bych neudělal snad ani já, trochu více obecnosti bych do toho vrazil
void JXPCommander::sortFiles( bool left ) { FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight); bool orderChanged = true; FilesPanelEntry e1,e2; int max = fp->count()-1; while(orderChanged){ orderChanged = false; for( off64_t i = 0; i < max; ++i ) { fp->getEntry( i, e1 ); fp->getEntry( i+1, e2 ); if(e1.name > e2.name) { // pro razeni vzestupne podle jmena fp->setEntry(i, e2); fp->setEntry(i+1, e1); orderChanged = true; } } max--; } }- ale doporucoval bych trochu zagooglovat a nastudovat quick-sort...
vector
, ale také deque
a list
, když už jsme u kontejnerů tohoto typu. Nelze samozřejmě také opomenout set
, multiset
, map
a multimap
(a další více či méně užitečné věci). Kdo se toho dobrovolně vzdává, o hodně přichází.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.