Data import from a standard container in FListBox

This commit is contained in:
Markus Gans 2017-04-23 18:54:46 +02:00
parent 90fa4b0391
commit ca7ba6ae7e
9 changed files with 415 additions and 95 deletions

1
.gitignore vendored
View File

@ -37,6 +37,7 @@ test/term-attributes
test/transparent test/transparent
test/input-dialog test/input-dialog
test/choice test/choice
test/listbox
test/mandelbrot test/mandelbrot
test/keyboard test/keyboard
test/mouse test/mouse

View File

@ -1,7 +1,13 @@
2017-04-23 Markus Gans <guru.mail@muenster.de>
* Import of data from a standard container in FListBox
is now possible
* The new "listbox" example shows the handling with
standard containers
2017-04-17 Markus Gans <guru.mail@muenster.de> 2017-04-17 Markus Gans <guru.mail@muenster.de>
* Speed up FString::setNumber() by using a decimal * Speed up FString::setNumber() by using a decimal
string lookup table string lookup table
* FString allocates no new memory if the size sufficient * FString allocates no new memory if the size in sufficient
2017-04-15 Markus Gans <guru.mail@muenster.de> 2017-04-15 Markus Gans <guru.mail@muenster.de>
* Fix unsigned integer underflow in FString::_insert() * Fix unsigned integer underflow in FString::_insert()

View File

@ -7,6 +7,9 @@
#include "fscrollbar.h" #include "fscrollbar.h"
#include "fstatusbar.h" #include "fstatusbar.h"
// function pointer
FString& (*FListBox::getString)(FListBox::listBoxItems::iterator);
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// class FListBoxItem // class FListBoxItem
@ -127,16 +130,24 @@ void FListBox::setCurrentItem (int index)
redraw(); redraw();
} }
//----------------------------------------------------------------------
void FListBox::setCurrentItem (listBoxItems::iterator iter)
{
int index = int(std::distance(data.begin(), iter) + 1);
setCurrentItem(index);
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FListBox::showInsideBrackets ( int index void FListBox::showInsideBrackets ( int index
, fc::brackets_type b ) , fc::brackets_type b )
{ {
data[uInt(index-1)].brackets = b; listBoxItems::iterator iter = index2iterator(index - 1);
iter->brackets = b;
if ( b == fc::NoBrackets ) if ( b == fc::NoBrackets )
return; return;
int len = int(data[uInt(index-1)].getText().getLength() + 2); int len = int(iter->getText().getLength() + 2);
if ( len > max_line_width ) if ( len > max_line_width )
{ {
@ -261,16 +272,13 @@ void FListBox::hide()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FListBox::insert ( const FString& item void FListBox::insert (FListBoxItem listItem)
, fc::brackets_type b
, bool s
, data_ptr d )
{ {
int len, element_count; int len, element_count;
len = int(item.getLength()); len = int(listItem.text.getLength());
if ( b ) if ( listItem.brackets )
len += 2; len += 2;
if ( len > max_line_width ) if ( len > max_line_width )
@ -287,10 +295,7 @@ void FListBox::insert ( const FString& item
hbar->setVisible(); hbar->setVisible();
} }
} }
FListBoxItem listItem (item);
listItem.data_pointer = d;
listItem.brackets = b;
listItem.selected = s;
data.push_back (listItem); data.push_back (listItem);
element_count = int(getCount()); element_count = int(getCount());
@ -302,6 +307,18 @@ void FListBox::insert ( const FString& item
vbar->setVisible(); vbar->setVisible();
} }
//----------------------------------------------------------------------
void FListBox::insert ( const FString& item
, fc::brackets_type b
, bool s
, data_ptr d )
{
FListBoxItem listItem (item, d);
listItem.brackets = b;
listItem.selected = s;
insert (listItem);
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FListBox::insert ( long item void FListBox::insert ( long item
, fc::brackets_type b , fc::brackets_type b
@ -323,12 +340,16 @@ void FListBox::remove (int item)
element_count = int(getCount()); element_count = int(getCount());
max_line_width = 0; max_line_width = 0;
for (int i=0; i < element_count; i++) listBoxItems::iterator iter = data.begin();
while ( iter != data.end() )
{ {
int len = int(data[uInt(i)].getText().getLength()); int len = int(iter->getText().getLength());
if ( len > max_line_width ) if ( len > max_line_width )
max_line_width = len; max_line_width = len;
++iter;
} }
hbar->setMaximum(max_line_width - getWidth() + nf_offset + 4); hbar->setMaximum(max_line_width - getWidth() + nf_offset + 4);
@ -553,18 +574,20 @@ void FListBox::onKeyPress (FKeyEvent* ev)
{ {
inc_search += L' '; inc_search += L' ';
bool inc_found = false; bool inc_found = false;
uInt end = getCount(); listBoxItems::iterator iter = data.begin();
for (uInt i=0; i < end; i++) while ( iter != data.end() )
{ {
if ( ! inc_found if ( ! inc_found
&& inc_search.toLower() && inc_search.toLower()
== data[i].getText().left(inc_len+1).toLower() ) == iter->getText().left(inc_len+1).toLower() )
{ {
setCurrentItem(int(i+1)); setCurrentItem(iter);
inc_found = true; inc_found = true;
break; break;
} }
++iter;
} }
if ( ! inc_found ) if ( ! inc_found )
@ -600,16 +623,18 @@ void FListBox::onKeyPress (FKeyEvent* ev)
if ( inc_len > 1 ) if ( inc_len > 1 )
{ {
uInt end = getCount(); listBoxItems::iterator iter = data.begin();
for (uInt i=0; i < end; i++) while ( iter != data.end() )
{ {
if ( inc_search.toLower() if ( inc_search.toLower()
== data[i].getText().left(inc_len-1).toLower() ) == iter->getText().left(inc_len-1).toLower() )
{ {
setCurrentItem(int(i+1)); setCurrentItem(iter);
break; break;
} }
++iter;
} }
} }
@ -640,18 +665,20 @@ void FListBox::onKeyPress (FKeyEvent* ev)
uInt inc_len = inc_search.getLength(); uInt inc_len = inc_search.getLength();
bool inc_found = false; bool inc_found = false;
uInt end = getCount(); listBoxItems::iterator iter = data.begin();
for (uInt i=0; i < end; i++) while ( iter != data.end() )
{ {
if ( ! inc_found if ( ! inc_found
&& inc_search.toLower() && inc_search.toLower()
== data[i].getText().left(inc_len).toLower() ) == iter->getText().left(inc_len).toLower() )
{ {
setCurrentItem(int(i+1)); setCurrentItem(iter);
inc_found = true; inc_found = true;
break; break;
} }
++iter;
} }
if ( ! inc_found ) if ( ! inc_found )
@ -1431,6 +1458,12 @@ void FListBox::adjustSize()
// private methods of FListBox // private methods of FListBox
//----------------------------------------------------------------------
FString& FListBox::getString_FListBoxItem (listBoxItems::iterator iter)
{
return iter->getText();
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FListBox::init() void FListBox::init()
{ {
@ -1472,6 +1505,9 @@ void FListBox::init()
setLeftPadding(1); setLeftPadding(1);
setBottomPadding(1); setBottomPadding(1);
setRightPadding(1 + nf_offset); setRightPadding(1 + nf_offset);
// set the new getString function pointer
getString = &FListBox::getString_FListBoxItem;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -1564,6 +1600,7 @@ void FListBox::drawList()
FString element; FString element;
uInt start, end, inc_len; uInt start, end, inc_len;
bool isFocus; bool isFocus;
listBoxItems::iterator iter;
if ( data.empty() || getHeight() <= 2 || getWidth() <= 4 ) if ( data.empty() || getHeight() <= 2 || getWidth() <= 4 )
return; return;
@ -1587,13 +1624,15 @@ void FListBox::drawList()
end = std::max(last_pos, current_pos)+1; end = std::max(last_pos, current_pos)+1;
} }
iter = index2iterator(int(start) + yoffset);
for (uInt y=start; y < end; y++) for (uInt y=start; y < end; y++)
{ {
setPrintPos (2, 2 + int(y)); setPrintPos (2, 2 + int(y));
bool serach_mark = false; bool serach_mark = false;
bool lineHasBrackets = hasBrackets(int(y) + yoffset + 1); bool lineHasBrackets = hasBrackets(iter);
bool isLineSelected = isSelected(int(y) + yoffset + 1); bool isLineSelected = isSelected(iter);
bool isCurrentLine = bool(uInt(y) + uInt(yoffset) + 1 == uInt(current)); bool isCurrentLine = bool(y + uInt(yoffset) + 1 == uInt(current));
if ( isLineSelected ) if ( isLineSelected )
{ {
@ -1680,7 +1719,7 @@ void FListBox::drawList()
{ {
b=1; b=1;
switch ( data[y+uInt(yoffset)].brackets ) switch ( iter->brackets )
{ {
case fc::NoBrackets: case fc::NoBrackets:
break; break;
@ -1702,13 +1741,11 @@ void FListBox::drawList()
break; break;
} }
element = data[y+uInt(yoffset)].getText() element = getString(iter).mid ( uInt(1+xoffset)
.mid ( uInt(1+xoffset)
, uInt(getWidth()-nf_offset-5) ); , uInt(getWidth()-nf_offset-5) );
} }
else else
element = data[y+uInt(yoffset)].getText() element = getString(iter).mid ( uInt(xoffset)
.mid ( uInt(xoffset)
, uInt(getWidth()-nf_offset-4) ); , uInt(getWidth()-nf_offset-4) );
const wchar_t* const& element_str = element.wc_str(); const wchar_t* const& element_str = element.wc_str();
@ -1727,7 +1764,7 @@ void FListBox::drawList()
print (element_str[i]); print (element_str[i]);
} }
full_length = int(data[y+uInt(yoffset)].getText().getLength()); full_length = int(getString(iter).getLength());
if ( b+i < uInt(getWidth()-nf_offset-4) && xoffset <= full_length+1 ) if ( b+i < uInt(getWidth()-nf_offset-4) && xoffset <= full_length+1 )
{ {
@ -1735,7 +1772,7 @@ void FListBox::drawList()
setColor ( wc.current_element_focus_fg setColor ( wc.current_element_focus_fg
, wc.current_element_focus_bg ); , wc.current_element_focus_bg );
switch ( data[y+uInt(yoffset)].brackets ) switch ( iter->brackets )
{ {
case fc::NoBrackets: case fc::NoBrackets:
break; break;
@ -1772,8 +1809,7 @@ void FListBox::drawList()
else // line has no brackets else // line has no brackets
{ {
uInt i, len; uInt i, len;
element = data[y+uInt(yoffset)].getText() element = getString(iter).mid ( uInt(1+xoffset)
.mid ( uInt(1+xoffset)
, uInt(getWidth()-nf_offset-4) ); , uInt(getWidth()-nf_offset-4) );
const wchar_t* const& element_str = element.wc_str(); const wchar_t* const& element_str = element.wc_str();
len = element.getLength(); len = element.getLength();
@ -1800,6 +1836,8 @@ void FListBox::drawList()
for (; i < uInt(getWidth()-nf_offset-3); i++) for (; i < uInt(getWidth()-nf_offset-3); i++)
print (' '); print (' ');
} }
++iter;
} }
if ( isMonochron() ) // unset for the last element if ( isMonochron() ) // unset for the last element

View File

@ -57,7 +57,7 @@ class FListBoxItem
FListBoxItem& operator = (const FListBoxItem&); FListBoxItem& operator = (const FListBoxItem&);
// Accessors // Accessors
virtual FString getText() const; virtual FString& getText();
virtual FWidget::data_ptr getData() const; virtual FWidget::data_ptr getData() const;
protected: protected:
@ -80,7 +80,7 @@ class FListBoxItem
// FListBoxItem inline functions // FListBoxItem inline functions
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline FString FListBoxItem::getText() const inline FString& FListBoxItem::getText()
{ return text; } { return text; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -106,11 +106,16 @@ inline void FListBoxItem::setData (FWidget::data_ptr data)
class FListBox : public FWidget class FListBox : public FWidget
{ {
public: public:
// Typedef
typedef std::vector<FListBoxItem> listBoxItems;
// Using-declaration // Using-declaration
using FWidget::setGeometry; using FWidget::setGeometry;
// Constructor // Constructor
explicit FListBox (FWidget* = 0); explicit FListBox (FWidget* = 0);
template <class Iterator, class InsertConverter>
FListBox (Iterator, Iterator, InsertConverter, FWidget* = 0);
// Destructor // Destructor
~FListBox(); ~FListBox();
@ -118,16 +123,21 @@ class FListBox : public FWidget
// Accessors // Accessors
const char* getClassName() const; const char* getClassName() const;
uInt getCount() const; uInt getCount() const;
FListBoxItem getItem (int) const; FListBoxItem getItem (int);
FListBoxItem getItem (listBoxItems::iterator) const;
int currentItem() const; int currentItem() const;
FString& getText(); FString& getText();
// Mutators // Mutators
void setCurrentItem (int); void setCurrentItem (int);
void setCurrentItem (listBoxItems::iterator);
void selectItem (int); void selectItem (int);
void selectItem (listBoxItems::iterator);
void unselectItem (int); void unselectItem (int);
void unselectItem (listBoxItems::iterator);
void showInsideBrackets (int, fc::brackets_type); void showInsideBrackets (int, fc::brackets_type);
void showNoBrackets (int); void showNoBrackets (int);
void showNoBrackets (listBoxItems::iterator);
void setGeometry (int, int, int, int, bool = true); void setGeometry (int, int, int, int, bool = true);
void setMultiSelection (bool); void setMultiSelection (bool);
void setMultiSelection (); void setMultiSelection ();
@ -142,16 +152,21 @@ class FListBox : public FWidget
void setText (const FString&); void setText (const FString&);
// Inquiries // Inquiries
bool isSelected (int) const; bool isSelected (int);
bool isSelected (listBoxItems::iterator) const;
bool isMultiSelection() const; bool isMultiSelection() const;
bool hasBrackets (int) const; bool hasBrackets (int);
bool hasBrackets (listBoxItems::iterator) const;
// Methods // Methods
void hide(); void hide();
template <class Iterator, class InsertConverter>
void insert (Iterator, Iterator, InsertConverter);
void insert (FListBoxItem);
void insert ( const FString& void insert ( const FString&
, fc::brackets_type = fc::NoBrackets , fc::brackets_type = fc::NoBrackets
, bool = false , bool = false
, data_ptr = 0); , data_ptr = 0 );
void insert ( long void insert ( long
, fc::brackets_type = fc::NoBrackets , fc::brackets_type = fc::NoBrackets
, bool = false , bool = false
@ -180,9 +195,6 @@ class FListBox : public FWidget
void adjustSize(); void adjustSize();
private: private:
// Typedef
typedef std::vector<FListBoxItem> listBoxItem;
// Enumeration // Enumeration
enum dragScroll enum dragScroll
{ {
@ -199,6 +211,10 @@ class FListBox : public FWidget
// Disable assignment operator (=) // Disable assignment operator (=)
FListBox& operator = (const FListBox&); FListBox& operator = (const FListBox&);
// Accessors
static FString& getString_FListBoxItem (listBoxItems::iterator);
static FString& (*getString)(listBoxItems::iterator);
// Methods // Methods
void init(); void init();
void draw(); void draw();
@ -207,9 +223,10 @@ class FListBox : public FWidget
void processClick(); void processClick();
void processSelect(); void processSelect();
void processChanged(); void processChanged();
listBoxItems::iterator index2iterator (int);
// Data Members // Data Members
listBoxItem data; listBoxItems data;
FScrollbar* vbar; FScrollbar* vbar;
FScrollbar* hbar; FScrollbar* hbar;
FString text; FString text;
@ -233,6 +250,42 @@ class FListBox : public FWidget
// FListBox inline functions // FListBox inline functions
//----------------------------------------------------------------------
template <class Iterator, class InsertConverter>
inline FListBox::FListBox ( Iterator first
, Iterator last
, InsertConverter convert
, FWidget* parent )
: FWidget(parent)
, data()
, vbar(0)
, hbar(0)
, text()
, inc_search()
, multi_select(false)
, mouse_select(false)
, drag_scroll(FListBox::noScroll)
, scroll_timer(false)
, scroll_repeat(100)
, scroll_distance(1)
, current(0)
, last_current(-1)
, secect_from_item(-1)
, xoffset(0)
, yoffset(0)
, last_yoffset(-1)
, nf_offset(0)
, max_line_width(0)
{
init();
while ( first != last )
{
insert(convert(first), fc::NoBrackets, false, &(*first));
++first;
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline const char* FListBox::getClassName() const inline const char* FListBox::getClassName() const
{ return "FListBox"; } { return "FListBox"; }
@ -242,8 +295,15 @@ inline uInt FListBox::getCount() const
{ return uInt(data.size()); } { return uInt(data.size()); }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline FListBoxItem FListBox::getItem (int index) const inline FListBoxItem FListBox::getItem (int index) //const
{ return data[uInt(index-1)]; } {
listBoxItems::iterator iter = index2iterator(index - 1);
return *iter;
}
//----------------------------------------------------------------------
inline FListBoxItem FListBox::getItem (listBoxItems::iterator iter) const
{ return *iter; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline int FListBox::currentItem() const inline int FListBox::currentItem() const
@ -255,15 +315,27 @@ inline FString& FListBox::getText()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline void FListBox::selectItem (int index) inline void FListBox::selectItem (int index)
{ data[uInt(index-1)].selected = true; } { index2iterator(index - 1)->selected = true; }
//----------------------------------------------------------------------
inline void FListBox::selectItem (listBoxItems::iterator iter)
{ iter->selected = true; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline void FListBox::unselectItem (int index) inline void FListBox::unselectItem (int index)
{ data[uInt(index-1)].selected = false; } { index2iterator(index - 1)->selected = false; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline void FListBox::showNoBrackets(int index) inline void FListBox::unselectItem (listBoxItems::iterator iter)
{ data[uInt(index-1)].brackets = fc::NoBrackets; } { iter->selected = false; }
//----------------------------------------------------------------------
inline void FListBox::showNoBrackets (int index)
{ index2iterator(index - 1)->brackets = fc::NoBrackets; }
//----------------------------------------------------------------------
inline void FListBox::showNoBrackets (listBoxItems::iterator iter)
{ iter->brackets = fc::NoBrackets; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline void FListBox::setMultiSelection (bool on) inline void FListBox::setMultiSelection (bool on)
@ -298,15 +370,44 @@ inline bool FListBox::unsetFocus()
{ return setFocus(false); } { return setFocus(false); }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline bool FListBox::isSelected (int index) const inline bool FListBox::isSelected (int index)
{ return data[uInt(index-1)].selected; } { return index2iterator(index - 1)->selected; }
//----------------------------------------------------------------------
inline bool FListBox::isSelected (listBoxItems::iterator iter) const
{ return iter->selected; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline bool FListBox::isMultiSelection() const inline bool FListBox::isMultiSelection() const
{ return multi_select; } { return multi_select; }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
inline bool FListBox::hasBrackets(int index) const inline bool FListBox::hasBrackets(int index)
{ return bool(data[uInt(index-1)].brackets > 0); } { return bool(index2iterator(index - 1)->brackets > 0); }
//----------------------------------------------------------------------
inline bool FListBox::hasBrackets(listBoxItems::iterator iter) const
{ return bool(iter->brackets > 0); }
//----------------------------------------------------------------------
template <class Iterator, class InsertConverter>
inline void FListBox::insert ( Iterator first
, Iterator last
, InsertConverter convert )
{
while ( first != last )
{
insert (convert(first), fc::NoBrackets, false, &(*first));
++first;
}
}
//----------------------------------------------------------------------
inline FListBox::listBoxItems::iterator FListBox::index2iterator (int index)
{
listBoxItems::iterator iter = data.begin();
std::advance (iter, index);
return iter;
}
#endif // FLISTBOX_H #endif // FLISTBOX_H

View File

@ -10,6 +10,7 @@ noinst_PROGRAMS = \
dialog \ dialog \
input-dialog \ input-dialog \
choice \ choice \
listbox \
opti-move \ opti-move \
termcap \ termcap \
string-operations \ string-operations \
@ -30,6 +31,7 @@ hello_SOURCES = hello.cpp
dialog_SOURCES = dialog.cpp dialog_SOURCES = dialog.cpp
input_dialog_SOURCES = input-dialog.cpp input_dialog_SOURCES = input-dialog.cpp
choice_SOURCES = choice.cpp choice_SOURCES = choice.cpp
listbox_SOURCES = listbox.cpp
opti_move_SOURCES = opti-move.cpp opti_move_SOURCES = opti-move.cpp
string_operations_SOURCES = string-operations.cpp string_operations_SOURCES = string-operations.cpp
mandelbrot_SOURCES = mandelbrot.cpp mandelbrot_SOURCES = mandelbrot.cpp

View File

@ -83,12 +83,12 @@ POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \ noinst_PROGRAMS = hello$(EXEEXT) dialog$(EXEEXT) input-dialog$(EXEEXT) \
choice$(EXEEXT) opti-move$(EXEEXT) termcap$(EXEEXT) \ choice$(EXEEXT) listbox$(EXEEXT) opti-move$(EXEEXT) \
string-operations$(EXEEXT) mandelbrot$(EXEEXT) \ termcap$(EXEEXT) string-operations$(EXEEXT) \
calculator$(EXEEXT) watch$(EXEEXT) term-attributes$(EXEEXT) \ mandelbrot$(EXEEXT) calculator$(EXEEXT) watch$(EXEEXT) \
transparent$(EXEEXT) keyboard$(EXEEXT) mouse$(EXEEXT) \ term-attributes$(EXEEXT) transparent$(EXEEXT) \
timer$(EXEEXT) scrollview$(EXEEXT) windows$(EXEEXT) \ keyboard$(EXEEXT) mouse$(EXEEXT) timer$(EXEEXT) \
menu$(EXEEXT) ui$(EXEEXT) scrollview$(EXEEXT) windows$(EXEEXT) menu$(EXEEXT) ui$(EXEEXT)
subdir = test subdir = test
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/depcomp $(top_srcdir)/depcomp
@ -126,6 +126,9 @@ input_dialog_LDADD = $(LDADD)
am_keyboard_OBJECTS = keyboard.$(OBJEXT) am_keyboard_OBJECTS = keyboard.$(OBJEXT)
keyboard_OBJECTS = $(am_keyboard_OBJECTS) keyboard_OBJECTS = $(am_keyboard_OBJECTS)
keyboard_LDADD = $(LDADD) keyboard_LDADD = $(LDADD)
am_listbox_OBJECTS = listbox.$(OBJEXT)
listbox_OBJECTS = $(am_listbox_OBJECTS)
listbox_LDADD = $(LDADD)
am_mandelbrot_OBJECTS = mandelbrot.$(OBJEXT) am_mandelbrot_OBJECTS = mandelbrot.$(OBJEXT)
mandelbrot_OBJECTS = $(am_mandelbrot_OBJECTS) mandelbrot_OBJECTS = $(am_mandelbrot_OBJECTS)
mandelbrot_LDADD = $(LDADD) mandelbrot_LDADD = $(LDADD)
@ -201,18 +204,19 @@ am__v_CXXLD_0 = @echo " CXXLD " $@;
am__v_CXXLD_1 = am__v_CXXLD_1 =
SOURCES = $(calculator_SOURCES) $(choice_SOURCES) $(dialog_SOURCES) \ SOURCES = $(calculator_SOURCES) $(choice_SOURCES) $(dialog_SOURCES) \
$(hello_SOURCES) $(input_dialog_SOURCES) $(keyboard_SOURCES) \ $(hello_SOURCES) $(input_dialog_SOURCES) $(keyboard_SOURCES) \
$(mandelbrot_SOURCES) $(menu_SOURCES) $(mouse_SOURCES) \ $(listbox_SOURCES) $(mandelbrot_SOURCES) $(menu_SOURCES) \
$(opti_move_SOURCES) $(scrollview_SOURCES) \ $(mouse_SOURCES) $(opti_move_SOURCES) $(scrollview_SOURCES) \
$(string_operations_SOURCES) $(term_attributes_SOURCES) \ $(string_operations_SOURCES) $(term_attributes_SOURCES) \
$(termcap_SOURCES) $(timer_SOURCES) $(transparent_SOURCES) \ $(termcap_SOURCES) $(timer_SOURCES) $(transparent_SOURCES) \
$(ui_SOURCES) $(watch_SOURCES) $(windows_SOURCES) $(ui_SOURCES) $(watch_SOURCES) $(windows_SOURCES)
DIST_SOURCES = $(calculator_SOURCES) $(choice_SOURCES) \ DIST_SOURCES = $(calculator_SOURCES) $(choice_SOURCES) \
$(dialog_SOURCES) $(hello_SOURCES) $(input_dialog_SOURCES) \ $(dialog_SOURCES) $(hello_SOURCES) $(input_dialog_SOURCES) \
$(keyboard_SOURCES) $(mandelbrot_SOURCES) $(menu_SOURCES) \ $(keyboard_SOURCES) $(listbox_SOURCES) $(mandelbrot_SOURCES) \
$(mouse_SOURCES) $(opti_move_SOURCES) $(scrollview_SOURCES) \ $(menu_SOURCES) $(mouse_SOURCES) $(opti_move_SOURCES) \
$(string_operations_SOURCES) $(term_attributes_SOURCES) \ $(scrollview_SOURCES) $(string_operations_SOURCES) \
$(termcap_SOURCES) $(timer_SOURCES) $(transparent_SOURCES) \ $(term_attributes_SOURCES) $(termcap_SOURCES) $(timer_SOURCES) \
$(ui_SOURCES) $(watch_SOURCES) $(windows_SOURCES) $(transparent_SOURCES) $(ui_SOURCES) $(watch_SOURCES) \
$(windows_SOURCES)
am__can_run_installinfo = \ am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \ case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \ n|no|NO) false;; \
@ -366,6 +370,7 @@ hello_SOURCES = hello.cpp
dialog_SOURCES = dialog.cpp dialog_SOURCES = dialog.cpp
input_dialog_SOURCES = input-dialog.cpp input_dialog_SOURCES = input-dialog.cpp
choice_SOURCES = choice.cpp choice_SOURCES = choice.cpp
listbox_SOURCES = listbox.cpp
opti_move_SOURCES = opti-move.cpp opti_move_SOURCES = opti-move.cpp
string_operations_SOURCES = string-operations.cpp string_operations_SOURCES = string-operations.cpp
mandelbrot_SOURCES = mandelbrot.cpp mandelbrot_SOURCES = mandelbrot.cpp
@ -449,6 +454,10 @@ keyboard$(EXEEXT): $(keyboard_OBJECTS) $(keyboard_DEPENDENCIES) $(EXTRA_keyboard
@rm -f keyboard$(EXEEXT) @rm -f keyboard$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(keyboard_OBJECTS) $(keyboard_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(keyboard_OBJECTS) $(keyboard_LDADD) $(LIBS)
listbox$(EXEEXT): $(listbox_OBJECTS) $(listbox_DEPENDENCIES) $(EXTRA_listbox_DEPENDENCIES)
@rm -f listbox$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(listbox_OBJECTS) $(listbox_LDADD) $(LIBS)
mandelbrot$(EXEEXT): $(mandelbrot_OBJECTS) $(mandelbrot_DEPENDENCIES) $(EXTRA_mandelbrot_DEPENDENCIES) mandelbrot$(EXEEXT): $(mandelbrot_OBJECTS) $(mandelbrot_DEPENDENCIES) $(EXTRA_mandelbrot_DEPENDENCIES)
@rm -f mandelbrot$(EXEEXT) @rm -f mandelbrot$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(mandelbrot_OBJECTS) $(mandelbrot_LDADD) $(LIBS) $(AM_V_CXXLD)$(CXXLINK) $(mandelbrot_OBJECTS) $(mandelbrot_LDADD) $(LIBS)
@ -513,6 +522,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hello.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hello.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-dialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbox.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mandelbrot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mandelbrot.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@

161
test/listbox.cpp Normal file
View File

@ -0,0 +1,161 @@
// File: ui.cpp
#include <iostream>
#include <fstream>
#include "final.h"
// Global application object
static FString* temp_str = 0;
// Function prototypes
FString& doubleToString (std::list<double>::const_iterator iter);
FString& mapToString (std::map<FString, FString>::const_iterator iter);
// Import converter functions
FString& doubleToString (std::list<double>::const_iterator iter)
{
return temp_str->setNumber(*iter);
}
FString& mapToString (std::map<FString, FString>::const_iterator iter)
{
return *temp_str = iter->first + ": " + iter->second;
}
//----------------------------------------------------------------------
// class Listbox
//----------------------------------------------------------------------
#pragma pack(push)
#pragma pack(1)
class Listbox : public FDialog
{
public:
// Constructor
explicit Listbox (FWidget* = 0);
// Destructor
~Listbox();
private:
// Disable copy constructor
Listbox (const Listbox&);
// Disable assignment operator (=)
Listbox& operator = (const Listbox&);
// Event handlers
void onClose (FCloseEvent*);
// Callback methods
void cb_exitApp (FWidget*, data_ptr);
};
#pragma pack(pop)
//----------------------------------------------------------------------
Listbox::Listbox (FWidget* parent)
: FDialog(parent)
{
temp_str = new FString;
// listbox 1
FListBox* list1 = new FListBox (this);
list1->setGeometry(2, 1, 18, 10);
list1->setText ("FListBoxItem");
for (int i=1; i < 30; i++)
list1->insert (L"----- " + FString().setNumber(i) + L" -----");
// listbox 2
FListBox* list2 = new FListBox (this);
list2->setGeometry(21, 1, 10, 10);
list2->setText ("double");
std::list<double> double_list;
for (double i=1; i<=15; i++)
double_list.push_back(2*i + (i/100));
list2->insert (double_list.begin(), double_list.end(), doubleToString);
// listbox 3
std::map<FString, FString> TLD;
TLD["com"] = "Commercial";
TLD["org"] = "Organization";
TLD["net"] = "Network";
TLD["edu"] = "Education";
TLD["gov"] = "Government";
FListBox* list3;
list3 = new FListBox (TLD.begin(), TLD.end(), mapToString, this);
list3->setGeometry(32, 1, 21, 10);
list3->setText ("key: value");
// Quit button
FButton* Quit = new FButton (this);
Quit->setGeometry(42, 12, 10, 1);
Quit->setText (L"&Quit");
// Add some function callbacks
Quit->addCallback
(
"clicked",
F_METHOD_CALLBACK (this, &Listbox::cb_exitApp)
);
}
//----------------------------------------------------------------------
Listbox::~Listbox()
{
delete temp_str;
}
//----------------------------------------------------------------------
void Listbox::onClose (FCloseEvent* ev)
{
int ret = FMessageBox::info ( this, "Quit"
, "Do you really want\n"
"to quit the program ?"
, FMessageBox::Yes
, FMessageBox::No );
if ( ret == FMessageBox::Yes )
ev->accept();
else
ev->ignore();
}
//----------------------------------------------------------------------
void Listbox::cb_exitApp (FWidget*, data_ptr)
{
close();
}
//----------------------------------------------------------------------
// main part
//----------------------------------------------------------------------
int main (int argc, char* argv[])
{
if ( argv[1] && ( std::strcmp(argv[1], "--help") == 0
|| std::strcmp(argv[1], "-h") == 0 ) )
{
std::cout << "Generic options:" << std::endl
<< " -h, --help "
<< "Display this help and exit" << std::endl;
FApplication::print_cmd_Options();
std::exit(EXIT_SUCCESS);
}
FApplication app(argc, argv);
Listbox d(&app);
d.setText (L"Listbox");
d.setGeometry (int(1+(app.getWidth()-56)/2), 5, 56, 16);
d.setShadow();
app.setMainWidget(&d);
d.show();
return app.exec();
}

View File

@ -507,6 +507,7 @@ MyDialog::MyDialog (FWidget* parent)
myList->setText ("Items"); myList->setText ("Items");
myList->setStatusbarMessage ("99 items in a list"); myList->setStatusbarMessage ("99 items in a list");
myList->setMultiSelection(); myList->setMultiSelection();
for (int z=1; z < 100; z++) for (int z=1; z < 100; z++)
myList->insert (FString().setNumber(z) + L" placeholder"); myList->insert (FString().setNumber(z) + L" placeholder");