Browse Source

LibGUI: Add very limited multi-label support to GStatusBar

Created a constructor argument and getter/setter methods to allow
you to have a multi-label status bar.
Brandon Scott 5 years ago
parent
commit
a1c89c2734
2 changed files with 39 additions and 9 deletions
  1. 34 8
      Libraries/LibGUI/GStatusBar.cpp
  2. 5 1
      Libraries/LibGUI/GStatusBar.h

+ 34 - 8
Libraries/LibGUI/GStatusBar.cpp

@@ -1,11 +1,16 @@
+#include <LibDraw/StylePainter.h>
 #include <LibGUI/GBoxLayout.h>
 #include <LibGUI/GBoxLayout.h>
 #include <LibGUI/GLabel.h>
 #include <LibGUI/GLabel.h>
 #include <LibGUI/GPainter.h>
 #include <LibGUI/GPainter.h>
 #include <LibGUI/GResizeCorner.h>
 #include <LibGUI/GResizeCorner.h>
 #include <LibGUI/GStatusBar.h>
 #include <LibGUI/GStatusBar.h>
-#include <LibDraw/StylePainter.h>
 
 
 GStatusBar::GStatusBar(GWidget* parent)
 GStatusBar::GStatusBar(GWidget* parent)
+    : GStatusBar(1, parent)
+{
+}
+
+GStatusBar::GStatusBar(int label_count, GWidget* parent)
     : GWidget(parent)
     : GWidget(parent)
 {
 {
     set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
     set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
@@ -13,11 +18,12 @@ GStatusBar::GStatusBar(GWidget* parent)
     set_layout(make<GBoxLayout>(Orientation::Horizontal));
     set_layout(make<GBoxLayout>(Orientation::Horizontal));
     layout()->set_margins({ 2, 2, 2, 2 });
     layout()->set_margins({ 2, 2, 2, 2 });
     layout()->set_spacing(2);
     layout()->set_spacing(2);
-    m_label = GLabel::construct(this);
-    m_label->set_frame_shadow(FrameShadow::Sunken);
-    m_label->set_frame_shape(FrameShape::Panel);
-    m_label->set_frame_thickness(1);
-    m_label->set_text_alignment(TextAlignment::CenterLeft);
+
+    if (label_count < 1)
+        label_count = 1;
+
+    for (auto i = 0; i < label_count; i++)
+        m_labels.append(create_label());
 
 
     m_corner = GResizeCorner::construct(this);
     m_corner = GResizeCorner::construct(this);
 }
 }
@@ -26,14 +32,34 @@ GStatusBar::~GStatusBar()
 {
 {
 }
 }
 
 
+NonnullRefPtr<GLabel> GStatusBar::create_label()
+{
+    auto label = GLabel::construct(this);
+    label->set_frame_shadow(FrameShadow::Sunken);
+    label->set_frame_shape(FrameShape::Panel);
+    label->set_frame_thickness(1);
+    label->set_text_alignment(TextAlignment::CenterLeft);
+    return label;
+}
+
 void GStatusBar::set_text(const StringView& text)
 void GStatusBar::set_text(const StringView& text)
 {
 {
-    m_label->set_text(text);
+    m_labels.first().set_text(text);
 }
 }
 
 
 String GStatusBar::text() const
 String GStatusBar::text() const
 {
 {
-    return m_label->text();
+    return m_labels.first().text();
+}
+
+void GStatusBar::set_text(int index, const StringView& text)
+{
+    m_labels.at(index).set_text(text);
+}
+
+String GStatusBar::text(int index) const
+{
+    return m_labels.at(index).text();
 }
 }
 
 
 void GStatusBar::paint_event(GPaintEvent& event)
 void GStatusBar::paint_event(GPaintEvent& event)

+ 5 - 1
Libraries/LibGUI/GStatusBar.h

@@ -11,13 +11,17 @@ public:
     virtual ~GStatusBar() override;
     virtual ~GStatusBar() override;
 
 
     String text() const;
     String text() const;
+    String text(int index) const;
     void set_text(const StringView&);
     void set_text(const StringView&);
+    void set_text(int index, const StringView&);
 
 
 protected:
 protected:
     explicit GStatusBar(GWidget* parent);
     explicit GStatusBar(GWidget* parent);
+    explicit GStatusBar(int label_count, GWidget* parent);
     virtual void paint_event(GPaintEvent&) override;
     virtual void paint_event(GPaintEvent&) override;
 
 
 private:
 private:
-    RefPtr<GLabel> m_label;
+    NonnullRefPtr<GLabel> create_label();
+    NonnullRefPtrVector<GLabel> m_labels;
     RefPtr<GResizeCorner> m_corner;
     RefPtr<GResizeCorner> m_corner;
 };
 };