- typedef std::list<Widget *> ChildSeq;
-
- ChildSeq children;
- Widget *pointer_focus;
- unsigned pointer_grab;
- Widget *input_focus;
-
- Panel(const Panel &);
- Panel &operator=(const Panel &);
- const char *get_class() const { return "panel"; }
- void render_part(const Part &) const;
- void set_pointer_focus(Widget *);
- void set_input_focus(Widget *);
+ template<typename T>
+ class ArrangedLoader: public DataFile::Loader
+ {
+ private:
+ typename T::Loader arr_loader;
+
+ public:
+ ArrangedLoader(Loader &, T &);
+ };
+
+protected:
+ std::vector<Widget *> nav_order;
+ std::unique_ptr<Layout> layout;
+
+ static TypeRegistry<Loader::AddChildType, Loader &> widget_registry;
+ static bool widget_registry_init_done;
+
+public:
+ Panel();
+
+ template<typename T>
+ static void register_child_type(const std::string &);
+
+ const char *get_class() const override { return "panel"; }
+
+ Layout &get_or_create_layout();
+
+protected:
+ void autosize_special(const Part &, Geometry &) const override;
+ void render_special(const Part &, GL::Renderer &) const override;
+
+public:
+ bool navigate(Navigation) override;
+protected:
+ Widget *find_next_child(int, int, int, int, int) const;
+ static int compute_delta(int, int, int, int, int);
+
+ void on_size_change() override;
+ void on_child_added(Widget &) override;
+ void on_child_removed(Widget &) override;