5#include "acme/user/user/_constant.h"
6#include "acme/handler/item.h"
7#include "acme/prototype/geometry2d/rectangle.h"
23 DECLARE_C_FLAG(e_item, enum_item);
30 e_item_flag_drawn = 0x800000,
31 e_item_flag_rectangle_callback = 0x4000,
35 DECLARE_C_FLAG(e_item_flag, enum_item_flag);
291 class CLASS_DECL_ACME item :
292 virtual public ::particle
296 bool m_bSelected : 1;
338 ::pointer<::draw2d::path> m_ppath;
339 ::pointer<::user::mouse> m_pmouse;
342 ::item_pointer m_pitem;
344 ::i32_point m_pointHost;
345 ::i32_point m_pointClient;
346 ::i32_point m_pointHitTest;
347 ::i32_rectangle m_rectangle2;
348 ::user::e_item m_eitem;
349 ::particle_pointer m_pparticle;
350 ::user::e_zorder m_ezorder;
351 ::user::e_item_flag m_euseritemflag;
354 item(::item * pitem =
nullptr) :
358 m_ezorder = ::user::e_zorder_front;
370 item & operator = (
const item & item)
374 m_pointHost = item.m_pointHost;
375 m_pointClient = item.m_pointClient;
376 m_pointHitTest = item.m_pointHitTest;
377 m_rectangle2 = item.m_rectangle2;
379 m_pparticle = item.m_pparticle;
380 m_ppath = item.m_ppath;
390 ::i32_boolean is_drawn() {
return m_euseritemflag & e_item_flag_drawn; }
392 void set_drawn() { m_euseritemflag |= e_item_flag_drawn; }
482 bool is_item_set()
const { return ::is_item_set(m_pitem); }
484 explicit operator bool()
const {
return is_item_set(); }
486 ::e_element eelement()
const {
return is_item_set() ? m_pitem->m_item.m_eelement.m_eenum : e_element_none; }
488 ::collection::index item_index()
const {
return is_item_set() ? m_pitem->m_item.m_iItem : -1; }
490 template <
typename ITEM >
491 ::pointer < ITEM > as_item()
const {
return ((::user::item *)
this)->as_item< ITEM >(); }
493 template <
typename ITEM >
494 ::pointer < ITEM > as_item() {
return m_pitem.cast < ITEM >(); }
497 ::atom atom()
const {
return is_item_set() ? m_pitem->m_atomMatterId : e_element_none; }
577 bool operator == (const ::e_element & eelement)
const {
return this->eelement() == e_element_none ? false : this->eelement() == eelement; }
615 using item_pointer = ::pointer < item >;
617 using item_base_pointer = ::pointer < item_base >;
620 using item_array = ::pointer_array < item >;
622 using item_map = map_base < item_t, item_pointer >;
624 using item_base_map = map_base < item_t, item_base_pointer >;
629inline bool is_item_set(const ::user::item * puseritem)
632 return ::is_set((
const void *)puseritem) && puseritem->is_item_set();
637inline bool is_element(const ::user::item * puseritem, const ::e_element & eelement)
640 return ::is_item_set(puseritem) && puseritem->eelement() == eelement;
645inline bool is_item(const ::user::item * puseritem, ::collection::index iItem)
648 return ::is_item_set(puseritem) && puseritem->item_index() == iItem;
654inline bool is_item_index(const ::user::item * pitem, ::collection::index iItem)
657 return ::is_element(pitem, ::e_element_item) && ::is_item(pitem, iItem);
662inline bool is_same_item(const ::user::item * pitem1, const ::user::item * pitem2)
665 if (::is_item_set(pitem1))
668 if (::is_item_set(pitem2))
671 return ::is_same_item(pitem1->m_pitem, pitem2->m_pitem);
682 else if (::is_item_set(pitem2))
698CLASS_DECL_ACME
bool is_item_equivalent(const ::user::item * pitem1, const ::user::item * pitem2);
701inline ::collection::index item_index(const ::user::item * puseritem)
704 return ::is_item_set(puseritem) ? puseritem->item_index() : -1;
Created by camilo on 2026-05-28 12:34 <3ThomasBorregaardSørensen!! Mummi!! Bilbo!!
Definition _.h:67