Patch for lcdprocclient for small displays for Mythtv-0.19
From MythTV Official Wiki
--KAFE 23:04, 1 March 2007 (UTC) did this patch for mythtv-0.19 to use the small (1 line / 9 characters) display of the AOpen XC Cube AV EA65
--- lcdprocclient.cpp.org 2005-12-10 06:11:52.000000000 +0100 +++ lcdprocclient.cpp 2007-02-28 22:33:43.000000000 +0100 @@ -29,6 +29,8 @@ #define LCD_TIME_TIME 5000 #define LCD_SCROLLLIST_TIME 2000 +int lcdStartCol = LCD_START_COL; + LCDProcClient::LCDProcClient(LCDServer *lparent) : QObject(NULL, "LCDProcClient") { @@ -52,6 +54,9 @@ lcdHeight = 1; cellWidth = 1; cellHeight = 1; + lcdStartCol = LCD_START_COL; + if (lcdWidth < 12) + lcdStartCol = 0; hostname = ""; port = 13666; @@ -419,6 +424,8 @@ // the ghetto way sendToServer("screen_add Menu"); setPriority("Menu", LOW); + if (lcdHeight > 1) + { sendToServer("widget_add Menu topWidget string"); for (unsigned int i = 1; i < lcdHeight; i++) { @@ -427,7 +434,11 @@ aString += " string"; sendToServer(aString); } - + } + else + { + sendToServer("widget_add Menu menuWidget1 string"); + } // The Music Screen sendToServer("screen_add Music"); setPriority("Music", LOW); @@ -1040,7 +1051,10 @@ setPriority("Menu", URGENT); // Write out the app name + if (lcdHeight >= 2) + { outputCenteredText("Menu", app_name, "topWidget", 1); + } QPtrListIterator<LCDMenuItem> it(*menuItems); LCDMenuItem *curItem; @@ -1066,8 +1080,11 @@ // If there isn't one selected item, then write it on the display and return if (!oneSelected) { + if (lcdHeight >= 2) + { sendToServer("widget_set Menu topWidget 1 1 \"No menu item selected\""); sendToServer("widget_set Menu menuWidget1 1 2 \" ABORTING \""); + } menuScrollTimer->stop(); return; } @@ -1093,7 +1110,7 @@ // If there is only two lines on the display, then just write the selected // item and leave - if (lcdHeight == 2) + if (lcdHeight <= 2) { it.toFirst(); while ((curItem = it.current()) != 0) @@ -1102,7 +1119,7 @@ if (curItem->isSelected()) { // Set the scroll flag if necessary, otherwise set it to false - if (curItem->ItemName().length() > (lcdWidth - LCD_START_COL)) + if (curItem->ItemName().length() > (lcdWidth - lcdStartCol)) { menuPreScrollTimer->start(2000, true); curItem->setScroll(true); @@ -1112,9 +1129,27 @@ menuPreScrollTimer->stop(); curItem->setScroll(false); } - + if (lcdHeight == 2) + { aString = "widget_set Menu menuWidget1 1 2 \">"; + } + else + { + aString = "widget_set Menu menuWidget1 1 1 \""; + } + if (lcdWidth < 12) + { + switch(curItem->isChecked()) + { + case CHECKED: aString += "X"; break; + case UNCHECKED: aString += "O"; break; + case NOTCHECKABLE: aString += ""; break; + default: break; + } + } + else + { switch (curItem->isChecked()) { case CHECKED: aString += "X "; break; @@ -1122,8 +1157,9 @@ case NOTCHECKABLE: aString += " "; break; default: break; } + } - aString += curItem->ItemName().left(lcdWidth - LCD_START_COL) + + aString += curItem->ItemName().left(lcdWidth - lcdStartCol) + "\""; sendToServer(aString); return; @@ -1183,7 +1219,7 @@ default: break; } - aString += curItem->ItemName().left(lcdWidth - LCD_START_COL) + "\""; + aString += curItem->ItemName().left(lcdWidth - lcdStartCol) + "\""; sendToServer(aString); ++counter; @@ -1224,10 +1260,10 @@ ++it; // Don't setup for smooth scrolling if the item isn't long enough // (It causes problems with items being scrolled when they shouldn't) - if (curItem->ItemName().length() > (lcdWidth - LCD_START_COL)) + if (curItem->ItemName().length() > (lcdWidth - lcdStartCol)) { temp = temp.fill(QChar(' '), lcdWidth - curItem->getIndent() - - LCD_START_COL); + lcdStartCol); curItem->setItemName(temp + curItem->ItemName()); curItem->setScrollPos(curItem->getIndent() + temp.length()); curItem->setScroll(true); @@ -1273,7 +1309,7 @@ // If there is only two lines on the display, then just write the selected // item and leave curItem = it.toFirst(); - if (lcdHeight == 2) + if (lcdHeight <= 2) { it.toFirst(); while ((curItem = it.current()) != 0) @@ -1293,11 +1329,30 @@ // Stop the timer if this item really doesn't need to scroll. // This should never have to get invoked because in theory // the code in startMenu has done its job. . . - if (curItem->ItemName().length() < (lcdWidth - LCD_START_COL)) + if (curItem->ItemName().length() < (lcdWidth - lcdStartCol)) menuScrollTimer->stop(); + if (lcdHeight == 2) + { aString = "widget_set Menu menuWidget1 1 2 \">"; + } + else + { + aString = "widget_set Menu menuWidget1 1 1 \""; + } + if (lcdWidth < 12) + { + switch(curItem->isChecked()) + { + case CHECKED: aString += "X"; break; + case UNCHECKED: aString += "O"; break; + case NOTCHECKABLE: aString += ""; break; + default: break; + } + } + else + { switch(curItem->isChecked()) { case CHECKED: aString += "X "; break; @@ -1305,12 +1360,13 @@ case NOTCHECKABLE: aString += " "; break; default: break; } + } // Indent this item if nessicary aString += bString.fill(' ', curItem->getIndent()); aString += curItem->ItemName().mid(curItem->getScrollPos(), - (lcdWidth - LCD_START_COL)); + (lcdWidth - lcdStartCol)); aString += "\""; sendToServer(aString); return; @@ -1413,7 +1469,7 @@ if (curItem->getScrollPos() <= longest_line) aString += curItem->ItemName().mid(curItem->getScrollPos(), - (lcdWidth-LCD_START_COL)); + (lcdWidth-lcdStartCol)); aString += "\""; sendToServer(aString);