Ticket #4092: group.patch

File group.patch, 6.0 KB (added by Paul Lambert <paul at planar.id.au>, 14 years ago)
  • mythmusic/mythmusic/globalsettings.cpp

     
    304304    return gc;
    305305};
    306306
     307static HostComboBox *ArtistTreeGroups()
     308{
     309    HostComboBox *gc = new HostComboBox("ArtistTreeGroups");
     310    gc->setLabel(QObject::tr("Number of Artist Tree Groups"));
     311    gc->addSelection(QObject::tr("Few"), "0");
     312    gc->addSelection(QObject::tr("Average"), "1");
     313    gc->addSelection(QObject::tr("Many"), "2");
     314    gc->setHelpText(QObject::tr("Determines how many groups we have in the artist"
     315                                " tree.  Few gives 'A B C D' as per the old behaviour,"
     316                                " average gives two letters per group, many gives one"
     317                                " letter per group."));
     318    return gc;
     319};
     320
    307321static HostCheckBox *UseShowRatings()
    308322{
    309323    HostCheckBox *gc = new HostCheckBox("MusicShowRatings");
     
    617631    playersettings->addChild(PlayMode());
    618632    playersettings->addChild(ResumeMode());
    619633    playersettings->addChild(SetSearchMaxResultsReturned());
     634    playersettings->addChild(ArtistTreeGroups());
    620635    playersettings->addChild(UseShowRatings());
    621636    playersettings->addChild(UseShowWholeTree());
    622637    playersettings->addChild(UseListShuffled());
  • mythmusic/mythmusic/treebuilders.cpp

     
    1111   QString dispStr;
    1212} FieldSplitInfo;
    1313
     14// arrays for different level of granularity in the tree
     15// choose between them by using a global setting.  In an ideal
     16// world we would generate these dynamically, but that turned
     17// into more change than it was worth
    1418static FieldSplitInfo splitArray4[] =
    1519{
    1620  {"!\"#$%&'()*+,-./:;<=>?@[\\]^_{|}~", " (...)"},
     
    2226  {"PQRST", " (P Q R S T)"},
    2327  {"UVWXYZ", " (U V W X Y Z)"}
    2428};
     29
     30static FieldSplitInfo splitArray16[] =
     31{
     32  {"!\"#$%&'()*+,-./:;<=>?@[\\]^_{|}~", " (...)"},
     33  {"01234", " (0 1 2 3 4)" },
     34  {"56789", " (5 6 7 8 9)" },
     35  {"AB", " (A B)"},
     36  {"CD", " (C D)"},
     37  {"EF", " (E F)"},
     38  {"GH", " (G H)"},
     39  {"IJ", " (I J)"},
     40  {"KL", " (K L)"},
     41  {"MN", " (M N)"},
     42  {"OP", " (O P)"},
     43  {"QR", " (Q R)"},
     44  {"ST", " (S T)"},
     45  {"UV", " (U V)"},
     46  {"WX", " (W X)"},
     47  {"YZ", " (Y Z)"}
     48};
     49
     50static FieldSplitInfo splitArray29[] =
     51{
     52  {"!\"#$%&'()*+,-./:;<=>?@[\\]^_{|}~", " (...)"},
     53  {"01234", " (0 1 2 3 4)" },
     54  {"56789", " (5 6 7 8 9)" },
     55  {"A", " A"},
     56  {"B", " B"},
     57  {"C", " C"},
     58  {"D", " D"},
     59  {"E", " E"},
     60  {"F", " F"},
     61  {"G", " G"},
     62  {"H", " H"},
     63  {"I", " I"},
     64  {"J", " J"},
     65  {"K", " K"},
     66  {"L", " L"},
     67  {"M", " M"},
     68  {"N", " N"},
     69  {"O", " O"},
     70  {"P", " P"},
     71  {"Q", " Q"},
     72  {"R", " R"},
     73  {"S", " S"},
     74  {"T", " T"},
     75  {"U", " U"},
     76  {"V", " V"},
     77  {"W", " W"},
     78  {"X", " X"},
     79  {"Y", " Y"},
     80  {"Z", " Z"}
     81};
     82
    2583const int kSplitArray4_Max = sizeof splitArray4 / sizeof splitArray4[0];
     84const int kSplitArray16_Max = sizeof splitArray16 / sizeof splitArray16[0];
     85const int kSplitArray29_Max = sizeof splitArray29 / sizeof splitArray29[0];
    2686
    2787static QString thePrefix = "the ";
    2888
     
    157217            }
    158218            else
    159219            {
    160                 int split_max = kSplitArray4_Max;
    161                 FieldSplitInfo *splits = splitArray4;           
    162            
    163                 for(int i = 0; i < split_max; i++)
     220                QString artistGrouping = gContext->GetSetting("ArtistTreeGroups", "none");
     221                if (artistGrouping == "2")
    164222                {
    165                     if (splits[i].testStr.contains(firstchar))
     223                    int split_max = kSplitArray29_Max;
     224                    FieldSplitInfo *splits = splitArray29;           
     225               
     226                    for(int i = 0; i < split_max; i++)
    166227                    {
    167                         split = QObject::tr("Artists") + splits[i].dispStr;
    168                         m_split_map[firstchar] = split;
    169                         break;
     228                        if (splits[i].testStr.contains(firstchar))
     229                        {
     230                            split = QObject::tr("Artists") + splits[i].dispStr;
     231                            m_split_map[firstchar] = split;
     232                            break;
     233                        }
    170234                    }
    171235                }
     236                else
     237                {
     238                    if (artistGrouping == "1")
     239                    {
     240                        int split_max = kSplitArray16_Max;
     241                        FieldSplitInfo *splits = splitArray16;           
     242                   
     243                        for(int i = 0; i < split_max; i++)
     244                        {
     245                            if (splits[i].testStr.contains(firstchar))
     246                            {
     247                                split = QObject::tr("Artists") + splits[i].dispStr;
     248                                m_split_map[firstchar] = split;
     249                                break;
     250                            }
     251                        }
     252                    }
     253                    else
     254                    {
     255                        // old behaviour is the default
     256                        int split_max = kSplitArray4_Max;
     257                        FieldSplitInfo *splits = splitArray4;           
     258                   
     259                        for(int i = 0; i < split_max; i++)
     260                        {
     261                            if (splits[i].testStr.contains(firstchar))
     262                            {
     263                                split = QObject::tr("Artists") + splits[i].dispStr;
     264                                m_split_map[firstchar] = split;
     265                                break;
     266                            }
     267                        }
     268                    }
     269                }
    172270            }
    173271        }
    174272