Skip to content

Commit

Permalink
Merge branch 'work'
Browse files Browse the repository at this point in the history
  • Loading branch information
oktonion committed Aug 4, 2019
2 parents d388aa9 + f16deca commit 393fa14
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 81 deletions.
49 changes: 44 additions & 5 deletions src/Widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,33 @@ void PhWidgets::Widget::OnUnrealized( PtCallbackInfo_t * info)
resource.callback[Callback::unrealized].raise(info);
}

void Widget::BringToFront()
{
PtWidgetToFront(widget());
}

bool Widget::Contains(const Widget &widget)
{
PtWidget_t *this_widget = this->widget();

if(false == PtIsContainer(this_widget))
return false;

PtWidget_t *front = PtWidgetChildFront(this_widget);

if(NULL == front)
return false;

PtWidget_t *other_widget = widget.widget();

for(PtWidget_t *next = front; next != NULL; next = PtWidgetBrotherBehind(next))
{
if(next == other_widget)
return true;
}

return false;
}

void Widget::SetBounds(short x, short y, unsigned short width, unsigned short height)
{
Expand Down Expand Up @@ -521,22 +548,34 @@ bool Widget::Focus()
return PtGiveFocus(widget(), nullptr) != nullptr;
}

Widget Widget::GetNextWidget(Widget widget, bool forward) const
Widget Widget::GetNextWidget(const Widget &widget, bool forward) const
{
PtWidget_t *this_widget = this->widget();

PtWidget_t *result =
forward ?
PtWidgetChildFront(this_widget):
PtWidgetChildBack(this_widget);
PtWidgetBrotherInFront(this_widget):
PtWidgetBrotherBehind(this_widget);

if(NULL == result)
throw(
std::out_of_range(std::string("PhWidgets::Widget::GetNextWidget(): \'") + WidgetClassName(this_widget) + "\' widget has no children"));
{
result =
forward ?
PtWidgetBrotherBehind(this_widget):
PtWidgetBrotherInFront(this_widget);
}

if(NULL == result)
return *this;

return Widget(result);
}

void Widget::SendToBack()
{
PtWidgetToBack(widget());
}

void Widget::Select()
{
Focus(); // TODO: check the actual difference
Expand Down
59 changes: 57 additions & 2 deletions src/Widget.h
Original file line number Diff line number Diff line change
Expand Up @@ -1081,6 +1081,47 @@ namespace PhWidgets
//! Converts Widget to constant Photon widget pointer
operator const PtWidget_t*() const;

//! Brings the widget to the front of the z-order.
/*!
The widget is moved to the front of the z-order.
If the widget is a child of another widget, the child widget is moved to the front of the z-order.
BringToFront() does not make a widget a top-level widget, and it does not raise the Widget::Paint event.
@see
- SendToBack()
*/
void BringToFront();

//! Retrieves a value indicating whether the specified widget is a child of the widget.
/*!
@param[in] widget The Widget to evaluate.
@returns `true` if the specified widget is a child of the widget; otherwise, `false`.
### Examples ###
The following code example ensures that a Label is visible by calling its BringToFront() method.
This example requires that you have a Window `main_window` with a Label named `label1`.
@code
void MakeLabelVisible()
{
// If the window contains label1, bring it
// to the front to make sure it is visible.
if(main_window.Contains(label1))
{
label1.BringToFront();
}
}
@endcode
@see
- BringToFront()
- SendToBack()
- Widgets
*/
bool Contains(const Widget &widget);

//! Sets input focus to the widget.
/*!
@return `true` if the input focus request was successful; otherwise, `false`.
Expand Down Expand Up @@ -1113,7 +1154,7 @@ namespace PhWidgets
- ProgressBar
- Splitter
- Label
- LinkLabel (when there is no link present in the control)
- LinkLabel (when there is no link present in the widget)
*/
bool Focus();

Expand All @@ -1134,7 +1175,21 @@ namespace PhWidgets
- Container::ActiveWidget
- Widgets
*/
Widget GetNextWidget(Widget widget, bool forward = true) const;
Widget GetNextWidget(const Widget &widget, bool forward = true) const;

//! Sends the widget to the back of the z-order.
/*!
The widget is moved to the back of the z-order.
If the widget is a child of another widget, the child widget is moved to the back of the z-order.
If the widget is a top-level widget, this method will not work correctly unless the widget is active.
A top-level widget is a widget, such as a Form, that is not a child of another widget.
An active widget is a visible widget that has input focus.
To use the SendToBack() method with an inactive, top-level widget, first call the BringToFront() method on the widget.
@see
- BringToFront()
*/
void SendToBack();

//@{
//! Sets the bounds of the widget to the specified location and size.
Expand Down
151 changes: 77 additions & 74 deletions src/service/PhWidgetsFunc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,80 +20,83 @@ namespace PhWidgets
{
const char * WidgetClassName(PtWidget_t *wdg)
{
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtArc);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBarGraph);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBasic);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBezier);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBkgd);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCalendar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClient);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClock);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPanel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPatch);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSelGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorWell);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtComboBox);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCompound);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDisjoint);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDivider);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtEllipse);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFileSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFontSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGauge);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGraphic);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGrid);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtImageArea);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLabel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLine);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenu);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuBar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMeter);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMtrend);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMultitext);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumeric);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericFloat);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericInteger);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOnOffButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOSContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPane);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPanelGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPixel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPolygon);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPrintSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtProgress);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRaw);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRect);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRegion);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollArea);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollBar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSeparator);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtServer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSlider);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTab);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTerminal);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtText);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTimer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToggleButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbarGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTrend);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTty);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtUpDown);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWebClient);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWidget);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWindow);
if(wdg)
{
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtArc);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBarGraph);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBasic);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBezier);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBkgd);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCalendar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClient);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClock);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPanel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPatch);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSelGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorWell);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtComboBox);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCompound);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDisjoint);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDivider);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtEllipse);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFileSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFontSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGauge);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGraphic);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGrid);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtImageArea);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLabel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLine);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenu);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuBar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMeter);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMtrend);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMultitext);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumeric);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericFloat);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericInteger);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOnOffButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOSContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPane);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPanelGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPixel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPolygon);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPrintSel);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtProgress);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRaw);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawList);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRect);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRegion);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollArea);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollBar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollContainer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSeparator);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtServer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSlider);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTab);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTerminal);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtText);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTimer);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToggleButton);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbar);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbarGroup);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTree);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTrend);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTty);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtUpDown);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWebClient);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWidget);
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWindow);
}

return "Unknown";
}
Expand Down

0 comments on commit 393fa14

Please sign in to comment.