listbox header functions are deprecated, use column_interface

This commit is contained in:
Jinhao 2016-06-13 06:21:58 +08:00
parent 488f6ac88c
commit be59604a08
4 changed files with 599 additions and 422 deletions

View File

@ -36,6 +36,42 @@ namespace nana
{
namespace listbox
{
/// An interface of column operations
class column_interface
{
public:
/// Destructor
virtual ~column_interface() = default;
/// Returns the width of column, in pixel
virtual unsigned width() const noexcept = 0;
/// Sets width
/**
* @param pixels The pixels of width
*/
virtual void width(unsigned pixels) noexcept = 0;
/// Automatically adjusted width
/**
* @param minimize The minimized width of column, in pixel
* @param maximize The maximized width of column, in pixel
*/
virtual void width(unsigned minimize, unsigned maximize) = 0;
/// Sets alignment of column text
/**
* @param align Alignment
*/
virtual void text_align(::nana::align align) noexcept = 0;
/// Adjusts the width to fit the content
/**
* The priority of max: maximize, ranged width, scheme's max_fit_content.
*/
virtual void fit_content(unsigned maximize = 0) noexcept = 0;
};
using size_type = std::size_t;
using native_string_type = ::nana::detail::native_string_type;
@ -86,9 +122,9 @@ namespace nana
}
};
using selection = std::vector<index_pair>;
using index_pairs = ::std::vector<index_pair>;
using inline_notifier_interface = detail::inline_widget_notifier_interface<index_pair, std::string>;
using inline_notifier_interface = detail::inline_widget_notifier_interface<index_pair, ::std::string>;
struct cell
{
@ -96,7 +132,7 @@ namespace nana
{
::nana::color bgcolor;
::nana::color fgcolor;
/// ::nana::paint::font font; \todo
format() = default;
format(const ::nana::color& bgcolor, const ::nana::color& fgcolor);
};
@ -173,8 +209,6 @@ namespace nana
std::size_t pos_{0};
};
using selection = std::vector<index_pair>;
/// struct essence_t
///@brief: this struct gives many data for listbox,
/// the state of the struct does not effect on member funcions, therefore all data members are public.
@ -535,10 +569,14 @@ namespace nana
color_proxy item_selected{ static_cast<color_rgb>(0xD5EFFC) };
/// \todo how to implement some geometrical parameters ??
unsigned max_header_width{ 3000 }; ///< during auto width don't alow more than this
unsigned min_header_width{ 20 }; ///< def=20 . non counting suspension_width
unsigned suspension_width{ 8 }; ///< def= . the trigger will set this to the width if ("...")
unsigned ext_w { 5 }; ///< def= 5. Additional or extended with added (before) to the text width to determine the cell width. cell_w = text_w + ext_w +1
/// The max column width which is generated by fit_content is allowed. It is ignored when it is 0, or a max value is passed to fit_content.
unsigned max_fit_content{ 0 };
unsigned min_column_width{ 20 }; ///< def=20 . non counting suspension_width
unsigned suspension_width { 8 }; ///< def= . the trigger will set this to the width if ("...")
unsigned text_margin { 5 }; ///< def= 5. Additional or extended with added (before) to the text width to determine the cell width. cell_w = text_w + ext_w +1
unsigned header_height { 25 }; ///< def=25 . header height header_size
unsigned text_height { 14 }; ///< the trigger will set this to the height of the text font
unsigned item_height_ex { 6 }; ///< Set !=0 !!!! def=6. item_height = text_height + item_height_ex
@ -614,18 +652,41 @@ the nana::detail::basic_window member pointer scheme
public concepts::any_objective<drawerbase::listbox::size_type, 2>
{
public:
/// An unsigned integral type
using size_type = drawerbase::listbox::size_type;
/// The representation of a category/item
using index_pair = drawerbase::listbox::index_pair;
/// A index_pair package
using index_pairs = drawerbase::listbox::index_pairs;
/// Iterator to access category
using cat_proxy = drawerbase::listbox::cat_proxy;
/// Iterator to access item
using item_proxy = drawerbase::listbox::item_proxy;
using selection = drawerbase::listbox::selection; ///<A container type for items.
/// The input resolver that converts an object to an item
using iresolver = drawerbase::listbox::iresolver;
/// The output resolver that converts an item to an object
using oresolver = drawerbase::listbox::oresolver;
/// The representation of an item
using cell = drawerbase::listbox::cell;
/// The options of exporting items into a string variable
using export_options= drawerbase::listbox::export_options;
using columns_indexs= drawerbase::listbox::size_type;
/// The interface for user-defined inline widgets
using inline_notifier_interface = drawerbase::listbox::inline_notifier_interface;
/// Column operations
using column_interface = drawerbase::listbox::column_interface;
public:
/// Constructors
listbox() = default;
listbox(window, bool visible);
listbox(window, const rectangle& = {}, bool visible = true);
@ -648,7 +709,7 @@ the nana::detail::basic_window member pointer scheme
item_proxy operator[](const index_pair& abs_pos);
const item_proxy operator[](const index_pair &abs_pos) const;
//Associative element access
//Associative category access
/// Returns a proxy to the category of the key or create a new one in the right order
/**
@ -724,10 +785,25 @@ the nana::detail::basic_window member pointer scheme
/// Appends a new column with a header text and the specified width at the end, and return it position
size_type append_header(std::string text_utf8, unsigned width = 120);
size_type append_header(std::wstring text, unsigned width = 120);
listbox& header_width(size_type position, unsigned pixels);
unsigned header_width(size_type position) const;
unsigned auto_width(size_type position, unsigned max=3000);
/// Access a column at specified position
/**
* @param pos Position of column
* @return Reference to the requested column
* @except std::out_of_range if !(pos < columns())
*/
column_interface & column_at(size_type pos);
/// Access a column at specified position
/**
* @param pos Position of column
* @return Constant reference to the requested column
* @except std::out_of_range if !(pos < columns())
*/
const column_interface & column_at(size_type pos) const;
/// Returns the number of columns
size_type column_size() const;
cat_proxy append(std::string); ///< Appends a new category to the end
cat_proxy append(std::wstring); ///< Appends a new category to the end
@ -751,16 +827,14 @@ the nana::detail::basic_window member pointer scheme
*/
void insert_item(const index_pair& abs_pos, ::std::wstring text);
/// Returns an index of item which contains the specified point.
index_pair cast(const point & pos) const;
/// Returns the column which contains the specified point.
columns_indexs column_from_pos(const point & pos);
size_type column_from_pos(const point & pos);
void checkable(bool);
selection checked() const; ///<Returns the items which are checked.
index_pairs checked() const; ///<Returns the items which are checked.
void clear(size_type cat); ///<Removes all the items from the specified category
void clear(); ///<Removes all the items from all categories
@ -783,7 +857,7 @@ the nana::detail::basic_window member pointer scheme
void unsort();
bool freeze_sort(bool freeze);
selection selected() const; ///<Get the absolute indexs of all the selected items
index_pairs selected() const; ///<Get the absolute indexs of all the selected items
void show_header(bool);
bool visible_header() const;

View File

@ -26,6 +26,8 @@
#include <nana/gui/detail/element_store.hpp>
#include <nana/gui/detail/color_schemes.hpp>
#include <iostream> //use std::cerr
#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL 0x020A
#endif

File diff suppressed because it is too large Load Diff

View File

@ -512,12 +512,6 @@ namespace nana{ namespace widgets
const wchar_t* begin;
const wchar_t* end;
unsigned pixels;
/*
text_section() //deprecated
{
throw std::runtime_error("text_section default construction is forbidden.");
}
*/
text_section(const wchar_t* ptr, const wchar_t* endptr)
: begin(ptr), end(endptr)