Skip to content

Commit 393fa14

Browse files
committed
Merge branch 'work'
2 parents d388aa9 + f16deca commit 393fa14

File tree

3 files changed

+178
-81
lines changed

3 files changed

+178
-81
lines changed

src/Widget.cpp

+44-5
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,33 @@ void PhWidgets::Widget::OnUnrealized( PtCallbackInfo_t * info)
491491
resource.callback[Callback::unrealized].raise(info);
492492
}
493493

494+
void Widget::BringToFront()
495+
{
496+
PtWidgetToFront(widget());
497+
}
498+
499+
bool Widget::Contains(const Widget &widget)
500+
{
501+
PtWidget_t *this_widget = this->widget();
502+
503+
if(false == PtIsContainer(this_widget))
504+
return false;
505+
506+
PtWidget_t *front = PtWidgetChildFront(this_widget);
507+
508+
if(NULL == front)
509+
return false;
510+
511+
PtWidget_t *other_widget = widget.widget();
512+
513+
for(PtWidget_t *next = front; next != NULL; next = PtWidgetBrotherBehind(next))
514+
{
515+
if(next == other_widget)
516+
return true;
517+
}
518+
519+
return false;
520+
}
494521

495522
void Widget::SetBounds(short x, short y, unsigned short width, unsigned short height)
496523
{
@@ -521,22 +548,34 @@ bool Widget::Focus()
521548
return PtGiveFocus(widget(), nullptr) != nullptr;
522549
}
523550

524-
Widget Widget::GetNextWidget(Widget widget, bool forward) const
551+
Widget Widget::GetNextWidget(const Widget &widget, bool forward) const
525552
{
526553
PtWidget_t *this_widget = this->widget();
527554

528555
PtWidget_t *result =
529556
forward ?
530-
PtWidgetChildFront(this_widget):
531-
PtWidgetChildBack(this_widget);
557+
PtWidgetBrotherInFront(this_widget):
558+
PtWidgetBrotherBehind(this_widget);
532559

533560
if(NULL == result)
534-
throw(
535-
std::out_of_range(std::string("PhWidgets::Widget::GetNextWidget(): \'") + WidgetClassName(this_widget) + "\' widget has no children"));
561+
{
562+
result =
563+
forward ?
564+
PtWidgetBrotherBehind(this_widget):
565+
PtWidgetBrotherInFront(this_widget);
566+
}
567+
568+
if(NULL == result)
569+
return *this;
536570

537571
return Widget(result);
538572
}
539573

574+
void Widget::SendToBack()
575+
{
576+
PtWidgetToBack(widget());
577+
}
578+
540579
void Widget::Select()
541580
{
542581
Focus(); // TODO: check the actual difference

src/Widget.h

+57-2
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,47 @@ namespace PhWidgets
10811081
//! Converts Widget to constant Photon widget pointer
10821082
operator const PtWidget_t*() const;
10831083

1084+
//! Brings the widget to the front of the z-order.
1085+
/*!
1086+
The widget is moved to the front of the z-order.
1087+
If the widget is a child of another widget, the child widget is moved to the front of the z-order.
1088+
BringToFront() does not make a widget a top-level widget, and it does not raise the Widget::Paint event.
1089+
1090+
@see
1091+
- SendToBack()
1092+
*/
1093+
void BringToFront();
1094+
1095+
//! Retrieves a value indicating whether the specified widget is a child of the widget.
1096+
/*!
1097+
@param[in] widget The Widget to evaluate.
1098+
@returns `true` if the specified widget is a child of the widget; otherwise, `false`.
1099+
1100+
### Examples ###
1101+
1102+
The following code example ensures that a Label is visible by calling its BringToFront() method.
1103+
This example requires that you have a Window `main_window` with a Label named `label1`.
1104+
1105+
@code
1106+
void MakeLabelVisible()
1107+
{
1108+
// If the window contains label1, bring it
1109+
// to the front to make sure it is visible.
1110+
1111+
if(main_window.Contains(label1))
1112+
{
1113+
label1.BringToFront();
1114+
}
1115+
}
1116+
@endcode
1117+
1118+
@see
1119+
- BringToFront()
1120+
- SendToBack()
1121+
- Widgets
1122+
*/
1123+
bool Contains(const Widget &widget);
1124+
10841125
//! Sets input focus to the widget.
10851126
/*!
10861127
@return `true` if the input focus request was successful; otherwise, `false`.
@@ -1113,7 +1154,7 @@ namespace PhWidgets
11131154
- ProgressBar
11141155
- Splitter
11151156
- Label
1116-
- LinkLabel (when there is no link present in the control)
1157+
- LinkLabel (when there is no link present in the widget)
11171158
*/
11181159
bool Focus();
11191160

@@ -1134,7 +1175,21 @@ namespace PhWidgets
11341175
- Container::ActiveWidget
11351176
- Widgets
11361177
*/
1137-
Widget GetNextWidget(Widget widget, bool forward = true) const;
1178+
Widget GetNextWidget(const Widget &widget, bool forward = true) const;
1179+
1180+
//! Sends the widget to the back of the z-order.
1181+
/*!
1182+
The widget is moved to the back of the z-order.
1183+
If the widget is a child of another widget, the child widget is moved to the back of the z-order.
1184+
If the widget is a top-level widget, this method will not work correctly unless the widget is active.
1185+
A top-level widget is a widget, such as a Form, that is not a child of another widget.
1186+
An active widget is a visible widget that has input focus.
1187+
To use the SendToBack() method with an inactive, top-level widget, first call the BringToFront() method on the widget.
1188+
1189+
@see
1190+
- BringToFront()
1191+
*/
1192+
void SendToBack();
11381193

11391194
//@{
11401195
//! Sets the bounds of the widget to the specified location and size.

src/service/PhWidgetsFunc.cpp

+77-74
Original file line numberDiff line numberDiff line change
@@ -20,80 +20,83 @@ namespace PhWidgets
2020
{
2121
const char * WidgetClassName(PtWidget_t *wdg)
2222
{
23-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtArc);
24-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBarGraph);
25-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBasic);
26-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBezier);
27-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBkgd);
28-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtButton);
29-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCalendar);
30-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClient);
31-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClock);
32-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPanel);
33-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPatch);
34-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSel);
35-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSelGroup);
36-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorWell);
37-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtComboBox);
38-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCompound);
39-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtContainer);
40-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDisjoint);
41-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDivider);
42-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtEllipse);
43-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFileSel);
44-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFontSel);
45-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGauge);
46-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenList);
47-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenTree);
48-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGraphic);
49-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGrid);
50-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGroup);
51-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtImageArea);
52-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLabel);
53-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLine);
54-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtList);
55-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenu);
56-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuBar);
57-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuButton);
58-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMeter);
59-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMtrend);
60-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMultitext);
61-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumeric);
62-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericFloat);
63-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericInteger);
64-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOnOffButton);
65-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOSContainer);
66-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPane);
67-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPanelGroup);
68-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPixel);
69-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPolygon);
70-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPrintSel);
71-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtProgress);
72-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRaw);
73-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawList);
74-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawTree);
75-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRect);
76-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRegion);
77-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollArea);
78-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollBar);
79-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollContainer);
80-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSeparator);
81-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtServer);
82-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSlider);
83-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTab);
84-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTerminal);
85-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtText);
86-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTimer);
87-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToggleButton);
88-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbar);
89-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbarGroup);
90-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTree);
91-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTrend);
92-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTty);
93-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtUpDown);
94-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWebClient);
95-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWidget);
96-
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWindow);
23+
if(wdg)
24+
{
25+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtArc);
26+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBarGraph);
27+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBasic);
28+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBezier);
29+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtBkgd);
30+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtButton);
31+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCalendar);
32+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClient);
33+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtClock);
34+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPanel);
35+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorPatch);
36+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSel);
37+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorSelGroup);
38+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtColorWell);
39+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtComboBox);
40+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtCompound);
41+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtContainer);
42+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDisjoint);
43+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtDivider);
44+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtEllipse);
45+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFileSel);
46+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtFontSel);
47+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGauge);
48+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenList);
49+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGenTree);
50+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGraphic);
51+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGrid);
52+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtGroup);
53+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtImageArea);
54+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLabel);
55+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtLine);
56+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtList);
57+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenu);
58+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuBar);
59+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMenuButton);
60+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMeter);
61+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMtrend);
62+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtMultitext);
63+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumeric);
64+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericFloat);
65+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtNumericInteger);
66+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOnOffButton);
67+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtOSContainer);
68+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPane);
69+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPanelGroup);
70+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPixel);
71+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPolygon);
72+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtPrintSel);
73+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtProgress);
74+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRaw);
75+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawList);
76+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRawTree);
77+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRect);
78+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtRegion);
79+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollArea);
80+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollBar);
81+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtScrollContainer);
82+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSeparator);
83+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtServer);
84+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtSlider);
85+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTab);
86+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTerminal);
87+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtText);
88+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTimer);
89+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToggleButton);
90+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbar);
91+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtToolbarGroup);
92+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTree);
93+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTrend);
94+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtTty);
95+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtUpDown);
96+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWebClient);
97+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWidget);
98+
RETURN_PHWIDGETS_CLASS_NAME(wdg, PtWindow);
99+
}
97100

98101
return "Unknown";
99102
}

0 commit comments

Comments
 (0)