group { name: "script"; script_only: 1;
   script {
      public global1;
      
      // no choice - MUST have
      public obj_init() {
	 // necessary if you want to create anything to start
	 set_int(global1, 1);
      }
      public obj_shutdown() {
	 // voluntary cleanup - not needed for anything created
      }
      public obj_resize(w, h) {
	 // handle object resize - do whatever is needed
	 var g = get_int(global1);
      }
      
      public obj_signal(sig[], src[]) {
	 // called when a signal is emitted via edje_object_signal_emit()
      }
      public obj_key_down(key[], string[], compose[], flags) {
	 // called on a key press event if object focused
      }
      public obj_key_up(key[], string[], compose[], flags) {
	 // called on a key release event if object focused
      }

      // now how many of these do we really need?
      public obj_text_class_set(class[]) {
      }
      public obj_color_class_set(class[]) {
      }
      
      public part_exists(part[]) {
      }
      public part_object_get(part[]) {
      }
      
      public part_text_set(part[], text[]) {
      }
      
      public part_swallow(part[], swallow[], obj) {
      }
      public part_unswallow(part[], obj) {
      }
      public part_swallow_get(part[]) {
      }
      
      public part_state_get(part[], state[]) {
      }

      public part_drag_dir_get(part[], &x, &y) {
      }
      public part_drag_value_set(part[], Float:dx, Float:dy) {
      }
      public part_drag_value_get(part[], &Float:dx, &Float:dy) {
      }
      public part_drag_size_set(part[], Float:dw, Float:dh) {
      }
      public part_drag_size_get(part[], &Float:dw, &Float:dh) {
      }
      public part_drag_step_set(part[], Float:dw, Float:dh) {
      }
      public part_drag_step_get(part[], &Float:dw, &Float:dh) {
      }
      public part_drag_page_set(part[], Float:dw, Float:dh) {
      }
      public part_drag_page_get(part[], &Float:dw, &Float:dh) {
      }
      public part_drag_page(part[], Float:dw, Float:dh) {
      }
      public part_drag_step(part[], Float:dw, Float:dh) {
      }
      
      // already done - but rename obj_message?
      public obj_message(Msg_Type:type, id, ...) {
      }
   }
}

#if 0
//helper funcs
native obj_del(obj);

native obj_move(obj, x, y);
native obj_resize(obj, w, h);
native obj_move_resize(obj, x, y, w, h);
native obj_pos_get(obj, &x, &y);
native obj_size_get(obj, &w, &h);
native obj_geometry_get(obj, &x, &y);

native obj_color_set(obj, r, g, b, a);
native obj_color_get(obj, &r, &g, &b, &a);

native obj_show(obj);
native obj_hide(obj);
native obj_visible_get(obj);

native obj_raise(obj);
native obj_lower(obj);
native obj_raise_above(obj, obj2);
native obj_lower_below(obj, obj2);
native obj_raise_above(obj, obj2);
native obj_above_get(obj);
native obj_below_get(obj);
native obj_top_get();
native obj_bottom_get();

native obj_clip_set(obj, obj2);
native obj_clip_unset(obj);
native obj_clip_get(obj);

native obj_events_pass_set(obj, on);
native obj_events_repeat_set(obj, on);
native obj_events_pass_get(obj);
native obj_events_repeat_get(obj);

native event_freeze();
native event_thaw();

native obj_rect_add();

native obj_image_add()
native obj_image_image_set(obj, image[]);
native obj_image_image_get(obj, image[]);

native obj_edje_add():
native obj_edje_group_set(obj, group[]);
// more... add more edje controls (text_set, swallow, blah blah)

//// these later...
// more... ?

native obj_text_add();
native obj_text_font_set(obj, font[], size);
native obj_text_text_set(obj, text[]);
// more...

native obj_textblock_add();
// more...

native obj_part_swallow_add();
// more...

native obj_part_text_add();
// more...

native obj_part_textblock_add();
// more...

// and polygon, line, gradient...

// and later - box, table, ...

#endif
