From e7585ca9b564cb3e9c1f24b5a23a5f9607a4520b Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Fri, 15 Feb 2013 11:42:29 -0600 Subject: Add highlight to file selector --- gui/devices/1024x600/res/ui.xml | 23 +++++++++----- gui/devices/1024x768/res/ui.xml | 23 +++++++++----- gui/devices/1280x800/res/ui.xml | 23 +++++++++----- gui/devices/1920x1200/res/ui.xml | 23 +++++++++----- gui/devices/2560x1600/res/ui.xml | 23 +++++++++----- gui/devices/320x480/res/ui.xml | 18 +++++++---- gui/devices/480x800/res/ui.xml | 18 +++++++---- gui/devices/480x854/res/ui.xml | 18 +++++++---- gui/devices/540x960/res/ui.xml | 18 +++++++---- gui/devices/720x1280/res/ui.xml | 17 +++++++---- gui/devices/800x1280/res/ui.xml | 18 +++++++---- gui/devices/800x480/res/ui.xml | 23 +++++++++----- gui/fileselector.cpp | 65 ++++++++++++++++++++++++++++++++++++++-- gui/objects.hpp | 6 ++++ 14 files changed, 236 insertions(+), 80 deletions(-) diff --git a/gui/devices/1024x600/res/ui.xml b/gui/devices/1024x600/res/ui.xml index bedefc9d8..76d7d7339 100755 --- a/gui/devices/1024x600/res/ui.xml +++ b/gui/devices/1024x600/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -547,6 +549,7 @@ +
Folders: @@ -554,13 +557,14 @@ - +
+
%tw_zip_location% @@ -568,7 +572,7 @@ - + @@ -2074,12 +2078,13 @@
+
Select Package to Restore: - + @@ -2952,6 +2957,7 @@
+
Folders: @@ -2959,7 +2965,7 @@ - + @@ -2967,6 +2973,7 @@
+
%tw_file_location1% @@ -2974,7 +2981,7 @@ - + @@ -3183,12 +3190,13 @@
+
%tw_file_location2% - + @@ -3580,6 +3588,7 @@
+
%tw_terminal_location% @@ -3587,7 +3596,7 @@ - + diff --git a/gui/devices/1024x768/res/ui.xml b/gui/devices/1024x768/res/ui.xml index f494db97a..7f856de37 100644 --- a/gui/devices/1024x768/res/ui.xml +++ b/gui/devices/1024x768/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -547,6 +549,7 @@
+
Folders: @@ -554,13 +557,14 @@ - +
+
%tw_zip_location% @@ -568,7 +572,7 @@ - + @@ -2074,12 +2078,13 @@
+
Select Package to Restore: - + @@ -2952,6 +2957,7 @@
+
Folders: @@ -2959,7 +2965,7 @@ - + @@ -2967,6 +2973,7 @@
+
%tw_file_location1% @@ -2974,7 +2981,7 @@ - + @@ -3183,12 +3190,13 @@
+
%tw_file_location2% - + @@ -3580,6 +3588,7 @@
+
%tw_terminal_location% @@ -3587,7 +3596,7 @@ - + diff --git a/gui/devices/1280x800/res/ui.xml b/gui/devices/1280x800/res/ui.xml index abe3c62b6..3d0821499 100644 --- a/gui/devices/1280x800/res/ui.xml +++ b/gui/devices/1280x800/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -547,6 +549,7 @@
+
Folders: @@ -554,13 +557,14 @@ - +
+
%tw_zip_location% @@ -568,7 +572,7 @@ - + @@ -2074,12 +2078,13 @@
+
Select Package to Restore: - + @@ -2952,6 +2957,7 @@
+
Folders: @@ -2959,7 +2965,7 @@ - + @@ -2967,6 +2973,7 @@
+
%tw_file_location1% @@ -2974,7 +2981,7 @@ - + @@ -3183,12 +3190,13 @@
+
%tw_file_location2% - + @@ -3580,6 +3588,7 @@
+
%tw_terminal_location% @@ -3587,7 +3596,7 @@ - + diff --git a/gui/devices/1920x1200/res/ui.xml b/gui/devices/1920x1200/res/ui.xml index 21a3db423..95237faec 100644 --- a/gui/devices/1920x1200/res/ui.xml +++ b/gui/devices/1920x1200/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -547,6 +549,7 @@
+
Folders: @@ -554,13 +557,14 @@ - +
+
%tw_zip_location% @@ -568,7 +572,7 @@ - + @@ -2074,12 +2078,13 @@
+
Select Package to Restore: - + @@ -2952,6 +2957,7 @@
+
Folders: @@ -2959,7 +2965,7 @@ - + @@ -2967,6 +2973,7 @@
+
%tw_file_location1% @@ -2974,7 +2981,7 @@ - + @@ -3183,12 +3190,13 @@
+
%tw_file_location2% - + @@ -3580,6 +3588,7 @@
+
%tw_terminal_location% @@ -3587,7 +3596,7 @@ - + diff --git a/gui/devices/2560x1600/res/ui.xml b/gui/devices/2560x1600/res/ui.xml index 2c54d2ff8..45209bb7d 100644 --- a/gui/devices/2560x1600/res/ui.xml +++ b/gui/devices/2560x1600/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -547,6 +549,7 @@
+
Folders: @@ -554,13 +557,14 @@ - +
+
%tw_zip_location% @@ -568,7 +572,7 @@ - + @@ -2074,12 +2078,13 @@
+
Select Package to Restore: - + @@ -2952,6 +2957,7 @@
+
Folders: @@ -2959,7 +2965,7 @@ - + @@ -2967,6 +2973,7 @@
+
%tw_file_location1% @@ -2974,7 +2981,7 @@ - + @@ -3183,12 +3190,13 @@
+
%tw_file_location2% - + @@ -3580,6 +3588,7 @@
+
%tw_terminal_location% @@ -3587,7 +3596,7 @@ - + diff --git a/gui/devices/320x480/res/ui.xml b/gui/devices/320x480/res/ui.xml index fdc9c3e92..406187e4d 100644 --- a/gui/devices/320x480/res/ui.xml +++ b/gui/devices/320x480/res/ui.xml @@ -132,6 +132,8 @@ + + @@ -505,6 +507,7 @@
+
%tw_zip_location% @@ -512,7 +515,7 @@ - + @@ -1644,6 +1647,7 @@
+
Select Package to Restore: @@ -1651,7 +1655,7 @@ - + @@ -2085,7 +2089,6 @@ - Unmount Boot @@ -2943,6 +2946,7 @@
+
%tw_file_location1% @@ -2950,7 +2954,7 @@ - + @@ -3159,6 +3163,7 @@
+
%tw_file_location2% @@ -3166,7 +3171,7 @@ - + @@ -3558,6 +3563,7 @@
+
%tw_terminal_location% @@ -3565,7 +3571,7 @@ - + diff --git a/gui/devices/480x800/res/ui.xml b/gui/devices/480x800/res/ui.xml index d305a12e9..b2acb237f 100644 --- a/gui/devices/480x800/res/ui.xml +++ b/gui/devices/480x800/res/ui.xml @@ -131,6 +131,8 @@ + + @@ -504,6 +506,7 @@
+
%tw_zip_location% @@ -511,7 +514,7 @@ - + @@ -1643,6 +1646,7 @@
+
Select Package to Restore: @@ -1650,7 +1654,7 @@ - + @@ -2084,7 +2088,6 @@ - Unmount Boot @@ -2942,6 +2945,7 @@
+
%tw_file_location1% @@ -2949,7 +2953,7 @@ - + @@ -3158,6 +3162,7 @@
+
%tw_file_location2% @@ -3165,7 +3170,7 @@ - + @@ -3557,6 +3562,7 @@
+
%tw_terminal_location% @@ -3564,7 +3570,7 @@ - + diff --git a/gui/devices/480x854/res/ui.xml b/gui/devices/480x854/res/ui.xml index 65412e767..20895f82d 100644 --- a/gui/devices/480x854/res/ui.xml +++ b/gui/devices/480x854/res/ui.xml @@ -130,6 +130,8 @@ + + @@ -503,6 +505,7 @@
+
%tw_zip_location% @@ -510,7 +513,7 @@ - + @@ -1642,6 +1645,7 @@
+
Select Package to Restore: @@ -1649,7 +1653,7 @@ - + @@ -2083,7 +2087,6 @@ - Unmount Boot @@ -2941,6 +2944,7 @@
+
%tw_file_location1% @@ -2948,7 +2952,7 @@ - + @@ -3157,6 +3161,7 @@
+
%tw_file_location2% @@ -3164,7 +3169,7 @@ - + @@ -3556,6 +3561,7 @@
+
%tw_terminal_location% @@ -3563,7 +3569,7 @@ - + diff --git a/gui/devices/540x960/res/ui.xml b/gui/devices/540x960/res/ui.xml index ad8c91efc..d3cb57418 100644 --- a/gui/devices/540x960/res/ui.xml +++ b/gui/devices/540x960/res/ui.xml @@ -131,6 +131,8 @@ + + @@ -504,6 +506,7 @@
+
%tw_zip_location% @@ -511,7 +514,7 @@ - + @@ -1643,6 +1646,7 @@
+
Select Package to Restore: @@ -1650,7 +1654,7 @@ - + @@ -2084,7 +2088,6 @@ - Unmount Boot @@ -2942,6 +2945,7 @@
+
%tw_file_location1% @@ -2949,7 +2953,7 @@ - + @@ -3158,6 +3162,7 @@
+
%tw_file_location2% @@ -3165,7 +3170,7 @@ - + @@ -3557,6 +3562,7 @@
+
%tw_terminal_location% @@ -3564,7 +3570,7 @@ - + diff --git a/gui/devices/720x1280/res/ui.xml b/gui/devices/720x1280/res/ui.xml index bc8209270..217564fdb 100644 --- a/gui/devices/720x1280/res/ui.xml +++ b/gui/devices/720x1280/res/ui.xml @@ -136,6 +136,8 @@ + + @@ -517,6 +519,7 @@
+
%tw_zip_location% @@ -524,7 +527,7 @@ - + @@ -1656,6 +1659,7 @@
+
Select Package to Restore: @@ -1663,7 +1667,7 @@ - + @@ -2954,6 +2958,7 @@
+
%tw_file_location1% @@ -2961,7 +2966,7 @@ - + @@ -3170,6 +3175,7 @@
+
%tw_file_location2% @@ -3177,7 +3183,7 @@ - + @@ -3569,6 +3575,7 @@
+
%tw_terminal_location% @@ -3576,7 +3583,7 @@ - + diff --git a/gui/devices/800x1280/res/ui.xml b/gui/devices/800x1280/res/ui.xml index fcb527a61..1b9560478 100755 --- a/gui/devices/800x1280/res/ui.xml +++ b/gui/devices/800x1280/res/ui.xml @@ -132,6 +132,8 @@ + + @@ -505,6 +507,7 @@
+
%tw_zip_location% @@ -512,7 +515,7 @@ - + @@ -1644,6 +1647,7 @@
+
Select Package to Restore: @@ -1651,7 +1655,7 @@ - + @@ -2085,7 +2089,6 @@ - Unmount Boot @@ -2943,6 +2946,7 @@
+
%tw_file_location1% @@ -2950,7 +2954,7 @@ - + @@ -3159,6 +3163,7 @@
+
%tw_file_location2% @@ -3166,7 +3171,7 @@ - + @@ -3558,6 +3563,7 @@
+
%tw_terminal_location% @@ -3565,7 +3571,7 @@ - + diff --git a/gui/devices/800x480/res/ui.xml b/gui/devices/800x480/res/ui.xml index 66a2b85fe..342b14e8e 100755 --- a/gui/devices/800x480/res/ui.xml +++ b/gui/devices/800x480/res/ui.xml @@ -150,6 +150,8 @@ + + @@ -555,6 +557,7 @@
+
Folders: @@ -562,13 +565,14 @@ - +
+
%tw_zip_location% @@ -576,7 +580,7 @@ - + @@ -2082,12 +2086,13 @@
+
Select Package to Restore: - + @@ -2960,6 +2965,7 @@
+
Folders: @@ -2967,7 +2973,7 @@ - + @@ -2975,6 +2981,7 @@
+
%tw_file_location1% @@ -2982,7 +2989,7 @@ - + @@ -3191,12 +3198,13 @@
+
%tw_file_location2% - + @@ -3588,6 +3596,7 @@
+
%tw_terminal_location% @@ -3595,7 +3604,7 @@ - + diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp index 38eaadd20..66bf80f78 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -62,6 +62,10 @@ GUIFileSelector::GUIFileSelector(xml_node<>* node) ConvertStrToColor("black", &mHeaderSeparatorColor); ConvertStrToColor("white", &mFontColor); ConvertStrToColor("white", &mHeaderFontColor); + hasHighlightColor = false; + hasFontHighlightColor = false; + isHighlighted = false; + startSelection = -1; // Load header text child = node->first_node("header"); @@ -102,6 +106,17 @@ GUIFileSelector::GUIFileSelector(xml_node<>* node) child = node->first_node("text"); if (child) mHeaderText = child->value(); + memset(&mHighlightColor, 0, sizeof(COLOR)); + child = node->first_node("highlight"); + if (child) { + attr = child->first_attribute("color"); + if (attr) { + hasHighlightColor = true; + std::string color = attr->value(); + ConvertStrToColor(color, &mHighlightColor); + } + } + // Simple way to check for static state mLastValue = gui_parse_text(mHeaderText); if (mLastValue != mHeaderText) @@ -161,6 +176,15 @@ GUIFileSelector::GUIFileSelector(xml_node<>* node) string parsevalue = gui_parse_text(attr->value()); mLineSpacing = atoi(parsevalue.c_str()); } + + attr = child->first_attribute("highlightcolor"); + memset(&mFontHighlightColor, 0, sizeof(COLOR)); + if (attr) + { + std::string color = attr->value(); + ConvertStrToColor(color, &mFontHighlightColor); + hasFontHighlightColor = true; + } } // Load the separator if it exists @@ -349,14 +373,39 @@ int GUIFileSelector::Render(void) int currentIconOffsetY = 0, currentIconOffsetX = 0; int folderIconOffsetY = (int)((actualLineHeight - mFolderIconHeight) / 2), fileIconOffsetY = (int)((actualLineHeight - mFileIconHeight) / 2); int folderIconOffsetX = (mIconWidth - mFolderIconWidth) / 2, fileIconOffsetX = (mIconWidth - mFileIconWidth) / 2; + int actualSelection = mStart; + + if (isHighlighted) { + int selectY = scrollingY; + + // Locate the correct line for highlighting + while (selectY + actualLineHeight < startSelection) { + selectY += actualLineHeight; + actualSelection++; + } + if (hasHighlightColor) { + // Highlight the area + gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, 255); + int HighlightHeight = actualLineHeight; + if (mRenderY + mHeaderH + selectY + actualLineHeight > mRenderH + mRenderY) { + HighlightHeight = actualLineHeight - (mRenderY + mHeaderH + selectY + actualLineHeight - mRenderH - mRenderY); + } + gr_fill(mRenderX, mRenderY + mHeaderH + selectY, mRenderW, HighlightHeight); + } + } for (line = 0; line < lines; line++) { Resource* icon; std::string label; - // Set the color for the font - gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, 255); + if (isHighlighted && hasFontHighlightColor && line + mStart == actualSelection) { + // Use the highlight color for the font + gr_color(mFontHighlightColor.red, mFontHighlightColor.green, mFontHighlightColor.blue, 255); + } else { + // Set the color for the font + gr_color(mFontColor.red, mFontColor.green, mFontColor.blue, 255); + } if (line + mStart < folderSize) { @@ -514,7 +563,6 @@ int GUIFileSelector::GetSelection(int x, int y) int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) { - static int startSelection = -1; static int lastY = 0, last2Y = 0; int selection = 0; @@ -525,6 +573,9 @@ int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) startSelection = -1; else startSelection = GetSelection(x,y); + isHighlighted = (startSelection > -1); + if (isHighlighted) + mUpdate = 1; startY = lastY = last2Y = y; scrollingSpeed = 0; break; @@ -533,14 +584,21 @@ int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) // Check if we dragged out of the selection window if (GetSelection(x, y) == -1) { last2Y = lastY = 0; + if (isHighlighted) { + isHighlighted = false; + mUpdate = 1; + } break; } // Provide some debounce on initial touches if (startSelection != -1 && abs(y - startY) < touchDebounce) { + isHighlighted = true; + mUpdate = 1; break; } + isHighlighted = false; last2Y = lastY; lastY = y; startSelection = -1; @@ -581,6 +639,7 @@ int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) break; case TOUCH_RELEASE: + isHighlighted = false; if (startSelection >= 0) { // We've selected an item! diff --git a/gui/objects.hpp b/gui/objects.hpp index 78844e77b..3925a2757 100644 --- a/gui/objects.hpp +++ b/gui/objects.hpp @@ -481,6 +481,12 @@ protected: COLOR mHeaderFontColor; COLOR mSeparatorColor; COLOR mHeaderSeparatorColor; + bool hasHighlightColor; + bool hasFontHighlightColor; + bool isHighlighted; + COLOR mHighlightColor; + COLOR mFontHighlightColor; + int startSelection; }; class GUIListBox : public RenderObject, public ActionObject -- cgit v1.2.3