eolian: change composite syntax from block to inheritance section

This makes more sense as these are related to inheritance tree.
Therefore, change while we still can.

Fixes T8183
This commit is contained in:
Daniel Kolesa 2019-09-06 15:08:27 +02:00
parent 690dd5d33a
commit eb25e92770
14 changed files with 66 additions and 94 deletions

View File

@ -6,6 +6,10 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements
Efl.Ui.Multi_Selectable,
Efl.Ui.Focus.Manager_Sub,
Efl.Ui.Widget_Focus_Manager
composite
Efl.Ui.Scrollable_Interactive,
Efl.Ui.Scrollbar,
Efl.Ui.Focus.Manager
{
[[This widget displays a list of items in an arrangement controlled by an external @.position_manager
object. By using different @.position_manager objects this widget can show unidimensional lists or
@ -95,10 +99,5 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements
item,clicked : Efl.Ui.Item; [[A $clicked event occurred over an item.]]
item,clicked,any : Efl.Ui.Item; [[A $clicked,any event occurred over an item.]]
}
composite {
Efl.Ui.Scrollable_Interactive;
Efl.Ui.Scrollbar;
Efl.Ui.Focus.Manager;
}
}

View File

@ -5,6 +5,7 @@ struct @extern Elm.Photocam.Progress; [[Photocam progress information.]]
class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom,
Efl.Ui.Scrollable_Interactive,
Efl.Ui.Scrollbar
composite Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
{
[[Elementary Image Zoomable class]]
methods {
@ -84,8 +85,4 @@ class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom,
download,done: void; [[Called when photocam download finished]]
download,error: Elm.Photocam.Error; [[Called when photocam download failed]]
}
composite {
Efl.Ui.Scrollable_Interactive;
Efl.Ui.Scrollbar;
}
}

View File

@ -10,6 +10,8 @@ struct @beta Efl.Ui.List_View_Item_Event
class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar,
Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Ui.Focus.Composition, Efl.Ui.Focus.Manager_Sub,
Efl.Ui.Container_Selectable, Efl.Ui.List_View_Model, Efl.Ui.Widget_Focus_Manager
composite
Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
{
methods {
@property homogeneous {
@ -90,8 +92,4 @@ class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scroll
Efl.Access.Selection.all_children_select;
Efl.Access.Selection.access_selection_clear;
}
composite {
Efl.Ui.Scrollable_Interactive;
Efl.Ui.Scrollbar;
}
}

View File

@ -18,6 +18,7 @@ struct @beta Efl.Ui.Panel_Scroll_Info
class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content,
Efl.Access.Widget.Action
composite Efl.Ui.Scrollable_Interactive
{
[[Elementary panel class]]
methods {
@ -93,7 +94,4 @@ class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
events {
toggled: void; [[Called when the hidden state was toggled]]
}
composite {
Efl.Ui.Scrollable_Interactive;
}
}

View File

@ -1,4 +1,5 @@
class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group
composite Efl.Ui.Radio_Group
{
[[A standard @Efl.Ui.Box container which automatically handles grouping of any @Efl.Ui.Radio
widget added to it.
@ -19,7 +20,4 @@ class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group
Efl.Pack_Linear.pack_unpack_at;
Efl.Object.constructor;
}
composite {
Efl.Ui.Radio_Group;
}
}

View File

@ -4,6 +4,9 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base implements
Efl.Ui.Focus.Manager_Sub,
Efl.Ui.Widget_Focus_Manager,
Efl.Content
composite
Efl.Ui.Scrollable_Interactive,
Efl.Ui.Scrollbar
{
[[Efl ui scroller class]]
implements {
@ -19,8 +22,4 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base implements
Efl.Ui.Widget_Focus_Manager.focus_manager_create;
Efl.Ui.Scrollable_Interactive.match_content { set; }
}
composite {
Efl.Ui.Scrollable_Interactive;
Efl.Ui.Scrollbar;
}
}

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_Selectable, Efl.Pack_Linear
class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base
implements Efl.Ui.Single_Selectable, Efl.Pack_Linear
composite Efl.Pack_Linear, Efl.Pack
{
[[Tab Bar class]]
methods {
@ -23,9 +25,4 @@ class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_S
Efl.Container.content_count;
Efl.Container.content_iterate;
}
composite {
Efl.Pack_Linear;
Efl.Pack;
Efl.Pack_Linear;
}
}

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.Format
class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base
implements Efl.Text, Efl.Ui.Format
composite Efl.Text
{
[[A widget displaying a list of tags. The user can remove tags by clicking
on each tag "close" button and add new tags by typing text in the text
@ -61,7 +63,4 @@ class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.F
/* FIXME: Not future-proof */
expand,state,changed: int; [[Called when expanded state changed]]
}
composite {
Efl.Text;
}
}

View File

@ -4,6 +4,8 @@ import elm_general;
class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickable,
Efl.Access.Text, Efl.Access.Editable.Text, Efl.File,
Efl.Ui.Text_Selectable, Efl.Text_Interactive, Efl.Text_Markup
composite
Efl.Text_Interactive, Efl.Text_Markup
{
[[A flexible text widget which can be static (as a label) or editable by
the user (as a text entry). It provides all sorts of editing facilities
@ -374,8 +376,4 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickabl
anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]]
cursor,changed,manual: void; [[Called on manual cursor change]]
}
composite {
Efl.Text_Interactive;
Efl.Text_Markup;
}
}

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Player, Efl.Access.Widget.Action
class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base
implements Efl.File, Efl.Player, Efl.Access.Widget.Action
composite Efl.Player
{
[[Efl UI video class]]
methods {
@ -50,7 +52,4 @@ class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Pla
Efl.Player.stop;
Efl.Player.play { get; set; }
}
composite {
Efl.Player;
}
}

View File

@ -1,4 +1,7 @@
mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Manager
mixin Efl.Ui.Widget_Focus_Manager
requires Efl.Ui.Widget
extends Efl.Ui.Focus.Manager
composite Efl.Ui.Focus.Manager
{
[[Helper mixin for widgets which also can act as focus managers.
@ -23,7 +26,4 @@ mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Ma
Efl.Object.destructor;
Efl.Ui.Widget.focus_state_apply;
}
composite {
Efl.Ui.Focus.Manager;
}
}

View File

@ -139,6 +139,7 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W
Efl.Content, Efl.Input.State, Efl.Input.Interface, Efl.Screen,
Efl.Text, Efl.Config,
Efl.Ui.Widget_Focus_Manager, Efl.Ui.Focus.Manager_Window_Root
composite Efl.Config
{
[[Efl UI window class.
@ -895,7 +896,4 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W
pause: void; [[Called when the window is not going be displayed for some time]]
resume: void; [[Called before a window is rendered after a pause event]]
}
composite {
Efl.Config;
}
}

View File

@ -1958,43 +1958,6 @@ parse_parts(Eo_Lexer *ls)
check_match(ls, '}', '{', line, col);
}
static void
parse_composite(Eo_Lexer *ls)
{
int line, col;
if (ls->klass->type == EOLIAN_CLASS_INTERFACE)
eo_lexer_syntax_error(ls, "composite section not allowed in interfaces");
eo_lexer_get(ls);
line = ls->line_number, col = ls->column;
check_next(ls, '{');
while (ls->t.token != '}')
{
Eina_Strbuf *buf = eina_strbuf_new();
eo_lexer_dtor_push(ls, EINA_FREE_CB(eina_strbuf_free), buf);
eo_lexer_context_push(ls);
parse_name(ls, buf);
const char *nm = eina_strbuf_string_get(buf);
char *fnm = database_class_to_filename(nm);
if (!eina_hash_find(ls->state->filenames_eo, fnm))
{
free(fnm);
char ebuf[PATH_MAX];
eo_lexer_context_restore(ls);
snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
eo_lexer_syntax_error(ls, ebuf);
return;
}
/* do not introduce a dependency */
database_defer(ls->state, fnm, EINA_FALSE);
free(fnm);
ls->klass->composite = eina_list_append(ls->klass->composite,
eina_stringshare_add(nm));
eo_lexer_dtor_pop(ls);
check_next(ls, ';');
}
check_match(ls, '}', '{', line, col);
}
static void
parse_implements(Eo_Lexer *ls, Eina_Bool iface)
{
@ -2065,7 +2028,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
has_data = EINA_FALSE,
has_methods = EINA_FALSE,
has_parts = EINA_FALSE,
has_composite = EINA_FALSE,
has_implements = EINA_FALSE,
has_constructors = EINA_FALSE,
has_events = EINA_FALSE;
@ -2112,10 +2074,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
CASE_LOCK(ls, parts, "parts definition")
parse_parts(ls);
break;
case KW_composite:
CASE_LOCK(ls, composite, "composite definition")
parse_composite(ls);
break;
case KW_implements:
CASE_LOCK(ls, implements, "implements definition")
parse_implements(ls, type == EOLIAN_CLASS_INTERFACE);
@ -2200,6 +2158,7 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
const char *required;
char *fnm;
eina_strbuf_reset(buf);
eo_lexer_context_push(ls);
parse_name(ls, buf);
required = eina_strbuf_string_get(buf);
@ -2212,6 +2171,31 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
free(fnm);
}
static void
_composite_add(Eo_Lexer *ls, Eina_Strbuf *buf)
{
eina_strbuf_reset(buf);
eo_lexer_context_push(ls);
parse_name(ls, buf);
const char *nm = eina_strbuf_string_get(buf);
char *fnm = database_class_to_filename(nm);
if (!eina_hash_find(ls->state->filenames_eo, fnm))
{
free(fnm);
char ebuf[PATH_MAX];
eo_lexer_context_restore(ls);
snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
eo_lexer_syntax_error(ls, ebuf);
return;
}
/* do not introduce a dependency */
database_defer(ls->state, fnm, EINA_FALSE);
free(fnm);
ls->klass->composite = eina_list_append(ls->klass->composite,
eina_stringshare_add(nm));
eo_lexer_context_pop(ls);
}
static void
parse_class(Eo_Lexer *ls, Eolian_Class_Type type)
{
@ -2312,6 +2296,17 @@ tags_done:
_inherit_dep(ls, ibuf, EINA_FALSE);
while (test_next(ls, ','));
}
if (ls->t.kw == KW_composite)
{
if (type == EOLIAN_CLASS_INTERFACE)
eo_lexer_syntax_error(ls, "composite not allowed in interfaces");
eo_lexer_get(ls);
do
_composite_add(ls, ibuf);
while (test_next(ls, ','));
}
eo_lexer_dtor_pop(ls);
}
inherit_done:

View File

@ -1,7 +1,4 @@
class Unimpl implements Iface {
composite {
Iface;
}
class Unimpl implements Iface composite Iface {
implements {
Iface.foo;
}