Interfaçage NeoPixel Ring 12, LPRO MECSE, Arnaud A.

view1.cpp

Committer:
Rhamao
Date:
2020-06-22
Revision:
1:9bcbc2be6d52

File content as of revision 1:9bcbc2be6d52:

#include "view1.h"

View1::View1(int width, int height) : m_width(width), m_height(height){}

View1::~View1()                                                                                //Destructeur de bouton
{
    for (Button * button : m_buttonList) {
        delete button;
    }
    m_buttonList.clear();
}


void View1::contain(int x, int y)
{
    if(screenReleased){
        screenReleased=false;
        for (Button * button : m_buttonList) {
            if (button->contain(x,y)) {
                updatePlusMinus(button);
                updateLEDS(button);
                updateSetNewColorAndCancel(button);
                updateViewChanged(button);
            }
        }
    }
}


void View1::draw()
{
    BSP_LCD_Clear(m_bgColor);                                 //Enlève l'affichage du début
    for (Button * button : m_buttonList) {
        button->draw();
    }
    drawText();
}


void View1::initView(){
    for(int y=0; y<12; y++){
      strcpy(RGBmap[y], "000000");
    }
    m_bgColor = LCD_COLOR_BLACK;
    //LEDS
    led0->setText("");
    led1->setText("");
    led2->setText("");
    led3->setText("");
    led4->setText("");
    led5->setText("");
    led6->setText("");
    led7->setText("");
    led8->setText("");
    led9->setText("");
    led10->setText("");
    led11->setText("");
    //RGB TextView
    redTextview->setText("000");
    greenTextview->setText("000");
    blueTextview->setText("000");
    //RGB + and -
    plusRED->setText("+1");
    minusRED->setText("-1");
    plusGREEN->setText("+1");
    minusGREEN->setText("-1");
    plusBLUE->setText("+1");
    minusBLUE->setText("-1");
    plus10RED->setText("+10");
    minus10RED->setText("-10");
    plus10GREEN->setText("+10");
    minus10GREEN->setText("-10");
    plus10BLUE->setText("+10");
    minus10BLUE->setText("-10");
    //SET NEW COLOR
    setNewColor->setText("SET NEW COLOR");
    cancel->setText("CANCEL");
    //Animations tab
    animations->setText("Animations", LCD_COLOR_WHITE);
    hideTop->setText("");
    hideRight->setText("");
    //LEDs tab
    leds->setText("LEDS", LCD_COLOR_BLACK);
    //LEDS buttons
    m_buttonList.push_front(led0);
    m_buttonList.push_front(led1);
    m_buttonList.push_front(led2);
    m_buttonList.push_front(led3);
    m_buttonList.push_front(led4);
    m_buttonList.push_front(led5);
    m_buttonList.push_front(led6);
    m_buttonList.push_front(led7);
    m_buttonList.push_front(led8);
    m_buttonList.push_front(led9);
    m_buttonList.push_front(led10);
    m_buttonList.push_front(led11);
    //RGB TextView
    m_buttonList.push_front(redTextview);
    m_buttonList.push_front(greenTextview);
    m_buttonList.push_front(blueTextview);
    //RGB + and -
    m_buttonList.push_front(plusRED);
    m_buttonList.push_front(minusRED);
    m_buttonList.push_front(plusGREEN);
    m_buttonList.push_front(minusGREEN);
    m_buttonList.push_front(plusBLUE);
    m_buttonList.push_front(minusBLUE);
    m_buttonList.push_front(plus10RED);
    m_buttonList.push_front(minus10RED);
    m_buttonList.push_front(plus10GREEN);
    m_buttonList.push_front(minus10GREEN);
    m_buttonList.push_front(plus10BLUE);
    m_buttonList.push_front(minus10BLUE);
    //SET NEW COLOR
    m_buttonList.push_front(setNewColor);
    m_buttonList.push_front(cancel);
    //Animations tab
    m_buttonList.push_front(hideRight);
    m_buttonList.push_front(hideTop);
    m_buttonList.push_front(animations);
    //LEDs tab
    m_buttonList.push_front(leds);
}

void View1::drawText(){
    //(uint32_t)0xFFFFFFFF
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
    BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
    BSP_LCD_DisplayStringAt(90,10,(uint8_t *)"Red", LEFT_MODE);
    BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
    BSP_LCD_DisplayStringAt(90,100,(uint8_t *)"Green", LEFT_MODE);
    BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
    BSP_LCD_DisplayStringAt(90,190,(uint8_t *)"Blue", LEFT_MODE);
}

void View1::updateLCD(){
    setNewColorEnabled = false;
    viewChanged = false;
    BSP_TS_GetState(&TS_State);
    if (TS_State.touchDetected) {                                                        //Detecte si l'écran tactile est touché
        cleared = false;
        for (idx = 0; idx < TS_State.touchDetected; idx++) {
            x = TS_State.touchX[idx];
            y = TS_State.touchY[idx];
            contain(x, y);

        }
    } else {
        screenReleased=true;
        if (!cleared) {
            draw();
            cleared = true;
        }
    }

}

bool View1::updatePlusMinus(Button* button){
        if(button == plusRED){
            RGB[0]= std::atoi((const char*)redTextview->getText());
            RGB[0]++;
            sprintf(str, "%d", RGB[0]);
            redTextview->setText(str);           
        } else if(button == minusRED){
            RGB[0]= std::atoi((const char*)redTextview->getText());
            RGB[0]--;
            sprintf(str, "%d", RGB[0]);
            redTextview->setText(str);  
        } else if(button == plus10RED){
            RGB[0]= std::atoi((const char*)redTextview->getText());
            RGB[0]+=10;
            sprintf(str, "%d", RGB[0]);
            redTextview->setText(str);           
        } else if(button == minus10RED){
            RGB[0]= std::atoi((const char*)redTextview->getText());
            RGB[0]-=10;
            sprintf(str, "%d", RGB[0]);
            redTextview->setText(str);  
        } else if(button == plusGREEN){
            RGB[1]= std::atoi((const char*)greenTextview->getText());
            RGB[1]++;
            sprintf(str, "%d", RGB[1]);
            greenTextview->setText(str);           
        } else if(button == minusGREEN){
            RGB[1]= std::atoi((const char*)greenTextview->getText());
            RGB[1]--;
            sprintf(str, "%d", RGB[1]);
            greenTextview->setText(str);  
        } else if(button == plus10GREEN){
            RGB[1]= std::atoi((const char*)greenTextview->getText());
            RGB[1]+=10;
            sprintf(str, "%d", RGB[1]);
            greenTextview->setText(str);           
        } else if(button == minus10GREEN){
            RGB[1]= std::atoi((const char*)greenTextview->getText());
            RGB[1]-=10;
            sprintf(str, "%d", RGB[1]);
            greenTextview->setText(str);  
        }else if(button == plusBLUE){
            RGB[2]= std::atoi((const char*)blueTextview->getText());
            RGB[2]++;
            sprintf(str, "%d", RGB[2]);
            blueTextview->setText(str);           
        } else if(button == minusBLUE){
            RGB[2]= std::atoi((const char*)blueTextview->getText());
            RGB[2]--;
            sprintf(str, "%d", RGB[2]);
            blueTextview->setText(str);  
        } else if(button == plus10BLUE){
            RGB[2]= std::atoi((const char*)blueTextview->getText());
            RGB[2]+=10;
            sprintf(str, "%d", RGB[2]);
            blueTextview->setText(str);           
        } else if(button == minus10BLUE){
            RGB[2]= std::atoi((const char*)blueTextview->getText());
            RGB[2]-=10;
            sprintf(str, "%d", RGB[2]);
            blueTextview->setText(str);  
        } else
            return false;  
    
        return true;
}

bool View1::updateLEDS(Button* button){
    if(button == led0)
        if(!ledSelected[0]){
            ledSelected[0]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[0]=false;
            button->setBorderWidth(1);
        }
    else if(button == led1)
        if(!ledSelected[1]){
            ledSelected[1]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[1]=false;
            button->setBorderWidth(1);
        }     
    else if(button == led2)
        if(!ledSelected[2]){
            ledSelected[2]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[2]=false;
            button->setBorderWidth(1);
        }
    else if(button == led3)
        if(!ledSelected[3]){
            ledSelected[3]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[3]=false;
            button->setBorderWidth(1);
        }     
    else if(button == led4)
        if(!ledSelected[4]){
            ledSelected[4]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[4]=false;
            button->setBorderWidth(1);
        }   
    else if(button == led5)
        if(!ledSelected[5]){
            ledSelected[5]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[5]=false;
            button->setBorderWidth(1);
        }        
    else if(button == led6)
        if(!ledSelected[6]){
            ledSelected[6]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[6]=false;
            button->setBorderWidth(3);
        }    
    else if(button == led7)
        if(!ledSelected[7]){
            ledSelected[7]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[7]=false;
            button->setBorderWidth(1);
        }    
    else if(button == led8)
        if(!ledSelected[8]){
            ledSelected[8]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[8]=false;
            button->setBorderWidth(1);
        }    
    else if(button == led9)
        if(!ledSelected[9]){
            ledSelected[9]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[9]=false;
            button->setBorderWidth(1);
        }     
        else if(button == led10)
        if(!ledSelected[10]){
            ledSelected[10]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[10]=false;
            button->setBorderWidth(1);
        }    
    else if(button == led11)
        if(!ledSelected[11]){
            ledSelected[11]=true;
            button->setBorderWidth(3);
        }
        else{
            ledSelected[11]=false;
            button->setBorderWidth(1);
        }    
    else
        return false;
        
    return true;
}

bool View1::updateSetNewColorAndCancel(Button* button){
    int i=0;
    uint32_t RGBcolor=0xFF000000;
    if(button == cancel){
        led0->setBorderWidth(1);
        led1->setBorderWidth(1);
        led2->setBorderWidth(1);
        led3->setBorderWidth(1);
        led4->setBorderWidth(1);
        led5->setBorderWidth(1);
        led6->setBorderWidth(1);
        led7->setBorderWidth(1);
        led8->setBorderWidth(1);
        led9->setBorderWidth(1);
        led10->setBorderWidth(1);
        led11->setBorderWidth(1);

    }else if(button == setNewColor){
        setNewColorEnabled = true;
        RGBcolor+=RGB[2]+(RGB[1]<<8)+(RGB[0]<<16);
        led0->setBorderWidth(1);
        led1->setBorderWidth(1);
        led2->setBorderWidth(1);
        led3->setBorderWidth(1);
        led4->setBorderWidth(1);
        led5->setBorderWidth(1);
        led6->setBorderWidth(1);
        led7->setBorderWidth(1);
        led8->setBorderWidth(1);
        led9->setBorderWidth(1);
        led10->setBorderWidth(1);
        led11->setBorderWidth(1);
        if(ledSelected[0]){
            led0->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x000000ff);
            strcpy(RGBmap[0], str);
        }if(ledSelected[1]){
            led1->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[1], str);
        }if(ledSelected[2]){
            led2->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[2], str);
        }if(ledSelected[3]){
            led3->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[3], str);
        }if(ledSelected[4]){
            led4->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[4], str);
        }if(ledSelected[5]){
            led5->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[5], str);
        }if(ledSelected[6]){
            led6->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[6], str);
        }if(ledSelected[7]){
            led7->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[7], str);
        }if(ledSelected[8]){
            led8->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[8], str);
        }if(ledSelected[9]){
            led9->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[9], str);
        }if(ledSelected[10]){
            led10->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[10], str);
        }if(ledSelected[11]){
            led11->setBackgroundColor(RGBcolor);
            sprintf(str, "%06x", RGBcolor & 0x00ffffff);
            strcpy(RGBmap[11], str);
        }
    }else
        return false;

    for(i=0; i<12; i++)
        ledSelected[i]=false;
    return true;
}

void View1::updateViewChanged(Button* button){
    if(button == animations){
        viewChanged=true;
    }
}

bool View1::getViewChanged(){
    return viewChanged;
}

void View1::setViewChanged(bool viewChanged){
    this->viewChanged = viewChanged;
}

void View1::getRGBmap(char RGBmap[12][7]){
    for(int i=0; i<12; i++)
        for(int y=0; y<6; y++)
            RGBmap[i][y] = this->RGBmap[i][y];
}

bool View1::getSetNewColorEnabled(){
  return setNewColorEnabled;   
}