+module gtk_enums
+
+in "C Header" `{
+ #include <gtk/gtk.h>
+
+`}
+
+#enum GtkArrowPlacement
+#Used to specify the placement of scroll arrows in scrolling menus.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkArrowPlacement
+extern GtkArrowPlacement `{GtkArrowPlacement`}
+ #Place one arrow on each end of the menu.
+ new both `{ return GTK_ARROWS_BOTH; `}
+
+ #Place both arrows at the top of the menu.
+ new top `{ return GTK_ARROWS_START; `}
+
+ #Place both arrows at the bottom of the menu.
+ new bottom `{ return GTK_ARROWS_END; `}
+end
+
+#enum GtkArrowType
+#Used to indicate the direction in which a GtkArrow should point.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkArrowType
+extern GtkArrowType `{GtkArrowType`}
+ #Represents an upward pointing arrow.
+ new up `{ return GTK_ARROW_UP; `}
+
+ #Represents an downward pointing arrow.
+ new down `{ return GTK_ARROW_DOWN; `}
+
+ #Represents a left pointing arrow.
+ new left `{ return GTK_ARROW_LEFT; `}
+
+ #Represents a right pointing arrow.
+ new right `{ return GTK_ARROW_RIGHT; `}
+
+ #No arrow
+ new none `{ return GTK_ARROW_NONE; `}
+end
+
+#enum GtkAttachOptions
+#Denotes the expansion properties that a widget will have when it (or its parent) is resized.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkAttachOptions
+extern GtkAttachOptions `{GtkAttachOptions`}
+ #The widget should expand to take up any extra space in its container that has been allocated.
+ new expan `{ return GTK_EXPAND; `}
+
+ #The widget should shrink as and when possible.
+ new shrink `{ return GTK_SHRINK; `}
+
+ #The widget should fill the space allocated to it.
+ new fill `{ return GTK_FILL; `}
+end
+
+#enum GtkButtonBoxStyle
+#Used to dictate the style that a GtkButtonBox uses to layout the buttons it contains.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkButtonBoxStyle
+extern GtkButtonBoxStyle `{GtkButtonBoxStyle`}
+ #Buttons are evenly spread across the box.
+ new spread `{ return GTK_BUTTONBOX_SPREAD; `}
+
+ #Buttons are placed at the edges of the box.
+ new edge `{ return GTK_BUTTONBOX_EDGE; `}
+
+ #Buttons are grouped towards the start of the box.
+ new start `{ return GTK_BUTTONBOX_START; `}
+
+ #Buttons are grouped towards the end of the box.
+ new end_of_box `{ return GTK_BUTTONBOX_END; `}
+
+ #Buttons are centered in the box
+ new center `{ return GTK_BUTTONBOX_CENTER; `}
+end
+
+#enum GtkCornerType
+#Specifies which corner a child widget should be placed in when packed into a GtkScrolledWindow. This is effectively the opposite of where the scroll bars are placed.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkCornerType
+extern GtkCornerType `{GtkCornerType`}
+ #Place the scrollbars on the right and bottom of the widget (default behaviour).
+ new top_left `{ return GTK_CORNER_TOP_LEFT; `}
+
+ #Place the scrollbars on the right and bottom of the widget (default behaviour).
+ new bottom_left `{ return GTK_CORNER_BOTTOM_LEFT; `}
+
+ #Place the scrollbars on the left and bottom of the widget.
+ new top_right `{ return GTK_CORNER_TOP_RIGHT; `}
+
+ #Place the scrollbars on the top and left of the widget.
+ new bottom_right `{ return GTK_CORNER_BOTTOM_RIGHT; `}
+end
+
+#enum GtkExpanderStyle
+#Used to specify the style of the expanders drawn by a GtkTreeView.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkExpanderStyle
+extern GtkExpanderStyle `{GtkExpanderStyle`}
+ #The style used for a collapsed subtree.
+ new collapsed `{ return GTK_EXPANDER_COLLAPSED; `}
+
+ #Intermediate style used during animation.
+ new semi_collapsed `{ return GTK_EXPANDER_SEMI_COLLAPSED; `}
+
+ #Intermediate style used during animation.
+ new semi_expanded `{ return GTK_EXPANDER_SEMI_EXPANDED; `}
+
+ #The style used for an expanded subtree.
+ new expanded `{ return GTK_EXPANDER_EXPANDED; `}
+end
+
+#enum GtkJustification
+#Used for justifying the text inside a GtkLabel widget.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkJustification
+extern GtkJustification `{GtkJustification`}
+ #The text is placed at the left edge of the label.
+ new left `{ return GTK_JUSTIFY_LEFT; `}
+
+ #The text is placed at the right edge of the label.
+ new right `{ return GTK_JUSTIFY_RIGHT; `}
+
+ #The text is placed in the center of the label.
+ new center `{ return GTK_JUSTIFY_CENTER; `}
+
+ #The text is placed is distributed across the label.
+ new fill `{ return GTK_JUSTIFY_FILL; `}
+end
+
+#enum GtkOrientation
+#Represents the orientation of widgets.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkOrientation
+extern GtkOrientation `{GtkOrientation`}
+ #The widget is in horizontal orientation.
+ new horizontal `{ return GTK_ORIENTATION_HORIZONTAL; `}
+
+ #The widget is in vertical orientation.
+ new vertical `{ return GTK_ORIENTATION_VERTICAL; `}
+end
+
+#enum GtkPackType
+#Represents the packing location GtkBox children.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkPackType
+extern GtkPackType `{GtkPackType`}
+ #The child is packed into the start of the box.
+ new start `{ return GTK_PACK_START; `}
+
+ #The child is packed into the end of the box.
+ new end_of_box `{ return GTK_PACK_END; `}
+end
+
+#enum GtkPolicyType
+#Determines when a scroll bar will be visible.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkPolicyType
+extern GtkPolicyType `{GtkPolicyType`}
+ #The scrollbar is always visible.
+ new always `{ return GTK_POLICY_ALWAYS; `}
+
+ #The scrollbar will appear and disappear as necessary.
+ new automatic `{ return GTK_POLICY_AUTOMATIC; `}
+
+ #The scrollbar will never appear.
+ new never `{ return GTK_POLICY_NEVER; `}
+end
+
+#enum GtkPositionType
+#Describes which edge of a widget a certain feature is positioned.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkPositionType
+extern GtkPositionType `{GtkPositionType`}
+ #The feature is at the left edge.
+ new left `{ return GTK_POS_LEFT; `}
+
+ #The feature is at the right edge.
+ new right `{ return GTK_POS_RIGHT; `}
+
+ #The feature is at the top edge.
+ new top `{ return GTK_POS_TOP; `}
+
+ #The feature is at the bottom edge.
+ new bottom `{ return GTK_POS_BOTTOM; `}
+end
+
+#enum GtkReliefStyle
+#Indicates the relief to be drawn around a GtkButton.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkReliefStyle
+extern GtkReliefStyle `{GtkReliefStyle`}
+ #Draw a normal relief.
+ new normal `{ return GTK_RELIEF_NORMAL; `}
+
+ #A half relief.
+ new half `{ return GTK_RELIEF_HALF; `}
+
+ #No relief.
+ new none `{ return GTK_RELIEF_NONE; `}
+end
+
+#enum GtkResizeMode
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkResizeMode
+extern GtkResizeMode `{GtkResizeMode`}
+ #Pass resize request to the parent.
+ new parent `{ return GTK_RESIZE_PARENT; `}
+
+ #Queue resizes on this widget.
+ new queue `{ return GTK_RESIZE_QUEUE; `}
+end
+
+#enum GtkSelectionMode
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkSelectionMode
+extern GtkSelectionMode `{GtkResizeMode`}
+ #No selection is possible.
+ new none `{ return GTK_SELECTION_NONE; `}
+
+ #Zero or one element may be selected.
+ new single `{ return GTK_SELECTION_SINGLE; `}
+
+ #Exactly one element is selected.
+ new browse `{ return GTK_SELECTION_BROWSE; `}
+
+ #Any number of elements may be selected.
+ new multiple `{ return GTK_SELECTION_MULTIPLE; `}
+end
+
+#enum GtkShadowType
+#Used to change the appearance of an outline typically provided by a GtkFrame.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkShadowType
+extern GtkShadowType `{GtkShadowType`}
+ #No outline.
+ new none `{ return GTK_SHADOW_NONE; `}
+
+ #The outline is bevelled inwards.
+ new shadow_in `{ return GTK_SHADOW_IN; `}
+
+ #The outline is bevelled outwards like a button.
+ new shadow_out `{ return GTK_SHADOW_OUT; `}
+
+ #The outline has a sunken 3d appearance.
+ new etched_id `{ return GTK_SHADOW_ETCHED_IN; `}
+
+ #The outline has a raised 3d appearance.
+ new etched_out `{ return GTK_SHADOW_ETCHED_OUT; `}
+end
+
+#enum GtkStateType
+#Indicates the current state of a widget; the state determines how the widget is drawn.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkStateType
+extern GtkStateType `{GtkStateType`}
+ #State during normal operation.
+ new normal `{ return GTK_STATE_NORMAL; `}
+
+ #State of a currently active widget, such as a depressed button.
+ new active `{ return GTK_STATE_ACTIVE; `}
+
+ #State indicating that the mouse pointer is over the widget and the widget will respond to mouse clicks.
+ new prelight `{ return GTK_STATE_PRELIGHT; `}
+
+ #State of a selected item, such the selected row in a list.
+ new selected `{ return GTK_STATE_SELECTED; `}
+
+ #State indicating that the widget is unresponsive to user actions.
+ new insensitive `{ return GTK_STATE_INSENSITIVE; `}
+
+ #The widget is inconsistent, such as checkbuttons or radiobuttons that aren't either set to TRUE nor FALSE, or buttons requiring the user attention.
+ new inconsistent `{ return GTK_STATE_INCONSISTENT; `}
+
+ #The widget has the keyboard focus.
+ new focused `{ return GTK_STATE_FOCUSED; `}
+end
+
+#enum GtkStateFlags
+#Describes a widget state.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkStateFlags
+extern GtkStateFlags `{GtkStateFlags`}
+ #State during normal operation.
+ new normal `{ return GTK_STATE_FLAG_NORMAL; `}
+
+ #Widget is active.
+ new active `{ return GTK_STATE_FLAG_ACTIVE; `}
+
+ #Widget has a mouse pointer over it.
+ new prelight `{ return GTK_STATE_FLAG_PRELIGHT; `}
+
+ #Widget is selected.
+ new selected `{ return GTK_STATE_FLAG_SELECTED; `}
+
+ #Widget is insensitive.
+ new insensitive `{ return GTK_STATE_INSENSITIVE; `}
+
+ #Widget is inconsistent.
+ new inconsistent `{ return GTK_STATE_FLAG_INCONSISTENT; `}
+
+ #Widget has the keyboard focus.
+ new focused `{ return GTK_STATE_FLAG_FOCUSED; `}
+end
+
+#enum GtkToolbarStyle
+#Used to customize the appearance of a GtkToolbar.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkToolbarStyle
+extern GtkToolbarStyle `{GtkToolbarStyle`}
+ #Buttons display only icons in the toolbar.
+ new icons `{ return GTK_TOOLBAR_ICONS; `}
+
+ #Buttons display only text labels in the toolbar.
+ new text `{ return GTK_TOOLBAR_TEXT; `}
+
+ #Buttons display text and icons in the toolbar.
+ new both `{ return GTK_TOOLBAR_BOTH; `}
+
+ #Buttons display icons and text alongside each other, rather than vertically stacked
+ new both_horiz `{ return GTK_TOOLBAR_BOTH_HORIZ; `}
+end
+
+#enum GtkWindowPosition
+#Window placement can be influenced using this enumeration.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkWindowPosition
+extern GtkWindowPosition `{GtkWindowPosition`}
+ #No influence is made on placement.
+ new none `{ return GTK_WIN_POS_NONE; `}
+
+ #Windows should be placed in the center of the screen.
+ new center `{ return GTK_WIN_POS_CENTER; `}
+
+ #Windows should be placed at the current mouse position.
+ new mouse `{ return GTK_WIN_POS_MOUSE; `}
+
+ #Keep window centered as it changes size, etc.
+ new center_always `{ return GTK_WIN_POS_CENTER_ALWAYS; `}
+
+ #Center the window on its transient parent.
+ new center_on_parent `{ return GTK_WIN_POS_CENTER_ON_PARENT; `}
+end
+
+#enum GtkWindowType
+#A GtkWindow can be one of these types.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkWindowType
+extern GtkWindowType `{GtkWindowType`}
+ #A regular window, such as a dialog
+ new toplevel `{ return GTK_WINDOW_TOPLEVEL; `}
+
+ #A special window such as a tooltip.
+ new popup `{ return GTK_WINDOW_POPUP; `}
+end
+
+#enum GtkSortType
+#Determines the direction of a sort.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkSortType
+extern GtkSortType `{GtkSortType`}
+ #Sorting is in ascending order.
+ new asc `{ return GTK_SORT_ASCENDING; `}
+
+ #Sorting is in descending order.
+ new desc `{ return GTK_SORT_DESCENDING; `}
+end
+
+#enum GtkBorderStyle
+#Describes how the border of a UI element should be rendered.
+#@https://developer.gnome.org/gtk3/3.2/gtk3-Standard-Enumerations.html#GtkBorderStyle
+extern GtkBorderStyle `{GtkBorderStyle`}
+ #No visible border.
+ new none `{ return GTK_BORDER_STYLE_NONE; `}
+
+ #An solid border.
+ new solid `{ return GTK_BORDER_STYLE_SOLID; `}
+
+ #An intset border.
+ new inset `{ return GTK_BORDER_STYLE_INSET; `}
+
+ #An outset border.
+ new outset `{ return GTK_BORDER_STYLE_OUTSET; `}
+end
+
+# Icon size enum
+extern GtkIconSize `{GtkIconSize`}
+ new invalid `{ return GTK_ICON_SIZE_INVALID; `}
+ new menu `{ return GTK_ICON_SIZE_MENU; `}
+ new small_toolbar `{ return GTK_ICON_SIZE_SMALL_TOOLBAR; `}
+ new large_toolbar `{ return GTK_ICON_SIZE_LARGE_TOOLBAR; `}
+ new button `{ return GTK_ICON_SIZE_BUTTON; `}
+ new dnd `{ return GTK_ICON_SIZE_DND; `}
+ new dialog `{ return GTK_ICON_SIZE_DIALOG;`}
+end