Subversion Repositories tpanel

Rev

Rev 19 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 19 Rev 21
Line 1... Line 1...
1
/*
1
/*
2
 * Copyright (C) 2020 by Andreas Theofilu <andreas@theosys.at>
2
 * Copyright (C) 2020, 2021 by Andreas Theofilu <andreas@theosys.at>
3
 *
3
 *
4
 * This program is free software; you can redistribute it and/or modify
4
 * This program is free software; you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 3 of the License, or
6
 * the Free Software Foundation; either version 3 of the License, or
7
 * (at your option) any later version.
7
 * (at your option) any later version.
Line 34... Line 34...
34
using std::pair;
34
using std::pair;
35
using std::to_string;
35
using std::to_string;
36
using std::thread;
36
using std::thread;
37
using std::atomic;
37
using std::atomic;
38
using std::mutex;
38
using std::mutex;
-
 
39
using std::bind;
39
 
40
 
40
TIcons *gIcons = nullptr;
41
TIcons *gIcons = nullptr;
41
TPrjResources *gPrjResources = nullptr;
42
TPrjResources *gPrjResources = nullptr;
42
TPageManager *gPageManager = nullptr;
43
TPageManager *gPageManager = nullptr;
43
thread::id gPageManagerId = (thread::id)0;
44
thread::id gPageManagerId;
44
extern amx::TAmxNet *gAmxNet;
45
extern amx::TAmxNet *gAmxNet;
45
 
46
 
46
mutex surface_mutex;
47
mutex surface_mutex;
47
atomic<bool> runDoCommand = false;
48
atomic<bool> runDoCommand;
-
 
49
bool prg_stopped = false;
48
 
50
 
49
TPageManager::TPageManager()
51
TPageManager::TPageManager()
50
{
52
{
51
    surface_mutex.lock();
53
    surface_mutex.lock();
52
    DECL_TRACER("TPageManager::TPageManager()");
54
    DECL_TRACER("TPageManager::TPageManager()");
53
 
55
 
54
    gPageManager = this;
56
    gPageManager = this;
55
    gPageManagerId = thread::id();
57
    gPageManagerId = thread::id();
-
 
58
    runDoCommand = false;
56
    mTSettings = new TSettings(TConfig::getProjectPath());
59
    mTSettings = new TSettings(TConfig::getProjectPath());
57
 
60
 
58
    if (TError::isError())
61
    if (TError::isError())
59
    {
62
    {
60
        surface_mutex.unlock();
63
        surface_mutex.unlock();
Line 171... Line 174...
171
    REG_CMD(doFON, "^FON");
174
    REG_CMD(doFON, "^FON");
172
    REG_CMD(doICO, "^ICO");
175
    REG_CMD(doICO, "^ICO");
173
    REG_CMD(doSHO, "^SHO");
176
    REG_CMD(doSHO, "^SHO");
174
    REG_CMD(doTXT, "^TXT");
177
    REG_CMD(doTXT, "^TXT");
175
 
178
 
-
 
179
    REG_CMD(doBBR, "^BBR");
-
 
180
    REG_CMD(doRMF, "^RMF");
-
 
181
 
176
    REG_CMD(doON, "ON");
182
    REG_CMD(doON, "ON");
177
    REG_CMD(doOFF, "OFF");
183
    REG_CMD(doOFF, "OFF");
178
    REG_CMD(doLEVEL, "LEVEL");
184
    REG_CMD(doLEVEL, "LEVEL");
179
    REG_CMD(doBLINK, "BLINK");
185
    REG_CMD(doBLINK, "BLINK");
180
 
186
 
Line 589... Line 595...
589
    surface_mutex.lock();
595
    surface_mutex.lock();
590
    TPage *pg = getPage(mActualPage);
596
    TPage *pg = getPage(mActualPage);
591
    pg->setFonts(mFonts);
597
    pg->setFonts(mFonts);
592
    pg->registerCallback(_setBackground);
598
    pg->registerCallback(_setBackground);
593
    pg->registerCallbackFT(_setText);
599
    pg->registerCallbackFT(_setText);
-
 
600
    pg->regCallPlayVideo(_callPlayVideo);
594
 
601
 
595
    if (!pg || !_setPage || !mTSettings)
602
    if (!pg || !_setPage || !mTSettings)
596
    {
603
    {
597
        surface_mutex.unlock();
604
        surface_mutex.unlock();
598
        return false;
605
        return false;
Line 608... Line 615...
608
        subPg->setFonts(mFonts);
615
        subPg->setFonts(mFonts);
609
        subPg->registerCallback(_setBackground);
616
        subPg->registerCallback(_setBackground);
610
        subPg->registerCallbackDB(_displayButton);
617
        subPg->registerCallbackDB(_displayButton);
611
        subPg->regCallDropSubPage(_callDropSubPage);
618
        subPg->regCallDropSubPage(_callDropSubPage);
612
        subPg->registerCallbackFT(_setText);
619
        subPg->registerCallbackFT(_setText);
-
 
620
        subPg->regCallPlayVideo(_callPlayVideo);
613
 
621
 
614
        if (_setSubPage)
622
        if (_setSubPage)
615
        {
623
        {
616
            MSG_DEBUG("Drawing page " << subPg->getNumber() << ": " << subPg->getName() << "...");
624
            MSG_DEBUG("Drawing page " << subPg->getNumber() << ": " << subPg->getName() << "...");
617
            _setSubPage(((subPg->getNumber() << 16) & 0xffff0000), subPg->getLeft(), subPg->getTop(), subPg->getWidth(), subPg->getHeight());
625
            _setSubPage(((subPg->getNumber() << 16) & 0xffff0000), subPg->getLeft(), subPg->getTop(), subPg->getWidth(), subPg->getHeight());
Line 798... Line 806...
798
        page->setPalette(mPalette);
806
        page->setPalette(mPalette);
799
        page->setFonts(mFonts);
807
        page->setFonts(mFonts);
800
        page->registerCallback(_setBackground);
808
        page->registerCallback(_setBackground);
801
        page->registerCallbackDB(_displayButton);
809
        page->registerCallbackDB(_displayButton);
802
        page->registerCallbackFT(_setText);
810
        page->registerCallbackFT(_setText);
-
 
811
        page->regCallPlayVideo(_callPlayVideo);
803
 
812
 
804
        if (!addPage(page))
813
        if (!addPage(page))
805
            return false;
814
            return false;
806
    }
815
    }
807
 
816
 
Line 822... Line 831...
822
        page->setFonts(mFonts);
831
        page->setFonts(mFonts);
823
        page->registerCallback(_setBackground);
832
        page->registerCallback(_setBackground);
824
        page->registerCallbackDB(_displayButton);
833
        page->registerCallbackDB(_displayButton);
825
        page->regCallDropSubPage(_callDropSubPage);
834
        page->regCallDropSubPage(_callDropSubPage);
826
        page->registerCallbackFT(_setText);
835
        page->registerCallbackFT(_setText);
-
 
836
        page->regCallPlayVideo(_callPlayVideo);
827
        page->setGroup(spgIter->group);
837
        page->setGroup(spgIter->group);
828
 
838
 
829
        if (!addSubPage(page))
839
        if (!addSubPage(page))
830
            return false;
840
            return false;
831
    }
841
    }
Line 856... Line 866...
856
    pg->setPalette(mPalette);
866
    pg->setPalette(mPalette);
857
    pg->setFonts(mFonts);
867
    pg->setFonts(mFonts);
858
    pg->registerCallback(_setBackground);
868
    pg->registerCallback(_setBackground);
859
    pg->registerCallbackDB(_displayButton);
869
    pg->registerCallbackDB(_displayButton);
860
    pg->registerCallbackFT(_setText);
870
    pg->registerCallbackFT(_setText);
-
 
871
    pg->regCallPlayVideo(_callPlayVideo);
861
 
872
 
862
    if (!addPage(pg))
873
    if (!addPage(pg))
863
        return false;
874
        return false;
864
 
875
 
865
    return true;
876
    return true;
Line 889... Line 900...
889
    pg->setPalette(mPalette);
900
    pg->setPalette(mPalette);
890
    pg->setFonts(mFonts);
901
    pg->setFonts(mFonts);
891
    pg->registerCallback(_setBackground);
902
    pg->registerCallback(_setBackground);
892
    pg->registerCallbackDB(_displayButton);
903
    pg->registerCallbackDB(_displayButton);
893
    pg->registerCallbackFT(_setText);
904
    pg->registerCallbackFT(_setText);
-
 
905
    pg->regCallPlayVideo(_callPlayVideo);
894
 
906
 
895
    if (!addPage(pg))
907
    if (!addPage(pg))
896
        return false;
908
        return false;
897
 
909
 
898
    return true;
910
    return true;
Line 926... Line 938...
926
    pg->setFonts(mFonts);
938
    pg->setFonts(mFonts);
927
    pg->registerCallback(_setBackground);
939
    pg->registerCallback(_setBackground);
928
    pg->registerCallbackDB(_displayButton);
940
    pg->registerCallbackDB(_displayButton);
929
    pg->regCallDropSubPage(_callDropSubPage);
941
    pg->regCallDropSubPage(_callDropSubPage);
930
    pg->registerCallbackFT(_setText);
942
    pg->registerCallbackFT(_setText);
-
 
943
    pg->regCallPlayVideo(_callPlayVideo);
931
    pg->setGroup(page.group);
944
    pg->setGroup(page.group);
932
 
945
 
933
    if (!addSubPage(pg))
946
    if (!addSubPage(pg))
934
    {
947
    {
935
        delete pg;
948
        delete pg;
Line 964... Line 977...
964
    pg->setFonts(mFonts);
977
    pg->setFonts(mFonts);
965
    pg->registerCallback(_setBackground);
978
    pg->registerCallback(_setBackground);
966
    pg->registerCallbackDB(_displayButton);
979
    pg->registerCallbackDB(_displayButton);
967
    pg->regCallDropSubPage(_callDropSubPage);
980
    pg->regCallDropSubPage(_callDropSubPage);
968
    pg->registerCallbackFT(_setText);
981
    pg->registerCallbackFT(_setText);
-
 
982
    pg->regCallPlayVideo(_callPlayVideo);
969
    pg->setGroup(page.group);
983
    pg->setGroup(page.group);
970
 
984
 
971
    if (!addSubPage(pg))
985
    if (!addSubPage(pg))
972
        return false;
986
        return false;
973
 
987
 
Line 2588... Line 2602...
2588
 
2602
 
2589
void TPageManager::setButtonCallbacks(Button::TButton *bt)
2603
void TPageManager::setButtonCallbacks(Button::TButton *bt)
2590
{
2604
{
2591
    bt->registerCallback(_displayButton);
2605
    bt->registerCallback(_displayButton);
2592
    bt->registerCallbackFT(_setText);
2606
    bt->registerCallbackFT(_setText);
-
 
2607
    bt->regCallPlayVideo(_callPlayVideo);
2593
    bt->setFonts(mFonts);
2608
    bt->setFonts(mFonts);
2594
    bt->setPalette(mPalette);
2609
    bt->setPalette(mPalette);
2595
}
2610
}
2596
 
2611
 
2597
/**
2612
/**
Line 3111... Line 3126...
3111
        }
3126
        }
3112
        else
3127
        else
3113
            bt->setText(text, btState - 1);
3128
            bt->setText(text, btState - 1);
3114
    }
3129
    }
3115
}
3130
}
-
 
3131
 
-
 
3132
void TPageManager::doBBR(int port, vector<int>& channels, vector<string>& pars)
-
 
3133
{
-
 
3134
    DECL_TRACER("TPageManager::doBBR(int port, vector<int>& channels, vector<string>& pars)");
-
 
3135
 
-
 
3136
    if (pars.size() < 2)
-
 
3137
    {
-
 
3138
        MSG_ERROR("Expecting 2 parameters but got none! Ignoring command.");
-
 
3139
        return;
-
 
3140
    }
-
 
3141
 
-
 
3142
    TError::clear();
-
 
3143
    int btState = atoi(pars[0].c_str());
-
 
3144
    string resName = pars[1];
-
 
3145
 
-
 
3146
    vector<MAP_T> map = findButtons(port, channels);
-
 
3147
 
-
 
3148
    if (TError::isError() || map.empty())
-
 
3149
        return;
-
 
3150
 
-
 
3151
    vector<Button::TButton *> buttons = collectButtons(map);
-
 
3152
    vector<Button::TButton *>::iterator mapIter;
-
 
3153
 
-
 
3154
    for (mapIter = buttons.begin(); mapIter != buttons.end(); mapIter++)
-
 
3155
    {
-
 
3156
        Button::TButton *bt = *mapIter;
-
 
3157
        setButtonCallbacks(bt);
-
 
3158
 
-
 
3159
        if (btState == 0)       // All instances?
-
 
3160
        {
-
 
3161
            int bst = bt->getNumberInstances();
-
 
3162
            MSG_DEBUG("Setting BBR on all " << bst << " instances...");
-
 
3163
 
-
 
3164
            for (int i = 0; i < bst; i++)
-
 
3165
                bt->setResourceName(resName, i);
-
 
3166
        }
-
 
3167
        else
-
 
3168
            bt->setResourceName(resName, btState - 1);
-
 
3169
    }
-
 
3170
}
-
 
3171
 
-
 
3172
void TPageManager::doRMF(int port, vector<int>& channels, vector<string>& pars)
-
 
3173
{
-
 
3174
    DECL_TRACER("TPageManager::doRMF(int port, vector<int>& channels, vector<string>& pars)");
-
 
3175
 
-
 
3176
    if (pars.size() < 2)
-
 
3177
    {
-
 
3178
        MSG_ERROR("Expecting 2 parameters but got none! Ignoring command.");
-
 
3179
        return;
-
 
3180
    }
-
 
3181
 
-
 
3182
    string name = pars[0];
-
 
3183
    string data = pars[1];
-
 
3184
 
-
 
3185
    vector<string> parts = StrSplit(data, "%");
-
 
3186
    RESOURCE_T res;
-
 
3187
    vector<string>::iterator sIter;
-
 
3188
 
-
 
3189
    for (sIter = parts.begin(); sIter != parts.end(); sIter++)
-
 
3190
    {
-
 
3191
        const char *s = sIter->c_str();
-
 
3192
        MSG_DEBUG("Parsing \"" << s << "\" with token << " << *s);
-
 
3193
 
-
 
3194
        switch(*s)
-
 
3195
        {
-
 
3196
            case 'P':
-
 
3197
                if (*(s+1) == '0')
-
 
3198
                    res.protocol = "HTTP";
-
 
3199
                else
-
 
3200
                    res.protocol = "FTP";
-
 
3201
            break;
-
 
3202
 
-
 
3203
            case 'U': res.user = sIter->substr(1); break;
-
 
3204
            case 'S': res.password = sIter->substr(1); break;
-
 
3205
            case 'H': res.host = sIter->substr(1); break;
-
 
3206
            case 'F': res.file = sIter->substr(1); break;
-
 
3207
            case 'A': res.path = sIter->substr(1); break;
-
 
3208
            case 'R': res.refresh = atoi(sIter->substr(1).c_str()); break;
-
 
3209
 
-
 
3210
            default:
-
 
3211
                MSG_WARNING("Option " << sIter->at(0) << " is currently not implemented!");
-
 
3212
        }
-
 
3213
    }
-
 
3214
 
-
 
3215
    if (gPrjResources)
-
 
3216
        gPrjResources->setResource(name, res.protocol, res.host, res.path, res.file, res.user, res.password, res.refresh);
-
 
3217
}