Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Container.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Collections.Generic;
19
20 namespace ElmSharp
21 {
22     /// <summary>
23     /// It inherits <see cref="Widget"/>.
24     /// The Container is a abstract class.
25     /// Other class inherits it to Elementary is about displaying
26     /// its widgets in a nice layout.
27     /// </summary>
28     public abstract class Container : Widget
29     {
30         HashSet<EvasObject> _children = new HashSet<EvasObject>();
31
32         /// <summary>
33         /// Creates and initializes a new instance of class which inherit from Container.
34         /// </summary>
35         /// <param name="parent">The parent is a given object which will be attached by Container
36         /// as a child.It's <see cref="EvasObject"/> type.</param>
37         public Container(EvasObject parent) : base(parent)
38         {
39         }
40
41         /// <summary>
42         /// Sets the background color of a given Container.
43         /// </summary>
44         public override Color BackgroundColor
45         {
46             set
47             {
48                 if (value.IsDefault)
49                 {
50                     SetPartColor("bg", Color.Transparent);
51                 }
52                 else
53                 {
54                     SetPartColor("bg", value);
55                 }
56                 _backgroundColor = value;
57             }
58         }
59
60         protected IEnumerable<EvasObject> Children => _children;
61
62         protected void AddChild(EvasObject obj)
63         {
64             _children.Add(obj);
65             obj.Deleted += OnChildDeleted;
66         }
67
68         protected void RemoveChild(EvasObject obj)
69         {
70             _children.Remove(obj);
71         }
72
73         protected void ClearChildren()
74         {
75             _children.Clear();
76         }
77
78         void OnChildDeleted(object sender, EventArgs a)
79         {
80             _children.Remove((EvasObject)sender);
81         }
82     }
83 }