sig
  type ressource_kind = [ `Dir | `File | `None ]
  type ressource_name = string
  type view_name = string
  class type view =
    object
      method changed : bool
      method close : bool
      method name : Cam_view.view_name
      method refresh : unit
      method ressource : Cam_view.ressource_name
      method ressource_kind : Cam_view.ressource_kind
    end
  class type view_factory =
    object
      method create :
        Cam_view.ressource_name ->
        string array -> Cam_view.view * GWindow.window
      method create_no_window :
        GWindow.window ->
        Cam_view.ressource_name ->
        string array -> Cam_view.view * GObj.widget
      method known_ressource_kinds : Cam_view.ressource_kind list
      method name : Cam_view.view_name
    end
  val register_factory : Cam_view.view_factory -> unit
  val open_ressource :
    Cam_view.ressource_name ->
    Cam_view.view_name -> string array -> Cam_view.view
  val open_ressource_no_window :
    Cam_view.ressource_name ->
    Cam_view.view_name ->
    string array -> GWindow.window -> (GObj.widget -> unit) -> Cam_view.view
  val refresh_ressource_views : Cam_view.ressource_name -> unit
  val close_ressource_views : Cam_view.ressource_name -> unit
  val available_views :
    ?kind:Cam_view.ressource_kind -> unit -> Cam_view.view_name list
  class view_window :
    ?allow_shrink:bool ->
    ?width:int ->
    ?height:int ->
    title:string ->
    Cam_view.view ->
    object method vbox : GPack.box method window : GWindow.window end
  val create_view_window :
    ?width:int ->
    ?height:int -> title:string -> Cam_view.view -> Cam_view.view_window
end