#lang scribble/doc

@(require (for-label framework racket/gui))
@(require scribble/manual)

@title{@bold{Framework}: Racket GUI Application Framework}
@(defmodule framework)

@author["Robert Bruce Findler" "Matthew Flatt"]

The framework provides a number of mixins, classes and
functions designed to help you build a complete application
program on top of the @racket[racket/gui] library.

@itemize[
@item{@bold{Entire Framework}

@itemize[

@item{@racket[(require @#,racketmodname[framework])]

  This library provides all of the definitions and syntax
  described in this manual.
}
@item{@racket[(require framework/framework-sig)]
  
  This library provides the signature definitions:
  @racket[framework^], and
  @racket[framework-class^].
  The @racket[framework^] signature contains all of the 
  names of the procedures described in this manual, except
  those that begin with @racket[test:] and
  @racket[gui-utils:]. The @racket[framework-class^]
  signature contains all of the classes defined in this
  manual.
}
@item{@racket[(require framework/framework-unit)]

  This library provides one
  @racket[unit/sig]: @racket[framework@]. It exports the signature
  @racket[framework^]. It imports the @racket[mred^] signature.

}
]}
@item{
 @bold{Test Suite Engine}

@racket[(require @#,racketmodname[framework/test])]

This library provides all of the definitions beginning with
@racket[test:] described in this manual.
}
@item{ @bold{GUI Utilities}
@racket[(require @#,racketmodname[framework/gui-utils])]
    
    This libraries provides all of the definitions beginning
    with @racket[gui-utils:] described in this manual.
}
@item{ @bold{Preferences}
@racket[(require @#,racketmodname[framework/preferences])]
    
  This library provides a subset of the names of the
  @tt{framework.ss} library, namely those for
  manipulating preference settings and is designed to be
  used from @exec{racket}.

The precise set of exported names is:
@racket[preferences:snapshot?],
@racket[preferences:restore-prefs-snapshot],
@racket[preferences:get-prefs-snapshot],
@racket[exn:make-unknown-preference],
@racket[exn:unknown-preference?],
@racket[preferences:low-level-put-preferences],
@racket[preferences:get],
@racket[preferences:set],
@racket[preferences:add-callback],
@racket[preferences:set-default],
@racket[preferences:set-un/marshall], and
@racket[preferences:restore-defaults].
}

@item{@bold{Splash Screen}
       @racket[(require @#,racketmodname[framework/splash])]
       
       This library provides support for a splash screen. See
       @racketmodname[framework/splash] for more.
}

@item{@bold{Decorated Editor Snip}
@racket[(require framework/decorated-editor-snip)]

This library is here for backwards compatibility. The
functionality in it has moved into the framework proper, in
the @secref["editor-snip"] section.
}
]

@bold{Thanks}

Thanks to Shriram Krishnamurthi, Cormac Flanagan, Matthias
Felleisen, Ian Barland, Gann Bierner, Richard Cobbe, Dan
Grossman, Stephanie Weirich, Paul Steckler, Sebastian Good,
Johnathan Franklin, Mark Krentel, Corky Cartwright, Michael
Ernst, Kennis Koldewyn, Bruce Duba, and many others for
their feedback and help.

@include-section["application.scrbl"]
@include-section["autosave.scrbl"]
@include-section["canvas.scrbl"]
@include-section["color-model.scrbl"]
@include-section["color-prefs.scrbl"]
@include-section["color.scrbl"]
@include-section["comment-box.scrbl"]
@include-section["editor-snip.scrbl"]
@include-section["editor.scrbl"]
@include-section["exit.scrbl"]
@include-section["finder.scrbl"]
@include-section["frame.scrbl"]
@include-section["group.scrbl"]
@include-section["gui-utils.scrbl"]
@include-section["handler.scrbl"]
@include-section["icon.scrbl"]
@include-section["keymap.scrbl"]
@include-section["menu.scrbl"]
@include-section["mode.scrbl"]
@include-section["number-snip.scrbl"]
@include-section["panel.scrbl"]
@include-section["pasteboard.scrbl"]
@include-section["path-utils.scrbl"]
@include-section["preferences.scrbl"]
@include-section["preferences-text.scrbl"]
@include-section["scheme.scrbl"]
@include-section["text.scrbl"]
@include-section["splash.scrbl"]
@include-section["test.scrbl"]
@include-section["version.scrbl"]

@index-section[]
