enum Elm.Icon.Type
{
   legacy: elm_icon;
   none,
   file,
   standard
}

enum Elm.Icon.Lookup_Order
{
   [[Lookup order used by elm_icon_standard_set(). Should look for icons in
     the theme, FDO paths, or both?
   ]]
   legacy: elm_icon_lookup;
   fdo_theme, [[Icon look up order: freedesktop, theme.]]
   theme_fdo, [[Icon look up order: theme, freedesktop.]]
   fdo, [[Icon look up order: freedesktop.]]
   theme [[Icon look up order: theme.]]
}


class Elm.Icon (Elm.Image)
{
   eo_prefix: elm_obj_icon;
   methods {
      @property order_lookup {
         set {
            [[Sets the icon lookup order used by elm_icon_standard_set().

              See also @.order_lookup.get, @Elm.Icon.Lookup_Order.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         get {
            [[Get the icon lookup order.

              See also @.order_lookup.set, @Elm.Icon.Lookup_Order.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            order: Elm.Icon.Lookup_Order(Elm.Icon.Lookup_Order.theme_fdo); [[The icon lookup order (can be
                                               one of ELM_ICON_LOOKUP_FDO_THEME,
                                               ELM_ICON_LOOKUP_THEME_FDO,
                                               ELM_ICON_LOOKUP_FDO or
                                               ELM_ICON_LOOKUP_THEME)
                                             ]]
         }
      }
      @property standard {
         set {
            [[Set the icon by icon standards names.

              For example, freedesktop.org defines standard icon names such
              as "home", "network", etc. There can be different icon sets to
              match those icon keys. The "name" given as parameter is one of
              these "keys", and will be used to look in the freedesktop.org
              paths and elementary theme. One can change the lookup order
              with @.order_lookup.set.

              If name is not found in any of the expected locations and it is
              the absolute path of an image file, this image will be used.

              Note: The icon image set by this function can be changed by
              @Efl.File.file.set.

              Note: This function does not accept relative icon path.

              See also @.standard.get.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
            return: bool; [[true on success, false on error]]
         }
         get {
            [[Get the icon name set by icon standard names.

              If the icon image was set using elm_image_file_set() instead of
              @.standard.set, then this function will return null.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            name: const(char)*; [[The icon name]]
         }
      }
      @property thumb {
         set {
            [[Set the file that will be used, but use a generated thumbnail.

              This functions like elm_image_file_set() but requires the Ethumb
              library support to be enabled successfully with $elm_need_ethumb.
              When set the file indicated has a thumbnail generated and cached
              on disk for future use or will directly use an existing cached
              thumbnail if it is valid.

              \@if MOBILE \@since_tizen 2.3
              \@elseif WEARABLE \@since_tizen 2.3.1
              \@endif
            ]]
         }
         values {
            file: const(char)* @nullable; [[The path to file that will be used
                                            as icon image]]
            group: const(char)* @optional; [[The group that the icon belongs
                                             to an edje file]]
         }
      }
   }
   implements {
      class.constructor;
      Eo.Base.constructor;
      Evas.Object_Smart.add;
      Evas.Object_Smart.del;
      Elm.Widget.theme_apply;
      Elm.Image.memfile.set;
      Efl.File.file.set;
   }
   events {
      thumb,done;
      thumb,error;
   }

}
