NxWidgets updates from Petteri Aimonen; buildroot GDB build fix from Ken Bannister
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5592 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
02baadfe5a
commit
48224ae40d
@ -252,3 +252,14 @@
|
||||
around this, I added several "enabling" settings to override the
|
||||
default setting. This is awkward and I preferred the configuration as
|
||||
it was before, but this avoids the mconf errors and warnings.
|
||||
* UnitTests: Changed occurrences of lib_rawprintf() and lib_lowprintf()
|
||||
to match recent changes to NuttX (will be in NuttX-6.25)
|
||||
* CGraphicsPort::_drawText: Renamed from CGraphicsPort::drawText in order
|
||||
to eliminate some naming collisions when overloaded in some configurations
|
||||
(i.e., when both bool and nx_pixel_t are uint8_t). From Petteri Aimonen.
|
||||
* CNxWidgets::drawContents: Change base drawContents from a do-nothing
|
||||
function to a function that fills the widget with the background color.
|
||||
This is useful when using CNxWidgets as a "panel" , i.e. a container
|
||||
for other widgets. Subclasses will override drawContents and decide
|
||||
themselves how to draw the background.
|
||||
* CNxWidgets::CTabPanel: A new widget contributed by Petteri Aimonen.
|
||||
|
@ -63,7 +63,7 @@ CXXSRCS += cprogressbar.cxx cradiobutton.cxx cradiobuttongroup.cxx cscrollbarhor
|
||||
CXXSRCS += cscrollbarpanel.cxx cscrollbarvertical.cxx cscrollinglistbox.cxx
|
||||
CXXSRCS += cscrollingpanel.cxx cscrollingtextbox.cxx csliderhorizontal.cxx
|
||||
CXXSRCS += csliderhorizontalgrip.cxx cslidervertical.cxx csliderverticalgrip.cxx
|
||||
CXXSRCS += cstickybutton.cxx cstickybuttonarray.cxx ctextbox.cxx
|
||||
CXXSRCS += cstickybutton.cxx cstickybuttonarray.cxx ctabpanel.cxx ctextbox.cxx
|
||||
# Images
|
||||
CXXSRCS += glyph_nxlogo.cxx
|
||||
CXXSRCS += glyph_arrowdown.cxx glyph_checkboxon.cxx glyph_screendepthup.cxx
|
||||
|
@ -123,9 +123,10 @@ namespace NXWidgets
|
||||
* @param background Color to use for background if transparent is false.
|
||||
* @param transparent Whether to fill the background.
|
||||
*/
|
||||
void drawText(struct nxgl_point_s *pos, CRect *bound, CNxFont *font,
|
||||
const CNxString &string, int startIndex, int length,
|
||||
nxgl_mxpixel_t background, bool transparent);
|
||||
|
||||
void _drawText(struct nxgl_point_s *pos, CRect *bound, CNxFont *font,
|
||||
const CNxString &string, int startIndex, int length,
|
||||
nxgl_mxpixel_t background, bool transparent);
|
||||
|
||||
public:
|
||||
/**
|
||||
|
@ -222,7 +222,7 @@ namespace NXWidgets
|
||||
* @see redraw().
|
||||
*/
|
||||
|
||||
virtual inline void drawContents(CGraphicsPort* port) { }
|
||||
virtual void drawContents(CGraphicsPort* port);
|
||||
|
||||
/**
|
||||
* Draw the area of this widget that falls within the clipping region.
|
||||
|
108
libnxwidgets/include/ctabpanel.hxx
Normal file
108
libnxwidgets/include/ctabpanel.hxx
Normal file
@ -0,0 +1,108 @@
|
||||
/****************************************************************************
|
||||
* NxWidgets/libnxwidgets/include/ctabpanel.hxx
|
||||
*
|
||||
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Petteri Aimonen <jpa@kapsi.fi>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
|
||||
* me be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __INCLUDE_CTABPANEL_HXX
|
||||
#define __INCLUDE_CTABPANEL_HXX
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
||||
#include "cnxwidget.hxx"
|
||||
#include "cwidgetstyle.hxx"
|
||||
#include "cnxstring.hxx"
|
||||
#include "tnxarray.hxx"
|
||||
#include "clatchbuttonarray.hxx"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Implementation Classes
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
namespace NXWidgets
|
||||
{
|
||||
/**
|
||||
* Forward references
|
||||
*/
|
||||
|
||||
class CWidgetControl;
|
||||
class CRect;
|
||||
class CStickyButtonArray;
|
||||
|
||||
/**
|
||||
* Tab panel, with tabs at the top and a panel at the bottom.
|
||||
*/
|
||||
|
||||
class CTabPanel : public CNxWidget, public CWidgetEventHandler
|
||||
{
|
||||
protected:
|
||||
TNxArray<CNxWidget*> m_tabpages;
|
||||
CLatchButtonArray *m_buttonbar;
|
||||
|
||||
virtual void handleActionEvent(const CWidgetEventArgs &e);
|
||||
|
||||
virtual void drawContents(CGraphicsPort* port) {}
|
||||
virtual void drawBorder(CGraphicsPort* port) {}
|
||||
|
||||
public:
|
||||
CTabPanel(CWidgetControl *pWidgetControl, uint8_t numPages,
|
||||
nxgl_coord_t x, nxgl_coord_t y,
|
||||
nxgl_coord_t width, nxgl_coord_t height,
|
||||
nxgl_coord_t buttonHeight,
|
||||
FAR const CWidgetStyle *style = (FAR const CWidgetStyle *)NULL
|
||||
);
|
||||
|
||||
inline CNxWidget &page(uint8_t index) { return *m_tabpages.at(index); }
|
||||
|
||||
void setPageName(uint8_t index, const CNxString &name);
|
||||
|
||||
void showPage(uint8_t index);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
@ -604,7 +604,7 @@ void CGraphicsPort::drawBitmapGreyScale(nxgl_coord_t x, nxgl_coord_t y,
|
||||
void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
CNxFont *font, const CNxString &string)
|
||||
{
|
||||
drawText(pos, bound, font, string, 0, string.getLength());
|
||||
_drawText(pos, bound, font, string, 0, string.getLength(), 0, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -632,7 +632,7 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
|
||||
// Draw the string with this new color
|
||||
|
||||
drawText(pos, bound, font, string, startIndex, length);
|
||||
_drawText(pos, bound, font, string, startIndex, length, 0, true);
|
||||
|
||||
// Restore the font color
|
||||
|
||||
@ -654,7 +654,7 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
CNxFont *font, const CNxString &string,
|
||||
int startIndex, int length)
|
||||
{
|
||||
drawText(pos, bound, font, string, startIndex, length, 0, true);
|
||||
_drawText(pos, bound, font, string, startIndex, length, 0, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -680,7 +680,7 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
nxgl_mxpixel_t savedColor = font->getColor();
|
||||
font->setColor(color);
|
||||
|
||||
drawText(pos, bound, font, string, startIndex, length, background, false);
|
||||
_drawText(pos, bound, font, string, startIndex, length, background, false);
|
||||
|
||||
font->setColor(savedColor);
|
||||
}
|
||||
@ -697,11 +697,12 @@ void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
* @param background Color to use for background if transparent is false.
|
||||
* @param transparent Whether to fill the background.
|
||||
*/
|
||||
void CGraphicsPort::drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
CNxFont *font, const CNxString &string,
|
||||
int startIndex, int length,
|
||||
nxgl_mxpixel_t background,
|
||||
bool transparent)
|
||||
|
||||
void CGraphicsPort::_drawText(struct nxgl_point_s *pos, CRect *bound,
|
||||
CNxFont *font, const CNxString &string,
|
||||
int startIndex, int length,
|
||||
nxgl_mxpixel_t background,
|
||||
bool transparent)
|
||||
{
|
||||
// Verify index and length
|
||||
|
||||
|
@ -1443,6 +1443,20 @@ void CNxWidget::useWidgetStyle(const CWidgetStyle *style)
|
||||
m_style.font = style->font;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the area of this widget that falls within the clipping region.
|
||||
* Called by the redraw() function to draw all visible regions.
|
||||
*
|
||||
* @param port The CGraphicsPort to draw to.
|
||||
* @see redraw().
|
||||
*/
|
||||
|
||||
void CNxWidget::drawContents(CGraphicsPort* port)
|
||||
{
|
||||
port->drawFilledRect(getX(), getY(), getWidth(), getHeight(),
|
||||
getBackgroundColor());
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw all visible regions of this widget's children.
|
||||
*/
|
||||
|
133
libnxwidgets/src/ctabpanel.cxx
Normal file
133
libnxwidgets/src/ctabpanel.cxx
Normal file
@ -0,0 +1,133 @@
|
||||
/****************************************************************************
|
||||
* NxWidgets/libnxwidgets/src/ctabpanel.hxx
|
||||
*
|
||||
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Petteri Aimonen <jpa@kapsi.fi>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
|
||||
* me be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <nuttx/nx/nxglib.h>
|
||||
|
||||
#include "ctabpanel.hxx"
|
||||
#include "cgraphicsport.hxx"
|
||||
#include "cwidgetstyle.hxx"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* CTabPanel Method Implementations
|
||||
****************************************************************************/
|
||||
|
||||
using namespace NXWidgets;
|
||||
|
||||
CTabPanel::CTabPanel(CWidgetControl *pWidgetControl, uint8_t numPages,
|
||||
nxgl_coord_t x, nxgl_coord_t y,
|
||||
nxgl_coord_t width, nxgl_coord_t height,
|
||||
nxgl_coord_t buttonHeight,
|
||||
FAR const CWidgetStyle *style
|
||||
):
|
||||
CNxWidget(pWidgetControl, x, y, width, height, 0, style)
|
||||
{
|
||||
m_buttonbar = new CLatchButtonArray(pWidgetControl, x, y,
|
||||
numPages, 1,
|
||||
width / numPages,
|
||||
buttonHeight,
|
||||
0);
|
||||
m_buttonbar->addWidgetEventHandler(this);
|
||||
this->addWidget(m_buttonbar);
|
||||
|
||||
for (int i = 0; i < numPages; i++)
|
||||
{
|
||||
CNxWidget *tabpage = new CNxWidget(pWidgetControl, x, y + buttonHeight,
|
||||
width, height - buttonHeight, 0);
|
||||
tabpage->setBackgroundColor(getBackgroundColor());
|
||||
tabpage->setBorderless(true);
|
||||
m_tabpages.push_back(tabpage);
|
||||
this->addWidget(tabpage);
|
||||
}
|
||||
|
||||
// Activate the first page
|
||||
|
||||
showPage(0);
|
||||
}
|
||||
|
||||
void CTabPanel::setPageName(uint8_t index, const CNxString &name)
|
||||
{
|
||||
m_buttonbar->setText(index, 0, name);
|
||||
}
|
||||
|
||||
void CTabPanel::showPage(uint8_t index)
|
||||
{
|
||||
if (!m_buttonbar->isThisButtonStuckDown(index, 0))
|
||||
{
|
||||
m_buttonbar->stickDown(index, 0);
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_tabpages.size(); i++)
|
||||
{
|
||||
if (i == index)
|
||||
{
|
||||
m_tabpages.at(i)->enable();
|
||||
m_tabpages.at(i)->show();
|
||||
m_tabpages.at(i)->redraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_tabpages.at(i)->hide();
|
||||
m_tabpages.at(i)->disable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTabPanel::handleActionEvent(const CWidgetEventArgs &e)
|
||||
{
|
||||
if (e.getSource() == m_buttonbar)
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
m_buttonbar->isAnyButtonStuckDown(x, y);
|
||||
showPage(x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user