NxWidgets updates from Petteri Aimonen; buildroot GDB build fix from Ken Bannister

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5592 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2013-02-01 14:53:38 +00:00
parent 966e801032
commit 04a4ef84f0
12 changed files with 293 additions and 16 deletions

View File

@ -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.

View File

@ -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

View File

@ -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:
/**

View File

@ -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.

View 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

View File

@ -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

View File

@ -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.
*/

View 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);
}
}

View File

@ -128,3 +128,6 @@ buildroot-1.11 2011-11-05 <gnutt@nuttx.org>
logic. There are lots of issues that I still do not understand here.
buildroot-1.12 2011-xx-xx <gnutt@nuttx.org>
* Fix typo toolchain/gdb/Config.in that prevented GDB 7.4 from building
(from Ken Bannister).

View File

@ -41,7 +41,7 @@ choice
depends on !BR2_avr32
config BR2_GDB_VERSION_7_4
config BR2_GDB_VERSION_7_4
bool "gdb 7.4"
depends on !BR2_bfin
endchoice

View File

@ -533,6 +533,12 @@ NuttX Buildroot Toolchain
an ARM Cortex-M3/4, you will need to set CONFIG_ARMV7M_OABI_TOOLCHAIN
in the .config file in order to pick the right tool prefix.
If the make system ever picks the wrong prefix for your toolchain, you
can always specify the prefix on the command to override the default
like:
make CROSSDEV=arm-nuttx-elf
SHELLS
^^^^^^

View File

@ -150,7 +150,7 @@ char *fgets(FAR char *buf, int buflen, FILE *stream)
if (ch == '\n')
#elif defined(CONFIG_EOL_IS_CR)
if (ch == '\r')
#else /* elif CONFIG_EOL_IS_EITHER_CRLF */
#else /* elif defined(CONFIG_EOL_IS_EITHER_CRLF) */
if (ch == '\n' || ch == '\r')
#endif
{