Patch for lcdprocclient for small displays for Mythtv-0.19
From MythTV
--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);
