|
|
|
@@ -55,10 +55,7 @@
|
|
|
|
|
#include "listframe.h"
|
|
|
|
|
#include <gui/widget/icons.h>
|
|
|
|
|
|
|
|
|
|
#define TEXT_BORDER_WIDTH 8
|
|
|
|
|
#define ROW_BORDER_WIDTH 4
|
|
|
|
|
#define SCROLL_FRAME_WIDTH 10
|
|
|
|
|
#define SCROLL_MARKER_BORDER 2
|
|
|
|
|
#define SCROLL_FRAME_WIDTH 10
|
|
|
|
|
|
|
|
|
|
#define MAX_WINDOW_WIDTH (frameBuffer->getScreenWidth() - 40)
|
|
|
|
|
#define MAX_WINDOW_HEIGHT (frameBuffer->getScreenHeight() - 40)
|
|
|
|
@@ -190,9 +187,11 @@ void CListFrame::initVar(void)
|
|
|
|
|
m_nCurrentPage = 0;
|
|
|
|
|
m_nSelectedLine = 0;
|
|
|
|
|
|
|
|
|
|
m_nBgRadius = RADIUS_NONE;
|
|
|
|
|
|
|
|
|
|
m_cFrame.iX = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - MIN_WINDOW_WIDTH) >>1);
|
|
|
|
|
m_cFrame.iWidth = MIN_WINDOW_WIDTH;
|
|
|
|
|
m_cFrame.iY = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - MIN_WINDOW_HEIGHT) >>1);
|
|
|
|
|
m_cFrame.iWidth = MIN_WINDOW_WIDTH;
|
|
|
|
|
m_cFrame.iHeight = MIN_WINDOW_HEIGHT;
|
|
|
|
|
|
|
|
|
|
m_nMaxHeight = MAX_WINDOW_HEIGHT;
|
|
|
|
@@ -204,7 +203,7 @@ void CListFrame::reSizeMainFrameWidth(int textWidth)
|
|
|
|
|
{
|
|
|
|
|
//TRACE("[CListFrame]->ReSizeMainFrameWidth: %d, current: %d\r\n",textWidth,m_cFrameListRel.iWidth);
|
|
|
|
|
|
|
|
|
|
int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*TEXT_BORDER_WIDTH;
|
|
|
|
|
int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*OFFSET_INNER_MID;
|
|
|
|
|
|
|
|
|
|
if( iNewWindowWidth > m_nMaxWidth) iNewWindowWidth = m_nMaxWidth;
|
|
|
|
|
if((unsigned int) iNewWindowWidth < MIN_WINDOW_WIDTH) iNewWindowWidth = MIN_WINDOW_WIDTH;
|
|
|
|
@@ -219,7 +218,7 @@ void CListFrame::reSizeMainFrameHeight(int textHeight)
|
|
|
|
|
{
|
|
|
|
|
//TRACE("[CListFrame]->ReSizeMainFrameHeight: %d, current: %d\r\n",textHeight,m_cFrameListRel.iHeight);
|
|
|
|
|
|
|
|
|
|
int iNewWindowHeight = textHeight + 2*TEXT_BORDER_WIDTH;
|
|
|
|
|
int iNewWindowHeight = textHeight + 2*OFFSET_INNER_MID;
|
|
|
|
|
|
|
|
|
|
if( iNewWindowHeight > m_nMaxHeight) iNewWindowHeight = m_nMaxHeight;
|
|
|
|
|
if( iNewWindowHeight < MIN_WINDOW_HEIGHT) iNewWindowHeight = MIN_WINDOW_HEIGHT;
|
|
|
|
@@ -236,8 +235,8 @@ void CListFrame::initFramesRel(void)
|
|
|
|
|
|
|
|
|
|
if(m_nMode & TITLE)
|
|
|
|
|
{
|
|
|
|
|
m_cFrameTitleRel.iX = 0;
|
|
|
|
|
m_cFrameTitleRel.iY = 0;
|
|
|
|
|
m_cFrameTitleRel.iX = 0;
|
|
|
|
|
m_cFrameTitleRel.iY = 0;
|
|
|
|
|
m_cFrameTitleRel.iHeight = m_nFontTitleHeight +2 ;
|
|
|
|
|
m_cFrameTitleRel.iWidth = m_cFrame.iWidth ;
|
|
|
|
|
}
|
|
|
|
@@ -245,51 +244,51 @@ void CListFrame::initFramesRel(void)
|
|
|
|
|
{
|
|
|
|
|
m_cFrameTitleRel.iX = 0;
|
|
|
|
|
m_cFrameTitleRel.iY = 0;
|
|
|
|
|
m_cFrameTitleRel.iHeight= 0;
|
|
|
|
|
m_cFrameTitleRel.iWidth = 0;
|
|
|
|
|
m_cFrameTitleRel.iHeight = 0;
|
|
|
|
|
m_cFrameTitleRel.iWidth = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_nMode & HEADER_LINE)
|
|
|
|
|
{
|
|
|
|
|
m_cFrameHeaderListRel.iX = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iY = 0 + m_cFrameTitleRel.iHeight;
|
|
|
|
|
m_cFrameHeaderListRel.iX = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iY = 0 + m_cFrameTitleRel.iHeight;
|
|
|
|
|
m_cFrameHeaderListRel.iHeight = m_nFontHeaderListHeight ;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_cFrameHeaderListRel.iX = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iY = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iX = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iY = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iHeight = 0;
|
|
|
|
|
m_cFrameHeaderListRel.iWidth = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_cFrameListRel.iX = 0;
|
|
|
|
|
m_cFrameListRel.iY = m_cFrameHeaderListRel.iHeight + m_cFrameTitleRel.iHeight;
|
|
|
|
|
m_cFrameListRel.iHeight = m_cFrame.iHeight - m_cFrameHeaderListRel.iHeight - m_cFrameTitleRel.iHeight;
|
|
|
|
|
m_cFrameListRel.iHeight = m_cFrame.iHeight - m_cFrameHeaderListRel.iHeight - m_cFrameTitleRel.iHeight;
|
|
|
|
|
|
|
|
|
|
if(m_nMode & SCROLL)
|
|
|
|
|
{
|
|
|
|
|
m_cFrameScrollRel.iX = m_cFrame.iWidth - SCROLL_FRAME_WIDTH;
|
|
|
|
|
m_cFrameScrollRel.iY = m_cFrameTitleRel.iHeight;
|
|
|
|
|
m_cFrameScrollRel.iWidth = SCROLL_FRAME_WIDTH;
|
|
|
|
|
m_cFrameScrollRel.iHeight = m_cFrameListRel.iHeight + m_cFrameHeaderListRel.iHeight;
|
|
|
|
|
m_cFrameScrollRel.iHeight = m_cFrameHeaderListRel.iHeight + m_cFrameListRel.iHeight - m_nBgRadius;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_cFrameScrollRel.iX = 0;
|
|
|
|
|
m_cFrameScrollRel.iY = 0;
|
|
|
|
|
m_cFrameScrollRel.iHeight = 0;
|
|
|
|
|
m_cFrameScrollRel.iWidth = 0;
|
|
|
|
|
m_cFrameScrollRel.iHeight = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_cFrameListRel.iWidth = m_cFrame.iWidth - m_cFrameScrollRel.iWidth;
|
|
|
|
|
m_cFrameListRel.iWidth = m_cFrame.iWidth - m_cFrameScrollRel.iWidth;
|
|
|
|
|
|
|
|
|
|
if(m_nMode & HEADER_LINE)
|
|
|
|
|
{
|
|
|
|
|
m_cFrameHeaderListRel.iWidth = m_cFrame.iWidth - m_cFrameScrollRel.iWidth;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_nLinesPerPage = (m_cFrameListRel.iHeight - (2*TEXT_BORDER_WIDTH)) / m_nFontListHeight;
|
|
|
|
|
m_nLinesPerPage = (m_cFrameListRel.iHeight - (2*OFFSET_INNER_MID)) / m_nFontListHeight;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CListFrame::onNewLineArray(void)
|
|
|
|
@@ -311,7 +310,7 @@ void CListFrame::onNewLineArray(void)
|
|
|
|
|
{
|
|
|
|
|
reSizeMainFrameHeight(m_nNrOfLines * m_nFontListHeight);
|
|
|
|
|
}
|
|
|
|
|
m_nLinesPerPage = (m_cFrameListRel.iHeight - (2*TEXT_BORDER_WIDTH)) / m_nFontListHeight;
|
|
|
|
|
m_nLinesPerPage = (m_cFrameListRel.iHeight - (2*OFFSET_INNER_MID)) / m_nFontListHeight;
|
|
|
|
|
|
|
|
|
|
if(m_nLinesPerPage <= 0)
|
|
|
|
|
m_nLinesPerPage = 1;
|
|
|
|
@@ -354,11 +353,12 @@ void CListFrame::refreshTitle(void)
|
|
|
|
|
if( frameBuffer == NULL) return;
|
|
|
|
|
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameTitleRel.iX+m_cFrame.iX, m_cFrameTitleRel.iY+m_cFrame.iY,
|
|
|
|
|
m_cFrameTitleRel.iWidth, m_cFrameTitleRel.iHeight, TITLE_BACKGROUND_COLOR);
|
|
|
|
|
m_cFrameTitleRel.iWidth, m_cFrameTitleRel.iHeight, TITLE_BACKGROUND_COLOR,
|
|
|
|
|
m_nBgRadius, CORNER_TOP);
|
|
|
|
|
|
|
|
|
|
m_pcFontTitle->RenderString(m_cFrameTitleRel.iX + TEXT_BORDER_WIDTH + m_cFrame.iX,
|
|
|
|
|
m_pcFontTitle->RenderString(m_cFrameTitleRel.iX + OFFSET_INNER_MID + m_cFrame.iX,
|
|
|
|
|
m_cFrameTitleRel.iY + m_cFrameTitleRel.iHeight + m_cFrame.iY,
|
|
|
|
|
m_cFrameTitleRel.iWidth - (TEXT_BORDER_WIDTH << 1),
|
|
|
|
|
m_cFrameTitleRel.iWidth - (OFFSET_INNER_MID << 1),
|
|
|
|
|
m_textTitle.c_str(), TITLE_FONT_COLOR);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -376,17 +376,18 @@ void CListFrame::refreshScroll(void)
|
|
|
|
|
if (1)
|
|
|
|
|
{
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameScrollRel.iX+m_cFrame.iX, m_cFrameScrollRel.iY+m_cFrame.iY,
|
|
|
|
|
m_cFrameScrollRel.iWidth, m_cFrameScrollRel.iHeight, COL_MENUCONTENT_PLUS_0);
|
|
|
|
|
m_cFrameScrollRel.iWidth, m_cFrameHeaderListRel.iHeight + m_cFrameListRel.iHeight, COL_MENUCONTENT_PLUS_0,
|
|
|
|
|
m_nBgRadius, CORNER_BOTTOM_RIGHT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_nNrOfPages > 1)
|
|
|
|
|
{
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameScrollRel.iX+m_cFrame.iX, m_cFrameScrollRel.iY+m_cFrame.iY,
|
|
|
|
|
m_cFrameScrollRel.iWidth, m_cFrameScrollRel.iHeight, COL_SCROLLBAR_PASSIVE_PLUS_0, RADIUS_MIN);
|
|
|
|
|
unsigned int marker_size = (m_cFrameScrollRel.iHeight - 2*SCROLL_MARKER_BORDER) / m_nNrOfPages;
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameScrollRel.iX + SCROLL_MARKER_BORDER+m_cFrame.iX,
|
|
|
|
|
m_cFrameScrollRel.iY + SCROLL_MARKER_BORDER + m_nCurrentPage * marker_size +m_cFrame.iY,
|
|
|
|
|
m_cFrameScrollRel.iWidth - (2*SCROLL_MARKER_BORDER),
|
|
|
|
|
unsigned int marker_size = (m_cFrameScrollRel.iHeight - 2*OFFSET_INNER_MIN) / m_nNrOfPages;
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameScrollRel.iX + OFFSET_INNER_MIN+m_cFrame.iX,
|
|
|
|
|
m_cFrameScrollRel.iY + OFFSET_INNER_MIN + m_nCurrentPage * marker_size +m_cFrame.iY,
|
|
|
|
|
m_cFrameScrollRel.iWidth - (2*OFFSET_INNER_MIN),
|
|
|
|
|
marker_size, COL_SCROLLBAR_ACTIVE_PLUS_0, RADIUS_MIN);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -399,7 +400,7 @@ int CListFrame::paintListIcon(int x, int y, int line)
|
|
|
|
|
frameBuffer->getIconSize(m_pLines->Icon[line].c_str(), &icol_w, &icol_h);
|
|
|
|
|
if ((icol_w > 0) && (icol_h > 0)) {
|
|
|
|
|
frameBuffer->paintIcon(m_pLines->Icon[line], x+m_cFrame.iX, y+m_cFrame.iY-m_nFontListHeight, m_nFontListHeight);
|
|
|
|
|
xDiff = icol_w + TEXT_BORDER_WIDTH;
|
|
|
|
|
xDiff = icol_w + OFFSET_INNER_MID;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return xDiff;
|
|
|
|
@@ -408,16 +409,17 @@ int CListFrame::paintListIcon(int x, int y, int line)
|
|
|
|
|
void CListFrame::refreshList(void)
|
|
|
|
|
{
|
|
|
|
|
//TRACE("[CListFrame]->refreshList: %d\r\n",m_nCurrentLine);
|
|
|
|
|
if( frameBuffer == NULL) return;
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameListRel.iX+m_cFrame.iX, m_cFrameListRel.iY+m_cFrame.iY,
|
|
|
|
|
m_cFrameListRel.iWidth, m_cFrameListRel.iHeight, COL_MENUCONTENT_PLUS_0);
|
|
|
|
|
|
|
|
|
|
if( m_nNrOfLines <= 0)
|
|
|
|
|
if (frameBuffer == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
for(int line = m_nCurrentLine;
|
|
|
|
|
line < m_nNrOfLines && line < m_nCurrentLine + m_nLinesPerPage;
|
|
|
|
|
line++)
|
|
|
|
|
frameBuffer->paintBoxRel(m_cFrameListRel.iX+m_cFrame.iX, m_cFrameListRel.iY+m_cFrame.iY,
|
|
|
|
|
m_cFrameListRel.iWidth, m_cFrameListRel.iHeight, COL_MENUCONTENT_PLUS_0,
|
|
|
|
|
m_nBgRadius, CORNER_BOTTOM_LEFT);
|
|
|
|
|
|
|
|
|
|
if (m_nNrOfLines <= 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
for (int line = m_nCurrentLine; line < m_nNrOfLines && line < m_nCurrentLine + m_nLinesPerPage; line++)
|
|
|
|
|
{
|
|
|
|
|
refreshLine(line);
|
|
|
|
|
}
|
|
|
|
@@ -434,7 +436,7 @@ void CListFrame::refreshLine(int line)
|
|
|
|
|
|
|
|
|
|
fb_pixel_t color, bgcolor;
|
|
|
|
|
int rel_line = line - m_nCurrentLine;
|
|
|
|
|
int y = m_cFrameListRel.iY + TEXT_BORDER_WIDTH + (rel_line*m_nFontListHeight);
|
|
|
|
|
int y = m_cFrameListRel.iY + OFFSET_INNER_MID + (rel_line*m_nFontListHeight);
|
|
|
|
|
int radius = 0;
|
|
|
|
|
|
|
|
|
|
bool selected = (line == m_nSelectedLine && m_showSelection == true);
|
|
|
|
@@ -449,22 +451,22 @@ void CListFrame::refreshLine(int line)
|
|
|
|
|
m_cFrameListRel.iWidth, m_nFontListHeight, bgcolor, radius);
|
|
|
|
|
|
|
|
|
|
int width;
|
|
|
|
|
int x = m_cFrameListRel.iX + TEXT_BORDER_WIDTH;
|
|
|
|
|
int x = m_cFrameListRel.iX + OFFSET_INNER_MID;
|
|
|
|
|
y += m_nFontListHeight;
|
|
|
|
|
|
|
|
|
|
int xDiff = paintListIcon(x, y, line);
|
|
|
|
|
|
|
|
|
|
int net_width = m_cFrameListRel.iWidth - ROW_BORDER_WIDTH * (m_pLines->rows - 1);
|
|
|
|
|
int net_width = m_cFrameListRel.iWidth - OFFSET_INNER_SMALL * (m_pLines->rows - 1);
|
|
|
|
|
for(int row = 0; row < m_pLines->rows; row++)
|
|
|
|
|
{
|
|
|
|
|
width = std::min(m_pLines->rowWidth[row] * net_width / 100,
|
|
|
|
|
m_cFrameListRel.iWidth - x + m_cFrameListRel.iX - TEXT_BORDER_WIDTH);
|
|
|
|
|
m_cFrameListRel.iWidth - x + m_cFrameListRel.iX - OFFSET_INNER_MID);
|
|
|
|
|
if (row > 0)
|
|
|
|
|
xDiff = 0;
|
|
|
|
|
m_pcFontList->RenderString(x+m_cFrame.iX+xDiff, y+m_cFrame.iY,
|
|
|
|
|
width-xDiff, m_pLines->lineArray[row][line].c_str(),
|
|
|
|
|
color);
|
|
|
|
|
x += width + ROW_BORDER_WIDTH;
|
|
|
|
|
x += width + OFFSET_INNER_SMALL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -478,23 +480,23 @@ void CListFrame::refreshHeaderList(void)
|
|
|
|
|
m_cFrameHeaderListRel.iWidth, m_cFrameHeaderListRel.iHeight, HEADER_LIST_BACKGROUND_COLOR);
|
|
|
|
|
|
|
|
|
|
int width;
|
|
|
|
|
int x = m_cFrameHeaderListRel.iX + TEXT_BORDER_WIDTH;
|
|
|
|
|
int x = m_cFrameHeaderListRel.iX + OFFSET_INNER_MID;
|
|
|
|
|
int y = m_cFrameHeaderListRel.iY + m_nFontHeaderListHeight + 2;
|
|
|
|
|
int net_width = m_cFrameHeaderListRel.iWidth - ROW_BORDER_WIDTH * (m_pLines->rows - 1);
|
|
|
|
|
int net_width = m_cFrameHeaderListRel.iWidth - OFFSET_INNER_SMALL * (m_pLines->rows - 1);
|
|
|
|
|
bool loop = true;
|
|
|
|
|
for(int row = 0; row < m_pLines->rows && loop == true; row++)
|
|
|
|
|
{
|
|
|
|
|
width = m_pLines->rowWidth[row] * net_width / 100;
|
|
|
|
|
if (width > m_cFrameHeaderListRel.iWidth - x + m_cFrameHeaderListRel.iX - TEXT_BORDER_WIDTH)
|
|
|
|
|
if (width > m_cFrameHeaderListRel.iWidth - x + m_cFrameHeaderListRel.iX - OFFSET_INNER_MID)
|
|
|
|
|
{
|
|
|
|
|
width = m_cFrameHeaderListRel.iWidth - x + m_cFrameHeaderListRel.iX - TEXT_BORDER_WIDTH;
|
|
|
|
|
width = m_cFrameHeaderListRel.iWidth - x + m_cFrameHeaderListRel.iX - OFFSET_INNER_MID;
|
|
|
|
|
//TRACE(" normalize width to %d , x:%d \r\n",width,x);
|
|
|
|
|
loop = false;
|
|
|
|
|
}
|
|
|
|
|
m_pcFontHeaderList->RenderString(x+m_cFrame.iX, y+m_cFrame.iY,
|
|
|
|
|
width, m_pLines->lineHeader[row].c_str(),
|
|
|
|
|
HEADER_LIST_FONT_COLOR);
|
|
|
|
|
x += width + ROW_BORDER_WIDTH;
|
|
|
|
|
x += width + OFFSET_INNER_SMALL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|