Ticket #482: tree-sorting.patch
File tree-sorting.patch, 5.7 KB (added by , 20 years ago) |
---|
-
mythplugins/mythmusic/mythmusic/metadata.cpp
809 809 { 810 810 root_node->sort(); 811 811 812 bool something_changed;813 QString Title1;814 QString Title2;815 816 812 // sort top level nodes 817 813 818 something_changed = false; 819 if(top_nodes.count() > 1) 820 { 821 something_changed = true; 822 } 823 while(something_changed) 824 { 825 something_changed = false; 826 for(uint i = 0; i < top_nodes.count() - 1;) 827 { 828 Title1 = top_nodes.at(i)->getTitle().lower(); 829 Title2 = top_nodes.at(i+1)->getTitle().lower(); 830 831 if (Title1.left(4) == thePrefix) 832 Title1 = Title1.mid(4); 833 if (Title2.left(4) == thePrefix) 834 Title2 = Title2.mid(4); 835 836 if(qstrcmp(Title1, Title2) > 0) 837 { 838 something_changed = true; 839 MusicNode *temp = top_nodes.take(i + 1); 840 top_nodes.insert(i, temp); 841 } 842 else 843 { 844 ++i; 845 } 846 } 847 } 814 top_nodes.sort (); 848 815 849 816 // tell top level nodes to sort from themselves 850 817 // downwards … … 1400 1367 1401 1368 void MusicNode::sort() 1402 1369 { 1403 bool something_changed;1404 QString Title1, Title2;1405 1406 1370 // Sort any tracks 1407 1371 1408 something_changed = false; 1409 if(my_tracks.count() > 1) 1410 { 1411 something_changed = true; 1412 } 1413 while(something_changed) 1414 { 1415 something_changed = false; 1416 for(uint i = 0; i < my_tracks.count() - 1;) 1417 { 1418 if(my_tracks.at(i)->Track() > my_tracks.at(i+1)->Track()) 1419 { 1420 something_changed = true; 1421 Metadata *temp = my_tracks.take(i + 1); 1422 my_tracks.insert(i, temp); 1423 } 1424 else 1425 { 1426 ++i; 1427 } 1428 } 1429 } 1372 my_tracks.sort (); 1430 1373 1431 1374 // Sort any subnodes 1432 1433 something_changed = false;1434 if(my_subnodes.count() > 1)1435 {1436 something_changed = true;1437 }1438 while(something_changed)1439 {1440 something_changed = false;1441 for(uint i = 0; i < my_subnodes.count() - 1;)1442 {1443 Title1 = my_subnodes.at(i)->getTitle().lower();1444 Title2 = my_subnodes.at(i+1)->getTitle().lower();1445 1375 1446 if (Title1.left(4) == thePrefix) 1447 Title1 = Title1.mid(4); 1448 if (Title2.left(4) == thePrefix) 1449 Title2 = Title2.mid(4); 1450 1451 if(qstrcmp(Title1, Title2) > 0) 1452 { 1453 something_changed = true; 1454 MusicNode *temp = my_subnodes.take(i + 1); 1455 my_subnodes.insert(i, temp); 1456 } 1457 else 1458 { 1459 ++i; 1460 } 1461 } 1462 } 1376 my_subnodes.sort (); 1463 1377 1464 1378 // Tell any subnodes to sort themselves 1465 1379 … … 1503 1417 } 1504 1418 } 1505 1419 1420 /*********************************************************************************/ 1421 1422 MetadataPtrList::MetadataPtrList () { 1423 } 1424 1425 MetadataPtrList::~MetadataPtrList () { 1426 } 1427 1428 int MetadataPtrList::compareItems (QPtrCollection::Item item1, 1429 QPtrCollection::Item item2) { 1430 Metadata *itemA = (Metadata*)item1; 1431 Metadata *itemB = (Metadata*)item2; 1432 1433 int trackA = itemA->Track (); 1434 int trackB = itemB->Track (); 1435 1436 if (trackA > trackB) 1437 return 1; 1438 1439 if (trackA < trackB) 1440 return -1; 1441 1442 return 0; 1443 } 1444 1445 /*********************************************************************************/ 1446 1447 MusicNodePtrList::MusicNodePtrList () { 1448 } 1449 1450 MusicNodePtrList::~MusicNodePtrList () { 1451 } 1452 1453 int MusicNodePtrList::compareItems (QPtrCollection::Item item1, 1454 QPtrCollection::Item item2) { 1455 MusicNode *itemA = (MusicNode*)item1; 1456 MusicNode *itemB = (MusicNode*)item2; 1457 1458 QString title1 = itemA->getTitle().lower(); 1459 QString title2 = itemB->getTitle().lower(); 1460 1461 if (title1.left(4) == thePrefix) 1462 title1 = title1.mid(4); 1463 if (title2.left(4) == thePrefix) 1464 title2 = title2.mid(4); 1465 1466 return qstrcmp(title1, title2); 1467 } -
mythplugins/mythmusic/mythmusic/metadata.h
170 170 bool operator==(const Metadata& a, const Metadata& b); 171 171 bool operator!=(const Metadata& a, const Metadata& b); 172 172 173 class MetadataPtrList : public QPtrList<Metadata> { 174 public: 175 MetadataPtrList (); 176 virtual ~MetadataPtrList (); 177 protected: 178 virtual int compareItems (QPtrCollection::Item item1, QPtrCollection::Item item2); 179 }; 180 181 class MusicNode; 182 class MusicNodePtrList : public QPtrList<MusicNode> { 183 public: 184 MusicNodePtrList (); 185 virtual ~MusicNodePtrList (); 186 protected: 187 virtual int compareItems (QPtrCollection::Item item1, QPtrCollection::Item item2); 188 }; 189 173 190 class MusicNode 174 191 { 175 192 // Not a root of the music tree, and … … 199 216 200 217 private: 201 218 202 QPtrList<Metadata>my_tracks;203 QPtrList<MusicNode>my_subnodes;219 MetadataPtrList my_tracks; 220 MusicNodePtrList my_subnodes; 204 221 QString my_title; 205 222 QString my_level; 206 223 … … 267 284 268 285 private: 269 286 270 QPtrList<Metadata>all_music;271 QPtrList<MusicNode>top_nodes;287 MetadataPtrList all_music; 288 MusicNodePtrList top_nodes; 272 289 MusicNode *root_node; 273 290 274 291