bool operator() ( const TypeSet::KeyType &key, const TypeSet::ValueType &val ) { int type = SINGLETON( GI::PropertyTypeSet ).GetType( key ); long lkey = (long) key; if( lkey > PEXTEND_BEGIN && lkey < PEXTEND_END && IS_DYNAMIC(type) ) { m_ps[&key] = &val; } return false; }
static void cmsDrawMenu(displayPort_t *pDisplay, uint32_t currentTimeUs) { if (!pageTop) return; uint8_t i; OSD_Entry *p; uint8_t top = (pDisplay->rows - maxRow) / 2 - 1; // Polled (dynamic) value display denominator. bool drawPolled = false; static uint32_t lastPolledUs = 0; if (currentTimeUs > lastPolledUs + CMS_POLL_INTERVAL_US) { drawPolled = true; lastPolledUs = currentTimeUs; } uint32_t room = displayTxBytesFree(pDisplay); if (pDisplay->cleared) { for (p = pageTop, i= 0; p->type != OME_END; p++, i++) { SET_PRINTLABEL(p); SET_PRINTVALUE(p); } if (i > MAX_MENU_ITEMS(pDisplay)) // max per page { pageTopAlt = pageTop + MAX_MENU_ITEMS(pDisplay); if (pageTopAlt->type == OME_END) pageTopAlt = NULL; } pDisplay->cleared = false; } else if (drawPolled) { for (p = pageTop ; p <= pageTop + maxRow ; p++) { if (IS_DYNAMIC(p)) SET_PRINTVALUE(p); } } // Cursor manipulation while ((pageTop + cursorRow)->type == OME_Label) // skip label cursorRow++; if (pDisplay->cursorRow >= 0 && cursorRow != pDisplay->cursorRow) { room -= displayWrite(pDisplay, LEFT_MENU_COLUMN, pDisplay->cursorRow + top, " "); } if (room < 30) return; if (pDisplay->cursorRow != cursorRow) { room -= displayWrite(pDisplay, LEFT_MENU_COLUMN, cursorRow + top, " >"); pDisplay->cursorRow = cursorRow; } if (room < 30) return; // Print text labels for (i = 0, p = pageTop; i < MAX_MENU_ITEMS(pDisplay) && p->type != OME_END; i++, p++) { if (IS_PRINTLABEL(p)) { uint8_t coloff = LEFT_MENU_COLUMN; coloff += (p->type == OME_Label) ? 1 : 2; room -= displayWrite(pDisplay, coloff, i + top, p->text); CLR_PRINTLABEL(p); if (room < 30) return; } } // Print values // XXX Polled values at latter positions in the list may not be // XXX printed if not enough room in the middle of the list. for (i = 0, p = pageTop; i < MAX_MENU_ITEMS(pDisplay) && p->type != OME_END; i++, p++) { if (IS_PRINTVALUE(p)) { room -= cmsDrawMenuEntry(pDisplay, p, top + i); if (room < 30) return; } } }