-(* $Id$ *)
-
-open Gtk
-open GObj
-open GEdit
-open GData
-open GPack
-open GMisc
-open GWindow
-
-open Common
-open Utils
-
-(* external id : 'a -> 'a = "%identity" *)
-
-class virtual vprop ~name ~init ~set =
- object (self)
- val mutable s : string = init
- val name : string = name
- method private virtual parse : string -> 'a
- method get = s
- method set s' =
- if s' <> s then begin
- let v = self#parse s' in
- if (set v) then begin
- add_undo (Property ((self :> prop), s));
- s <- s'
- end
- end
- method modified = s <> init
- method name = name
- method code = s
- method virtual range : range
- method save_code = self#code
- end
-
-let invalid_prop kind name s =
- invalid_arg (Printf.sprintf "Property.%s(%s) <- %s" kind name s)
-
-class prop_enum ~values ~name ~init ~set =
- object (self)
- inherit vprop ~name ~init ~set
- method private parse s =
- try List.assoc s values
- with Not_found -> invalid_prop "enum" name s
- method range = Enum (List.map ~f:fst values)
- end
-
-(* used for radio_button groups; there is nothing to do
- in radtest when setting a radio_button group, only when writing
- code or saving *)
-class prop_enum_dyn ~values ~name ~init ~set =
- object (self)
- inherit vprop ~name ~init ~set
- method private parse s = ()
- method range = Enum (values ())
- end
-
-let bool_values =
- [ "true", true; "false", false ]
-
-let shadow_type_values : (string * Tags.shadow_type) list =
- [ "NONE", `NONE; "IN", `IN; "OUT", `OUT;
- "ETCHED_IN", `ETCHED_IN; "ETCHED_OUT", `ETCHED_OUT ]
-
-let policy_type_values : (string * Tags.policy_type) list =
- [ "ALWAYS", `ALWAYS; "AUTOMATIC", `AUTOMATIC ]
-
-let orientation_values : (string * Tags.orientation) list =
- [ "HORIZONTAL", `HORIZONTAL; "VERTICAL", `VERTICAL ]
-
-let toolbar_style_values : (string * Tags.toolbar_style) list =
- [ "ICONS", `ICONS; "TEXT", `TEXT; "BOTH", `BOTH ]
-
-let toolbar_space_style_values : (string * [`EMPTY | `LINE]) list =
- [ "EMPTY", `EMPTY; "LINE", `LINE ]
-
-let relief_style_values : (string * Tags.relief_style) list =
- [ "NORMAL", `NORMAL; "HALF", `HALF; "NONE", `NONE ]
-
-let position_values : (string * Tags.position) list =
- [ "LEFT", `LEFT; "RIGHT", `RIGHT; "TOP", `TOP; "BOTTOM", `BOTTOM ]
-
-let combo_use_arrows_values : (string * [ `NEVER | `DEFAULT | `ALWAYS ]) list =
-[ "NEVER", `NEVER; "DEFAULT", `DEFAULT; "ALWAYS", `ALWAYS ]
-
-let spin_button_update_policy_values :
- (string * Tags. spin_button_update_policy) list =
- [ "ALWAYS", `ALWAYS; "IF_VALID", `IF_VALID ]
-
-let button_box_style_values : (string * Tags.button_box_style) list =
- [ "DEFAULT_STYLE", `DEFAULT_STYLE; "SPREAD", `SPREAD; "EDGE", `EDGE;
- "START", `START; "END", `END ]
-
-let update_type_values : (string * Tags.update_type) list =
- [ "CONTINUOUS", `CONTINUOUS; "DISCONTINUOUS", `DISCONTINUOUS;
- "DELAYED", `DELAYED ]
-
-
-class prop_bool = prop_enum ~values:bool_values
-
-(*
-class prop_variant ~values ~name ~init ~set : prop =
- object
- inherit prop_enum ~values ~name ~init ~set
- method code = "`" ^ s
- end
-*)
-
-class prop_shadow = prop_enum ~values:shadow_type_values
-class prop_policy = prop_enum ~values:policy_type_values
-class prop_orientation = prop_enum ~values:orientation_values
-class prop_toolbar_style = prop_enum ~values:toolbar_style_values
-class prop_toolbar_space_style = prop_enum ~values:toolbar_space_style_values
-class prop_relief_style = prop_enum ~values:relief_style_values
-class prop_position = prop_enum ~values:position_values
-class prop_combo_use_arrows = prop_enum ~values:combo_use_arrows_values
-class prop_spin_button_update_policy = prop_enum
- ~values:spin_button_update_policy_values
-class prop_button_box_style = prop_enum ~values:button_box_style_values
-class prop_update_type = prop_enum ~values:update_type_values
-
-class prop_int ~name ~init ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse s =
- try int_of_string s with _ -> invalid_prop "int" name s
- method range = Int
- end
-
-(* NB: float_of_string doesn't raise an exception in case of error *)
-class prop_float ~name ~init ~min ~max ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse s =
- try float_of_string s with _ -> invalid_prop "float" name s
- method code =
- if String.contains s '.' || String.contains s 'e' then s
- else s ^ ".0"
- method range = Float(min,max)
- end
-
-class prop_string ~name ~init ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse s = s
- method range = String
- method code = "\"" ^ String.escaped s ^ "\""
- end
-
-class prop_adjustment ~name ~init ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse = get5floats_from_string
- method range = Adjust
- end
-
-class prop_clist_titles ~name ~init ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse = split_string ~sep:' '
- method range = CList_titles
- method code = "[ \"" ^
- String.concat ~sep:"\"; \"" (split_string ~sep:' ' s) ^ "\" ]"
- method save_code = "\"" ^ s ^ "\""
- end
-
-class prop_file ~name ~init ~set : prop =
- object
- inherit vprop ~name ~init ~set
- method private parse s = s
- method range = File
- method code = "\"" ^ String.escaped s ^ "\""
- end
-