color_classes {
    color_class { name: "test_colour"; color: 255 255 255 255; }
}

//fonts {
//   font: "Vera.ttf" "default";
//}

images {
    image: "bubble.png" COMP;
    image: "test.png" COMP;
}

collections {
   group {
      name: "main";
      lua_script_only: 1;
      lua_script {
         --// stick object private/local vars here
         local D;
         local text_geom;

         --// init object here
         D = {}; --// data is empty table to start

         --// send some random edje message
         edje.messagesend(7, "none"      );
         edje.messagesend(7, "sig",      "signal", "source");
         edje.messagesend(7, "str",      "hello world");
         edje.messagesend(7, "int",      987);
         edje.messagesend(7, "float",    987.321);
         edje.messagesend(7, "strset",   {"hello", "there", "world"});
         edje.messagesend(7, "intset",   {1, 2, 3});
         edje.messagesend(7, "floatset", {1.1, 2.2, 3.3});
         edje.messagesend(7, "strint",   "hello world", 7);
         edje.messagesend(7, "strfloat", "hello world", 7.654);
         edje.messagesend(7, "strintset","hello world", {1, 2, 3});

         D.edje = edje.edje();
         D.edje:file("plain/edje/group");
         D.edje:show();
                  
         D.text = edje.text();
         D.text:geom  (50, 5, 150, 50);
         D.text:color (255, 0, 0, 255);
         D.text:font("Sans:style=Bold", 32);
         D.text:text("Lua rocks!");
         text_geom = D.text:geom();
--//          print(D.text:text());
         D.text:show();

 
         --// shutdown func - generally empty or not there. everything garbage collected for you
         function shutdown ()
--//            print("lua::shutdown");
         end

         function show ()
--//             print("lua::show");
         end

         function hide ()
--//             print("lua::hide");
         end

         function move (x, y)
--//             print("lua::move x=" .. x .. " x=" .. y);
            D.edje:move(0, 0);
         end

         function resize (w, h)
--//             print("lua::resize w=" .. w .. " h=" .. h);
            D.text:move((w - text_geom.w) / 2, (h - text_geom.h) / 8);
            D.edje:resize(w, h);
         end

         function message (id, type, ...)
            print("lua::message id=" .. id .. " type=" .. type);
            --// handle your message type here. check id + type then use the
            --// vararg appropriately. they are the same as the params passed 
            --// to edje:messagesend() (if any are passed at all).  Any array
            --// arguments are passed as a single table.

            if ("none" == type) then
               print("lua::message no args");
            elseif ("strset" == type) then
               strs = ... ;
               print_table_start(strs, "", "lua::message strings");
            elseif ("intset" == type) then
               ints = ... ;
               print_table_start(ints, "", "lua::message ints");
            elseif ("floatset" == type) then
               floats = ... ;
               print_table_start(floats, "", "lua::message floats");
            elseif ("strintset" == type) then
               str, ints = ... ;
               print("lua::message " .. str);
               print_table_start(ints, "", "lua::message ints");
            elseif ("strfloatset" == type) then
               str, floats = ... ;
               print("lua::message " .. str);
               print_table_start(floats, "", "lua::message floats");
            else
               print("lua::message " .. ... );
            end
         end

         function signal (sig, src)
            print("lua::signal sig= " .. sig .. " src= " .. src);
         end
      }
   }

   // The group name NEEDS a / in it, 
   // or the part below that tries to swallow it won't work.
   // Leaving just the lua part visible.
   group {
      name: "bubbles/lua";
      lua_script_only: 1;
      lua_script {
         local bubbles = { };
         local bubbleCols = 8;
         local bubbleRows = 6;

         for i = 1, bubbleRows do
            row = { };
            for j = 1, bubbleCols do
               image = edje.image();
               image:image("bubble.png");
               image:show();
               table.insert(row, image);
            end
            table.insert(bubbles, row);
         end

         function resize (w, h)
            for i = 1, bubbleRows do
               for j = 1, bubbleCols do
                  w1 = w / bubbleCols;
                  h1 = h / bubbleRows;
                  bubbles[i][j]:geom((j - 1) * w1, (i - 1) * h1, w1, h1);
                  if ((1 == i) or (1 == j) or (bubbleRows == i) or (bubbleCols == j)) then
                     bubbles[i][j]:color(0, 255, 0, 200);
                  else
                     bubbles[i][j]:color(math.random(200) + 55, 0, math.random(255) + 55, 200);
                  end
               end
            end
         end
      }
   }

   group {
      name: "plain/edje/group";
      parts {
         part {
            name: "background";
            type: RECT;
            mouse_events: 0;
            description {
               state: "default" 0.0;
               color: 0 0 0 255;
            }
         }

         // A lua group embedded in an edje group.
         part {
            name: "bubbles_lua";
            type: GROUP;
            source: "bubbles/lua";
            mouse_events: 0;
            description { state: "default" 0.0; }
         }

         part {
            name: "background_image";
            type: IMAGE;
            mouse_events: 0;
            description {
               state: "default" 0.0;
               aspect_preference: HORIZONTAL;
               color_class: "test_colour";
               image { normal: "test.png"; }
            }
         }

         part {
            name: "some_text";
            type: TEXT;
            mouse_events: 0;
            description {
               state: "default" 0;
               text
               {
                  text: "This is test text.";
                  text_class: "test_text_class";
               }
            }
         }

      }
   }

}