From 485aca72bcc8b7732b264a4e9d203d1f0c1dfbe3 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 22 May 2013 22:16:40 +0200 Subject: [PATCH] [DEV] add capabilities at the context menu --- sources/ewol/widget/ContextMenu.cpp | 93 +++++++++++++++++++++++++++ sources/ewol/widget/ContextMenu.h | 10 +++ sources/ewol/widget/WidgetManager.cpp | 3 + 3 files changed, 106 insertions(+) diff --git a/sources/ewol/widget/ContextMenu.cpp b/sources/ewol/widget/ContextMenu.cpp index 988bf31f..af176bdf 100644 --- a/sources/ewol/widget/ContextMenu.cpp +++ b/sources/ewol/widget/ContextMenu.cpp @@ -10,12 +10,37 @@ #include #include #include +#include #undef __class__ #define __class__ "ContextMenu" + +const char* const widget::ContextMenu::configArrowPosition = "ewol-widget-context-menu-config-arrow-position"; +const char* const widget::ContextMenu::configArrowMode = "ewol-widget-context-menu-config-arrow-mode"; + +static ewol::Widget* Create(void) +{ + return new widget::ContextMenu(); +} + +void widget::ContextMenu::Init(void) +{ + ewol::widgetManager::AddWidgetCreator(__class__,&Create); +} + +void widget::ContextMenu::UnInit(void) +{ + ewol::widgetManager::AddWidgetCreator(__class__,NULL); +} + + + widget::ContextMenu::ContextMenu(void) { + RegisterConfig(configArrowPosition, "vec2", NULL, "position of the arrow"); + RegisterConfig(configArrowMode, "list", "none;left;buttom;right;top", "Position of the arrow in the pop-up"); + m_userExpand.setValue(false,false); m_padding.setValue(4,4); @@ -234,3 +259,71 @@ ewol::Widget* widget::ContextMenu::GetWidgetAtPos(const vec2& pos) } return this; } + + +const char* const widget::ContextMenu::configArrowPosition = "ewol-widget-context-menu-config-arrow-position"; +const char* const widget::ContextMenu::configArrowMode = "ewol-widget-context-menu-config-arrow-mode"; + +bool widget::Button::OnSetConfig(const ewol::EConfig& _conf) +{ + if (true == widget::Container::OnSetConfig(_conf)) { + return true; + } + if (_conf.GetConfig() == configArrowPosition) { + m_arrowPos = _conf.GetData(); + return true; + } + if (_conf.GetConfig() == configArrowMode) { + if(true == _conf.GetData().CompareNoCase("top")) { + m_arrawBorder = CONTEXT_MENU_MARK_TOP; + } else if(true == _conf.GetData().CompareNoCase("right")) { + m_arrawBorder = CONTEXT_MENU_MARK_RIGHT; + } else if(true == _conf.GetData().CompareNoCase("buttom")) { + m_arrawBorder = CONTEXT_MENU_MARK_BOTTOM; + } else if(true == _conf.GetData().CompareNoCase("left")) { + m_arrawBorder = CONTEXT_MENU_MARK_LEFT; + } else { + m_arrawBorder = CONTEXT_MENU_MARK_NONE; + } + return true; + } + return false; +} + +bool widget::Button::OnGetConfig(const char* _config, etk::UString& _result) const +{ + if (true == widget::Container::OnGetConfig(_config, _result)) { + return true; + } + if (_config == configArrowPosition) { + _result = m_arrowPos; + return true; + } + if (_config == configArrowMode) { + switch(m_arrawBorder) { + case CONTEXT_MENU_MARK_TOP: + _result = "top"; + break; + case CONTEXT_MENU_MARK_RIGHT: + _result = "right"; + break; + case CONTEXT_MENU_MARK_BOTTOM: + _result = "buttom"; + break; + case CONTEXT_MENU_MARK_LEFT: + _result = "left"; + break; + default: + case CONTEXT_MENU_MARK_NONE: + _result = "none"; + break; + } + return true; + } + return false; +} + + + + + diff --git a/sources/ewol/widget/ContextMenu.h b/sources/ewol/widget/ContextMenu.h index cb9f1829..41381bbd 100644 --- a/sources/ewol/widget/ContextMenu.h +++ b/sources/ewol/widget/ContextMenu.h @@ -25,13 +25,21 @@ namespace widget { }markPosition_te; class ContextMenu : public widget::Container { + public: + static void Init(void); + static void UnInit(void); + // Config list of properties + static const char* const configArrowPosition; + static const char* const configArrowMode; public: ContextMenu(void); virtual ~ContextMenu(void); private: + // TODO : Rework the displayer .... ewol::Drawing m_compositing; draw::Color m_colorBackGroung; draw::Color m_colorBorder; + vec2 m_padding; vec2 m_arrowPos; float m_offset; @@ -40,6 +48,8 @@ namespace widget { void SetPositionMark(markPosition_te position, vec2 arrowPos); protected: // Derived function virtual void OnDraw(void); + virtual bool OnSetConfig(const ewol::EConfig& _conf); + virtual bool OnGetConfig(const char* _config, etk::UString& _result) const; public: // Derived function virtual void SystemDraw(const ewol::DrawProperty& displayProp); virtual void OnRegenerateDisplay(void); diff --git a/sources/ewol/widget/WidgetManager.cpp b/sources/ewol/widget/WidgetManager.cpp index f3c5c774..61b3a8ec 100644 --- a/sources/ewol/widget/WidgetManager.cpp +++ b/sources/ewol/widget/WidgetManager.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,7 @@ void ewol::widgetManager::Init(void) widget::Entry::Init(); widget::CheckBox::Init(); widget::Scroll::Init(); + widget::ContextMenu::Init(); IsInit = true; } @@ -82,6 +84,7 @@ void ewol::widgetManager::UnInit(void) ewol::widgetManager::FocusSetDefault(NULL); ewol::widgetManager::FocusRelease(); + widget::ContextMenu::UnInit(); widget::Scroll::UnInit(); widget::CheckBox::UnInit(); widget::Entry::UnInit();