Portál AbcLinuxu, 30. října 2025 07:51
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:
)
jinak je to zajímavý nápad, jak něco programovat
jo a tohle :
void JXPCommander::sortFiles( bool left )
{
FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight);
bych neudělal snad ani já, trochu více obecnosti bych do toho vrazil
a na wiki ještě jsem žádný odkaz na zdrojáky nenašel.
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...
nebo to skončí tak, že uspořádaj irc chat o tom, jakým způsobem budou vybírat "medián"
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.