00001
00002 #ifndef __CAIRO_DOCK_APPLET_FACTORY__
00003 #define __CAIRO_DOCK_APPLET_FACTORY__
00004
00005 #include <glib.h>
00006
00007 #include "cairo-dock-struct.h"
00008
00009
00019 cairo_surface_t *cairo_dock_create_applet_surface (gchar *cImageFilePath, cairo_t *pSourceContext, double fMaxScale, double *fWidth, double *fHeight);
00020
00021
00031 Icon *cairo_dock_create_icon_for_applet (CairoDock *pDock, int iWidth, int iHeight, gchar *cName, gchar *cIconName);
00032
00033
00034
00044 GKeyFile *cairo_dock_read_header_applet_conf_file (gchar *cConfFilePath, int *iWidth, int *iHeight, gchar **cName, gboolean *bFlushConfFileNeeded);
00045
00046
00054 GHashTable *cairo_dock_list_themes (gchar *cThemesDir, GHashTable *hProvidedTable, GError **erreur);
00055
00056
00064 gchar *cairo_dock_check_conf_file_exists (gchar *cUserDataDirName, gchar *cShareDataDir, gchar *cConfFileName);
00065
00066
00072 void cairo_dock_set_icon_surface (cairo_t *pIconContext, cairo_surface_t *pSurface);
00079 void cairo_dock_add_reflection_to_icon (cairo_t *pIconContext, Icon *pIcon, CairoDock *pDock);
00087 void cairo_dock_set_icon_surface_with_reflect (cairo_t *pIconContext, cairo_surface_t *pSurface, Icon *pIcon, CairoDock *pDock);
00088
00096 void cairo_dock_set_icon_name (cairo_t *pSourceContext, const gchar *cIconName, Icon *pIcon, CairoDock *pDock);
00097
00104 void cairo_dock_set_quick_info (cairo_t *pSourceContext, const gchar *cExtraInfo, Icon *pIcon);
00109 #define cairo_dock_remove_quick_info(pIcon) cairo_dock_set_quick_info (NULL, NULL, pIcon)
00110
00111
00119 void cairo_dock_animate_icon (Icon *pIcon, CairoDock *pDock, CairoDockAnimationType iAnimationType, int iNbRounds);
00120
00121
00122 #define CD_CONFIG_APPLET \
00123 void read_conf_file (gchar *cConfFilePath, int *iWidth, int *iHeight, gchar *cName)
00124
00125 #define CD_CONFIG_BEGIN \
00126 GError *erreur = NULL; \
00127 gboolean bFlushConfFileNeeded = FALSE; \
00128 GKeyFile *pKeyFile = cairo_dock_read_header_applet_conf_file (cConfFilePath, iWidth, iHeight, &cName, &bFlushConfFileNeeded); \
00129 g_return_if_fail (pKeyFile != NULL);
00130 #define CD_CONFIG_END \
00131 if (bFlushConfFileNeeded) \
00132 cairo_dock_write_keys_to_file (pKeyFile, cConfFilePath); \
00133 g_key_file_free (pKeyFile);
00134
00135 #define CD_CONFIG_GET_BOOLEAN(cGroupName, cKeyName) cairo_dock_get_boolean_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, TRUE)
00136 #define CD_CONFIG_GET_INTEGER(cGroupName, cKeyName) cairo_dock_get_integer_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, 0)
00137 #define CD_CONFIG_GET_DOUBLE(cGroupName, cKeyName) cairo_dock_get_double_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, 0.)
00138 #define CD_CONFIG_GET_STRING(cGroupName, cKeyName) cairo_dock_get_string_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, NULL)
00139 #define CD_CONFIG_GET_ANIMATION(cGroupName, cKeyName) cairo_dock_get_animation_type_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, NULL);
00140
00141
00142 #define CD_APPLET_H \
00143 CairoDockVisitCard *pre_init (void);\
00144 Icon *init (CairoDock *pDock, gchar **cConfFilePath, GError **erreur);\
00145 void stop (void);
00146
00147
00148 #define CD_APPLET_DEFINITION(cName, iMajorVersion, iMinorVersion, iMicroVersion) \
00149 CairoDockVisitCard *pre_init (void)\
00150 {\
00151 CairoDockVisitCard *pVisitCard = g_new0 (CairoDockVisitCard, 1);\
00152 pVisitCard->cModuleName = g_strdup (cName);\
00153 pVisitCard->cReadmeFilePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_README_FILE);\
00154 pVisitCard->iMajorVersionNeeded = iMajorVersion;\
00155 pVisitCard->iMinorVersionNeeded = iMinorVersion;\
00156 pVisitCard->iMicroVersionNeeded = iMicroVersion;\
00157 return pVisitCard;\
00158 }
00159
00160 #define CD_APPLET_STOP_BEGIN \
00161 void stop (void) \
00162 { \
00163 myDock = NULL;\
00164 myIcon = NULL;\
00165 cairo_destroy (myDrawContext);
00166
00167 #define CD_APPLET_STOP_END \
00168 }
00169
00170
00171
00172 #define CD_APPLET_INIT_BEGIN \
00173 Icon *init (CairoDock *pDock, gchar **cConfFilePath, GError **erreur) \
00174 { \
00175 myDock = pDock; \
00176 *cConfFilePath = cairo_dock_check_conf_file_exists (MY_APPLET_USER_DATA_DIR, MY_APPLET_SHARE_DATA_DIR, APPLET_CONF_FILE); \
00177 int iOriginalWidth = 48, iOriginalHeight = 48; \
00178 gchar *cAppletName = NULL; \
00179 read_conf_file (*cConfFilePath, &iOriginalWidth, &iOriginalHeight, &cAppletName); \
00180 myIcon = cairo_dock_create_icon_for_applet (pDock, iOriginalWidth, iOriginalHeight, conf_defaultTitle, NULL); \
00181 myDrawContext = cairo_create (myIcon->pIconBuffer);
00182
00183 #define CD_APPLET_INIT_END \
00184 g_free (cAppletName); \
00185 return myIcon; \
00186 }
00187
00188
00189 #define CD_CLICK_ON_APPLET_BEGIN \
00190 gboolean action_on_click (gpointer *data) \
00191 { \
00192 #define CD_CLICK_ON_APPLET_BEGIN \
00193 if (data[0] == myIcon) \
00194 {
00195
00196 #define CD_CLICK_ON_APPLET_END \
00197 } \
00198 return CAIRO_DOCK_LET_PASS_NOTIFICATION;
00199
00200
00201 #endif