diff --git a/ChangeLog b/ChangeLog index d42e4da6..7cb85c12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2020-01-09 Markus Gans + * The setCurrentItem() method was added to the FComboBox widget class. + Thanks cybin for the sample code + 2020-01-03 Markus Gans * Illustrations to explain the widget layout diff --git a/doc/widget-geometry.svg b/doc/widget-geometry.svg index 29ecdfec..ba06fe83 100644 --- a/doc/widget-geometry.svg +++ b/doc/widget-geometry.svg @@ -570,13 +570,13 @@ = FPoint(25,6), FPoint(56,17) @@ -609,13 +609,13 @@ = FPoint(25,6), FPoint(56,17) @@ -648,13 +648,13 @@ = FPoint(25,6), FPoint(58,18) @@ -674,13 +674,13 @@ = FPoint(25,6), FPoint(58,18) @@ -700,13 +700,13 @@ = FPoint(19,8), FPoint(28,8) @@ -739,13 +739,13 @@ = FPoint(44,15), FPoint(53,15) @@ -778,13 +778,13 @@ = FPoint(19,8), FPoint(29,9) @@ -804,13 +804,13 @@ = FPoint(44,15), FPoint(54,16) diff --git a/doc/widget-position_and_dimension.svg b/doc/widget-lengths.svg similarity index 100% rename from doc/widget-position_and_dimension.svg rename to doc/widget-lengths.svg diff --git a/src/fcombobox.cpp b/src/fcombobox.cpp index 219440f0..ee093a66 100644 --- a/src/fcombobox.cpp +++ b/src/fcombobox.cpp @@ -250,6 +250,23 @@ bool FComboBox::setEditable (bool enable) return (is_editable = enable); } +//---------------------------------------------------------------------- +void FComboBox::setCurrentItem (std::size_t index) +{ + if ( index > getCount() ) + index = getCount(); + else if ( index < 1 ) + index = 1; + + if ( index == list_window.list.currentItem() ) + return; + + list_window.list.setCurrentItem(index); + input_field = list_window.list.getItem(index).getText(); + input_field.redraw(); + processChanged(); +} + //---------------------------------------------------------------------- void FComboBox::setMaxVisibleItems (std::size_t items) { @@ -277,8 +294,8 @@ void FComboBox::remove (std::size_t item) if ( ! list_window.isEmpty() ) { - std::size_t i = list_window.list.currentItem(); - input_field = list_window.list.getItem(i).getText(); + std::size_t index = list_window.list.currentItem(); + input_field = list_window.list.getItem(index).getText(); input_field.redraw(); } @@ -552,15 +569,15 @@ void FComboBox::draw() //---------------------------------------------------------------------- void FComboBox::onePosUp() { - std::size_t i = list_window.list.currentItem(); + std::size_t index = list_window.list.currentItem(); - if ( i > 1 ) - i--; + if ( index > 1 ) + index--; else return; - list_window.list.setCurrentItem(i); - input_field = list_window.list.getItem(i).getText(); + list_window.list.setCurrentItem(index); + input_field = list_window.list.getItem(index).getText(); input_field.redraw(); processChanged(); } @@ -568,15 +585,15 @@ void FComboBox::onePosUp() //---------------------------------------------------------------------- void FComboBox::onePosDown() { - std::size_t i = list_window.list.currentItem(); + std::size_t index = list_window.list.currentItem(); - if ( i < list_window.list.getCount() ) - i++; + if ( index < getCount() ) + index++; else return; - list_window.list.setCurrentItem(i); - input_field = list_window.list.getItem(i).getText(); + list_window.list.setCurrentItem(index); + input_field = list_window.list.getItem(index).getText(); input_field.redraw(); processChanged(); } @@ -620,8 +637,8 @@ void FComboBox::processChanged() void FComboBox::cb_setInputField (FWidget*, FDataPtr) { auto& list = list_window.list; - std::size_t i = list.currentItem(); - input_field = list.getItem(i).getText(); + std::size_t index = list.currentItem(); + input_field = list.getItem(index).getText(); input_field.redraw(); processChanged(); } diff --git a/src/fwidget.cpp b/src/fwidget.cpp index 45fd34fb..f8eb60b6 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -520,34 +520,6 @@ void FWidget::setRightPadding (int right, bool adjust) } } -//---------------------------------------------------------------------- -void FWidget::setParentOffset() -{ - auto p = getParentWidget(); - - if ( p ) - woffset = p->wclient_offset; -} - -//---------------------------------------------------------------------- -void FWidget::setTermOffset() -{ - auto r = getRootWidget(); - int w = int(r->getWidth()); - int h = int(r->getHeight()); - woffset.setCoordinates (0, 0, w - 1, h - 1); -} - -//---------------------------------------------------------------------- -void FWidget::setTermOffsetWithPadding() -{ - auto r = getRootWidget(); - woffset.setCoordinates ( r->getLeftPadding() - , r->getTopPadding() - , int(r->getWidth()) - 1 - r->getRightPadding() - , int(r->getHeight()) - 1 - r->getBottomPadding() ); -} - //---------------------------------------------------------------------- void FWidget::setTermSize (const FSize& size) { @@ -1273,6 +1245,34 @@ void FWidget::setMenuBar (FMenuBar* mbar) menubar = mbar; } +//---------------------------------------------------------------------- +void FWidget::setParentOffset() +{ + auto p = getParentWidget(); + + if ( p ) + woffset = p->wclient_offset; +} + +//---------------------------------------------------------------------- +void FWidget::setTermOffset() +{ + auto r = getRootWidget(); + int w = int(r->getWidth()); + int h = int(r->getHeight()); + woffset.setCoordinates (0, 0, w - 1, h - 1); +} + +//---------------------------------------------------------------------- +void FWidget::setTermOffsetWithPadding() +{ + auto r = getRootWidget(); + woffset.setCoordinates ( r->getLeftPadding() + , r->getTopPadding() + , int(r->getWidth()) - 1 - r->getRightPadding() + , int(r->getHeight()) - 1 - r->getBottomPadding() ); +} + //---------------------------------------------------------------------- void FWidget::adjustSize() { diff --git a/src/include/final/fcombobox.h b/src/include/final/fcombobox.h index 8a876531..ae6a43fc 100644 --- a/src/include/final/fcombobox.h +++ b/src/include/final/fcombobox.h @@ -175,6 +175,7 @@ class FComboBox : public FWidget bool setEditable (bool); bool setEditable(); bool unsetEditable(); + void setCurrentItem (std::size_t); void setMaxVisibleItems (std::size_t); void setLabelText (const FString&); void setLabelOrientation (const FLineEdit::label_o); @@ -252,8 +253,8 @@ inline FString FComboBox::getText() const //---------------------------------------------------------------------- inline FDataPtr FComboBox::getItemData() { - std::size_t i = list_window.list.currentItem(); - return list_window.list.getItem(i).getData(); + std::size_t index = list_window.list.currentItem(); + return list_window.list.getItem(index).getData(); } //---------------------------------------------------------------------- diff --git a/src/include/final/fwidget.h b/src/include/final/fwidget.h index 613d6c13..ec8b7aa5 100644 --- a/src/include/final/fwidget.h +++ b/src/include/final/fwidget.h @@ -278,9 +278,6 @@ class FWidget : public FVTerm, public FObject void setLeftPadding (int, bool = true); void setBottomPadding (int, bool = true); void setRightPadding (int, bool = true); - void setParentOffset(); - void setTermOffset(); - void setTermOffsetWithPadding(); void setTermSize (const FSize&); virtual void setGeometry (const FRect&, bool = true); virtual void setGeometry (const FPoint&, const FSize&, bool = true); @@ -376,6 +373,9 @@ class FWidget : public FVTerm, public FObject virtual void setMenuBar (FMenuBar*); FWidgetColors& setFWidgetColors(); static uInt& setModalDialogCounter(); + void setParentOffset(); + void setTermOffset(); + void setTermOffsetWithPadding(); // Methods virtual void adjustSize();