125 lines
3.1 KiB
C++
125 lines
3.1 KiB
C++
/*
|
|
* A Form Implementation
|
|
* Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
|
|
*
|
|
* Distributed under the Boost Software License, Version 1.0.
|
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
*
|
|
* @file: nana/gui/widgets/form.cpp
|
|
*/
|
|
|
|
#include <nana/gui/widgets/form.hpp>
|
|
#include <nana/gui/detail/bedrock.hpp>
|
|
|
|
namespace nana
|
|
{
|
|
namespace drawerbase
|
|
{
|
|
namespace form
|
|
{
|
|
//class trigger
|
|
void trigger::attached(widget_reference wdg, graph_reference)
|
|
{
|
|
wd_ = &wdg;
|
|
API::ignore_mouse_focus(wdg, true);
|
|
}
|
|
|
|
void trigger::refresh(graph_reference graph)
|
|
{
|
|
graph.rectangle(true, API::bgcolor(*wd_));
|
|
}
|
|
//end class trigger
|
|
|
|
//class form_base
|
|
form_base::form_base(window owner, bool nested, const rectangle& r, const appearance& app)
|
|
: widget_object<category::root_tag, drawerbase::form::trigger, detail::events_root_extension>(owner, nested, r, app)
|
|
{}
|
|
|
|
place & form_base::get_place()
|
|
{
|
|
if (this->empty())
|
|
throw std::runtime_error("form::get_place(): the form has been destroyed.");
|
|
|
|
if (!place_)
|
|
place_.reset(new place{ *this });
|
|
|
|
return *place_;
|
|
}
|
|
|
|
void form_base::div(std::string div_text)
|
|
{
|
|
get_place().div(std::move(div_text));
|
|
}
|
|
|
|
place::field_reference form_base::operator[](const char* field_name)
|
|
{
|
|
return get_place()[field_name];
|
|
}
|
|
|
|
void form_base::collocate() noexcept
|
|
{
|
|
if (place_)
|
|
place_->collocate();
|
|
}
|
|
//end class form_base
|
|
}//end namespace form
|
|
}//end namespace drawerbase
|
|
|
|
//class form
|
|
using form_base = drawerbase::form::form_base;
|
|
|
|
form::form(const form& fm, const ::nana::size& sz, const appearance& apr)
|
|
: form_base(fm.handle(), false, API::make_center(fm.handle(), sz.width, sz.height), apr)
|
|
{
|
|
}
|
|
|
|
form::form(const rectangle& r, const appearance& apr)
|
|
: form_base(nullptr, false, r, apr)
|
|
{}
|
|
|
|
form::form(window owner, const ::nana::size& sz, const appearance& apr)
|
|
: form_base(owner, false, API::make_center(owner, sz.width, sz.height), apr)
|
|
{}
|
|
|
|
form::form(window owner, const rectangle& r, const appearance& apr)
|
|
: form_base(owner, false, r, apr)
|
|
{}
|
|
|
|
void form::modality() const
|
|
{
|
|
API::modal_window(handle());
|
|
}
|
|
|
|
void form::wait_for_this()
|
|
{
|
|
API::wait_for(handle());
|
|
}
|
|
|
|
void form::keyboard_accelerator(const accel_key& key, const std::function<void()>& fn)
|
|
{
|
|
nana::detail::bedrock::instance().keyboard_accelerator(this->native_handle(), key, fn);
|
|
}
|
|
//end class form
|
|
|
|
//class nested_form
|
|
nested_form::nested_form(const form& fm, const rectangle& r, const appearance& apr)
|
|
: form_base(fm.handle(), true, r, apr)
|
|
{
|
|
}
|
|
|
|
nested_form::nested_form(const nested_form& fm, const rectangle& r, const appearance& apr)
|
|
: form_base(fm.handle(), true, r, apr)
|
|
{
|
|
}
|
|
|
|
nested_form::nested_form(window owner, const appearance& apr)
|
|
: form_base(owner, true, rectangle(), apr)
|
|
{}
|
|
|
|
nested_form::nested_form(window owner, const rectangle& r, const appearance& apr)
|
|
: form_base(owner, true, r, apr)
|
|
{}
|
|
//end nested_form
|
|
}//end namespace nana
|