~ubuntu-branches/ubuntu/lucid/mythtv/lucid

« back to all changes in this revision

Viewing changes to programs/mythfrontend/playbackbox.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Mario Limonciello, Mario Limonciello, John Baab
  • Date: 2009-09-29 01:33:23 UTC
  • mfrom: (1.1.35 upstream)
  • Revision ID: james.westby@ubuntu.com-20090929013323-6pvn8encm757zbxw
Tags: 0.22.0~trunk22101-0ubuntu1
[ Mario Limonciello ]
* New upstream checkout (r22101)
* Try to guard and make sure that ~mythtv is read from /etc/passwd 
  rather than assuming it's /home/mythtv.

[ John Baab ]
* debian/mythtv-common.postinst:
  - Added symlink for /home/mythtv/.mythtv/config.xml

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
 
2
#include "playbackbox.h"
 
3
 
 
4
// QT
2
5
#include <QDateTime>
3
6
#include <QDir>
4
7
#include <QApplication>
8
11
#include <QMap>
9
12
#include <QWaitCondition>
10
13
 
11
 
#include "playbackbox.h"
12
 
#include "playbackboxlistitem.h"
13
 
#include "proglist.h"
14
 
#include "tv.h"
 
14
// libmythdb
15
15
#include "oldsettings.h"
16
 
#include "NuppelVideoPlayer.h"
17
 
 
18
 
#include "mythdirs.h"
19
 
#include "mythcontext.h"
20
16
#include "mythdb.h"
21
17
#include "mythdbcon.h"
22
18
#include "mythverbose.h"
 
19
#include "mythdirs.h"
 
20
 
 
21
// libmythtv
 
22
#include "tv.h"
 
23
#include "NuppelVideoPlayer.h"
23
24
#include "recordinginfo.h"
24
 
#include "remoteutil.h"
25
25
#include "tvremoteutil.h"
26
26
#include "previewgenerator.h"
27
27
#include "playgroup.h"
28
 
#include "customedit.h"
 
28
 
 
29
// libmyth
 
30
#include "mythcontext.h"
 
31
#include "remoteutil.h"
29
32
#include "util.h"
30
33
 
 
34
// libmythui
31
35
#include "mythuihelper.h"
32
36
#include "mythuitext.h"
33
37
#include "mythuibutton.h"
39
43
#include "mythuicheckbox.h"
40
44
#include "mythuiprogressbar.h"
41
45
 
 
46
//  Mythfrontend
 
47
#include "playbackboxlistitem.h"
 
48
#include "proglist.h"
 
49
#include "customedit.h"
 
50
 
42
51
#define LOC QString("PlaybackBox: ")
43
52
#define LOC_ERR QString("PlaybackBox Error: ")
44
53
 
206
215
        //
207
216
        // Deal with QMap sorting. Positive recpriority values have a
208
217
        // '+' prefix (QMap alphabetically sorts before '-'). Positive
209
 
        // recpriority values are "inverted" by substracting them from
 
218
        // recpriority values are "inverted" by subtracting them from
210
219
        // 1000, so that high recpriorities are sorted first (QMap
211
220
        // alphabetically). For example:
212
221
        //
226
235
        else
227
236
            sortprefix.sprintf("-%03u", -recpriority);
228
237
 
229
 
        sTitle = sortprefix + "-" + sTitle;
 
238
        sTitle = sortprefix + '-' + sTitle;
230
239
    }
231
240
    return sTitle;
232
241
}
374
383
    if (m_fillListTimer)
375
384
    {
376
385
        m_fillListTimer->disconnect(this);
377
 
        m_fillListTimer->deleteLater();
378
386
        m_fillListTimer = NULL;
379
387
    }
380
388
 
381
389
    if (m_freeSpaceTimer)
382
390
    {
383
391
        m_freeSpaceTimer->disconnect(this);
384
 
        m_freeSpaceTimer->deleteLater();
385
392
        m_freeSpaceTimer = NULL;
386
393
    }
387
394
 
388
395
    clearProgramCache();
389
396
 
390
 
    if (m_currentItem)
391
 
        delete m_currentItem;
 
397
    delete m_currentItem;
392
398
 
393
399
    // disconnect preview generators
394
400
    QMutexLocker locker(&m_previewGeneratorLock);
443
449
 
444
450
        if ((m_titleList.size() <= 1) && (m_progsInDB > 0))
445
451
        {
446
 
            m_recGroup = "";
 
452
            m_recGroup.clear();
447
453
            showGroupFilter();
448
454
        }
449
455
    }
592
598
    QString rating = QString::number((int)((pginfo->stars * 10.0) + 0.5));
593
599
 
594
600
    item->DisplayState(rating, "ratingstate");
595
 
 
 
601
    
596
602
    QString oldimgfile = item->GetImage("preview");
597
 
    QString imagefile = QString::null;
 
603
    QString imagefile;
598
604
    if (oldimgfile.isEmpty() || force_preview_reload)
599
605
        imagefile = getPreviewImage(pginfo);
600
606
 
773
779
 
774
780
void PlaybackBox::updateUsage()
775
781
{
776
 
    vector<FileSystemInfo> fsInfos;
777
 
    if (m_freeSpaceNeedsUpdate && m_connected)
 
782
    MythUIText        *freereportText = dynamic_cast<MythUIText *>
 
783
                                        (GetChild("freereport"));
 
784
    MythUIProgressBar *usedProgress   = dynamic_cast<MythUIProgressBar *>
 
785
                                        (GetChild("usedbar"));
 
786
 
 
787
    // If the theme doesn't have these widgets,
 
788
    // don't waste time querying the backend...
 
789
    if (!freereportText && !usedProgress)
 
790
        return;
 
791
 
 
792
    if (m_freeSpaceNeedsUpdate || m_connected)
778
793
    {
779
794
        m_freeSpaceNeedsUpdate = false;
780
795
        m_freeSpaceTotal = 0;
781
796
        m_freeSpaceUsed = 0;
782
797
 
783
 
        fsInfos = RemoteGetFreeSpace();
784
 
        for (unsigned int i = 0; i < fsInfos.size(); i++)
 
798
        vector<FileSystemInfo> fsInfos = RemoteGetFreeSpace();
 
799
        for (unsigned int i = 0; i < fsInfos.size(); ++i)
785
800
        {
786
801
            if (fsInfos[i].directory == "TotalDiskSpace")
787
802
            {
806
821
    QString rep = tr(", %1 GB free").arg(size);
807
822
    usestr = usestr + rep;
808
823
 
809
 
    MythUIText *m_freeSpaceText = dynamic_cast<MythUIText *>
810
 
                                                    (GetChild("freereport"));
811
 
    if (m_freeSpaceText)
812
 
        m_freeSpaceText->SetText(usestr);
 
824
    if (freereportText)
 
825
        freereportText->SetText(usestr);
813
826
 
814
 
    MythUIProgressBar *m_freeSpaceProgress = dynamic_cast<MythUIProgressBar *>
815
 
                                                        (GetChild("usedbar"));
816
 
    if (m_freeSpaceProgress)
 
827
    if (usedProgress)
817
828
    {
818
 
        m_freeSpaceProgress->SetUsed(m_freeSpaceUsed);
819
 
        m_freeSpaceProgress->SetTotal(m_freeSpaceTotal);
 
829
        usedProgress->SetTotal(m_freeSpaceTotal);
 
830
        usedProgress->SetUsed(m_freeSpaceUsed);
820
831
    }
821
832
}
822
833
 
832
843
 
833
844
        bool foundGroup = false;
834
845
        QStringList::iterator it;
835
 
        for (it = m_titleList.begin(); it != m_titleList.end(); it++)
 
846
        for (it = m_titleList.begin(); it != m_titleList.end(); ++it)
836
847
        {
837
848
            groupname = (*it).simplified();
838
849
 
890
901
    m_recordingList->Reset();
891
902
 
892
903
    if (groupname == "default")
893
 
        groupname = "";
 
904
        groupname.clear();
894
905
 
895
906
    ProgramMap::iterator pmit = m_progLists.find(groupname);
896
907
    if (pmit == m_progLists.end())
898
909
 
899
910
    ProgramList &progList = *pmit;
900
911
 
901
 
    static const char *disp_flags[] = { "playlist", "watched", };
 
912
    static const char *disp_flags[] = { "playlist", "watched", "preserve",
 
913
                                        "cutlist", "autoexpire", "editing",
 
914
                                        "bookmark", "inuse", "commflagged",
 
915
                                        "transcoded" };
902
916
    bool disp_flag_stat[sizeof(disp_flags)/sizeof(char*)];
903
917
 
 
918
    QMap<AudioProps, QString> audioFlags;
 
919
    audioFlags[AUD_DOLBY] = "dolby";
 
920
    audioFlags[AUD_SURROUND] = "surround";
 
921
    audioFlags[AUD_STEREO] = "stereo";
 
922
    audioFlags[AUD_MONO] = "mono";
 
923
 
 
924
    QMap<VideoProps, QString> videoFlags;
 
925
    videoFlags[VID_1080] = "hd1080";
 
926
    videoFlags[VID_720] = "hd720";
 
927
    videoFlags[VID_HDTV] = "hdtv";
 
928
    videoFlags[VID_WIDESCREEN] = "widescreen";
 
929
 
 
930
    QMap<SubtitleTypes, QString> subtitleFlags;
 
931
    subtitleFlags[SUB_SIGNED] = "deafsigned";
 
932
    subtitleFlags[SUB_ONSCREEN] = "onscreensub";
 
933
    subtitleFlags[SUB_NORMAL] = "subtitles";
 
934
    subtitleFlags[SUB_HARDHEAR] = "cc";
 
935
    
904
936
    ProgramList::iterator it = progList.begin();
905
 
    for (; it != progList.end(); it++)
 
937
    for (; it != progList.end(); ++it)
906
938
    {
907
939
        MythUIButtonListItem *item =
908
940
            new PlaybackBoxListItem(this, m_recordingList, *it);
927
959
        QString tempShortDate = ((*it)->recstartts).toString(m_formatShortDate);
928
960
        QString tempLongDate  = ((*it)->recstartts).toString(m_formatLongDate);
929
961
 
930
 
        QString state = ((*it)->recstatus == rsRecording) ?
931
 
            QString("running") : QString::null;
 
962
        QString state;
 
963
        if ((*it)->recstatus == rsRecording)
 
964
            state = "running";
932
965
 
933
966
        if ((((*it)->recstatus != rsRecording) &&
934
967
             ((*it)->availableStatus != asAvailable) &&
954
987
 
955
988
        disp_flag_stat[0] = !m_playList.filter((*it)->MakeUniqueKey()).empty();
956
989
        disp_flag_stat[1] = (*it)->programflags & FL_WATCHED;
957
 
 
958
 
        for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); i++)
 
990
        disp_flag_stat[2] = (*it)->programflags & FL_PRESERVED;
 
991
        disp_flag_stat[3] = (*it)->programflags & FL_CUTLIST;
 
992
        disp_flag_stat[4] = (*it)->programflags & FL_AUTOEXP;
 
993
        disp_flag_stat[5] = (*it)->programflags & FL_EDITING;
 
994
        disp_flag_stat[6] = (*it)->programflags & FL_BOOKMARK;
 
995
        disp_flag_stat[7] = (*it)->programflags & FL_INUSEPLAYING;
 
996
        disp_flag_stat[8] = (*it)->programflags & FL_COMMFLAG;
 
997
        disp_flag_stat[9] = (*it)->programflags & FL_TRANSCODED;
 
998
        
 
999
        for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); ++i)
959
1000
            item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]);
 
1001
        
 
1002
        QMap<AudioProps, QString>::iterator ait;
 
1003
        for (ait = audioFlags.begin(); ait != audioFlags.end(); ++ait)
 
1004
        {
 
1005
            if ((*it)->audioproperties & ait.key())
 
1006
                item->DisplayState(ait.value(), "audioprops");
 
1007
        }
 
1008
 
 
1009
        QMap<VideoProps, QString>::iterator vit;
 
1010
        for (vit = videoFlags.begin(); vit != videoFlags.end(); ++vit)
 
1011
        {
 
1012
            if ((*it)->videoproperties & vit.key())
 
1013
                item->DisplayState(vit.value(), "videoprops");
 
1014
        }
 
1015
          
 
1016
        QMap<SubtitleTypes, QString>::iterator sit;
 
1017
        for (sit = subtitleFlags.begin(); sit != subtitleFlags.end(); ++sit)
 
1018
        {
 
1019
            if ((*it)->subtitleType & sit.key())
 
1020
                item->DisplayState(sit.value(), "subtitletypes");
 
1021
        }
960
1022
 
961
1023
        if (m_currentItem &&
962
1024
            (m_currentItem->chanid     == (*it)->chanid) &&
1044
1106
    QMap<QString, QString> sortedList;
1045
1107
    QMap<int, QString> searchRule;
1046
1108
    QMap<int, int> recidEpisodes;
1047
 
    QString sTitle;
1048
1109
 
1049
1110
    m_progCacheLock.lock();
1050
1111
    if (!useCachedData || !m_progCache || m_progCache->empty())
1065
1126
                i = m_progCache->erase(i);
1066
1127
            }
1067
1128
            else
1068
 
                i++;
 
1129
                ++i;
1069
1130
        }
1070
1131
    }
1071
1132
 
1072
1133
    if (m_progCache)
1073
1134
    {
 
1135
        QString sTitle;
 
1136
 
1074
1137
        if ((m_viewMask & VIEW_SEARCHES))
1075
1138
        {
1076
1139
            MSqlQuery query(MSqlQuery::InitCon());
1090
1153
        }
1091
1154
 
1092
1155
        vector<ProgramInfo *>::iterator i = m_progCache->begin();
1093
 
        for ( ; i != m_progCache->end(); i++)
 
1156
        for ( ; i != m_progCache->end(); ++i)
1094
1157
        {
1095
1158
            m_progsInDB++;
1096
1159
            p = *i;
1464
1527
    if (m_progCache)
1465
1528
    {
1466
1529
        QMutexLocker locker(&m_recGroupsLock);
1467
 
        QString name;
1468
1530
 
1469
1531
        m_recGroups.clear();
1470
1532
        m_recGroupIdx = -1;
1477
1539
                      "deletepending = 0 ORDER BY recgroup");
1478
1540
        if (query.exec())
1479
1541
        {
 
1542
            QString name;
1480
1543
            while (query.next())
1481
1544
            {
1482
1545
                name = query.value(0).toString();
1651
1714
        showAvailablePopup(pginfo);
1652
1715
        return;
1653
1716
    }
1654
 
    ProgramInfo *pi = pginfo;
1655
 
 
1656
 
    if (!pi)
1657
 
        return;
1658
1717
 
1659
1718
    MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
1660
 
    CustomEdit *ce = new CustomEdit(mainStack, pi);
 
1719
    CustomEdit *ce = new CustomEdit(mainStack, pginfo);
1661
1720
    if (ce->Create())
1662
1721
        mainStack->AddScreen(ce);
1663
1722
    else
1916
1975
    QStringList entries = dir.entryList();
1917
1976
 
1918
1977
    int regIndex = 0;
1919
 
    titleIn.replace(" ", "(?:\\s|-|_|\\.)?");
 
1978
    titleIn.replace(' ', "(?:\\s|-|_|\\.)?");
1920
1979
    QString regs[] = {
1921
1980
        QString("%1" // title
1922
1981
            "(?:\\s|-|_|\\.)?" // optional separator
2260
2319
        jobTitle = gContext->GetSetting("UserJobDesc1");
2261
2320
 
2262
2321
        if (!isRunningUserJob1)
2263
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2322
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2264
2323
                             SLOT(doPlaylistBeginUserJob1()));
2265
2324
        else
2266
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2325
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2267
2326
                             SLOT(stopPlaylistUserJob1()));
2268
2327
    }
2269
2328
 
2273
2332
        jobTitle = gContext->GetSetting("UserJobDesc2");
2274
2333
 
2275
2334
        if (!isRunningUserJob2)
2276
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2335
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2277
2336
                             SLOT(doPlaylistBeginUserJob2()));
2278
2337
        else
2279
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2338
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2280
2339
                             SLOT(stopPlaylistUserJob2()));
2281
2340
    }
2282
2341
 
2286
2345
        jobTitle = gContext->GetSetting("UserJobDesc3");
2287
2346
 
2288
2347
        if (!isRunningUserJob3)
2289
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2348
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2290
2349
                             SLOT(doPlaylistBeginUserJob3()));
2291
2350
        else
2292
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2351
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2293
2352
                             SLOT(stopPlaylistUserJob3()));
2294
2353
    }
2295
2354
 
2361
2420
    if (m_popupMenu)
2362
2421
        return NULL;
2363
2422
 
2364
 
    QString label;
2365
 
    if (m_playList.size() > 1)
2366
 
        label = tr("There are %1 items in the playlist.").arg(m_playList.size());
2367
 
    else
2368
 
        label = tr("There is %1 item in the playlist.").arg(m_playList.size());
2369
 
 
2370
 
    label.append(" ");
2371
 
    label.append(tr("Actions affect all items in the playlist"));
 
2423
    QString label = tr("There is %n item(s) in the playlist. Actions affect "
 
2424
                       "all items in the playlist", "", m_playList.size());
2372
2425
 
2373
2426
    return createPopupMenu(label);
2374
2427
}
2477
2530
 
2478
2531
        if (JobQueue::IsJobQueuedOrRunning(JOB_USERJOB1, pginfo->chanid,
2479
2532
                                   pginfo->recstartts))
2480
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2533
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2481
2534
                                    SLOT(doBeginUserJob1()));
2482
2535
        else
2483
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2536
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2484
2537
                                    SLOT(doBeginUserJob1()));
2485
2538
    }
2486
2539
 
2491
2544
 
2492
2545
        if (JobQueue::IsJobQueuedOrRunning(JOB_USERJOB2, pginfo->chanid,
2493
2546
                                   pginfo->recstartts))
2494
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2547
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2495
2548
                                    SLOT(doBeginUserJob2()));
2496
2549
        else
2497
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2550
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2498
2551
                                    SLOT(doBeginUserJob2()));
2499
2552
    }
2500
2553
 
2505
2558
 
2506
2559
        if (JobQueue::IsJobQueuedOrRunning(JOB_USERJOB3, pginfo->chanid,
2507
2560
                                   pginfo->recstartts))
2508
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2561
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2509
2562
                                    SLOT(doBeginUserJob3()));
2510
2563
        else
2511
 
            m_popupMenu->AddButton(tr("Begin") + " " + jobTitle,
 
2564
            m_popupMenu->AddButton(tr("Begin") + ' ' + jobTitle,
2512
2565
                                    SLOT(doBeginUserJob3()));
2513
2566
    }
2514
2567
 
2519
2572
 
2520
2573
        if (JobQueue::IsJobQueuedOrRunning(JOB_USERJOB4, pginfo->chanid,
2521
2574
                                   pginfo->recstartts))
2522
 
            m_popupMenu->AddButton(tr("Stop") + " " + jobTitle,
 
2575
            m_popupMenu->AddButton(tr("Stop") + ' ' + jobTitle,
2523
2576
                                    SLOT(doBeginUserJob4()));
2524
2577
        else
2525
 
            m_popupMenu->AddButton(tr("Begin") + " "  + jobTitle,
 
2578
            m_popupMenu->AddButton(tr("Begin") + ' '  + jobTitle,
2526
2579
                                    SLOT(doBeginUserJob4()));
2527
2580
    }
2528
2581
}
2935
2988
    if ((key.isEmpty()) || (key.indexOf('_') < 0))
2936
2989
        return NULL;
2937
2990
 
2938
 
    keyParts = key.split("_");
 
2991
    keyParts = key.split('_');
2939
2992
 
2940
2993
    // ProgramInfo::MakeUniqueKey() has 2 parts separated by '_' characters
2941
2994
    if (keyParts.size() == 2)
3244
3297
    QStringList actions;
3245
3298
    handled = GetMythMainWindow()->TranslateKeyPress("TV Frontend", event, actions);
3246
3299
 
3247
 
    for (int i = 0; i < actions.size() && !handled; i++)
 
3300
    for (int i = 0; i < actions.size() && !handled; ++i)
3248
3301
    {
3249
3302
        QString action = actions[i];
3250
3303
        handled = true;
3368
3421
                    return;
3369
3422
                }
3370
3423
                vector<ProgramInfo *>::iterator i = m_progCache->begin();
3371
 
                for ( ; i != m_progCache->end(); i++)
 
3424
                for ( ; i != m_progCache->end(); ++i)
3372
3425
                {
3373
3426
                   if (((*i)->chanid == tokens[2]) &&
3374
3427
                       ((*i)->recstartts.toString(Qt::ISODate) == tokens[3]))
3861
3914
    groups.sort();
3862
3915
    displayGroups.sort();
3863
3916
    QStringList::iterator it;
3864
 
    for (it = displayGroups.begin(); it != displayGroups.end(); it++)
 
3917
    for (it = displayGroups.begin(); it != displayGroups.end(); ++it)
3865
3918
        displayNames.append(*it);
3866
 
    for (it = groups.begin(); it != groups.end(); it++)
 
3919
    for (it = groups.begin(); it != groups.end(); ++it)
3867
3920
        groupNames.append(*it);
3868
3921
 
3869
3922
    QString label = tr("Change Filter");
3974
4027
 
3975
4028
    QStringList groupNames;
3976
4029
    QStringList displayNames;
3977
 
    QString selected = "";
3978
 
 
3979
 
    QString itemStr;
3980
 
    QString dispGroup;
 
4030
    QString selected;
3981
4031
 
3982
4032
    groupNames.append("addnewgroup");
3983
4033
    displayNames.append(tr("Add New"));
3984
4034
 
3985
4035
    if (query.exec())
3986
4036
    {
 
4037
        QString itemStr;
 
4038
        QString dispGroup;
3987
4039
        while (query.next())
3988
4040
        {
3989
4041
            dispGroup = query.value(0).toString();
4044
4096
{
4045
4097
    QStringList groupNames;
4046
4098
    QStringList displayNames;
4047
 
    QString selected = "";
 
4099
    QString selected;
4048
4100
 
4049
4101
    displayNames.append(tr("Default"));
4050
4102
    groupNames.append("Default");
4310
4362
        return;
4311
4363
 
4312
4364
    vector<ProgramInfo *>::iterator i = m_progCache->begin();
4313
 
    for ( ; i != m_progCache->end(); i++)
 
4365
    for ( ; i != m_progCache->end(); ++i)
4314
4366
        delete *i;
4315
4367
    delete m_progCache;
4316
4368
    m_progCache = NULL;
4576
4628
//////////////////////////////////////////
4577
4629
 
4578
4630
HelpPopup::HelpPopup(MythScreenStack *lparent)
4579
 
                : MythScreenType(lparent, "helppopup")
 
4631
                : MythScreenType(lparent, "helppopup"),
 
4632
                  m_iconList(NULL)
4580
4633
{
4581
4634
 
4582
4635
}