sig
  class type ['vertex, 'edge, 'cluster] view =
    object
      val obj : GnomeCanvas.canvas Gtk.obj
      method aa : bool
      method adapt_zoom : unit -> unit
      method add : GObj.widget -> unit
      method all_children : GObj.widget list
      method as_widget : Gtk.widget Gtk.obj
      method bin_window : Gdk.window
      method border_width : int
      method c2w : cx:int -> cy:int -> float * float
      method center_node : 'vertex DGraphViewItem.view_item -> unit
      method children : GObj.widget list
      method coerce : GObj.widget
      method connect : GContainer.container_signals
      method connect_highlighting_event : unit -> unit
      method dehighlight : 'vertex DGraphViewItem.view_item -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method dst :
        'edge DGraphViewItem.view_item -> 'vertex DGraphViewItem.view_item
      method event : GObj.event_ops
      method find_edge :
        'vertex DGraphViewItem.view_item ->
        'vertex DGraphViewItem.view_item -> 'edge DGraphViewItem.view_item
      method focus : GContainer.focus
      method freeze : unit -> unit
      method get_center_scroll_region : bool
      method get_cluster : 'cluster -> 'cluster DGraphViewItem.view_item
      method get_edge : 'edge -> 'edge DGraphViewItem.view_item
      method get_item_at : x:float -> y:float -> GnoCanvas.base_item
      method get_node : 'vertex -> 'vertex DGraphViewItem.view_item
      method get_oid : int
      method get_scroll_offsets : int * int
      method get_scroll_region : float array
      method hadjustment : GData.adjustment
      method height : int
      method highlight :
        ?color:int32 * int32 -> 'vertex DGraphViewItem.view_item -> unit
      method iter_associated_vertex :
        ('vertex DGraphViewItem.view_item -> unit) ->
        'vertex DGraphViewItem.view_item -> unit
      method iter_clusters :
        ('cluster DGraphViewItem.view_item -> unit) -> unit
      method iter_edges :
        ('vertex DGraphViewItem.view_item ->
         'vertex DGraphViewItem.view_item -> unit) ->
        unit
      method iter_edges_e : ('edge DGraphViewItem.view_item -> unit) -> unit
      method iter_nodes : ('vertex DGraphViewItem.view_item -> unit) -> unit
      method iter_pred :
        ('vertex DGraphViewItem.view_item -> unit) ->
        'vertex DGraphViewItem.view_item -> unit
      method iter_pred_e :
        ('edge DGraphViewItem.view_item -> unit) ->
        'vertex DGraphViewItem.view_item -> unit
      method iter_succ :
        ('vertex DGraphViewItem.view_item -> unit) ->
        'vertex DGraphViewItem.view_item -> unit
      method iter_succ_e :
        ('edge DGraphViewItem.view_item -> unit) ->
        'vertex DGraphViewItem.view_item -> unit
      method mem_edge :
        'vertex DGraphViewItem.view_item ->
        'vertex DGraphViewItem.view_item -> bool
      method misc : GObj.misc_ops
      method model : ('vertex, 'edge, 'cluster) DGraphModel.abstract_model
      method move : GObj.widget -> x:int -> y:int -> unit
      method put : GObj.widget -> x:int -> y:int -> unit
      method remove : GObj.widget -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method root : GnoCanvas.group
      method scroll_to : x:int -> y:int -> unit
      method set_border_width : int -> unit
      method set_center_scroll_region : bool -> unit
      method set_hadjustment : GData.adjustment -> unit
      method set_height : int -> unit
      method set_pixels_per_unit : float -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_scroll_region :
        x1:float -> y1:float -> x2:float -> y2:float -> unit
      method set_vadjustment : GData.adjustment -> unit
      method set_width : int -> unit
      method set_zoom_padding : float -> unit
      method src :
        'edge DGraphViewItem.view_item -> 'vertex DGraphViewItem.view_item
      method thaw : unit -> unit
      method update_now : unit -> unit
      method vadjustment : GData.adjustment
      method w2c : wx:float -> wy:float -> int * int
      method w2c_affine : float array
      method w2c_d : wx:float -> wy:float -> float * float
      method width : int
      method window_to_world : winx:float -> winy:float -> float * float
      method world_to_window : wox:float -> woy:float -> float * float
      method zoom_factor : float
      method zoom_in : unit -> unit
      method zoom_out : unit -> unit
      method zoom_to : float -> unit
    end
  module type S =
    sig
      type vertex
      type edge
      type cluster
      val view :
        ?aa:bool ->
        ?delay_node:(DGraphView.S.vertex -> bool) ->
        ?delay_edge:(DGraphView.S.edge -> bool) ->
        ?delay_cluster:(DGraphView.S.cluster -> bool) ->
        ?border_width:int ->
        ?width:int ->
        ?height:int ->
        ?packing:(GObj.widget -> unit) ->
        ?show:bool ->
        (DGraphView.S.vertex, DGraphView.S.edge, DGraphView.S.cluster)
        DGraphModel.abstract_model ->
        (DGraphView.S.vertex, DGraphView.S.edge, DGraphView.S.cluster)
        DGraphView.view
    end
  module Make :
    functor (V : Sig.HASHABLE) (E : Sig.HASHABLE) (C : Sig.HASHABLE->
      sig
        type vertex = V.t
        type edge = E.t
        type cluster = C.t
        val view :
          ?aa:bool ->
          ?delay_node:(vertex -> bool) ->
          ?delay_edge:(edge -> bool) ->
          ?delay_cluster:(cluster -> bool) ->
          ?border_width:int ->
          ?width:int ->
          ?height:int ->
          ?packing:(GObj.widget -> unit) ->
          ?show:bool ->
          (vertex, edge, cluster) DGraphModel.abstract_model ->
          (vertex, edge, cluster) view
      end
end