mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-08-28 16:01:10 +02:00
our current experimental Neutrino branch
git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@27 e54a6e83-5905-42d5-8d5c-058d10e6a962
Origin commit data
------------------
Commit: bc5bd4154e
Author: mrcolor <mrcolor@e54a6e83-5905-42d5-8d5c-058d10e6a962>
Date: 2009-12-08 (Tue, 08 Dec 2009)
This commit is contained in:
860
src/gui/widget/msgbox.cpp
Normal file
860
src/gui/widget/msgbox.cpp
Normal file
@@ -0,0 +1,860 @@
|
||||
/*
|
||||
Neutrino-GUI - DBoxII-Project
|
||||
|
||||
Homepage: http://dbox.cyberphoria.org/
|
||||
|
||||
Kommentar:
|
||||
|
||||
Diese GUI wurde von Grund auf neu programmiert und sollte nun vom
|
||||
Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert
|
||||
auf der Client-Server Idee, diese GUI ist also von der direkten DBox-
|
||||
Steuerung getrennt. Diese wird dann von Daemons uebernommen.
|
||||
|
||||
|
||||
License: GPL
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
***********************************************************
|
||||
|
||||
Module Name: msgbox.cpp: .
|
||||
|
||||
Description: Implementation of the CMsgBox class
|
||||
This class provides a message box using CTextBox.
|
||||
|
||||
Date: Nov 2005
|
||||
|
||||
Author: Gnther@tuxbox.berlios.org
|
||||
based on code of Steffen Hehn 'McClean'
|
||||
|
||||
Revision History:
|
||||
Date Author Change Description
|
||||
Nov 2005 Gnther initial implementation
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "msgbox.h"
|
||||
|
||||
#include <gui/widget/icons.h>
|
||||
#include <neutrino.h>
|
||||
|
||||
#define WINDOW_FRAME_BORDER_WIDTH 4
|
||||
#define ADD_FOOT_HEIGHT 20
|
||||
#define TEXT_BORDER_WIDTH 8
|
||||
#define TITLE_ICON_WIDTH (40 - TEXT_BORDER_WIDTH)
|
||||
|
||||
#define MAX_WINDOW_WIDTH (g_settings.screen_EndX - g_settings.screen_StartX )
|
||||
#define MAX_WINDOW_HEIGHT (g_settings.screen_EndY - g_settings.screen_StartY - 40)
|
||||
|
||||
#define MIN_WINDOW_WIDTH (MAX_WINDOW_WIDTH>>1)
|
||||
#define MIN_WINDOW_HEIGHT 40
|
||||
|
||||
#define DEFAULT_TITLE_FONT g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]
|
||||
#define DEFAULT_FOOT_FONT g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: CMsgBox
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
CMsgBox::CMsgBox( const char * text,
|
||||
Font* fontText,
|
||||
const int _mode,
|
||||
const CBox* position,
|
||||
const char * title,
|
||||
Font* fontTitle,
|
||||
const char * icon,
|
||||
int return_button ,
|
||||
const result_ default_result)
|
||||
{
|
||||
//TRACE("->CMsgBox::CMsgBox\r\n");
|
||||
initVar();
|
||||
|
||||
if(title != NULL) m_cTitle = title;
|
||||
if(fontTitle != NULL) m_pcFontTitle = fontTitle;
|
||||
if(icon != NULL) m_cIcon = icon;
|
||||
if(position != NULL) m_cBoxFrame = *position;
|
||||
m_nMode = _mode;
|
||||
//TRACE(" CMsgBox::cText: %d ,m_cTitle %d,m_nMode %d\t\r\n",strlen(text),m_cTitle.size(),m_nMode);
|
||||
|
||||
if(m_nMode & BORDER)
|
||||
m_nWindowFrameBorderWidth = WINDOW_FRAME_BORDER_WIDTH;
|
||||
else
|
||||
m_nWindowFrameBorderWidth = 0;
|
||||
|
||||
//TRACE(" Mode: ");
|
||||
//if(_mode & BORDER) TRACE("BORDER ");
|
||||
//if(_mode & TITLE) TRACE("TITLE ");
|
||||
//if(_mode & FOOT) TRACE("FOOT ");
|
||||
//if(_mode & CENTER) TRACE("CENTER");
|
||||
//TRACE("\r\n");
|
||||
|
||||
//TRACE_1(" m_nWindowFrameBorderWidth: \t%d\r\n",m_nWindowFrameBorderWidth);
|
||||
|
||||
|
||||
/* Initialise the window frames first */
|
||||
initFramesRel();
|
||||
|
||||
m_pcTextBox = new CTextBox( text,
|
||||
fontText,
|
||||
_mode,
|
||||
&m_cBoxFrameText);
|
||||
|
||||
if(_mode & AUTO_WIDTH || _mode & AUTO_HIGH)
|
||||
{
|
||||
/* window might changed in size ...*/
|
||||
m_cBoxFrameText = m_pcTextBox->getWindowsPos();
|
||||
|
||||
m_cBoxFrame.iWidth = m_cBoxFrameText.iWidth + m_nWindowFrameBorderWidth;
|
||||
m_cBoxFrame.iHeight = m_cBoxFrameText.iHeight + m_cBoxFrameFootRel.iHeight + m_cBoxFrameTitleRel.iHeight + m_nWindowFrameBorderWidth;
|
||||
|
||||
initFramesRel();
|
||||
}
|
||||
|
||||
if(_mode & CENTER)
|
||||
{
|
||||
m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - m_cBoxFrame.iWidth) >>1);
|
||||
m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - m_cBoxFrame.iHeight) >>2);
|
||||
}
|
||||
|
||||
m_nResult = default_result;
|
||||
m_nFootButtons = return_button;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: CMsgBox
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
CMsgBox::CMsgBox(const char * text)
|
||||
{
|
||||
initVar();
|
||||
|
||||
m_pcTextBox = new CTextBox( text);
|
||||
/* Initialise the window frames first */
|
||||
initFramesRel();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: CMsgBox
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
CMsgBox::CMsgBox()
|
||||
{
|
||||
m_pcTextBox = NULL;
|
||||
|
||||
initVar();
|
||||
initFramesRel();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: ~CMsgBox
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
CMsgBox::~CMsgBox()
|
||||
{
|
||||
if (m_pcWindow != NULL)
|
||||
{
|
||||
delete m_pcWindow;
|
||||
m_pcWindow = NULL;
|
||||
}
|
||||
|
||||
if (m_pcTextBox != NULL)
|
||||
{
|
||||
delete m_pcTextBox;
|
||||
m_pcTextBox = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: InitVar
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::initVar(void)
|
||||
{
|
||||
//TRACE("->CMsgBox::InitVar\r\n");
|
||||
m_cTitle = "";
|
||||
m_cIcon = "";
|
||||
m_nMode = SCROLL | TITLE | BORDER ;
|
||||
|
||||
// set the title varianles
|
||||
m_pcFontTitle = DEFAULT_TITLE_FONT;
|
||||
m_nFontTitleHeight = m_pcFontTitle->getHeight();
|
||||
|
||||
// set the foot variables
|
||||
m_pcFontFoot = DEFAULT_FOOT_FONT;
|
||||
m_nFontFootHeight = m_pcFontFoot->getHeight();
|
||||
m_nFootButtons = 0;
|
||||
|
||||
// set the main frame border width
|
||||
if(m_nMode & BORDER)
|
||||
m_nWindowFrameBorderWidth = WINDOW_FRAME_BORDER_WIDTH;
|
||||
else
|
||||
m_nWindowFrameBorderWidth = 0;
|
||||
|
||||
// set the main frame to default
|
||||
m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - MIN_WINDOW_WIDTH) >>1);
|
||||
m_cBoxFrame.iWidth = MIN_WINDOW_WIDTH;
|
||||
m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - MIN_WINDOW_HEIGHT) >>2);
|
||||
m_cBoxFrame.iHeight = MIN_WINDOW_HEIGHT;
|
||||
|
||||
m_pcWindow = NULL;
|
||||
|
||||
//TRACE_1(" m_nWindowFrameBorderWidth: \t%d\r\n",m_nWindowFrameBorderWidth);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: InitFramesRel
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::initFramesRel(void)
|
||||
{
|
||||
//TRACE("->CMsgBox::InitFramesRel\r\n");
|
||||
// init the title frame
|
||||
if(m_nMode & TITLE)
|
||||
{
|
||||
m_cBoxFrameTitleRel.iX = 0;
|
||||
m_cBoxFrameTitleRel.iY = 0;
|
||||
m_cBoxFrameTitleRel.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth;
|
||||
m_cBoxFrameTitleRel.iHeight = m_nFontTitleHeight + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cBoxFrameTitleRel.iX = 0;
|
||||
m_cBoxFrameTitleRel.iY = 0;
|
||||
m_cBoxFrameTitleRel.iHeight = 0;
|
||||
m_cBoxFrameTitleRel.iWidth = 0;
|
||||
}
|
||||
|
||||
// init the foot frame
|
||||
if(m_nMode & FOOT)
|
||||
{
|
||||
m_cBoxFrameFootRel.iX = 0;
|
||||
m_cBoxFrameFootRel.iY = m_cBoxFrame.iHeight - m_nFontFootHeight - m_nWindowFrameBorderWidth - ADD_FOOT_HEIGHT;
|
||||
m_cBoxFrameFootRel.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth;
|
||||
m_cBoxFrameFootRel.iHeight = m_nFontFootHeight + ADD_FOOT_HEIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cBoxFrameFootRel.iX = 0;
|
||||
m_cBoxFrameFootRel.iY = 0;
|
||||
m_cBoxFrameFootRel.iHeight = 0;
|
||||
m_cBoxFrameFootRel.iWidth = 0;
|
||||
}
|
||||
|
||||
// init the text frame
|
||||
m_cBoxFrameText.iY = m_cBoxFrame.iY + m_cBoxFrameTitleRel.iY + m_cBoxFrameTitleRel.iHeight;
|
||||
m_cBoxFrameText.iX = m_cBoxFrame.iX + m_cBoxFrameTitleRel.iX;
|
||||
m_cBoxFrameText.iHeight = m_cBoxFrame.iHeight - m_cBoxFrameTitleRel.iHeight - m_cBoxFrameFootRel.iHeight - m_nWindowFrameBorderWidth;
|
||||
m_cBoxFrameText.iWidth = m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth;
|
||||
#if 0
|
||||
TRACE_1("Frames\r\n\tScren:\t%3d,%3d,%3d,%3d\r\n\tMain:\t%3d,%3d,%3d,%3d\r\n\tText:\t%3d,%3d,%3d,%3d \r\n\tTitle:\t%3d,%3d,%3d,%3d \r\n\tFoot:\t%3d,%3d,%3d,%3d\r\n\r\n",
|
||||
g_settings.screen_StartX,
|
||||
g_settings.screen_StartY,
|
||||
g_settings.screen_EndX,
|
||||
g_settings.screen_EndY,
|
||||
m_cBoxFrame.iX,
|
||||
m_cBoxFrame.iY,
|
||||
m_cBoxFrame.iWidth,
|
||||
m_cBoxFrame.iHeight,
|
||||
m_cBoxFrameText.iX,
|
||||
m_cBoxFrameText.iY,
|
||||
m_cBoxFrameText.iWidth,
|
||||
m_cBoxFrameText.iHeight,
|
||||
m_cBoxFrameTitleRel.iX,
|
||||
m_cBoxFrameTitleRel.iY,
|
||||
m_cBoxFrameTitleRel.iWidth,
|
||||
m_cBoxFrameTitleRel.iHeight,
|
||||
m_cBoxFrameFootRel.iX,
|
||||
m_cBoxFrameFootRel.iY,
|
||||
m_cBoxFrameFootRel.iWidth,
|
||||
m_cBoxFrameFootRel.iHeight
|
||||
);
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: RefreshFoot
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::refreshFoot(void)
|
||||
{
|
||||
int color,bgcolor;
|
||||
if( !(m_nMode & FOOT)) return;
|
||||
|
||||
// draw the background first
|
||||
m_pcWindow->paintBoxRel( m_cBoxFrameFootRel.iX+m_cBoxFrame.iX,
|
||||
m_cBoxFrameFootRel.iY+m_cBoxFrame.iY,
|
||||
m_cBoxFrameFootRel.iWidth,
|
||||
m_cBoxFrameFootRel.iHeight,
|
||||
(CFBWindow::color_t)COL_MENUHEAD_PLUS_0);
|
||||
|
||||
//const char* text;
|
||||
|
||||
int MaxButtonTextWidth = m_pcFontFoot->getRenderWidth(g_Locale->getText(LOCALE_MESSAGEBOX_CANCEL), true); // UTF-8
|
||||
int ButtonWidth = 20 + 33 + MaxButtonTextWidth;
|
||||
int ButtonSpacing = (m_cBoxFrameFootRel.iWidth - 20- (ButtonWidth*3) ) / 2;
|
||||
int xpos = m_cBoxFrameFootRel.iX;
|
||||
|
||||
// draw Button mbYes
|
||||
if (m_nFootButtons & mbYes)
|
||||
{
|
||||
if (m_nResult == mbrYes)
|
||||
{
|
||||
color = COL_MENUCONTENTSELECTED;
|
||||
bgcolor = COL_MENUCONTENTSELECTED_PLUS_0;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = COL_INFOBAR_SHADOW;
|
||||
bgcolor = COL_INFOBAR_SHADOW_PLUS_0;
|
||||
}
|
||||
m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor);
|
||||
m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_RED, xpos + 14+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY);
|
||||
/*m_pcWindow->RenderString(*/
|
||||
m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 4 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth - 53, g_Locale->getText(LOCALE_MESSAGEBOX_YES), (CFBWindow::color_t)color, 0, true); // UTF-8
|
||||
}
|
||||
|
||||
xpos += ButtonWidth + ButtonSpacing;
|
||||
|
||||
// draw Button mbNo
|
||||
if (m_nFootButtons & mbNo)
|
||||
{
|
||||
if (m_nResult == mbrNo)
|
||||
{
|
||||
color = COL_MENUCONTENTSELECTED;
|
||||
bgcolor = COL_MENUCONTENTSELECTED_PLUS_0;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = COL_INFOBAR_SHADOW;
|
||||
bgcolor = COL_INFOBAR_SHADOW_PLUS_0;
|
||||
}
|
||||
|
||||
m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor);
|
||||
m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, xpos + 14+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY);
|
||||
/*m_pcWindow->RenderString(*/
|
||||
m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 4 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth- 53, g_Locale->getText(LOCALE_MESSAGEBOX_NO), (CFBWindow::color_t)color, 0, true); // UTF-8
|
||||
}
|
||||
|
||||
xpos += ButtonWidth + ButtonSpacing;
|
||||
|
||||
// draw Button mbCancel
|
||||
if (m_nFootButtons & (mbCancel | mbBack))
|
||||
{
|
||||
if (m_nResult >= mbrCancel)
|
||||
{
|
||||
color = COL_MENUCONTENTSELECTED;
|
||||
bgcolor = COL_MENUCONTENTSELECTED_PLUS_0;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = COL_INFOBAR_SHADOW;
|
||||
bgcolor = COL_INFOBAR_SHADOW_PLUS_0;
|
||||
}
|
||||
|
||||
m_pcWindow->paintBoxRel(xpos+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth, m_nFontFootHeight + 4, (CFBWindow::color_t)bgcolor);
|
||||
m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_HOME, xpos+10+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY);
|
||||
/*m_pcWindow->RenderString(*/
|
||||
m_pcFontFoot->RenderString(xpos + 43+m_cBoxFrame.iX, m_cBoxFrameFootRel.iY + m_nFontFootHeight + 2 + (ADD_FOOT_HEIGHT>>1)+m_cBoxFrame.iY, ButtonWidth- 53, g_Locale->getText((m_nFootButtons & mbCancel) ? LOCALE_MESSAGEBOX_CANCEL : LOCALE_MESSAGEBOX_BACK), (CFBWindow::color_t)color, 0, true); // UTF-8
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: RefreshTitle
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::refreshTitle(void)
|
||||
{
|
||||
// first check if title is configured
|
||||
if( !(m_nMode & TITLE)) return;
|
||||
|
||||
// draw the background
|
||||
m_pcWindow->paintBoxRel( m_cBoxFrameTitleRel.iX+m_cBoxFrame.iX,
|
||||
m_cBoxFrameTitleRel.iY+m_cBoxFrame.iY,
|
||||
m_cBoxFrameTitleRel.iWidth,
|
||||
m_cBoxFrameTitleRel.iHeight,
|
||||
(CFBWindow::color_t)COL_MENUHEAD_PLUS_0);
|
||||
|
||||
if (!m_cIcon.empty())
|
||||
{
|
||||
// draw icon and title text
|
||||
m_pcWindow->paintIcon(m_cIcon.c_str(), m_cBoxFrameTitleRel.iX + 8+m_cBoxFrame.iX, m_cBoxFrameTitleRel.iY + 5+m_cBoxFrame.iY);
|
||||
/*m_pcWindow->RenderString(*/
|
||||
m_pcFontTitle->RenderString(
|
||||
m_cBoxFrameTitleRel.iX + TITLE_ICON_WIDTH + TEXT_BORDER_WIDTH+m_cBoxFrame.iX,
|
||||
m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY,
|
||||
m_cBoxFrameTitleRel.iWidth - TITLE_ICON_WIDTH + TEXT_BORDER_WIDTH,
|
||||
m_cTitle.c_str(),
|
||||
(CFBWindow::color_t)COL_MENUHEAD,
|
||||
0,
|
||||
true); // UTF-8
|
||||
}
|
||||
else
|
||||
{
|
||||
// no icon available, just draw the title text
|
||||
/*m_pcWindow->RenderString(*/
|
||||
m_pcFontTitle->RenderString(
|
||||
m_cBoxFrameTitleRel.iX + TEXT_BORDER_WIDTH+m_cBoxFrame.iX,
|
||||
m_cBoxFrameTitleRel.iHeight+3+m_cBoxFrame.iY,
|
||||
m_cBoxFrameTitleRel.iWidth - TEXT_BORDER_WIDTH,
|
||||
m_cTitle.c_str(),
|
||||
(CFBWindow::color_t)COL_MENUHEAD,
|
||||
0,
|
||||
true); // UTF-8
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: RefreshBorder
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::refreshBorder(void)
|
||||
{
|
||||
if( !(m_nMode & BORDER && m_nWindowFrameBorderWidth > 0)) return;
|
||||
|
||||
//draw bottom shadow
|
||||
m_pcWindow->paintBoxRel( m_nWindowFrameBorderWidth+m_cBoxFrame.iX,
|
||||
m_cBoxFrame.iHeight - m_nWindowFrameBorderWidth+m_cBoxFrame.iY,
|
||||
m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth,
|
||||
m_nWindowFrameBorderWidth,
|
||||
COL_INFOBAR_SHADOW_PLUS_0);
|
||||
|
||||
//draw right shadow
|
||||
m_pcWindow->paintBoxRel( m_cBoxFrame.iWidth - m_nWindowFrameBorderWidth+m_cBoxFrame.iX,
|
||||
m_nWindowFrameBorderWidth+m_cBoxFrame.iY,
|
||||
m_nWindowFrameBorderWidth,
|
||||
m_cBoxFrame.iHeight - m_nWindowFrameBorderWidth,
|
||||
COL_INFOBAR_SHADOW_PLUS_0);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// global Functions
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: Hide
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
bool CMsgBox::hide(void)
|
||||
{
|
||||
//TRACE("->CMsgBox::Hide\r\n");
|
||||
|
||||
if (m_pcWindow == NULL)
|
||||
{
|
||||
TRACE(" return -> window does not exists\r\n");
|
||||
return (false);
|
||||
}
|
||||
if(m_pcTextBox != NULL)
|
||||
{
|
||||
m_pcTextBox->hide();
|
||||
}
|
||||
|
||||
// delete window
|
||||
// delete m_pcWindow;
|
||||
m_pcWindow->paintBackgroundBoxRel(m_cBoxFrame.iX, m_cBoxFrame.iY, m_cBoxFrame.iWidth, m_cBoxFrame.iHeight);
|
||||
m_pcWindow = NULL;
|
||||
return (true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: ScrollPageDown
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::scrollPageDown(const int pages)
|
||||
{
|
||||
// send scroll up event to text box if there is one
|
||||
if(m_pcTextBox != NULL)
|
||||
{
|
||||
m_pcTextBox->scrollPageDown(pages);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: ScrollPageUp
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::scrollPageUp(const int pages)
|
||||
{
|
||||
// send scroll up event to text box if there is one
|
||||
if(m_pcTextBox != NULL)
|
||||
{
|
||||
m_pcTextBox->scrollPageUp(pages);
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: Paint
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
bool CMsgBox::paint(void)
|
||||
{
|
||||
/*
|
||||
* do not paint stuff twice:
|
||||
* => thread safety needed by movieplayer.cpp:
|
||||
* one thread calls our paint method, the other one our hide method
|
||||
* => no memory leaks
|
||||
*/
|
||||
//TRACE("->CMsgBox::Paint\r\n");
|
||||
|
||||
if (m_pcWindow != NULL)
|
||||
{
|
||||
TRACE(" return -> window already exists\r\n");
|
||||
return (false);
|
||||
}
|
||||
|
||||
// create new window
|
||||
//m_pcWindow = new CFBWindow( m_cBoxFrame.iX, m_cBoxFrame.iY, m_cBoxFrame.iWidth, m_cBoxFrame.iHeight);
|
||||
m_pcWindow = CFrameBuffer::getInstance();
|
||||
if(m_pcTextBox != NULL)
|
||||
{
|
||||
m_pcTextBox->paint();
|
||||
}
|
||||
refresh();
|
||||
return (true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: Refresh
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void CMsgBox::refresh(void)
|
||||
{
|
||||
//TRACE("->CMsgBox::Refresh\r\n");
|
||||
|
||||
if (m_pcWindow == NULL)
|
||||
{
|
||||
TRACE(" return -> no window\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//re-draw message box window
|
||||
refreshTitle();
|
||||
refreshFoot();
|
||||
refreshBorder();
|
||||
|
||||
// rep-draw textbox if there is one
|
||||
if(m_pcTextBox != NULL)
|
||||
{
|
||||
//m_pcTextBox->refresh();
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: Exec
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
int CMsgBox::exec( int timeout, int returnDefaultOnTimeout)
|
||||
{
|
||||
//TRACE("->CMsgBox::exec\r\n");
|
||||
#ifdef VC
|
||||
int res = 1;
|
||||
|
||||
#else
|
||||
neutrino_msg_t msg;
|
||||
neutrino_msg_data_t data;
|
||||
int return_button = m_nFootButtons;
|
||||
int res = menu_return::RETURN_REPAINT;
|
||||
|
||||
// show message box
|
||||
paint();
|
||||
if (m_pcWindow == NULL)
|
||||
{
|
||||
return res; /* out of memory */
|
||||
}
|
||||
|
||||
if ( timeout == -1 )
|
||||
timeout = g_settings.timing[SNeutrinoSettings::TIMING_EPG];
|
||||
|
||||
unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd( timeout );
|
||||
|
||||
bool loop=true;
|
||||
while (loop)
|
||||
{
|
||||
g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd );
|
||||
|
||||
if (msg == CRCInput::RC_timeout && returnDefaultOnTimeout)
|
||||
{
|
||||
// return default
|
||||
loop = false;
|
||||
}
|
||||
else if ( ((msg == CRCInput::RC_timeout) ||
|
||||
(msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) &&
|
||||
(return_button & (mbCancel | mbBack)))
|
||||
{
|
||||
m_nResult = (return_button & mbCancel) ? mbrCancel : mbrBack;
|
||||
loop = false;
|
||||
}
|
||||
else if ((msg == CRCInput::RC_green) && (return_button & mbNo))
|
||||
{
|
||||
m_nResult = mbrNo;
|
||||
loop = false;
|
||||
}
|
||||
else if ((msg == CRCInput::RC_red) && (return_button & mbYes))
|
||||
{
|
||||
m_nResult = mbrYes;
|
||||
loop = false;
|
||||
}
|
||||
else if(msg==CRCInput::RC_right)
|
||||
{
|
||||
bool ok = false;
|
||||
while (!ok)
|
||||
{
|
||||
m_nResult = (CMsgBox::result_)((m_nResult + 1) & 3);
|
||||
ok = m_nFootButtons & (1 << m_nResult);
|
||||
}
|
||||
|
||||
refreshFoot();
|
||||
}
|
||||
else if (msg == CRCInput::RC_up )
|
||||
{
|
||||
scrollPageUp(1);
|
||||
}
|
||||
else if (msg == CRCInput::RC_down)
|
||||
{
|
||||
scrollPageDown(1);
|
||||
}
|
||||
else if(msg==CRCInput::RC_left)
|
||||
{
|
||||
bool ok = false;
|
||||
while (!ok)
|
||||
{
|
||||
m_nResult = (CMsgBox::result_)((m_nResult - 1) & 3);
|
||||
ok = return_button & (1 << m_nResult);
|
||||
}
|
||||
|
||||
refreshFoot();
|
||||
}
|
||||
else if(msg == CRCInput::RC_ok)
|
||||
{
|
||||
loop = false;
|
||||
}
|
||||
else if ((msg ==CRCInput::RC_sat) || (msg == CRCInput::RC_favorites))
|
||||
{
|
||||
}
|
||||
else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all)
|
||||
{
|
||||
res = menu_return::RETURN_EXIT_ALL;
|
||||
loop = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
hide();
|
||||
#endif //VC
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: SetText
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
bool CMsgBox::setText(const std::string* newText)
|
||||
{
|
||||
bool result = false;
|
||||
// update text in textbox if there is one
|
||||
if(m_pcTextBox != NULL && newText != NULL)
|
||||
{
|
||||
result = m_pcTextBox->setText(newText);
|
||||
if(m_nMode & AUTO_WIDTH || m_nMode & AUTO_HIGH)
|
||||
{
|
||||
/* window might changed in size ...*/
|
||||
m_cBoxFrameText = m_pcTextBox->getWindowsPos();
|
||||
|
||||
m_cBoxFrame.iWidth = m_cBoxFrameText.iWidth + m_nWindowFrameBorderWidth;
|
||||
m_cBoxFrame.iHeight = m_cBoxFrameText.iHeight + m_cBoxFrameFootRel.iHeight + m_cBoxFrameTitleRel.iHeight + m_nWindowFrameBorderWidth;
|
||||
|
||||
initFramesRel();
|
||||
|
||||
// since the frames size has changed, we have to recenter the window again */
|
||||
if(m_nMode & CENTER)
|
||||
{
|
||||
m_cBoxFrame.iX = g_settings.screen_StartX + ((g_settings.screen_EndX - g_settings.screen_StartX - m_cBoxFrame.iWidth) >>1);
|
||||
m_cBoxFrame.iY = g_settings.screen_StartY + ((g_settings.screen_EndY - g_settings.screen_StartY - m_cBoxFrame.iHeight) >>1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(result);
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: SetText
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
int CMsgBox::result(void)
|
||||
{
|
||||
return m_nResult;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: ShowMsg2UTF
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
int ShowMsg2UTF( const neutrino_locale_t Caption,
|
||||
const char * const Text,
|
||||
const CMsgBox::result_ Default,
|
||||
const uint32_t ShowButtons,
|
||||
const char * const Icon,
|
||||
const int Width,
|
||||
const int timeout,
|
||||
bool returnDefaultOnTimeout)
|
||||
{
|
||||
//TRACE("->CMsgBox::ShowTextUTF \r\n");
|
||||
|
||||
int result = ShowMsg2UTF( g_Locale->getText(Caption),
|
||||
Text,
|
||||
Default,
|
||||
ShowButtons,
|
||||
Icon,
|
||||
Width,
|
||||
timeout,
|
||||
returnDefaultOnTimeout);
|
||||
|
||||
return (result);
|
||||
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function Name: ShowMsg2UTF
|
||||
// Description:
|
||||
// Parameters:
|
||||
// Data IN/OUT:
|
||||
// Return:
|
||||
// Notes:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
int ShowMsg2UTF( const char * const Title,
|
||||
const char * const Text,
|
||||
const CMsgBox::result_ Default,
|
||||
const uint32_t ShowButtons,
|
||||
const char * const Icon,
|
||||
const int Width,
|
||||
const int timeout,
|
||||
bool returnDefaultOnTimeout)
|
||||
{
|
||||
int mode = CMsgBox::SCROLL |
|
||||
CMsgBox::TITLE |
|
||||
CMsgBox::FOOT |
|
||||
CMsgBox::BORDER;// |
|
||||
//CMsgBox::NO_AUTO_LINEBREAK |
|
||||
//CMsgBox::CENTER |
|
||||
//CMsgBox::AUTO_WIDTH |
|
||||
//CMsgBox::AUTO_HIGH;
|
||||
CBox position ( g_settings.screen_StartX+30,
|
||||
g_settings.screen_StartY+30,
|
||||
g_settings.screen_EndX - g_settings.screen_StartX-60,
|
||||
g_settings.screen_EndY - g_settings.screen_StartY-60);
|
||||
|
||||
//TRACE("\r\n->ShowTextUTF %s\r\n",Text);
|
||||
CMsgBox* msgBox = new CMsgBox( Text,
|
||||
g_Font[SNeutrinoSettings::FONT_TYPE_MENU],
|
||||
mode,
|
||||
&position,
|
||||
Title,
|
||||
g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE],
|
||||
Icon,
|
||||
ShowButtons,
|
||||
Default);
|
||||
|
||||
msgBox->exec( timeout, returnDefaultOnTimeout);
|
||||
|
||||
int res = msgBox->result();
|
||||
|
||||
delete msgBox;
|
||||
|
||||
return res;
|
||||
}
|
Reference in New Issue
Block a user