Пример #1
0
void InfoScreens::show() {
//		lastUpdateTime = millis();
	setCanUpdateDisplay(false);
	display->clearDisplay();
//	display->display();
	paramValueMap["currentPage"].dirty = true;
	setCanUpdateDisplay(true);
}
Пример #2
0
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();
			}
		}
	}
}
Пример #3
0
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);
				}

			}
		}
	}
}
Пример #4
0
void InfoScreens::show() {
	setCanUpdateDisplay(false);
	display->clearDisplay();
	paramValueMap["currentPage"].dirty = true;
	setCanUpdateDisplay(true);
}