Subversion Repositories tpanel

Rev

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

Rev 434 Rev 435
Line 1... Line 1...
1
/*
1
/*
2
 * Copyright (C) 2020 to 2023 by Andreas Theofilu <andreas@theosys.at>
2
 * Copyright (C) 2020 to 2024 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 9555... Line 9555...
9555
        {
9555
        {
9556
            TButton *bt = gPageManager->findBargraph(lp, lv, getParent());
9556
            TButton *bt = gPageManager->findBargraph(lp, lv, getParent());
9557
 
9557
 
9558
            if (bt)
9558
            if (bt)
9559
            {
9559
            {
9560
  //              int rangeUp = bt->getLevelRangeUp();
-
 
9561
  //              int rangeDown = bt->getLevelRangeDown();
-
 
9562
                int level = bt->getLevelValue();
9560
                int level = bt->getLevelValue();
9563
 
9561
 
9564
                if (vt == "rel")    // relative
9562
                if (vt == "rel")    // relative
9565
                {
9563
                {
9566
                    if (rv > 0)
9564
                    if (rv > 0)
9567
                    {
9565
                    {
9568
                        mThreadRunMove = true;
9566
                        mThreadRunMove = true;
9569
 
9567
 
9570
//                        int rangeTime = (va > 0 ? rangeUp : rangeDown) * 100;
-
 
9571
                        level += va;
9568
                        level += va;
-
 
9569
                        int btRh = bt->getRangeHigh();
-
 
9570
                        int btRl = bt->getRangeLow();
9572
 
9571
 
9573
                        if (level < bt->getRangeLow())
9572
                        if (level < btRl)
9574
                            level = bt->getRangeLow();
9573
                            level = btRl;
9575
                        else if (level > bt->getRangeHigh())
9574
                        else if (level > btRh)
9576
                            level = bt->getRangeHigh();
9575
                            level = btRh;
9577
 
9576
 
9578
                        for (int i = 0; i < rv; ++i)
9577
                        for (int i = 0; i < rv; ++i)
9579
                        {
9578
                        {
9580
                            if (!mThreadRunMove)
9579
                            if (!mThreadRunMove || level > btRh || level < btRl)
9581
                                break;
9580
                                break;
9582
 
9581
 
9583
                            gPageManager->sendInternalLevel(lp, lv, level);
9582
                            gPageManager->sendInternalLevel(lp, lv, level);
-
 
9583
 
-
 
9584
                            if (buttonStates && level != lastSendLevelX)
-
 
9585
                            {
-
 
9586
                                gPageManager->sendLevel(lp, lv, level);
-
 
9587
                                buttonStates->setLastSendLevelX(level);
-
 
9588
                                lastSendLevelX = level;
-
 
9589
                            }
-
 
9590
 
9584
                            level += va;
9591
                            level += va;
9585
                        }
9592
                        }
9586
 
9593
 
9587
                        mThreadRunMove = false;
9594
                        mThreadRunMove = false;
9588
                    }
9595
                    }
9589
                    else
9596
                    else
-
 
9597
                    {
-
 
9598
                        level += va;
-
 
9599
 
-
 
9600
                        if (level < bt->getRangeLow())
-
 
9601
                            level = bt->getRangeLow();
-
 
9602
                        else if (level > bt->getRangeHigh())
-
 
9603
                            level = bt->getRangeHigh();
-
 
9604
 
9590
                        gPageManager->sendInternalLevel(lp, lv, level + va);
9605
                        gPageManager->sendInternalLevel(lp, lv, level);
-
 
9606
 
-
 
9607
                        if (buttonStates && lastSendLevelX != (level))
-
 
9608
                        {
-
 
9609
                            gPageManager->sendLevel(lp, lv, level);
-
 
9610
                            buttonStates->setLastSendLevelX(level);
-
 
9611
                            lastSendLevelX = level;
-
 
9612
                        }
-
 
9613
                    }
9591
                }
9614
                }
9592
                else    // absolute
9615
                else    // absolute
-
 
9616
                {
9593
                    gPageManager->sendInternalLevel(lp, lv, va);
9617
                    gPageManager->sendInternalLevel(lp, lv, va);
-
 
9618
 
-
 
9619
                    if (buttonStates && lastSendLevelX != va)
-
 
9620
                    {
-
 
9621
                        gPageManager->sendLevel(lp, lv, va);
-
 
9622
                        buttonStates->setLastSendLevelX(va);
-
 
9623
                        lastSendLevelX = va;
-
 
9624
                    }
-
 
9625
                }
9594
            }
9626
            }
9595
            else
9627
            else
9596
                MSG_DEBUG("Found no bargraph with lp=" << lp << ", lv=" << lv);
9628
                MSG_DEBUG("Found no bargraph with lp=" << lp << ", lv=" << lv);
9597
        }
9629
        }
9598
        else if (!pressed && !vt.empty() && lp && lv)
9630
        else if (!pressed && !vt.empty() && lp && lv)
Line 9706... Line 9738...
9706
                runBargraphMove(distance, directionUp);
9738
                runBargraphMove(distance, directionUp);
9707
            else if (!pressed)
9739
            else if (!pressed)
9708
            {
9740
            {
9709
                if (lf == "active")
9741
                if (lf == "active")
9710
                    level = lastLevel;
9742
                    level = lastLevel;
9711
 
-
 
-
 
9743
                else if (level != lastLevel)
9712
                drawBargraph(mActInstance, level);
9744
                    drawBargraph(mActInstance, level);
9713
 
9745
 
9714
                if (lp && lv && gPageManager && gPageManager->getLevelSendState())
9746
                if (lp && lv && gPageManager && gPageManager->getLevelSendState())
9715
                {
9747
                {
9716
                    gPageManager->sendLevel(lp, lv, (ri ? ((rh - rl) - level) : level));
9748
                    gPageManager->sendLevel(lp, lv, (ri ? ((rh - rl) - level) : level));
9717
                    lastSendLevelX = level;
9749
                    lastSendLevelX = level;
Line 10707... Line 10739...
10707
 
10739
 
10708
    if (!gPageManager)
10740
    if (!gPageManager)
10709
        return nullptr;
10741
        return nullptr;
10710
 
10742
 
10711
    TButtonStates *s = gPageManager->getButtonState(type, mButtonID);
10743
    TButtonStates *s = gPageManager->getButtonState(type, mButtonID);
10712
    uint32_t id = s->getID();
-
 
10713
    std::stringstream str;
-
 
10714
    str << std::setw(8) << std::setfill('0') << std::hex << id;
-
 
10715
    MSG_DEBUG("Found button ID: " << str.str() << ", type: " << buttonTypeToString(s->getType()) << ", lastLevel: " << s->getLastLevel() << ", lastJoyX: " << s->getLastJoyX() << ", lasJoyY: " << s->getLastJoyY());
10744
    MSG_DEBUG("Found button ID: " << getButtonIDstr(s->getID()) << ", type: " << buttonTypeToString(s->getType()) << ", lastLevel: " << s->getLastLevel() << ", lastJoyX: " << s->getLastJoyX() << ", lasJoyY: " << s->getLastJoyY());
10716
    return s;
10745
    return s;
10717
}
10746
}
10718
 
10747
 
10719
int TButton::getLevelValue()
10748
int TButton::getLevelValue()
10720
{
10749
{
Line 10726... Line 10755...
10726
    {
10755
    {
10727
        MSG_ERROR("Button states not found!");
10756
        MSG_ERROR("Button states not found!");
10728
        return 0;
10757
        return 0;
10729
    }
10758
    }
10730
 
10759
 
10731
    return buttonStates->getLastLevel();
10760
    int level = buttonStates->getLastLevel();
-
 
10761
 
-
 
10762
    if (ri > 0)
-
 
10763
        level = (rh - rl) - level;
-
 
10764
 
-
 
10765
    return level;
10732
}
10766
}
10733
 
10767
 
10734
void TButton::setLevelValue(int level)
10768
void TButton::setLevelValue(int level)
10735
{
10769
{
10736
    DECL_TRACER("TButton::setLevelValue(int level)");
10770
    DECL_TRACER("TButton::setLevelValue(int level)");
Line 10756... Line 10790...
10756
    {
10790
    {
10757
        MSG_ERROR("Button states not found!");
10791
        MSG_ERROR("Button states not found!");
10758
        return 0;
10792
        return 0;
10759
    }
10793
    }
10760
 
10794
 
10761
    return buttonStates->getLastJoyX();
10795
    int level = buttonStates->getLastJoyX();
-
 
10796
 
-
 
10797
    if (ri > 0)
-
 
10798
        level = (rh - rl) - level;
-
 
10799
 
-
 
10800
    return level;
10762
}
10801
}
10763
 
10802
 
10764
int TButton::getLevelAxisY()
10803
int TButton::getLevelAxisY()
10765
{
10804
{
10766
    DECL_TRACER("TButton::getLevelAxisY()");
10805
    DECL_TRACER("TButton::getLevelAxisY()");
Line 10771... Line 10810...
10771
    {
10810
    {
10772
        MSG_ERROR("Button states not found!");
10811
        MSG_ERROR("Button states not found!");
10773
        return 0;
10812
        return 0;
10774
    }
10813
    }
10775
 
10814
 
10776
    return buttonStates->getLastJoyY();
10815
    int level = buttonStates->getLastJoyY();
-
 
10816
 
-
 
10817
    if (ji > 0)
-
 
10818
        level = (rh - rl) - level;
-
 
10819
 
-
 
10820
    return level;
10777
}
10821
}
10778
 
10822
 
10779
string TButton::getButtonIDstr()
10823
string TButton::getButtonIDstr(uint32_t rid)
10780
{
10824
{
-
 
10825
    uint32_t id = (rid == 0x1fffffff ? mButtonID : rid);
10781
    std::stringstream s;
10826
    std::stringstream s;
10782
    s << std::setfill('0') << std::setw(8) << std::hex << mButtonID;
10827
    s << std::setfill('0') << std::setw(8) << std::hex << id;
10783
    return s.str();
10828
    return s.str();
10784
}
10829
}
10785
 
10830
 
10786
bool TButton::setListSource(const string &source, const vector<string>& configs)
10831
bool TButton::setListSource(const string &source, const vector<string>& configs)
10787
{
10832
{