GUI2: manager walker objects with unique_ptrs from the get-go

Needed the extra includes since walker_base's dtor needs to be visible to
unique_ptr's ctor.
This commit is contained in:
Charles Dang 2018-06-23 06:18:57 +11:00
parent 48c13761cc
commit 3bc7c6a3a0
16 changed files with 27 additions and 35 deletions

View file

@ -104,7 +104,7 @@ void select_orb_colors::setup_orb_group(const std::string& base_id, bool& shown,
using iteration::walker_base;
grid& selection = find_widget<grid>(get_window(), prefix + "selection", false);
std::unique_ptr<iteration::walker_base> iter(selection.create_walker());
auto iter = selection.create_walker();
while(!iter->at_end(walker_base::child)) {
widget* next = iter->get(walker_base::child);

View file

@ -14,6 +14,7 @@
#pragma once
#include "gui/auxiliary/iterator/walker.hpp"
#include "gui/widgets/grid.hpp"
#include "gui/widgets/styled_widget.hpp"
#include "gui/core/window_builder.hpp"
@ -140,7 +141,7 @@ public:
*
* @todo Implement properly.
*/
virtual iteration::walker_base* create_walker() override
virtual iteration::walker_ptr create_walker() override
{
return nullptr;
}

View file

@ -16,6 +16,7 @@
#include "gui/widgets/generator.hpp"
#include "gui/auxiliary/iterator/walker.hpp"
#include "gui/widgets/grid.hpp"
#include "gui/widgets/selectable_item.hpp"
#include "gui/widgets/toggle_button.hpp"
@ -870,7 +871,7 @@ public:
*
* @todo Implement properly.
*/
virtual iteration::walker_base* create_walker() override
virtual iteration::walker_ptr create_walker() override
{
return nullptr;
}

View file

@ -682,9 +682,9 @@ bool grid::disable_click_dismiss() const
return false;
}
iteration::walker_base* grid::create_walker()
iteration::walker_ptr grid::create_walker()
{
return new gui2::iteration::grid(*this);
return std::make_unique<gui2::iteration::grid>(*this);
}
void grid::set_rows(const unsigned rows)

View file

@ -292,7 +292,7 @@ public:
bool disable_click_dismiss() const override;
/** See @ref widget::create_walker. */
virtual iteration::walker_base* create_walker() override;
virtual iteration::walker_ptr create_walker() override;
/***** ***** ***** setters / getters for members ***** ****** *****/

View file

@ -17,6 +17,7 @@
#include "gui/widgets/matrix.hpp"
#include "gui/auxiliary/find_widget.hpp"
#include "gui/auxiliary/iterator/walker.hpp"
#include "gui/core/log.hpp"
#include "gui/core/widget_definition.hpp"
#include "gui/core/window_builder.hpp"
@ -162,11 +163,8 @@ bool matrix::disable_click_dismiss() const
return false;
}
iteration::walker_base* matrix::create_walker()
iteration::walker_ptr matrix::create_walker()
{
/**
* @todo Implement properly.
*/
return nullptr;
}

View file

@ -177,7 +177,7 @@ public:
bool disable_click_dismiss() const override;
/** See @ref widget::create_walker. */
virtual iteration::walker_base* create_walker() override;
virtual iteration::walker_ptr create_walker() override;
/**
* Returns a grid in the pane.

View file

@ -17,6 +17,7 @@
#include "gui/widgets/pane.hpp"
#include "gui/auxiliary/find_widget.hpp"
#include "gui/auxiliary/iterator/walker.hpp"
#include "gui/core/log.hpp"
#include "gui/widgets/grid.hpp"
#include "gui/widgets/window.hpp"
@ -225,11 +226,8 @@ bool pane::disable_click_dismiss() const
return false;
}
iteration::walker_base* pane::create_walker()
iteration::walker_ptr pane::create_walker()
{
/**
* @todo Implement properly.
*/
return nullptr;
}

View file

@ -107,7 +107,7 @@ public:
bool disable_click_dismiss() const override;
/** See @ref widget::create_walker. */
virtual iteration::walker_base* create_walker() override;
virtual iteration::walker_ptr create_walker() override;
/**
* Returns a grid in the pane.

View file

@ -132,9 +132,9 @@ bool styled_widget::disable_click_dismiss() const
return get_visible() == widget::visibility::visible && get_active();
}
iteration::walker_base* styled_widget::create_walker()
iteration::walker_ptr styled_widget::create_walker()
{
return new iteration::walker::widget(*this);
return std::make_unique<iteration::walker::widget>(*this);
}
point styled_widget::get_config_minimum_size() const

View file

@ -94,7 +94,7 @@ public:
bool disable_click_dismiss() const override;
/** See @ref widget::create_walker. */
virtual iteration::walker_base* create_walker() override;
virtual iteration::walker_ptr create_walker() override;
/***** ***** ***** ***** layout functions ***** ***** ***** *****/

View file

@ -809,9 +809,9 @@ void tree_view_node::layout_initialize(const bool full_initialization)
}
}
iteration::walker_base* tree_view_node::create_walker()
iteration::walker_ptr tree_view_node::create_walker()
{
return new gui2::iteration::tree_node(*this, children_);
return std::make_unique<gui2::iteration::tree_node>(*this, children_);
}
} // namespace gui2

View file

@ -135,12 +135,8 @@ public:
void fold(const bool recursive = false);
void unfold(const bool recursive = false);
/**
* See @ref widget::create_walker.
*
* @todo Implement properly.
*/
virtual iteration::walker_base* create_walker() override;
/** See @ref widget::create_walker. */
virtual iteration::walker_ptr create_walker() override;
node_children_vector& children()
{

View file

@ -16,6 +16,7 @@
#include "gui/widgets/viewport.hpp"
#include "gui/auxiliary/iterator/walker.hpp"
#include "gui/core/log.hpp"
#include "config.hpp"
#include "utils/const_clone.hpp"
@ -150,11 +151,8 @@ bool viewport::disable_click_dismiss() const
return false;
}
iteration::walker_base* viewport::create_walker()
iteration::walker_ptr viewport::create_walker()
{
/**
* @todo Implement properly.
*/
return nullptr;
}

View file

@ -75,7 +75,7 @@ public:
bool disable_click_dismiss() const override;
/** See @ref widget::create_walker. */
virtual iteration::walker_base* create_walker() override;
virtual iteration::walker_ptr create_walker() override;
private:
widget_ptr widget_;

View file

@ -34,7 +34,7 @@ class grid;
namespace iteration
{
class walker_base;
using walker_ptr = std::unique_ptr<class walker_base>;
} // namespace iteration
/**
@ -724,8 +724,8 @@ public:
/** Does the widget disable easy close? */
virtual bool disable_click_dismiss() const = 0;
/** Creates a new walker object on the heap. */
virtual iteration::walker_base* create_walker() = 0;
/** Creates a new walker object managed by a smart pointer. */
virtual iteration::walker_ptr create_walker() = 0;
};
using widget_ptr = std::shared_ptr<widget>;