void InfoScreens::handleUpdateTimer() { // debugf("can updatedisplay=%i", canUpdateDisplay()); if(canUpdateDisplay() && internalCanUpdateDisplay) { if (mChildern.size() == 0) { debugf("I cannot print anything, no Pages declared, setting to NOT update display"); setCanUpdateDisplay(false); return; } if (paramValueMap["currentPage"].dirty) { // debugf("currentPage = %i, paramValueMap['currentPage'].dirty= %d",paramValueMap["currentPage"].val.toInt(), (int)paramValueMap["currentPage"].dirty); display->clearDisplay(); display->setCursor(0,0); print(paramValueMap["currentPage"].val.toInt()); paramValueMap["currentPage"].clearDirty(); } else { internalCanUpdateDisplay = false; Vector<paramStruct*> params(getCurrent()->getAllParamsInPage()); // debugf("params in page = %i", params.size()); boolean updated = false; //need localcopy of params Vector<String> tempIds; for (int i = 0; i < params.size(); ++i) { paramStruct* param = params.get(i); if(paramValueMap[param->id].dirty) { tempIds.add(param->id); paramValueMap[param->id].clearDirty(); } } for (int i = 0; i < params.size(); ++i) { paramStruct* param = params.get(i); if (tempIds.contains(param->id)) { // debugf("updating param %s", param->id.c_str()); display->writeover(param->t, paramValueMap[param->id].val); updated = true; } } internalCanUpdateDisplay = true; if (updated) { display->display(); } long current = millis(); //in case of edit mode, flip every x mills the line (blink) if(viewMode == ViewMode::EDIT && current >= (lastEditModeBlinkTime + editModeBlinkTime)) { lastEditModeBlinkTime = current; blinkDrawn = !blinkDrawn; // display->drawRect(0,0, 128, 64, blinkDrawn ? WHITE : BLACK); // display->drawPixel(127,0 , blinkDrawn ? WHITE : BLACK); display->fillRect(126, 0, 128, 2, blinkDrawn ? WHITE : BLACK); // display->display(); } } } }
void InfoScreens::handleScreenUpdateTimer() { if(canUpdateDisplay() && internalCanUpdateDisplay) { if (mChildern.size() == 0) { debugf("I cannot print anything, no Pages declared, setting to NOT update display"); setCanUpdateDisplay(false); return; } if (paramValueMap["currentPage"].dirty) { display->clearDisplay(); display->setCursor(0,0); print(paramValueMap["currentPage"].val->toInt()); paramValueMap["currentPage"].clearDirty(); } else { internalCanUpdateDisplay = false; Vector<paramStruct*> params(getCurrent()->getAllParamsInPage()); boolean updated = false; //need localcopy of params Vector<String> tempIds; for (int i = 0; i < params.size(); ++i) { paramStruct* param = params.get(i); if(paramValueMap[param->id].dirty) { tempIds.add(param->id); paramValueMap[param->id].clearDirty(); } } for (int i = 0; i < params.size(); ++i) { paramStruct* param = params.get(i); if (tempIds.contains(param->id)) { int inverse = false; if(viewMode == ViewMode::EDIT_FIELD && param->editable) { inverse = true; } display->writeover(param->t, *paramValueMap[param->id].val, inverse); updated = true; } } internalCanUpdateDisplay = true; if (updated) { display->display(); } if (editModeBlinkInfo.shouldEraseLast()) { drawBlinkParamLine(editModeBlinkInfo.lastSelectedParam, display->getBlack()); editModeBlinkInfo.lastSelectedParam = NULL; } long current = millis(); int linecolor = display->getBlack(); int symbleColor = display->getBlack(); editModeBlinkInfo.handleTimeElapsed(current); if (viewMode == ViewMode::EDIT || viewMode == ViewMode::EDIT_FIELD) { if (editModeBlinkInfo.blinkDrawn) { linecolor = display->getWhite(); symbleColor = display->getWhite(); if (viewMode == ViewMode::EDIT_FIELD){ } } drawEditModeSign(124, 0, symbleColor); paramStruct* p = getCurrent()->getCurrentEditParam(); if (p) { int extraW = (p->maxSize) - p->t.w; if (viewMode == ViewMode::EDIT_FIELD) { display->writeover(p->t, *paramValueMap[p->id].val, true); if (extraW >0) { display->fillRect(p->t.x + p->t.w, p->t.y, extraW, p->t.h, display->getWhite()); } } else { display->writeover(p->t, *paramValueMap[p->id].val); if (extraW >0) { display->fillRect(p->t.x + p->t.w, p->t.y, extraW, p->t.h, display->getBlack()); } } drawBlinkParamLine(p, linecolor); } } } } }