/*
 * This file is autogenerated with bcop:
 * The Compiz option code generator
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#ifndef _WALL_OPTIONS_H
#define _WALL_OPTIONS_H

#include <compiz-common.h>

COMPIZ_BEGIN_DECLS

CompPluginVTable * getCompPluginInfo (void);

typedef enum
{
    WallDisplayOptionShowSwitcher,
    WallDisplayOptionMiniscreen,
    WallDisplayOptionPreviewTimeout,
    WallDisplayOptionPreviewScale,
    WallDisplayOptionEdgeRadius,
    WallDisplayOptionBorderWidth,
    WallDisplayOptionOutlineColor,
    WallDisplayOptionBackgroundGradientBaseColor,
    WallDisplayOptionBackgroundGradientHighlightColor,
    WallDisplayOptionBackgroundGradientShadowColor,
    WallDisplayOptionThumbGradientBaseColor,
    WallDisplayOptionThumbGradientHighlightColor,
    WallDisplayOptionThumbHighlightGradientBaseColor,
    WallDisplayOptionThumbHighlightGradientShadowColor,
    WallDisplayOptionArrowBaseColor,
    WallDisplayOptionArrowShadowColor,
    WallDisplayOptionAllowWraparound,
    WallDisplayOptionSlideDuration,
    WallDisplayOptionNoSlideMatch,
    WallDisplayOptionLeftKey,
    WallDisplayOptionLeftButton,
    WallDisplayOptionRightKey,
    WallDisplayOptionRightButton,
    WallDisplayOptionUpKey,
    WallDisplayOptionUpButton,
    WallDisplayOptionDownKey,
    WallDisplayOptionDownButton,
    WallDisplayOptionNextKey,
    WallDisplayOptionNextButton,
    WallDisplayOptionPrevKey,
    WallDisplayOptionPrevButton,
    WallDisplayOptionLeftWindowKey,
    WallDisplayOptionRightWindowKey,
    WallDisplayOptionUpWindowKey,
    WallDisplayOptionDownWindowKey,
    WallDisplayOptionFlipLeftEdge,
    WallDisplayOptionFlipRightEdge,
    WallDisplayOptionFlipUpEdge,
    WallDisplayOptionFlipDownEdge,
    WallDisplayOptionNum
} WallDisplayOptions;

typedef void (*wallDisplayOptionChangeNotifyProc) (CompDisplay *display, CompOption *opt, WallDisplayOptions num);

CompOption *wallGetDisplayOption (CompDisplay *d, WallDisplayOptions num);

typedef enum
{
    WallScreenOptionMmmode,
    WallScreenOptionEdgeflipPointer,
    WallScreenOptionEdgeflipMove,
    WallScreenOptionEdgeflipDnd,
    WallScreenOptionNum
} WallScreenOptions;

typedef void (*wallScreenOptionChangeNotifyProc) (CompScreen *screen, CompOption *opt, WallScreenOptions num);

CompOption *wallGetScreenOption (CompScreen *s, WallScreenOptions num);

typedef enum
{
    MmmodeSwitchAll = 0,
    MmmodeSwitchSeparately = 1,
} WallMmmodeEnum;

Bool             wallGetShowSwitcher (CompDisplay *d);
CompOption *     wallGetShowSwitcherOption (CompDisplay *d);
void             wallSetShowSwitcherNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

Bool             wallGetMiniscreen (CompDisplay *d);
CompOption *     wallGetMiniscreenOption (CompDisplay *d);
void             wallSetMiniscreenNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

float            wallGetPreviewTimeout (CompDisplay *d);
CompOption *     wallGetPreviewTimeoutOption (CompDisplay *d);
void             wallSetPreviewTimeoutNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

int              wallGetPreviewScale (CompDisplay *d);
CompOption *     wallGetPreviewScaleOption (CompDisplay *d);
void             wallSetPreviewScaleNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

int              wallGetEdgeRadius (CompDisplay *d);
CompOption *     wallGetEdgeRadiusOption (CompDisplay *d);
void             wallSetEdgeRadiusNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

int              wallGetBorderWidth (CompDisplay *d);
CompOption *     wallGetBorderWidthOption (CompDisplay *d);
void             wallSetBorderWidthNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetOutlineColor (CompDisplay *d);
unsigned short   wallGetOutlineColorRed (CompDisplay *d);
unsigned short   wallGetOutlineColorGreen (CompDisplay *d);
unsigned short   wallGetOutlineColorBlue (CompDisplay *d);
unsigned short   wallGetOutlineColorAlpha (CompDisplay *d);
CompOption *     wallGetOutlineColorOption (CompDisplay *d);
void             wallSetOutlineColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetBackgroundGradientBaseColor (CompDisplay *d);
unsigned short   wallGetBackgroundGradientBaseColorRed (CompDisplay *d);
unsigned short   wallGetBackgroundGradientBaseColorGreen (CompDisplay *d);
unsigned short   wallGetBackgroundGradientBaseColorBlue (CompDisplay *d);
unsigned short   wallGetBackgroundGradientBaseColorAlpha (CompDisplay *d);
CompOption *     wallGetBackgroundGradientBaseColorOption (CompDisplay *d);
void             wallSetBackgroundGradientBaseColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetBackgroundGradientHighlightColor (CompDisplay *d);
unsigned short   wallGetBackgroundGradientHighlightColorRed (CompDisplay *d);
unsigned short   wallGetBackgroundGradientHighlightColorGreen (CompDisplay *d);
unsigned short   wallGetBackgroundGradientHighlightColorBlue (CompDisplay *d);
unsigned short   wallGetBackgroundGradientHighlightColorAlpha (CompDisplay *d);
CompOption *     wallGetBackgroundGradientHighlightColorOption (CompDisplay *d);
void             wallSetBackgroundGradientHighlightColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetBackgroundGradientShadowColor (CompDisplay *d);
unsigned short   wallGetBackgroundGradientShadowColorRed (CompDisplay *d);
unsigned short   wallGetBackgroundGradientShadowColorGreen (CompDisplay *d);
unsigned short   wallGetBackgroundGradientShadowColorBlue (CompDisplay *d);
unsigned short   wallGetBackgroundGradientShadowColorAlpha (CompDisplay *d);
CompOption *     wallGetBackgroundGradientShadowColorOption (CompDisplay *d);
void             wallSetBackgroundGradientShadowColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetThumbGradientBaseColor (CompDisplay *d);
unsigned short   wallGetThumbGradientBaseColorRed (CompDisplay *d);
unsigned short   wallGetThumbGradientBaseColorGreen (CompDisplay *d);
unsigned short   wallGetThumbGradientBaseColorBlue (CompDisplay *d);
unsigned short   wallGetThumbGradientBaseColorAlpha (CompDisplay *d);
CompOption *     wallGetThumbGradientBaseColorOption (CompDisplay *d);
void             wallSetThumbGradientBaseColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetThumbGradientHighlightColor (CompDisplay *d);
unsigned short   wallGetThumbGradientHighlightColorRed (CompDisplay *d);
unsigned short   wallGetThumbGradientHighlightColorGreen (CompDisplay *d);
unsigned short   wallGetThumbGradientHighlightColorBlue (CompDisplay *d);
unsigned short   wallGetThumbGradientHighlightColorAlpha (CompDisplay *d);
CompOption *     wallGetThumbGradientHighlightColorOption (CompDisplay *d);
void             wallSetThumbGradientHighlightColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetThumbHighlightGradientBaseColor (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientBaseColorRed (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientBaseColorGreen (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientBaseColorBlue (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientBaseColorAlpha (CompDisplay *d);
CompOption *     wallGetThumbHighlightGradientBaseColorOption (CompDisplay *d);
void             wallSetThumbHighlightGradientBaseColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetThumbHighlightGradientShadowColor (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientShadowColorRed (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientShadowColorGreen (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientShadowColorBlue (CompDisplay *d);
unsigned short   wallGetThumbHighlightGradientShadowColorAlpha (CompDisplay *d);
CompOption *     wallGetThumbHighlightGradientShadowColorOption (CompDisplay *d);
void             wallSetThumbHighlightGradientShadowColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetArrowBaseColor (CompDisplay *d);
unsigned short   wallGetArrowBaseColorRed (CompDisplay *d);
unsigned short   wallGetArrowBaseColorGreen (CompDisplay *d);
unsigned short   wallGetArrowBaseColorBlue (CompDisplay *d);
unsigned short   wallGetArrowBaseColorAlpha (CompDisplay *d);
CompOption *     wallGetArrowBaseColorOption (CompDisplay *d);
void             wallSetArrowBaseColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

unsigned short * wallGetArrowShadowColor (CompDisplay *d);
unsigned short   wallGetArrowShadowColorRed (CompDisplay *d);
unsigned short   wallGetArrowShadowColorGreen (CompDisplay *d);
unsigned short   wallGetArrowShadowColorBlue (CompDisplay *d);
unsigned short   wallGetArrowShadowColorAlpha (CompDisplay *d);
CompOption *     wallGetArrowShadowColorOption (CompDisplay *d);
void             wallSetArrowShadowColorNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

Bool             wallGetAllowWraparound (CompDisplay *d);
CompOption *     wallGetAllowWraparoundOption (CompDisplay *d);
void             wallSetAllowWraparoundNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

float            wallGetSlideDuration (CompDisplay *d);
CompOption *     wallGetSlideDurationOption (CompDisplay *d);
void             wallSetSlideDurationNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompMatch *      wallGetNoSlideMatch (CompDisplay *d);
CompOption *     wallGetNoSlideMatchOption (CompDisplay *d);
void             wallSetNoSlideMatchNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetLeftKey (CompDisplay *d);
void             wallSetLeftKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetLeftKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetLeftKeyOption (CompDisplay *d);
void             wallSetLeftKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetLeftButton (CompDisplay *d);
void             wallSetLeftButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetLeftButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetLeftButtonOption (CompDisplay *d);
void             wallSetLeftButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetRightKey (CompDisplay *d);
void             wallSetRightKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetRightKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetRightKeyOption (CompDisplay *d);
void             wallSetRightKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetRightButton (CompDisplay *d);
void             wallSetRightButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetRightButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetRightButtonOption (CompDisplay *d);
void             wallSetRightButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetUpKey (CompDisplay *d);
void             wallSetUpKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetUpKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetUpKeyOption (CompDisplay *d);
void             wallSetUpKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetUpButton (CompDisplay *d);
void             wallSetUpButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetUpButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetUpButtonOption (CompDisplay *d);
void             wallSetUpButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetDownKey (CompDisplay *d);
void             wallSetDownKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetDownKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetDownKeyOption (CompDisplay *d);
void             wallSetDownKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetDownButton (CompDisplay *d);
void             wallSetDownButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetDownButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetDownButtonOption (CompDisplay *d);
void             wallSetDownButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetNextKey (CompDisplay *d);
void             wallSetNextKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetNextKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetNextKeyOption (CompDisplay *d);
void             wallSetNextKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetNextButton (CompDisplay *d);
void             wallSetNextButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetNextButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetNextButtonOption (CompDisplay *d);
void             wallSetNextButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetPrevKey (CompDisplay *d);
void             wallSetPrevKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetPrevKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetPrevKeyOption (CompDisplay *d);
void             wallSetPrevKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetPrevButton (CompDisplay *d);
void             wallSetPrevButtonInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetPrevButtonTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetPrevButtonOption (CompDisplay *d);
void             wallSetPrevButtonNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetLeftWindowKey (CompDisplay *d);
void             wallSetLeftWindowKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetLeftWindowKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetLeftWindowKeyOption (CompDisplay *d);
void             wallSetLeftWindowKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetRightWindowKey (CompDisplay *d);
void             wallSetRightWindowKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetRightWindowKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetRightWindowKeyOption (CompDisplay *d);
void             wallSetRightWindowKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetUpWindowKey (CompDisplay *d);
void             wallSetUpWindowKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetUpWindowKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetUpWindowKeyOption (CompDisplay *d);
void             wallSetUpWindowKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetDownWindowKey (CompDisplay *d);
void             wallSetDownWindowKeyInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetDownWindowKeyTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetDownWindowKeyOption (CompDisplay *d);
void             wallSetDownWindowKeyNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetFlipLeftEdge (CompDisplay *d);
void             wallSetFlipLeftEdgeInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetFlipLeftEdgeTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetFlipLeftEdgeOption (CompDisplay *d);
void             wallSetFlipLeftEdgeNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetFlipRightEdge (CompDisplay *d);
void             wallSetFlipRightEdgeInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetFlipRightEdgeTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetFlipRightEdgeOption (CompDisplay *d);
void             wallSetFlipRightEdgeNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetFlipUpEdge (CompDisplay *d);
void             wallSetFlipUpEdgeInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetFlipUpEdgeTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetFlipUpEdgeOption (CompDisplay *d);
void             wallSetFlipUpEdgeNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

CompAction *     wallGetFlipDownEdge (CompDisplay *d);
void             wallSetFlipDownEdgeInitiate (CompDisplay *d, CompActionCallBackProc init);
void             wallSetFlipDownEdgeTerminate (CompDisplay *d, CompActionCallBackProc term);
CompOption *     wallGetFlipDownEdgeOption (CompDisplay *d);
void             wallSetFlipDownEdgeNotify (CompDisplay *d, wallDisplayOptionChangeNotifyProc notify);

int              wallGetMmmode (CompScreen *s);
CompOption *     wallGetMmmodeOption (CompScreen *s);
void             wallSetMmmodeNotify (CompScreen *s, wallScreenOptionChangeNotifyProc notify);

Bool             wallGetEdgeflipPointer (CompScreen *s);
CompOption *     wallGetEdgeflipPointerOption (CompScreen *s);
void             wallSetEdgeflipPointerNotify (CompScreen *s, wallScreenOptionChangeNotifyProc notify);

Bool             wallGetEdgeflipMove (CompScreen *s);
CompOption *     wallGetEdgeflipMoveOption (CompScreen *s);
void             wallSetEdgeflipMoveNotify (CompScreen *s, wallScreenOptionChangeNotifyProc notify);

Bool             wallGetEdgeflipDnd (CompScreen *s);
CompOption *     wallGetEdgeflipDndOption (CompScreen *s);
void             wallSetEdgeflipDndNotify (CompScreen *s, wallScreenOptionChangeNotifyProc notify);

#ifndef GENERIC_PRIVATE_DEFINES
#define GENERIC_PRIVATE_DEFINES

#define GET_PLUGIN_CORE(object, plugin) \
    ((plugin##Core *) (object)->base.privates[plugin##CorePrivateIndex].ptr)
#define PLUGIN_CORE(object, plugin, prefix) \
    plugin##Core * prefix##c = GET_PLUGIN_CORE (object, plugin)

#define GET_PLUGIN_DISPLAY(object, plugin) \
    ((plugin##Display *) \
	(object)->base.privates[plugin##DisplayPrivateIndex].ptr)
#define PLUGIN_DISPLAY(object, plugin, prefix) \
    plugin##Display * prefix##d = GET_PLUGIN_DISPLAY (object, plugin)

#define GET_PLUGIN_SCREEN(object, parent, plugin) \
    ((plugin##Screen *) \
	(object)->base.privates[(parent)->screenPrivateIndex].ptr)
#define PLUGIN_SCREEN(object, plugin, prefix) \
    plugin##Screen * prefix##s = \
	GET_PLUGIN_SCREEN (object, \
	GET_PLUGIN_DISPLAY ((object)->display, plugin), plugin)

#define GET_PLUGIN_WINDOW(object, parent, plugin) \
    ((plugin##Window *) \
	(object)->base.privates[(parent)->windowPrivateIndex].ptr)
#define PLUGIN_WINDOW(object, plugin, prefix) \
    plugin##Window * prefix##w = \
	GET_PLUGIN_WINDOW  (object, \
	GET_PLUGIN_SCREEN  ((object)->screen, \
	GET_PLUGIN_DISPLAY ((object)->screen->display, plugin), plugin), plugin)

#endif

COMPIZ_END_DECLS

#endif
