mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:47:34 +00:00
LibGUI: Add "override text" to GUI::Statusbar
Each statusbar segment now has an optional "override text" which can be set, and if non-null will be displayed instead of the regular text. This allows programs to display contextual information in the statusbar temporarily without losing whatever text was already on there.
This commit is contained in:
parent
3bf2f7a329
commit
22ed6a70eb
2 changed files with 42 additions and 12 deletions
|
@ -47,8 +47,13 @@ Statusbar::Statusbar(int label_count)
|
|||
if (label_count < 1)
|
||||
label_count = 1;
|
||||
|
||||
for (auto i = 0; i < label_count; i++)
|
||||
m_labels.append(create_label());
|
||||
for (auto i = 0; i < label_count; i++) {
|
||||
m_segments.append(Segment {
|
||||
.label = create_label(),
|
||||
.text = {},
|
||||
.override_text = {},
|
||||
});
|
||||
}
|
||||
|
||||
m_corner = add<ResizeCorner>();
|
||||
|
||||
|
@ -71,22 +76,40 @@ NonnullRefPtr<Label> Statusbar::create_label()
|
|||
|
||||
void Statusbar::set_text(String text)
|
||||
{
|
||||
m_labels.first().set_text(move(text));
|
||||
set_text(0, move(text));
|
||||
}
|
||||
|
||||
String Statusbar::text() const
|
||||
{
|
||||
return m_labels.first().text();
|
||||
return text(0);
|
||||
}
|
||||
|
||||
void Statusbar::set_text(int index, String text)
|
||||
void Statusbar::set_text(size_t index, String text)
|
||||
{
|
||||
m_labels.at(index).set_text(move(text));
|
||||
m_segments.at(index).text = move(text);
|
||||
update_label(index);
|
||||
}
|
||||
|
||||
String Statusbar::text(int index) const
|
||||
void Statusbar::update_label(size_t index)
|
||||
{
|
||||
return m_labels.at(index).text();
|
||||
auto& segment = m_segments.at(index);
|
||||
segment.label->set_text(segment.override_text.is_null() ? segment.text : segment.override_text);
|
||||
}
|
||||
|
||||
String Statusbar::text(size_t index) const
|
||||
{
|
||||
return m_segments.at(index).label->text();
|
||||
}
|
||||
|
||||
void Statusbar::set_override_text(String override_text)
|
||||
{
|
||||
set_override_text(0, move(override_text));
|
||||
}
|
||||
|
||||
void Statusbar::set_override_text(size_t index, String override_text)
|
||||
{
|
||||
m_segments.at(index).override_text = move(override_text);
|
||||
update_label(index);
|
||||
}
|
||||
|
||||
void Statusbar::paint_event(PaintEvent& event)
|
||||
|
@ -103,5 +126,4 @@ void Statusbar::resize_event(ResizeEvent& event)
|
|||
|
||||
Widget::resize_event(event);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -36,9 +36,11 @@ public:
|
|||
virtual ~Statusbar() override;
|
||||
|
||||
String text() const;
|
||||
String text(int index) const;
|
||||
String text(size_t index) const;
|
||||
void set_text(String);
|
||||
void set_text(int index, String);
|
||||
void set_text(size_t index, String);
|
||||
void set_override_text(String);
|
||||
void set_override_text(size_t index, String);
|
||||
|
||||
protected:
|
||||
explicit Statusbar(int label_count = 1);
|
||||
|
@ -47,7 +49,13 @@ protected:
|
|||
|
||||
private:
|
||||
NonnullRefPtr<Label> create_label();
|
||||
NonnullRefPtrVector<Label> m_labels;
|
||||
struct Segment {
|
||||
NonnullRefPtr<GUI::Label> label;
|
||||
String text;
|
||||
String override_text;
|
||||
};
|
||||
void update_label(size_t);
|
||||
Vector<Segment> m_segments;
|
||||
RefPtr<ResizeCorner> m_corner;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue