---
name: "Toplevel"
section: "3itk"
platform: "linux"
package: "itk3-doc"
version: "3.4.2-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Toplevel"
---

# Toplevel(3itk)

base class for mega-widgets in a top-level window

```

```

## NAME

Toplevel - base class for mega-widgets in a top-level window

## INHERITANCE

itk::Archetype \<- itk::Toplevel

## STANDARD OPTIONS

```
background	cursor
```

See the "options" manual entry for details on the standard options.

## WIDGET-SPECIFIC OPTIONS

```
Name:   title
Class:  Title
Command-Line Switch:    -title
```

-

  Sets the title that the window manager displays in the title bar above the window.  The default title is the null string.

  ```

  ```

## DESCRIPTION

The **Toplevel** class inherits everything from the **Archetype** class, and adds a Tk toplevel called the "hull" component to represent the body of the mega-widget.  The window class name for the hull is set to the most-specific class name for the mega-widget. The protected variable **itk\_interior** contains the window path name for the "hull" component.  Derived classes specialize this widget by packing other widget components into the hull.

Since the hull for the **Toplevel** class is implemented with a Tk toplevel, mega-widgets in the **Toplevel** class have their own toplevel window.  This class is used to create dialog boxes and other pop-up windows.

## COMPONENTS

```
Name:	hull
Class:	Toplevel
```

-

  The "hull" component acts as the body for the entire mega-widget. Other components are packed into the hull to further specialize the widget.

## EXAMPLE

The following example implements a **MessageInfo** mega-widget.  It creates a pop-up message that the user can dismiss by pushing the "Dismiss" button.

```
option add *MessageInfo.title "Notice" widgetDefault
itcl::class MessageInfo {
    inherit itk::Toplevel
    constructor {args} {
        itk_component add dismiss {
            button $itk_interior.dismiss -text "Dismiss"                 -command "destroy $itk_component(hull)"
        }
        pack $itk_component(dismiss) -side bottom -pady 4
        itk_component add separator {
            frame $itk_interior.sep -height 2 -borderwidth 1 -relief sunken
        }
        pack $itk_component(separator) -side bottom -fill x -padx 4
        itk_component add icon {
            label $itk_interior.icon -bitmap info
        }
        pack $itk_component(icon) -side left -padx 8 -pady 8
        itk_component add infoFrame {
            frame $itk_interior.info
        }
        pack $itk_component(infoFrame) -side left -expand yes             -fill both -padx 4 -pady 4
        itk_component add message {
            label $itk_interior.mesg -width 20
        } {
            usual
            rename -text -message message Text
        }
        pack $itk_component(message) -expand yes -fill both
        eval itk_initialize $args
        after idle [code $this centerOnScreen]
    }
    protected method centerOnScreen {} {
        update idletasks
        set wd [winfo reqwidth $itk_component(hull)]
        set ht [winfo reqheight $itk_component(hull)]
        set x [expr ([winfo screenwidth $itk_component(hull)]-$wd)/2]
        set y [expr ([winfo screenheight $itk_component(hull)]-$ht)/2]
        wm geometry $itk_component(hull) +$x+$y
    }
}
itk::usual MessageInfo {
    keep -background -cursor -foreground -font
    keep -activebackground -activeforeground -disabledforeground
    keep -highlightcolor -highlightthickness
}
#
# EXAMPLE:  Create a notice window:
#
MessageInfo .m -message "File not found:\n/usr/local/bin/foo"
```

## KEYWORDS

itk, Archetype, Widget, mega-widget
