private void DrawProducts()
        {
            if (CurrentTemplate.Products == null || CurrentTemplate.Products.Count == 0)
            {
                return;
            }

            GUILayout.Label("Products", EditorStyles.boldLabel);
            EditorGUILayout.BeginVertical();
            productsScrollPos = EditorGUILayout.BeginScrollView(productsScrollPos, GUILayout.Width(300), GUILayout.Height(100));

            // DrawProducts

            /// Storage variable if one of them is gonna be removed.
            Products.Product m_itemToRemove = null;

            foreach (var @base in CurrentTemplate.Products)
            {
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label(@base.Id);
                if (GUILayout.Button("Edit"))
                {
                    ProductEditor.Init(@base, (product) => {
                        // New Item created.
                        int target = CurrentTemplate.Products.FindIndex(x => x.Id.Equals(product.Id));
                        if (target != -1)
                        {
                            CurrentTemplate.Products[target] = product;
                            UpdateTemplate();
                        }
                    });
                }

                if (GUILayout.Button("Delete"))
                {
                    if (EditorUtility.DisplayDialog("Beware!", "Do you want to delete this item? All products using this item will be removed also!!", "Go ahead", "Cancel"))
                    {
                        m_itemToRemove = @base;
                    }
                }

                EditorGUILayout.EndHorizontal();
            }

            if (m_itemToRemove != null)
            {
                // Remove the base.
                CurrentTemplate.Products.Remove(m_itemToRemove);

                // Update the template.
                UpdateTemplate();
            }

            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }
        private void OnGUI()
        {
            GUILayout.Label("TemplateEditor");

            if (GUILayout.Button("Create Item"))
            {
                ItemEditor.Init(null, (product) => {
                    // New Item created.
                    CurrentTemplate.ItemDefinitions.Add(product);
                    UpdateTemplate();
                });
            }

            if (CurrentTemplate.ItemDefinitions != null && CurrentTemplate.ItemDefinitions.Count > 0)
            {
                if (GUILayout.Button("Create Product"))
                {
                    ProductEditor.Init(null, (product) => {
                        // New Product
                        // TODO => CHECK FOR ID CONFLICT.
                        CurrentTemplate.Products.Add(product);
                        UpdateTemplate();
                    });
                }
            }

            if (CurrentTemplate.Products != null && CurrentTemplate.Products.Count > 0)
            {
                if (GUILayout.Button("Create Bundle"))
                {
                    BundleEditor.Init(null, (bundle) => {
                        // New Bundle
                        // TODO => CHECK FOR ID CONFLICT.
                        CurrentTemplate.Bundles.Add(bundle);
                        UpdateTemplate();
                    });
                }
            }

            // List Items & Products & Bundles
            DrawItems();
            DrawProducts();
            DrawBundles();
            //
        }