LCOV - code coverage report
Current view: top level - src/Selectors - IncrementDecrementSelector.hpp (source / functions) Hit Total Coverage
Test: 19d2efc7037c2e176feca44750a12594c76f466f Lines: 23 24 95.8 %
Date: 2019-11-24 14:50:27 Functions: 18 29 62.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "Selector.hpp"
       4             : #include <Hardware/IncrementDecrementButtons.hpp>
       5             : 
       6             : BEGIN_CS_NAMESPACE
       7             : 
       8             : template <setting_t N, class Callback = EmptySelectorCallback>
       9           7 : class GenericIncrementDecrementSelector : public GenericSelector<N, Callback> {
      10             :     using Parent = GenericSelector<N, Callback>;
      11             : 
      12             :   public:
      13           7 :     GenericIncrementDecrementSelector(Selectable<N> &selectable,
      14             :                                       const Callback &callback,
      15             :                                       const IncrementDecrementButtons &buttons,
      16             :                                       Wrap wrap = Wrap::Wrap)
      17          14 :         : GenericSelector<N, Callback>{selectable, callback}, buttons{buttons},
      18          21 :           wrap{wrap} {}
      19             : 
      20           5 :     void begin() override {
      21           5 :         Parent::begin();
      22           5 :         buttons.begin();
      23           5 :     }
      24             : 
      25          19 :     void update() override {
      26          19 :         Parent::update();
      27             :         using IncrDecrButtons = IncrementDecrementButtons;
      28          19 :         switch (buttons.update()) {
      29           5 :             case IncrDecrButtons::Increment: this->increment(wrap); break;
      30           5 :             case IncrDecrButtons::Decrement: this->decrement(wrap); break;
      31           1 :             case IncrDecrButtons::Reset: this->reset(); break;
      32           8 :             case IncrDecrButtons::Nothing: break;
      33           0 :             default: break;
      34             :         }
      35          19 :     }
      36             : 
      37             : #ifdef INDIVIDUAL_BUTTON_INVERT
      38             :     void invert() { buttons.invert(); }
      39             : #endif
      40             : 
      41             :     IncrementDecrementButtons::State getButtonsState() const {
      42             :         return buttons.getState();
      43             :     }
      44             : 
      45             :   private:
      46             :     IncrementDecrementButtons buttons;
      47             :     Wrap wrap;
      48             : };
      49             : 
      50             : // -------------------------------------------------------------------------- //
      51             : 
      52             : /**
      53             :  * @brief   Selector with two buttons (one to increment, one to decrement).
      54             :  * 
      55             :  * Pressing two buttons simultaneously resets to the default setting.
      56             :  * 
      57             :  * @htmlonly 
      58             :  * <object type="image/svg+xml" data="../../selector-increment-decrement-LED.svg"></object>
      59             :  * @endhtmlonly
      60             :  * 
      61             :  * @ingroup Selectors 
      62             :  * 
      63             :  * @tparam  N 
      64             :  *          The number of settings.
      65             :  */
      66             : template <setting_t N>
      67           6 : class IncrementDecrementSelector : public GenericIncrementDecrementSelector<N> {
      68             :   public:
      69           6 :     IncrementDecrementSelector(Selectable<N> &selectable,
      70             :                                const IncrementDecrementButtons &buttons,
      71             :                                Wrap wrap = Wrap::Wrap)
      72           6 :         : GenericIncrementDecrementSelector<N>{
      73           6 :               selectable,
      74             :               {},
      75           6 :               buttons,
      76           6 :               wrap,
      77          12 :           } {}
      78             : };
      79             : 
      80             : END_CS_NAMESPACE

Generated by: LCOV version 1.14-5-g4ff2ed6