module HTk.Kernel.GUIObjectKind (

  ObjectKind(..),
  CanvasItemKind(..),
  MenuItemKind(..)

) where

import HTk.Kernel.GUIValue
import HTk.Kernel.Geometry
import HTk.Kernel.Resources
import HTk.Kernel.GUIObjectName


-- -----------------------------------------------------------------------
--  OBJECT Kind
-- -----------------------------------------------------------------------

data ObjectKind =
    FRAME
  | LABEL
  | MESSAGE
  | BUTTON
  | CHECKBUTTON
  | RADIOBUTTON
  | MENUBUTTON
  | MENU
  | MENUITEM MenuItemKind Int             -- Tcl ID
  | OPTIONMENU [GUIVALUE]                 -- unpacked elements
  | LISTBOX [GUIVALUE]                    -- unpacked elements
  | SEPARATOR
  | ENTRY
  | TEXT GUIVALUE                         -- unpacked lines of text
  | CANVAS
  | SCALE
  | SCROLLBAR
  | TOPLEVEL
  | TEXTTAG [GUIVALUE]
  | EMBEDDEDTEXTWIN GUIVALUE ObjectName
  | CANVASITEM CanvasItemKind Coord
  | POSTSCRIPT
  | SESSION
  | GRAPH
  | ABSTRACT
  | WIDGET String
  | NOTEBOOK
  | NOTEBOOKPAGE String                   -- title
  | LABELFRAME
  | PANEDWINDOW Orientation               -- orientation of panes
  | WINDOWPANE
  | COMBOBOX Bool                         -- editable
  | BOX Orientation Flexibility
  | SUBWIDGET ObjectKind String

data CanvasItemKind =
    ARC
  | LINE
  | POLYGON
  | RECTANGLE
  | OVAL
  | BITMAPITEM
  | IMAGEITEM
  | TEXTITEM
  | CANVASTAG
  | EMBEDDEDCANVASWIN

data MenuItemKind =
    MENUCASCADE
  | MENUCOMMAND
  | MENUCHECKBUTTON
  | MENURADIOBUTTON
  | MENUSEPARATOR


-- -----------------------------------------------------------------------
--  Unparsing of Widget Kind
-- -----------------------------------------------------------------------

instance Show ObjectKind where
  showsPrec d p r =
    (case p of
       FRAME -> "frame"
       LABEL -> "label"
       MESSAGE -> "message"
       CHECKBUTTON -> "checkbutton"
       BUTTON -> "button"
       RADIOBUTTON -> "radiobutton"
       MENUBUTTON -> "menubutton"
       MENU -> "menu"
       (OPTIONMENU _) -> "tk_optionMenu"
       (LISTBOX _) -> "listbox"
       SEPARATOR -> "separator"
       ENTRY -> "entry"
       (TEXT _) -> "text"
       CANVAS -> "canvas"
       SCALE -> "scale"
       SCROLLBAR -> "scrollbar"
       TOPLEVEL -> "toplevel"
       (CANVASITEM ARC _) -> "arc"
       (CANVASITEM LINE _) -> "line"
       (CANVASITEM POLYGON _) -> "polygon"
       (CANVASITEM RECTANGLE _) -> "rectangle"
       (CANVASITEM OVAL _) -> "oval"
       (CANVASITEM BITMAPITEM _) -> "bitmap"
       (CANVASITEM IMAGEITEM _) -> "image"
       (CANVASITEM TEXTITEM _) -> "text"
       (CANVASITEM CANVASTAG _) -> "tag"
       (CANVASITEM EMBEDDEDCANVASWIN _) -> "window"
       (MENUITEM MENUCASCADE _) -> "cascade"
       (MENUITEM MENUCOMMAND _) -> "command"
       (MENUITEM MENUCHECKBUTTON _) -> "checkbutton"
       (MENUITEM MENURADIOBUTTON _) -> "radiobutton"
       (MENUITEM MENUSEPARATOR _) -> "separator"
       (EMBEDDEDTEXTWIN _ _) -> "window"
       (TEXTTAG _) -> "tag"
       (WIDGET kind) -> kind
       NOTEBOOK -> "tixNoteBook"
       NOTEBOOKPAGE _ -> ""
       LABELFRAME -> "tixLabelFrame"
       PANEDWINDOW _ -> "tixPanedWindow"
       COMBOBOX _ -> "tixComboBox"
       WINDOWPANE -> ""
       BOX _ _ -> "frame"
       SUBWIDGET subKind megaName -> megaName ++ " subwidget " ++ show subKind)
    ++ r