#ifndef MSP_GLTK_PANEL_H_
#define MSP_GLTK_PANEL_H_
+#include <memory>
#include <msp/core/typeregistry.h>
#include "container.h"
#include "layout.h"
Loader(Panel &, WidgetMap &);
private:
- Layout &get_layout();
Widget &get_last_widget();
template<typename T>
void arrangement();
void expand(bool, bool);
void ghost(bool);
void gravity(int, int);
- void grid(unsigned);
+ void grid(std::size_t);
void layout();
template<typename T>
void unnamed_child();
protected:
std::vector<Widget *> nav_order;
- Layout *layout = nullptr;
+ std::unique_ptr<Layout> layout;
static TypeRegistry<Loader::AddChildType, Loader &> widget_registry;
static bool widget_registry_init_done;
- Panel(const Panel &);
- Panel &operator=(const Panel &);
public:
Panel();
- virtual ~Panel();
template<typename T>
static void register_child_type(const std::string &);
const char *get_class() const override { return "panel"; }
- void set_layout(Layout *);
- Layout *get_layout() { return layout; }
+ Layout &get_or_create_layout();
protected:
void autosize_special(const Part &, Geometry &) const override;
template<typename T>
void Panel::Loader::unnamed_child()
{
- RefPtr<T> chl = new T();
+ std::unique_ptr<T> chl = std::make_unique<T>();
load_sub(*chl);
- obj.add(*chl.get());
- last_widget = chl.release();
+ Widget *wdg = chl.get();
+ obj.add(move(chl));
+ last_widget = wdg;
}