Elementary: Use an enum for selecting line-wrap method.

BREAKS API - discussed in ML before.

SVN revision: 59115
This commit is contained in:
Tom Hacohen 2011-05-02 10:56:16 +00:00
parent 728b6f153a
commit 9466cbcea3
6 changed files with 61 additions and 82 deletions

View File

@ -76,7 +76,7 @@ test_entry(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
evas_object_show(bx); evas_object_show(bx);
en = elm_entry_add(win); en = elm_entry_add(win);
elm_entry_line_wrap_set(en, 0); elm_entry_line_wrap_set(en, ELM_WRAP_NONE);
snprintf(buf, sizeof(buf), snprintf(buf, sizeof(buf),
"This is an entry widget in this window that<br>" "This is an entry widget in this window that<br>"
"uses markup <b>like this</> for styling and<br>" "uses markup <b>like this</> for styling and<br>"
@ -1256,7 +1256,7 @@ test_entry4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
evas_object_show(en); evas_object_show(en);
en = elm_entry_add(win); en = elm_entry_add(win);
elm_entry_line_wrap_set(en, 0); elm_entry_line_wrap_set(en, ELM_WRAP_NONE);
elm_entry_entry_set(en, elm_entry_entry_set(en,
"This is an entry widget<br>" "This is an entry widget<br>"
"that uses markup<br>" "that uses markup<br>"
@ -1311,7 +1311,7 @@ test_entry5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
evas_object_show(bx); evas_object_show(bx);
en = elm_scrolled_entry_add(win); en = elm_scrolled_entry_add(win);
elm_scrolled_entry_line_char_wrap_set(en, 1); elm_scrolled_entry_line_wrap_set(en, ELM_WRAP_CHAR);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_scrolled_entry_entry_set(en, elm_scrolled_entry_entry_set(en,

View File

@ -199,6 +199,19 @@ extern "C" {
ELM_TEXT_FORMAT_MARKUP_UTF8 ELM_TEXT_FORMAT_MARKUP_UTF8
} Elm_Text_Format; } Elm_Text_Format;
/**
* Line wrapping types.
*/
typedef enum _Elm_Wrap_Type
{
ELM_WRAP_NONE = 0, /**< No wrap - value is zero */
ELM_WRAP_CHAR, /**< Char wrap - wrap between graphmes */
ELM_WRAP_WORD, /**< Word wrap - wrap in allowed wrapping points (as defined in the unicode standard) */
ELM_WRAP_MIXED, /**< Mixed wrap - Word wrap, and if that fails, char wrap. */
ELM_WRAP_LAST = ELM_WRAP_MIXED
} Elm_Wrap_Type;
/** /**
* Called back when a widget's tooltip is activated and needs content. * Called back when a widget's tooltip is activated and needs content.
* @param data user-data given to elm_object_tooltip_content_cb_set() * @param data user-data given to elm_object_tooltip_content_cb_set()
@ -838,8 +851,8 @@ extern "C" {
EAPI Evas_Object *elm_label_add(Evas_Object *parent) EINA_ARG_NONNULL(1); EAPI Evas_Object *elm_label_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
EAPI void elm_label_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1); EAPI void elm_label_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
EAPI const char *elm_label_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI const char *elm_label_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1); EAPI void elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
EAPI Eina_Bool elm_label_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Elm_Wrap_Type elm_label_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w) EINA_ARG_NONNULL(1); EAPI void elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w) EINA_ARG_NONNULL(1);
EAPI Evas_Coord elm_label_wrap_width_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Evas_Coord elm_label_wrap_width_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_label_wrap_height_set(Evas_Object *obj, Evas_Coord h) EINA_ARG_NONNULL(1); EAPI void elm_label_wrap_height_set(Evas_Object *obj, Evas_Coord h) EINA_ARG_NONNULL(1);
@ -1227,8 +1240,7 @@ extern "C" {
EAPI Eina_Bool elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI const char *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI const char *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1); EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1); EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
EAPI void elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
EAPI void elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1); EAPI void elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
EAPI Eina_Bool elm_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI void elm_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
@ -2439,8 +2451,7 @@ extern "C" {
EAPI Eina_Bool elm_scrolled_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_scrolled_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI const char *elm_scrolled_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI const char *elm_scrolled_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1); EAPI void elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
EAPI void elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1); EAPI void elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
EAPI void elm_scrolled_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
EAPI void elm_scrolled_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1); EAPI void elm_scrolled_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
EAPI Eina_Bool elm_scrolled_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_scrolled_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
EAPI void elm_scrolled_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI void elm_scrolled_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);

View File

@ -654,7 +654,7 @@ elm_fileselector_add(Evas_Object *parent)
elm_widget_mirrored_automatic_set(en, EINA_FALSE); elm_widget_mirrored_automatic_set(en, EINA_FALSE);
elm_scrolled_entry_editable_set(en, EINA_FALSE); elm_scrolled_entry_editable_set(en, EINA_FALSE);
elm_scrolled_entry_single_line_set(en, EINA_TRUE); elm_scrolled_entry_single_line_set(en, EINA_TRUE);
elm_scrolled_entry_line_char_wrap_set(en, EINA_TRUE); elm_scrolled_entry_line_wrap_set(en, ELM_WRAP_CHAR);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -668,7 +668,7 @@ elm_fileselector_add(Evas_Object *parent)
elm_widget_mirrored_automatic_set(en, EINA_FALSE); elm_widget_mirrored_automatic_set(en, EINA_FALSE);
elm_scrolled_entry_editable_set(en, EINA_TRUE); elm_scrolled_entry_editable_set(en, EINA_TRUE);
elm_scrolled_entry_single_line_set(en, EINA_TRUE); elm_scrolled_entry_single_line_set(en, EINA_TRUE);
elm_scrolled_entry_line_char_wrap_set(en, EINA_TRUE); elm_scrolled_entry_line_wrap_set(en, ELM_WRAP_CHAR);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);

View File

@ -821,14 +821,14 @@ elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry)
* See also elm_scrolled_entry_line_char_wrap_set(). * See also elm_scrolled_entry_line_char_wrap_set().
* *
* @param obj The scrolled entry object * @param obj The scrolled entry object
* @param wrap If true, the scrolled entry will be wrapped once it reaches the end * @param wrap wrap according to Elm_Wrap_Type
* of the object. Wrapping will occur at the end of the word before the end of the * of the object. Wrapping will occur at the end of the word before the end of the
* object. * object.
* *
* @ingroup Scrolled_Entry * @ingroup Scrolled_Entry
*/ */
EAPI void EAPI void
elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
{ {
ELM_CHECK_WIDTYPE(obj, widtype); ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj); Widget_Data *wd = elm_widget_data_get(obj);
@ -836,27 +836,6 @@ elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap)
elm_entry_line_wrap_set(wd->entry, wrap); elm_entry_line_wrap_set(wd->entry, wrap);
} }
/**
* This enables character line wrapping in the scrolled entry object. It is the opposite
* of elm_scrolled_entry_single_line_set(). Additionally, setting this disables
* word line wrapping.
* See also elm_scrolled_entry_line_wrap_set().
*
* @param obj The scrolled entry object
* @param wrap If true, the scrolled entry will be wrapped once it reaches the end
* of the object. Wrapping will occur immediately upon reaching the end of the object.
*
* @ingroup Scrolled_Entry
*/
EAPI void
elm_scrolled_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
elm_entry_line_char_wrap_set(wd->entry, wrap);
}
/** /**
* This sets the editable attribute of the scrolled entry. * This sets the editable attribute of the scrolled entry.
* *

View File

@ -122,9 +122,8 @@ struct _Widget_Data
Ecore_Job *hovdeljob; Ecore_Job *hovdeljob;
Mod_Api *api; // module api if supplied Mod_Api *api; // module api if supplied
int cursor_pos; int cursor_pos;
Elm_Wrap_Type linewrap;
Eina_Bool changed : 1; Eina_Bool changed : 1;
Eina_Bool linewrap : 1;
Eina_Bool char_linewrap : 1;
Eina_Bool single_line : 1; Eina_Bool single_line : 1;
Eina_Bool password : 1; Eina_Bool password : 1;
Eina_Bool editable : 1; Eina_Bool editable : 1;
@ -617,7 +616,7 @@ _sizing_eval(Evas_Object *obj)
Evas_Coord minw = -1, minh = -1; Evas_Coord minw = -1, minh = -1;
Evas_Coord resw, resh; Evas_Coord resw, resh;
if (!wd) return; if (!wd) return;
if ((wd->linewrap) || (wd->char_linewrap)) if (wd->linewrap)
{ {
evas_object_geometry_get(wd->ent, NULL, NULL, &resw, &resh); evas_object_geometry_get(wd->ent, NULL, NULL, &resw, &resh);
if ((resw == wd->lastw) && (!wd->changed)) return; if ((resw == wd->lastw) && (!wd->changed)) return;
@ -738,7 +737,7 @@ _resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event
{ {
Widget_Data *wd = elm_widget_data_get(data); Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return; if (!wd) return;
if ((wd->linewrap) || (wd->char_linewrap)) if (wd->linewrap)
{ {
_sizing_eval(data); _sizing_eval(data);
} }
@ -1083,9 +1082,18 @@ _getbase(Evas_Object *obj)
if (wd->single_line) return "base-single"; if (wd->single_line) return "base-single";
else else
{ {
if (wd->linewrap) return "base"; switch (wd->linewrap)
else if (wd->char_linewrap) return "base-charwrap"; {
else return "base-nowrap"; case ELM_WRAP_CHAR:
return "base-charwrap";
case ELM_WRAP_WORD:
case ELM_WRAP_MIXED:
/* FIXME: separate mixed and word. */
return "base";
case ELM_WRAP_NONE:
default:
return "base-nowrap";
}
} }
} }
} }
@ -1097,9 +1105,18 @@ _getbase(Evas_Object *obj)
if (wd->single_line) return "base-single-noedit"; if (wd->single_line) return "base-single-noedit";
else else
{ {
if (wd->linewrap) return "base-noedit"; switch (wd->linewrap)
else if (wd->char_linewrap) return "base-noedit-charwrap"; {
else return "base-nowrap-noedit"; case ELM_WRAP_CHAR:
return "base-noedit-charwrap";
case ELM_WRAP_WORD:
case ELM_WRAP_MIXED:
/* FIXME: separate mixed and word. */
return "base-noedit";
case ELM_WRAP_NONE:
default:
return "base-nowrap-noedit";
}
} }
} }
} }
@ -1575,8 +1592,7 @@ elm_entry_add(Evas_Object *parent)
elm_widget_can_focus_set(obj, EINA_TRUE); elm_widget_can_focus_set(obj, EINA_TRUE);
elm_widget_highlight_ignore_set(obj, EINA_TRUE); elm_widget_highlight_ignore_set(obj, EINA_TRUE);
wd->linewrap = EINA_TRUE; wd->linewrap = ELM_WRAP_WORD;
wd->char_linewrap= EINA_FALSE;
wd->editable = EINA_TRUE; wd->editable = EINA_TRUE;
wd->disabled = EINA_FALSE; wd->disabled = EINA_FALSE;
wd->context_menu = EINA_TRUE; wd->context_menu = EINA_TRUE;
@ -1686,8 +1702,7 @@ elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line)
if (!wd) return; if (!wd) return;
if (wd->single_line == single_line) return; if (wd->single_line == single_line) return;
wd->single_line = single_line; wd->single_line = single_line;
wd->linewrap = EINA_FALSE; wd->linewrap = ELM_WRAP_NONE;
wd->char_linewrap = EINA_FALSE;
elm_entry_cnp_textonly_set(obj, EINA_TRUE); elm_entry_cnp_textonly_set(obj, EINA_TRUE);
_theme_hook(obj); _theme_hook(obj);
} }
@ -1729,8 +1744,7 @@ elm_entry_password_set(Evas_Object *obj, Eina_Bool password)
if (wd->password == password) return; if (wd->password == password) return;
wd->password = password; wd->password = password;
wd->single_line = EINA_TRUE; wd->single_line = EINA_TRUE;
wd->linewrap = EINA_FALSE; wd->linewrap = ELM_WRAP_NONE;
wd->char_linewrap = EINA_FALSE;
_theme_hook(obj); _theme_hook(obj);
} }
@ -1883,7 +1897,6 @@ elm_entry_entry_insert(Evas_Object *obj, const char *entry)
* This enables word line wrapping in the entry object. It is the opposite * This enables word line wrapping in the entry object. It is the opposite
* of elm_entry_single_line_set(). Additionally, setting this disables * of elm_entry_single_line_set(). Additionally, setting this disables
* character line wrapping. * character line wrapping.
* See also elm_entry_line_char_wrap_set().
* *
* @param obj The entry object * @param obj The entry object
* @param wrap If true, the entry will be wrapped once it reaches the end * @param wrap If true, the entry will be wrapped once it reaches the end
@ -1893,40 +1906,14 @@ elm_entry_entry_insert(Evas_Object *obj, const char *entry)
* @ingroup Entry * @ingroup Entry
*/ */
EAPI void EAPI void
elm_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) elm_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
{ {
ELM_CHECK_WIDTYPE(obj, widtype); ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj); Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return; if (!wd) return;
if (wd->linewrap == wrap) return; if (wd->linewrap == wrap) return;
wd->linewrap = wrap;
if(wd->linewrap)
wd->char_linewrap = EINA_FALSE;
_theme_hook(obj);
}
/** wd->linewrap = wrap;
* This enables character line wrapping in the entry object. It is the opposite
* of elm_entry_single_line_set(). Additionally, setting this disables
* word line wrapping.
* See also elm_entry_line_wrap_set().
*
* @param obj The entry object
* @param wrap If true, the entry will be wrapped once it reaches the end
* of the object. Wrapping will occur immediately upon reaching the end of the object.
*
* @ingroup Entry
*/
EAPI void
elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->char_linewrap == wrap) return;
wd->char_linewrap = wrap;
if(wd->char_linewrap)
wd->linewrap = EINA_FALSE;
_theme_hook(obj); _theme_hook(obj);
} }

View File

@ -729,12 +729,14 @@ elm_label_label_get(const Evas_Object *obj)
/** /**
* Set the wrapping behavior of the label * Set the wrapping behavior of the label
* *
* FIXME: currently all types wrap the same way (as defined in theme).
*
* @param obj The label object * @param obj The label object
* @param wrap To wrap text or not * @param wrap To wrap text or not
* @ingroup Label * @ingroup Label
*/ */
EAPI void EAPI void
elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
{ {
ELM_CHECK_WIDTYPE(obj, widtype); ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj); Widget_Data *wd = elm_widget_data_get(obj);
@ -754,10 +756,10 @@ elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap)
* Get the wrapping behavior of the label * Get the wrapping behavior of the label
* *
* @param obj The label object * @param obj The label object
* @return To wrap text or not * @return Wrap type
* @ingroup Label * @ingroup Label
*/ */
EAPI Eina_Bool EAPI Elm_Wrap_Type
elm_label_line_wrap_get(const Evas_Object *obj) elm_label_line_wrap_get(const Evas_Object *obj)
{ {
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;