diff --git a/radio/src/gui/480x272/model_select.cpp b/radio/src/gui/480x272/model_select.cpp index 5bae39ff4..760afec69 100644 --- a/radio/src/gui/480x272/model_select.cpp +++ b/radio/src/gui/480x272/model_select.cpp @@ -51,7 +51,7 @@ void drawCategory(coord_t y, const char * name, bool selected) void drawModel(coord_t x, coord_t y, ModelCell * model, bool current, bool selected) { - lcd->drawBitmap(x+1, y+1, &model->buffer); + lcd->drawBitmap(x+1, y+1, model->getBuffer()); if (current) { lcd->drawBitmapPattern(x+66, y+43, LBM_ACTIVE_MODEL, TITLE_BGCOLOR); } @@ -324,7 +324,7 @@ bool menuModelSelect(event_t event) drawModel(MODELS_LEFT, y, *it, current, selected); } if (selected) { - lcdDrawText(MODELS_LEFT, LCD_H-FH-1, (*it)->name, TEXT_COLOR); + // lcdDrawText(MODELS_LEFT, LCD_H-FH-1, (*it)->name, TEXT_COLOR); } } } diff --git a/radio/src/storage/modelslist.h b/radio/src/storage/modelslist.h index ced6a774d..3a8baa062 100644 --- a/radio/src/storage/modelslist.h +++ b/radio/src/storage/modelslist.h @@ -31,47 +31,59 @@ class ModelCell { public: ModelCell(const char * name): - buffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT) + buffer(NULL) { - buffer.clear(TEXT_BGCOLOR); - strncpy(this->name, name, sizeof(this->name)); + } + const BitmapBuffer * getBuffer() + { + if (!buffer) { + load(); + } + return buffer; + } + + void load() + { ModelHeader header; const char * error = NULL; + buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT); + buffer->clear(TEXT_BGCOLOR); + if (strncmp(name, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME) == 0) header = g_model.header; else error = readModel(name, (uint8_t *)&header, sizeof(header)); if (error) { - buffer.drawText(5, 2, "(Invalid Model)", TEXT_COLOR); - buffer.drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); + buffer->drawText(5, 2, "(Invalid Model)", TEXT_COLOR); + buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); } else { char timer[LEN_TIMER_STRING]; - buffer.drawSizedText(5, 2, header.name, LEN_MODEL_NAME, ZCHAR|TEXT_COLOR); + buffer->drawSizedText(5, 2, header.name, LEN_MODEL_NAME, ZCHAR|TEXT_COLOR); getTimerString(timer, 0); - buffer.drawText(101, 40, timer, TEXT_COLOR); + buffer->drawText(101, 40, timer, TEXT_COLOR); for (int i=0; i<4; i++) { - buffer.drawBitmapPattern(104+i*11, 25, LBM_SCORE0, TITLE_BGCOLOR); + buffer->drawBitmapPattern(104+i*11, 25, LBM_SCORE0, TITLE_BGCOLOR); } GET_FILENAME(filename, BITMAPS_PATH, header.bitmap, ""); const BitmapBuffer * bitmap = BitmapBuffer::load(filename); if (bitmap) { - buffer.drawScaledBitmap(bitmap, 5, 24, 56, 32); + buffer->drawScaledBitmap(bitmap, 5, 24, 56, 32); delete bitmap; } else { - buffer.drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); + buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR); } } - buffer.drawSolidHorizontalLine(5, 19, 143, LINE_COLOR); + buffer->drawSolidHorizontalLine(5, 19, 143, LINE_COLOR); } char name[LEN_MODEL_FILENAME+1]; - BitmapBuffer buffer; + BitmapBuffer * buffer; }; class ModelsCategory: public std::list diff --git a/radio/src/storage/sdcard_raw.h b/radio/src/storage/sdcard_raw.h index 628b53eff..37feef7d8 100644 --- a/radio/src/storage/sdcard_raw.h +++ b/radio/src/storage/sdcard_raw.h @@ -24,7 +24,7 @@ #include "ff.h" #define DEFAULT_CATEGORY "Models" -#define DEFAULT_MODEL_FILENAME "model01.bin" +#define DEFAULT_MODEL_FILENAME "model1.bin" const char * readModel(const char * filename, uint8_t * buffer, uint32_t size); const char * loadModel(const char * filename, bool alarms=true);