Rewark button, add context menu management
This commit is contained in:
parent
199d24a3a4
commit
b4dba28f15
@ -15,7 +15,8 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
|
|||||||
LOCAL_CFLAGS := -D__PLATFORM__Android \
|
LOCAL_CFLAGS := -D__PLATFORM__Android \
|
||||||
-Wno-write-strings \
|
-Wno-write-strings \
|
||||||
-DDATA_IN_APK \
|
-DDATA_IN_APK \
|
||||||
-DETK_DEBUG_LEVEL=3
|
-DETK_DEBUG_LEVEL=3 \
|
||||||
|
-std=c++0x
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@ LOCAL_CFLAGS := -D__PLATFORM__Linux \
|
|||||||
-DETK_DEBUG_LEVEL=3 \
|
-DETK_DEBUG_LEVEL=3 \
|
||||||
-DEWOL_DEBUG_LEVEL=3 \
|
-DEWOL_DEBUG_LEVEL=3 \
|
||||||
-DEWOL_VERSION_TAG_NAME="\"UNKNOW-debug\"" \
|
-DEWOL_VERSION_TAG_NAME="\"UNKNOW-debug\"" \
|
||||||
-DVERSION_BUILD_TIME="\"pasd_heure\""
|
-DVERSION_BUILD_TIME="\"pasd_heure\"" \
|
||||||
|
-std=c++0x
|
||||||
|
|
||||||
# load the common sources file of the platform
|
# load the common sources file of the platform
|
||||||
include $(LOCAL_PATH)/file.mk
|
include $(LOCAL_PATH)/file.mk
|
||||||
|
@ -19,6 +19,7 @@ LOCAL_CFLAGS := -D__PLATFORM__Android \
|
|||||||
-DVERSION_BUILD_TIME="\"pasd_heure\"" \
|
-DVERSION_BUILD_TIME="\"pasd_heure\"" \
|
||||||
-DEWOL_USE_FREE_TYPE \
|
-DEWOL_USE_FREE_TYPE \
|
||||||
-DDATA_IN_APK \
|
-DDATA_IN_APK \
|
||||||
|
-std=c++0x
|
||||||
|
|
||||||
# load the common sources file of the platform
|
# load the common sources file of the platform
|
||||||
include $(LOCAL_PATH)/file.mk
|
include $(LOCAL_PATH)/file.mk
|
||||||
|
@ -17,7 +17,9 @@ LOCAL_CFLAGS := -D__PLATFORM__Linux \
|
|||||||
-DEWOL_VERSION_TAG_NAME="\"UNKNOW-debug\"" \
|
-DEWOL_VERSION_TAG_NAME="\"UNKNOW-debug\"" \
|
||||||
-DVERSION_BUILD_TIME="\"pasd_heure\"" \
|
-DVERSION_BUILD_TIME="\"pasd_heure\"" \
|
||||||
-DEWOL_USE_FREE_TYPE \
|
-DEWOL_USE_FREE_TYPE \
|
||||||
`pkg-config --cflags freetype2`
|
-std=c++0x
|
||||||
|
|
||||||
|
# `pkg-config --cflags freetype2`
|
||||||
|
|
||||||
# load the common sources file of the platform
|
# load the common sources file of the platform
|
||||||
include $(LOCAL_PATH)/file.mk
|
include $(LOCAL_PATH)/file.mk
|
||||||
|
@ -98,43 +98,6 @@ namespace ewol {
|
|||||||
} eventKbMoveType_te;
|
} eventKbMoveType_te;
|
||||||
|
|
||||||
char* GetCharTypeMoveEvent(eventKbMoveType_te type);
|
char* GetCharTypeMoveEvent(eventKbMoveType_te type);
|
||||||
/*
|
|
||||||
enum {
|
|
||||||
FLAG_EVENT_INPUT_1 = 1 << 0,
|
|
||||||
FLAG_EVENT_INPUT_2 = 1 << 1,
|
|
||||||
FLAG_EVENT_INPUT_3 = 1 << 2,
|
|
||||||
FLAG_EVENT_INPUT_4 = 1 << 3,
|
|
||||||
FLAG_EVENT_INPUT_5 = 1 << 4,
|
|
||||||
FLAG_EVENT_INPUT_6 = 1 << 5,
|
|
||||||
FLAG_EVENT_INPUT_7 = 1 << 6,
|
|
||||||
FLAG_EVENT_INPUT_8 = 1 << 7,
|
|
||||||
FLAG_EVENT_INPUT_9 = 1 << 8,
|
|
||||||
FLAG_EVENT_INPUT_10 = 1 << 9,
|
|
||||||
FLAG_EVENT_INPUT_11 = 1 << 10,
|
|
||||||
FLAG_EVENT_INPUT_12 = 1 << 11,
|
|
||||||
FLAG_EVENT_INPUT_13 = 1 << 12,
|
|
||||||
FLAG_EVENT_INPUT_14 = 1 << 13,
|
|
||||||
FLAG_EVENT_INPUT_15 = 1 << 14,
|
|
||||||
FLAG_EVENT_INPUT_16 = 1 << 15,
|
|
||||||
FLAG_EVENT_INPUT_17 = 1 << 16,
|
|
||||||
|
|
||||||
FLAG_EVENT_INPUT_MOTION = 1 << 20,
|
|
||||||
FLAG_EVENT_INPUT_ENTER = 1 << 21,
|
|
||||||
FLAG_EVENT_INPUT_LEAVE = 1 << 22,
|
|
||||||
FLAG_EVENT_INPUT_DOWN = 1 << 23,
|
|
||||||
FLAG_EVENT_INPUT_UP = 1 << 24,
|
|
||||||
FLAG_EVENT_INPUT_CLICKED = 1 << 25,
|
|
||||||
FLAG_EVENT_INPUT_CLICKED_DOUBLE = 1 << 26,
|
|
||||||
FLAG_EVENT_INPUT_CLICKED_TRIPLE = 1 << 27,
|
|
||||||
FLAG_EVENT_INPUT_CLICKED_ALL = FLAG_EVENT_INPUT_CLICKED + FLAG_EVENT_INPUT_CLICKED_DOUBLE + FLAG_EVENT_INPUT_CLICKED_TRIPLE,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define FLAG_EVENT_INPUT_BT_LEFT (FLAG_EVENT_INPUT_1)
|
|
||||||
#define FLAG_EVENT_INPUT_BT_CENTER (FLAG_EVENT_INPUT_2)
|
|
||||||
#define FLAG_EVENT_INPUT_BT_RIGHT (FLAG_EVENT_INPUT_3)
|
|
||||||
#define FLAG_EVENT_INPUT_BT_SCROOL_UP (FLAG_EVENT_INPUT_4)
|
|
||||||
#define FLAG_EVENT_INPUT_BT_SCROOL_DOWN (FLAG_EVENT_INPUT_5)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define UTF8_MAX_SIZE (8)
|
#define UTF8_MAX_SIZE (8)
|
||||||
#define EWOL_EVENT_AREA (0)
|
#define EWOL_EVENT_AREA (0)
|
||||||
|
@ -144,8 +144,16 @@ void ewol::Windows::SysDraw(void)
|
|||||||
glTranslatef(0, -m_size.y, -5);
|
glTranslatef(0, -m_size.y, -5);
|
||||||
#endif
|
#endif
|
||||||
//http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html
|
//http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html
|
||||||
|
|
||||||
|
glEnable(GL_POLYGON_SMOOTH);
|
||||||
|
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glShadeModel(GL_POLYGON_SMOOTH);
|
||||||
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
|
|
||||||
|
|
||||||
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);
|
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);
|
||||||
//glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR);
|
//glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR);
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <etk/UString.h>
|
#include <etk/UString.h>
|
||||||
#include <ewol/WidgetManager.h>
|
#include <ewol/WidgetManager.h>
|
||||||
#include <ewol/base/gui.h>
|
#include <ewol/base/gui.h>
|
||||||
|
#include <ewol/ewol.h>
|
||||||
|
|
||||||
#include <ewol/Texture.h>
|
#include <ewol/Texture.h>
|
||||||
#include <ewol/base/MainThread.h>
|
#include <ewol/base/MainThread.h>
|
||||||
@ -36,6 +37,14 @@ ewol::Windows* gui_uniqueWindows = NULL;
|
|||||||
etkFloat_t gui_width = 320;
|
etkFloat_t gui_width = 320;
|
||||||
etkFloat_t gui_height = 480;
|
etkFloat_t gui_height = 480;
|
||||||
|
|
||||||
|
void ewol::RmPopUp(void)
|
||||||
|
{
|
||||||
|
if (NULL != gui_uniqueWindows) {
|
||||||
|
gui_uniqueWindows->PopUpWidgetPop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EWOL_NativeResize(int w, int h )
|
void EWOL_NativeResize(int w, int h )
|
||||||
{
|
{
|
||||||
gui_width = w;
|
gui_width = w;
|
||||||
|
@ -42,6 +42,7 @@ namespace ewol {
|
|||||||
void KeyboardShow(ewol::keyboardMode_te mode);
|
void KeyboardShow(ewol::keyboardMode_te mode);
|
||||||
void KeyboardHide(void);
|
void KeyboardHide(void);
|
||||||
void ForceRedrawAll(void);
|
void ForceRedrawAll(void);
|
||||||
|
void RmPopUp(void);
|
||||||
int32_t CmdLineNb(void);
|
int32_t CmdLineNb(void);
|
||||||
etk::UString CmdLineGet(int32_t id);
|
etk::UString CmdLineGet(int32_t id);
|
||||||
|
|
||||||
|
@ -44,6 +44,13 @@ void ewol::Button::Init(void)
|
|||||||
AddEventId(ewolEventButtonEnter);
|
AddEventId(ewolEventButtonEnter);
|
||||||
AddEventId(ewolEventButtonLeave);
|
AddEventId(ewolEventButtonLeave);
|
||||||
|
|
||||||
|
m_padding.x = 4;
|
||||||
|
#ifdef __PLATFORM__Android
|
||||||
|
m_padding.y = 12;
|
||||||
|
#else
|
||||||
|
m_padding.y = 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_textColorFg.red = 0.0;
|
m_textColorFg.red = 0.0;
|
||||||
m_textColorFg.green = 0.0;
|
m_textColorFg.green = 0.0;
|
||||||
m_textColorFg.blue = 0.0;
|
m_textColorFg.blue = 0.0;
|
||||||
@ -79,8 +86,8 @@ bool ewol::Button::CalculateMinSize(void)
|
|||||||
int32_t fontId = GetDefaultFontId();
|
int32_t fontId = GetDefaultFontId();
|
||||||
int32_t minWidth = ewol::GetWidth(fontId, m_label);
|
int32_t minWidth = ewol::GetWidth(fontId, m_label);
|
||||||
int32_t minHeight = ewol::GetHeight(fontId);
|
int32_t minHeight = ewol::GetHeight(fontId);
|
||||||
m_minSize.x = 16+minWidth;
|
m_minSize.x = m_padding.x*2 + minWidth;
|
||||||
m_minSize.y = 16+minHeight;
|
m_minSize.y = m_padding.y*2 + minHeight;
|
||||||
MarkToReedraw();
|
MarkToReedraw();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -108,17 +115,13 @@ void ewol::Button::OnRegenerateDisplay(void)
|
|||||||
// clean the object list ...
|
// clean the object list ...
|
||||||
ClearOObjectList();
|
ClearOObjectList();
|
||||||
|
|
||||||
// TODO later : Add this in the basic element of the widget ...
|
|
||||||
int32_t borderSize = 2;
|
|
||||||
int32_t paddingSize = 3;
|
|
||||||
|
|
||||||
int32_t tmpSizeX = m_minSize.x;
|
int32_t tmpSizeX = m_minSize.x;
|
||||||
int32_t tmpSizeY = m_minSize.y;
|
int32_t tmpSizeY = m_minSize.y;
|
||||||
int32_t tmpOriginX = (m_size.x - tmpSizeX) / 2;
|
int32_t tmpOriginX = (m_size.x - m_minSize.x) / 2;
|
||||||
int32_t tmpOriginY = (m_size.y - tmpSizeY) / 2;
|
int32_t tmpOriginY = (m_size.y - m_minSize.y) / 2;
|
||||||
// no change for the text orogin :
|
// no change for the text orogin :
|
||||||
int32_t tmpTextOriginX = (m_size.x - tmpSizeX) / 2 + borderSize + 2*paddingSize;
|
int32_t tmpTextOriginX = (m_size.x - m_minSize.x) / 2 + m_padding.x;
|
||||||
int32_t tmpTextOriginY = (m_size.y - tmpSizeY) / 2 + borderSize + 2*paddingSize;
|
int32_t tmpTextOriginY = (m_size.y - m_minSize.y) / 2 + m_padding.y;
|
||||||
|
|
||||||
if (true==m_userFillX) {
|
if (true==m_userFillX) {
|
||||||
tmpSizeX = m_size.x;
|
tmpSizeX = m_size.x;
|
||||||
@ -128,10 +131,10 @@ void ewol::Button::OnRegenerateDisplay(void)
|
|||||||
tmpSizeY = m_size.y;
|
tmpSizeY = m_size.y;
|
||||||
tmpOriginY = 0;
|
tmpOriginY = 0;
|
||||||
}
|
}
|
||||||
tmpOriginX += paddingSize;
|
tmpOriginX += m_padding.x;
|
||||||
tmpOriginY += paddingSize;
|
tmpOriginY += m_padding.y;
|
||||||
tmpSizeX -= 2*paddingSize;
|
tmpSizeX -= 2*m_padding.x;
|
||||||
tmpSizeY -= 2*paddingSize;
|
tmpSizeY -= 2*m_padding.y;
|
||||||
|
|
||||||
ewol::OObject2DText * tmpText = new ewol::OObject2DText("", -1, m_textColorFg);
|
ewol::OObject2DText * tmpText = new ewol::OObject2DText("", -1, m_textColorFg);
|
||||||
/*
|
/*
|
||||||
@ -143,19 +146,19 @@ void ewol::Button::OnRegenerateDisplay(void)
|
|||||||
textPos.x = tmpTextOriginX;
|
textPos.x = tmpTextOriginX;
|
||||||
textPos.y = tmpTextOriginY;
|
textPos.y = tmpTextOriginY;
|
||||||
clipping_ts drawClipping;
|
clipping_ts drawClipping;
|
||||||
drawClipping.x = paddingSize;
|
drawClipping.x = m_padding.x;
|
||||||
drawClipping.y = paddingSize;
|
drawClipping.y = m_padding.y;
|
||||||
drawClipping.w = m_size.x - borderSize - 2*paddingSize;
|
drawClipping.w = m_size.x - 2*m_padding.x;
|
||||||
drawClipping.h = m_size.y - borderSize - 2*paddingSize;
|
drawClipping.h = m_size.y - 2*m_padding.y;
|
||||||
tmpText->Text(textPos, drawClipping, m_label);
|
tmpText->Text(textPos, drawClipping, m_label);
|
||||||
|
|
||||||
ewol::OObject2DColored * tmpOObjects = new ewol::OObject2DColored;
|
ewol::OObject2DColored * tmpOObjects = new ewol::OObject2DColored;
|
||||||
tmpOObjects->SetColor(m_textColorBg);
|
tmpOObjects->SetColor(m_textColorBg);
|
||||||
|
tmpOriginX -= m_padding.x/2;
|
||||||
|
tmpOriginY -= m_padding.y/2;
|
||||||
|
tmpSizeX += m_padding.x/1;
|
||||||
|
tmpSizeY += m_padding.y/1;
|
||||||
tmpOObjects->Rectangle( tmpOriginX, tmpOriginY, tmpSizeX, tmpSizeY);
|
tmpOObjects->Rectangle( tmpOriginX, tmpOriginY, tmpSizeX, tmpSizeY);
|
||||||
/*
|
|
||||||
tmpOObjects->SetColor(m_textColorFg);
|
|
||||||
tmpOObjects->RectangleBorder( tmpOriginX, tmpOriginY, tmpSizeX, tmpSizeY, borderSize);
|
|
||||||
*/
|
|
||||||
AddOObject(tmpOObjects, "BouttonDecoration");
|
AddOObject(tmpOObjects, "BouttonDecoration");
|
||||||
|
|
||||||
AddOObject(tmpText, "BouttonText");
|
AddOObject(tmpText, "BouttonText");
|
||||||
|
@ -44,13 +44,10 @@ namespace ewol {
|
|||||||
virtual bool CalculateMinSize(void);
|
virtual bool CalculateMinSize(void);
|
||||||
void SetLabel(etk::UString newLabel);
|
void SetLabel(etk::UString newLabel);
|
||||||
etk::UString GetLabel(void) {return m_label;};
|
etk::UString GetLabel(void) {return m_label;};
|
||||||
// TODO :
|
|
||||||
//void SetSize(int32_t size);
|
|
||||||
//void SetFont(etk::UString fontName);
|
|
||||||
//void ResetDefaultParameters(void);
|
|
||||||
void SetValue(bool val);
|
void SetValue(bool val);
|
||||||
bool GetValue(void);
|
bool GetValue(void);
|
||||||
private:
|
private:
|
||||||
|
coord2D_ts m_padding;
|
||||||
etk::UString m_label;
|
etk::UString m_label;
|
||||||
color_ts m_textColorFg; //!< Text color
|
color_ts m_textColorFg; //!< Text color
|
||||||
color_ts m_textColorBg; //!< Background color
|
color_ts m_textColorBg; //!< Background color
|
||||||
|
239
Sources/libewol/ewol/widget/ContextMenu.cpp
Normal file
239
Sources/libewol/ewol/widget/ContextMenu.cpp
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
/**
|
||||||
|
*******************************************************************************
|
||||||
|
* @file ewol/widget/ContextMenu.cpp
|
||||||
|
* @brief ewol Contextual Menu widget system (Sources)
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @date 16/02/2012
|
||||||
|
* @par Project
|
||||||
|
* ewol
|
||||||
|
*
|
||||||
|
* @par Copyright
|
||||||
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY.
|
||||||
|
*
|
||||||
|
* Licence summary :
|
||||||
|
* You can modify and redistribute the sources code and binaries.
|
||||||
|
* You can send me the bug-fix
|
||||||
|
*
|
||||||
|
* Term of the licence in in the file licence.txt.
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <ewol/widget/ContextMenu.h>
|
||||||
|
#include <ewol/ewol.h>
|
||||||
|
|
||||||
|
#undef __class__
|
||||||
|
#define __class__ "ewol::ContextMenu"
|
||||||
|
|
||||||
|
ewol::ContextMenu::ContextMenu(void)
|
||||||
|
{
|
||||||
|
//GenericDrawDisable();
|
||||||
|
SpecificDrawEnable();
|
||||||
|
m_userExpendX = true;
|
||||||
|
m_userExpendY = true;
|
||||||
|
|
||||||
|
m_padding.x = 4;
|
||||||
|
m_padding.y = 4;
|
||||||
|
m_offset = 20;
|
||||||
|
|
||||||
|
m_colorBackGroung.red = 1.0;
|
||||||
|
m_colorBackGroung.green = 1.0;
|
||||||
|
m_colorBackGroung.blue = 1.0;
|
||||||
|
m_colorBackGroung.alpha = 1.0;
|
||||||
|
|
||||||
|
m_colorBorder.red = 0.0;
|
||||||
|
m_colorBorder.green = 0.0;
|
||||||
|
m_colorBorder.blue = 0.0;
|
||||||
|
m_colorBorder.alpha = 0.50;
|
||||||
|
|
||||||
|
m_arrowPos = {0,0};
|
||||||
|
m_arrawBorder = ewol::CONTEXT_MENU_MARK_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ewol::ContextMenu::~ContextMenu(void)
|
||||||
|
{
|
||||||
|
SubWidgetRemove();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::ContextMenu::CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY)
|
||||||
|
{
|
||||||
|
EWOL_DEBUG("CalculateSize(" << availlableX << "," << availlableY << ")");
|
||||||
|
// pop-up fill all the display :
|
||||||
|
m_size.x = availlableX;
|
||||||
|
m_size.y = availlableY;
|
||||||
|
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
coord subWidgetSize;
|
||||||
|
coord subWidgetOrigin;
|
||||||
|
subWidgetSize = m_subWidget->GetMinSize();
|
||||||
|
if (true == m_subWidget->CanExpentX()) {
|
||||||
|
subWidgetSize.x = m_size.x;
|
||||||
|
}
|
||||||
|
if (true == m_subWidget->CanExpentY()) {
|
||||||
|
subWidgetSize.y = m_size.y;
|
||||||
|
}
|
||||||
|
int32_t minWidth = 100;
|
||||||
|
int32_t maxWidth = 300;
|
||||||
|
subWidgetSize.x = (int32_t)etk_max(minWidth, subWidgetSize.x);
|
||||||
|
subWidgetSize.x = (int32_t)etk_min(maxWidth, subWidgetSize.x);
|
||||||
|
subWidgetSize.y = (int32_t)subWidgetSize.y;
|
||||||
|
|
||||||
|
// set config to the Sub-widget
|
||||||
|
switch (m_arrawBorder)
|
||||||
|
{
|
||||||
|
case ewol::CONTEXT_MENU_MARK_TOP:
|
||||||
|
subWidgetOrigin.x = (int32_t)(m_arrowPos.x - subWidgetSize.x/2);
|
||||||
|
subWidgetOrigin.y = (int32_t)(m_arrowPos.y + m_offset);
|
||||||
|
break;
|
||||||
|
case ewol::CONTEXT_MENU_MARK_RIGHT:
|
||||||
|
case ewol::CONTEXT_MENU_MARK_BOTTOM:
|
||||||
|
case ewol::CONTEXT_MENU_MARK_LEFT:
|
||||||
|
default:
|
||||||
|
subWidgetOrigin.x = (int32_t)(m_size.x - m_origin.x - subWidgetSize.x)/2 + m_origin.x;
|
||||||
|
subWidgetOrigin.y = (int32_t)(m_size.y - m_origin.y - subWidgetSize.y)/2 + m_origin.y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_subWidget->SetOrigin(subWidgetOrigin.x, subWidgetOrigin.y);
|
||||||
|
m_subWidget->CalculateSize(subWidgetSize.x, subWidgetSize.y);
|
||||||
|
}
|
||||||
|
MarkToReedraw();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::ContextMenu::CalculateMinSize(void)
|
||||||
|
{
|
||||||
|
EWOL_DEBUG("CalculateMinSize");
|
||||||
|
m_userExpendX=false;
|
||||||
|
m_userExpendY=false;
|
||||||
|
m_minSize.x = 50.0;
|
||||||
|
m_minSize.y = 50.0;
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
m_subWidget->CalculateMinSize();
|
||||||
|
coord tmpSize = m_subWidget->GetMinSize();
|
||||||
|
m_minSize.x = tmpSize.x;
|
||||||
|
m_minSize.y = tmpSize.y;
|
||||||
|
}
|
||||||
|
EWOL_DEBUG("CalculateMinSize(" << m_minSize.x << "," << m_minSize.y << ")");
|
||||||
|
MarkToReedraw();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SetMinSise(etkFloat_t x, etkFloat_t y)
|
||||||
|
{
|
||||||
|
EWOL_ERROR("Pop-up can not have a user Minimum size (herited from under elements)");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SetExpendX(bool newExpend)
|
||||||
|
{
|
||||||
|
EWOL_ERROR("Pop-up can not have a user expend settings X (herited from under elements)");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SetExpendY(bool newExpend)
|
||||||
|
{
|
||||||
|
EWOL_ERROR("Pop-up can not have a user expend settings Y (herited from under elements)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SubWidgetSet(ewol::Widget* newWidget)
|
||||||
|
{
|
||||||
|
if (NULL == newWidget) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_subWidget = newWidget;
|
||||||
|
newWidget->SetParrent(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SubWidgetRemove(void)
|
||||||
|
{
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
delete(m_subWidget);
|
||||||
|
m_subWidget = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ewol::ContextMenu::OnDraw(void)
|
||||||
|
{
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
m_subWidget->GenDraw();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::ContextMenu::OnRegenerateDisplay(void)
|
||||||
|
{
|
||||||
|
if (true == NeedRedraw()) {
|
||||||
|
}
|
||||||
|
// generate a white background and take gray on other surfaces
|
||||||
|
ClearOObjectList();
|
||||||
|
ewol::OObject2DColored * BGOObjects = new ewol::OObject2DColored();
|
||||||
|
AddOObject(BGOObjects, "ListDeco");
|
||||||
|
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
coord tmpSize = m_subWidget->GetSize();
|
||||||
|
coord tmpOrigin = m_subWidget->GetOrigin();
|
||||||
|
|
||||||
|
// display border ...
|
||||||
|
BGOObjects->SetColor(m_colorBorder);
|
||||||
|
BGOObjects->SetPoint(m_arrowPos.x, m_arrowPos.y);
|
||||||
|
int32_t laking = m_offset - m_padding.y;
|
||||||
|
BGOObjects->SetPoint(m_arrowPos.x+laking, m_arrowPos.y+laking);
|
||||||
|
BGOObjects->SetPoint(m_arrowPos.x-laking, m_arrowPos.y+laking);
|
||||||
|
|
||||||
|
BGOObjects->Rectangle(tmpOrigin.x-m_padding.x, tmpOrigin.y - m_padding.y, tmpSize.x + m_padding.x*2, tmpSize.y + m_padding.y*2);
|
||||||
|
// set the area in white ...
|
||||||
|
BGOObjects->SetColor(m_colorBackGroung);
|
||||||
|
BGOObjects->Rectangle(tmpOrigin.x, tmpOrigin.y, tmpSize.x, tmpSize.y);
|
||||||
|
}
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
m_subWidget->OnRegenerateDisplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::ContextMenu::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
|
||||||
|
{
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
coord tmpSize = m_subWidget->GetSize();
|
||||||
|
coord tmpOrigin = m_subWidget->GetOrigin();
|
||||||
|
if( (tmpOrigin.x <= x && tmpOrigin.x + tmpSize.x >= x)
|
||||||
|
&& (tmpOrigin.y <= y && tmpOrigin.y + tmpSize.y >= y) )
|
||||||
|
{
|
||||||
|
return m_subWidget->GenEventInput(IdInput, typeEvent, x, y);
|
||||||
|
} else {
|
||||||
|
//EWOL_INFO("Event ouside the context menu");
|
||||||
|
if (IdInput > 0) {
|
||||||
|
if( typeEvent == ewol::EVENT_INPUT_TYPE_DOWN
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_MOVE
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_SINGLE
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_DOUBLE
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_TRIPLE
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_UP
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_ENTER
|
||||||
|
|| typeEvent == ewol::EVENT_INPUT_TYPE_LEAVE ) {
|
||||||
|
ewol::RmPopUp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::ContextMenu::SetPositionMark(markPosition_te position, coord2D_ts arrowPos)
|
||||||
|
{
|
||||||
|
EWOL_DEBUG("set context menu at the position : (" << arrowPos.x << "," << arrowPos.y << ")");
|
||||||
|
m_arrawBorder = position;
|
||||||
|
m_arrowPos = arrowPos;
|
||||||
|
MarkToReedraw();
|
||||||
|
}
|
72
Sources/libewol/ewol/widget/ContextMenu.h
Normal file
72
Sources/libewol/ewol/widget/ContextMenu.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/**
|
||||||
|
*******************************************************************************
|
||||||
|
* @file ewol/widget/ContextMenu.h
|
||||||
|
* @brief ewol contextual Menu widget system (header)
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @date 16/02/2012
|
||||||
|
* @par Project
|
||||||
|
* ewol
|
||||||
|
*
|
||||||
|
* @par Copyright
|
||||||
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY.
|
||||||
|
*
|
||||||
|
* Licence summary :
|
||||||
|
* You can modify and redistribute the sources code and binaries.
|
||||||
|
* You can send me the bug-fix
|
||||||
|
*
|
||||||
|
* Term of the licence in in the file licence.txt.
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __EWOL_CONTEXT_MENU_H__
|
||||||
|
#define __EWOL_CONTEXT_MENU_H__
|
||||||
|
|
||||||
|
#include <etk/Types.h>
|
||||||
|
#include <ewol/Debug.h>
|
||||||
|
#include <ewol/Widget.h>
|
||||||
|
|
||||||
|
namespace ewol {
|
||||||
|
typedef enum {
|
||||||
|
CONTEXT_MENU_MARK_TOP,
|
||||||
|
CONTEXT_MENU_MARK_RIGHT,
|
||||||
|
CONTEXT_MENU_MARK_BOTTOM,
|
||||||
|
CONTEXT_MENU_MARK_LEFT,
|
||||||
|
CONTEXT_MENU_MARK_NONE
|
||||||
|
}markPosition_te;
|
||||||
|
class ContextMenu : public ewol::Widget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ContextMenu(void);
|
||||||
|
virtual ~ContextMenu(void);
|
||||||
|
public:
|
||||||
|
virtual bool CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY); // this generate the current size ...
|
||||||
|
virtual bool CalculateMinSize(void); //update the min Size ... and the expend parameters for the sizer
|
||||||
|
virtual void SetMinSise(etkFloat_t x=-1, etkFloat_t y=-1);
|
||||||
|
virtual void SetExpendX(bool newExpend=false);
|
||||||
|
virtual void SetExpendY(bool newExpend=false);
|
||||||
|
private:
|
||||||
|
color_ts m_colorBackGroung;
|
||||||
|
color_ts m_colorBorder;
|
||||||
|
coord2D_ts m_padding;
|
||||||
|
coord2D_ts m_arrowPos;
|
||||||
|
etkFloat_t m_offset;
|
||||||
|
markPosition_te m_arrawBorder;
|
||||||
|
ewol::Widget* m_subWidget;
|
||||||
|
public:
|
||||||
|
void SubWidgetSet(ewol::Widget* newWidget);
|
||||||
|
void SubWidgetRemove(void);
|
||||||
|
void SetPositionMark(markPosition_te position, coord2D_ts arrowPos);
|
||||||
|
protected:
|
||||||
|
virtual bool OnDraw(void);
|
||||||
|
public:
|
||||||
|
virtual void OnRegenerateDisplay(void);
|
||||||
|
public:
|
||||||
|
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -70,7 +70,7 @@ bool ewol::PopUp::CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY)
|
|||||||
if (true == m_subWidget->CanExpentY()) {
|
if (true == m_subWidget->CanExpentY()) {
|
||||||
subWidgetSize.y = m_size.y;
|
subWidgetSize.y = m_size.y;
|
||||||
}
|
}
|
||||||
if (m_displayRatio>0.1 && m_displayRatio<=100) {
|
if (m_displayRatio>0.1 && m_displayRatio<=1) {
|
||||||
subWidgetSize.x = etk_max(m_size.x*m_displayRatio, subWidgetSize.x);
|
subWidgetSize.x = etk_max(m_size.x*m_displayRatio, subWidgetSize.x);
|
||||||
subWidgetSize.y = etk_max(m_size.y*m_displayRatio, subWidgetSize.y);
|
subWidgetSize.y = etk_max(m_size.y*m_displayRatio, subWidgetSize.y);
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,8 @@ extern "C" {
|
|||||||
#define __class__ "ewol::FileChooser(FolderList)"
|
#define __class__ "ewol::FileChooser(FolderList)"
|
||||||
|
|
||||||
|
|
||||||
|
#include <ewol/ewol.h>
|
||||||
|
|
||||||
void SortList(etk::VectorType<etk::UString *> &m_listDirectory)
|
void SortList(etk::VectorType<etk::UString *> &m_listDirectory)
|
||||||
{
|
{
|
||||||
etk::VectorType<etk::UString *> tmpList = m_listDirectory;
|
etk::VectorType<etk::UString *> tmpList = m_listDirectory;
|
||||||
@ -514,6 +516,7 @@ bool ewol::FileChooser::OnEventAreaExternal(int32_t widgetID, const char * gener
|
|||||||
if (ewolEventFileChooserEntryFolder == generateEventId) {
|
if (ewolEventFileChooserEntryFolder == generateEventId) {
|
||||||
//==> change the folder name
|
//==> change the folder name
|
||||||
// TODO : Change the folder, if it exit ...
|
// TODO : Change the folder, if it exit ...
|
||||||
|
return true;
|
||||||
} else if (ewolEventFileChooserEntryFile == generateEventId) {
|
} else if (ewolEventFileChooserEntryFile == generateEventId) {
|
||||||
//==> change the file name
|
//==> change the file name
|
||||||
ewol::Entry * tmpWidget = (ewol::Entry*)ewol::widgetManager::Get(m_widgetCurrentFileNameId);
|
ewol::Entry * tmpWidget = (ewol::Entry*)ewol::widgetManager::Get(m_widgetCurrentFileNameId);
|
||||||
@ -521,9 +524,12 @@ bool ewol::FileChooser::OnEventAreaExternal(int32_t widgetID, const char * gener
|
|||||||
m_file = tmpWidget->GetValue();
|
m_file = tmpWidget->GetValue();
|
||||||
}
|
}
|
||||||
// TODO : Remove file selection
|
// TODO : Remove file selection
|
||||||
|
return true;
|
||||||
} else if (ewolEventFileChooserCancel == generateEventId) {
|
} else if (ewolEventFileChooserCancel == generateEventId) {
|
||||||
//==> Auto remove ...
|
//==> Auto remove ...
|
||||||
// TODO : ...
|
bool tmppp = GenEventInputExternal(generateEventId, x, y);
|
||||||
|
ewol::RmPopUp();
|
||||||
|
return tmppp;
|
||||||
} else if (ewolEventFileChooserHidenFileChange == generateEventId) {
|
} else if (ewolEventFileChooserHidenFileChange == generateEventId) {
|
||||||
// regenerate the display ...
|
// regenerate the display ...
|
||||||
UpdateCurrentFolder();
|
UpdateCurrentFolder();
|
||||||
@ -558,13 +564,16 @@ bool ewol::FileChooser::OnEventAreaExternal(int32_t widgetID, const char * gener
|
|||||||
FileChooserFileList * myListFile = (FileChooserFileList *)ewol::widgetManager::Get(m_widgetListFileId);
|
FileChooserFileList * myListFile = (FileChooserFileList *)ewol::widgetManager::Get(m_widgetListFileId);
|
||||||
etk::UString file = myListFile->GetSelectedLine();
|
etk::UString file = myListFile->GetSelectedLine();
|
||||||
SetFileName(file);
|
SetFileName(file);
|
||||||
|
GenEventInputExternal(generateEventId, x, y);
|
||||||
} else if (ewolEventFileChooserValidateFile == generateEventId) {
|
} else if (ewolEventFileChooserValidateFile == generateEventId) {
|
||||||
// select the File ==> generate a validate
|
// select the File ==> generate a validate
|
||||||
return GenEventInputExternal(ewolEventFileChooserValidate, x, y);;
|
bool tmppp = GenEventInputExternal(ewolEventFileChooserValidate, x, y);
|
||||||
|
ewol::RmPopUp();
|
||||||
|
return tmppp;
|
||||||
} else if (ewolEventFileChooserValidate == generateEventId && false == m_hasSelectedFile) {
|
} else if (ewolEventFileChooserValidate == generateEventId && false == m_hasSelectedFile) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return GenEventInputExternal(generateEventId, x, y);
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ FILE_LIST = ewol/ewol.cpp \
|
|||||||
ewol/widget/CheckBox.cpp \
|
ewol/widget/CheckBox.cpp \
|
||||||
ewol/widget/Entry.cpp \
|
ewol/widget/Entry.cpp \
|
||||||
ewol/widget/List.cpp \
|
ewol/widget/List.cpp \
|
||||||
|
ewol/widget/ContextMenu.cpp \
|
||||||
ewol/widget/PopUp.cpp \
|
ewol/widget/PopUp.cpp \
|
||||||
ewol/widget/SizerHori.cpp \
|
ewol/widget/SizerHori.cpp \
|
||||||
ewol/widget/SizerVert.cpp \
|
ewol/widget/SizerVert.cpp \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user