XmNotebook(3) | Library Functions Manual | XmNotebook(3) |
XmNotebook — The Notebook widget class "XmNotebook" "widget class" "Notebook"
#include <Xm/Notebook.h>
Notebook is a manager widget that organizes its children into pages, tabs, status areas, and page scrollers to simulate a real notebook. It stacks its page children so that all page children occupy the same area like real book pages. Notebook displays visuals that look like the binding of a book and the edges of other pages around the page that is shown. Tab children simulate notebook tabs. Major tabs divide Notebook into several sections, and minor tabs subdivide these sections. Status area children provide additional information about pages such as page numbers. The page scroller child allows the user to move from page to page. Notebook also provides tab scrollers for scrolling major and minor tabs if it cannot display all tabs within its edges.
The application creates pages, tabs, status areas, and page scroller as children of the Notebook widget. Notebook creates tab scrollers when the Notebook is created.
The XmNnotebookChildType constraint resource of Notebook determines whether a child widget is a page, tab, status area, or page scroller. Any Motif widget can be a page of the Notebook. When the application creates a child of the Notebook widget without setting the child type constraint, the child becomes a page by default, unless it has the XmQTactivatable, XmQTaccessTextual, or XmQTnavigator trait. Children with the XmQTactivatable, XmQTaccessTextual, or XmQTnavigator trait become major tabs, status areas, and page scrollers, respectively.
Notebook uses the XmQTaccessTextual, XmQTactivatable, XmQTjoinSide, and XmQTnavigator traits, and installs the XmQTscrollFrame trait.
The application attaches a tab to a page by creating a tab child of the Notebook and setting the XmNpageNumber constraint to the page number of the targeted page. By the same method, a status area widget can be attached to a page. The page scroller child, on the other hand, is associated with the Notebook, not with a specific page. Therefore, there is only one valid page scroller for each Notebook.
Only one child of type XmPAGE is displayed at a time by Notebook. Other page children are hidden off-screen. When Notebook displays a particular page, it positions the previously-displayed page off-screen and puts the new page in its place. The page is resized to fit into the dimensions that Notebook has allocated to display pages.
Notebook uses the XmNcurrentPageNumber, XmNfirstPageNumber, and XmNlastPageNumber resources to determine the current page and available page number range. Only those pages whose page numbers are within the range can be displayed. Other pages cannot be displayed until the range between XmNfirstPageNumber and XmNlastPageNumber is changed to include them or their page numbers are changed to a number within the range.
If XmNfirstPageNumber and XmNlastPageNumber are not set explicitly by the application, they are set to 1 by default; Notebook sets XmNlastPageNumber to the largest page number assigned by the application thereafter by default. However, once XmNlastPageNumber is set by the application, Notebook no longer changes it even when a page with a higher page number is managed.
The XmNpageNumber constraint resource is used for specifying the page number of a page widget. It can be set to any integer. For tab and status area children, the resource is used for linking the child widget to a page. For the page scroller child, the resource has no meaning and is ignored by the Notebook.
When a page without a page number is managed, Notebook assigns it the smallest unallocated page number that is not less than the first page number and greater than the last allocated page number. When a tab or a status area without a page number is managed, the newly managed widget is assigned the page number of the most recently managed page, unless the page already has the same type of child. If the page does have the same type of child, Notebook assigns the newly managed widget a page number one greater than the most recently managed page; this new page number is now occupied. Notebook may generate a default page number greater than XmNlastPageNumber, making those pages inaccessible to the user.
Since an application can create or change page numbers, it is possible to have duplicate page numbers and empty pages. When two pages with the same page number are managed, only the more recently managed page can be displayed. Inserting a page with an existing page number does not cause a warning. The old page widget cannot be displayed until the new page widget is removed from the Notebook or until the page number of the old page widget is changed to some other number.
An empty page is a page slot where no page is inserted. Empty pages occur when a tab or status area is associated with a page number that has no matching page widget. Empty pages display the blank Notebook background unless the application provides visual information to this empty area while processing XmNpageChangedCallback.
Notebook draws lines around two sides of the top page to simulate the edges of other pages that are behind the top page. The XmNbackPagePlacement and XmNorientation resources determine which two sides have the lines drawn around them. By default, they are drawn on the bottom and right sides of the top page. The application can set resources to control how many lines are drawn and how wide the area that they are drawn in is. Applications can also choose from three styles of binding visual that simulates the binding of a Notebook. Solid or spiral bindings can be drawn by Notebook, or the application can supply a pixmap that is tiled into the binding.
A major or minor tab is a Motif widget with the XmQTactivatable trait. If a widget without the trait is created for a tab, Notebook does not provide the page activation callback. As a result, even though the tab is displayed, it cannot automatically move the associated page to the top.
Major tabs divide the Notebook pages into sections. Minor tabs subdivide these sections. Only minor tabs associated with the current section are displayed, where a section consists of the group of pages between the current major tab and the next major tab, including the current major tab but not including the page containing the next major tab. The exception to this is when there is no preceding major tab, in which case the section starts from the XmNfirstPageNumber value. A user in one major tab section does not see the minor tabs in other sections. However, all tabs are used in computing the size of the Notebook.
Unlike regular notebook tabs, tabs in the Notebook are not attached to a physical page (a widget). They are, instead, attached to a logical page (a page number). Therefore, it is possible to have a tab with an empty page. When a page with a tab is removed from the Notebook, the tab is not removed because it is still bound to a logical page. Destroying or unmanaging a page widget only erases the page and leaves an empty page. It does not tear the page out of the Notebook. To remove the tab, the application must explicitly destroy or unmanage it.
Notebook supports the XmQTjoinSide trait. A widget that has the XmQTjoinSide trait can be added to the Notebook as a Major or Minor tab and will appear to be attached to its associated page with no margins or shadows between them.
A status area is any widget that is used for describing the associated page. For example, the Label widget as a status area child can hold a simple string or a pixmap that describes a page. A status area widget is also attached to a page by the page number constraint resource. Therefore, it is possible to have multiple status area widgets for one page. Only the most recently managed status area widget for that page can be displayed. All others for that page are not unmanaged, but their sizes are used for computing the size of the Notebook. If no status area widget is provided, the Notebook displays its blank background in the status area's reserved space. Notebook does not create any default status area widget.
The page scroller of the Notebook is any widget that the application creates for scrolling pages. If the application does not create one when the Notebook is realized, Notebook creates a SpinBox widget as the default page scroller. If the application creates a new page scroller, the default page scroller is destroyed. If the application creates multiple page scrollers, only the most recently managed one can be displayed and used. All others are unmanaged.
The default SpinBox page scroller grays out one of the arrow visuals if the current page is a boundary page. If the current page is the first page, the previous arrow of the SpinBox is grayed. If the current page is the last page, the next arrow of the SpinBox is grayed.
Tab scrollers are created by the Notebook for scrolling major tabs and minor tabs. When Notebook is initialized, it creates four ArrowButtonGadgets for scrolling to the next major tab, the previous major tab, the next minor tab, and the previous minor tab. The application cannot replace these tab scrollers. The application can change all resources of these widgets except the position and the arrow direction. Tab scrollers are only visible and enabled when there is not enough space to display all the major or minor tabs appropriate to the page. Tab scrollers are also grayed out when scrolling is inappropriate. The following lists the tab scrollers that are created:
Child Widgets that XmNotebook Creates | ||
Child | Name | Widget Class |
Page Scroller | PageScroller | XmSpinBox |
Next Major Tab Scroller | MajorTabScrollerNext | XmArrowButtonGadget |
Previous Major Tab Scroller | MajorTabScrollerPrevious | XmArrowButtonGadget |
Next Minor Tab Scroller | MinorTabScrollerNext | XmArrowButtonGadget |
Previous Minor Tab Scroller | MinorTabScrollerPrevious | XmArrowButtonGadget |
When the user selects the page scroller, a major tab, or a minor tab, the value of XmNcurrentPageNumber is changed to the selected page number and XmNpageChangedCallback is invoked. After the application returns from the callback, the Notebook displays the last page child whose page number is equal to the current page number. It also displays the last matched status area child. All other pages and status areas are automatically hidden. Major tabs and minor tabs that can fit into the Notebook's edges are displayed and positioned appropriately. All other tabs are also hidden. The application can also cause a page change by calling XtSetValues on XmNcurrentPageNumber and then calling XtCallCallbacks on XmNpageChangedCallback.
The Notebook has eight different visual configurations, depending on the value of XmNbackPagePlacement and XmNorientation. These two resources determine the placement of back pages, the binding, major tabs, minor tabs, the status area, and the page scroller. The location of the binding is determined by XmNorientation. Major tabs are always placed on the back page side opposite to the binding; Minor tabs are placed on the back page display area that is visually connected to the binding. Both Major and Minor tabs are ordered so that the page numbers they access increase as they get closer to the corner where the back pages meet. The status area and the page scroller are always located on the bottom of the Notebook, inside the frame. The page scroller is always placed adjacent to a back page side. The following table shows the possible configurations and the locations of each Notebook component within the configuration. The default back page value and the default orientation are based upon XmNlayoutDirection.
Notebook Configurations | ||||
XmNbackPagePlacement | XmNorientation | Major Tabs | Status Area | Binding |
Minor Tabs | Page Scroller | |||
XmBOTTOM_RIGHT | XmHORIZONTAL | RIGHT | BOTTOM LEFT | LEFT |
BOTTOM | BOTTOM RIGHT | |||
XmBOTTOM_RIGHT | XmVERTICAL | BOTTOM | BOTTOM LEFT | TOP |
RIGHT | BOTTOM RIGHT | |||
XmBOTTOM_LEFT | XmHORIZONTAL | LEFT | BOTTOM RIGHT | RIGHT |
BOTTOM | BOTTOM LEFT | |||
XmBOTTOM_LEFT | XmVERTICAL | BOTTOM | BOTTOM RIGHT | TOP |
LEFT | BOTTOM LEFT | |||
XmTOP_RIGHT | XmHORIZONTAL | RIGHT | BOTTOM LEFT | LEFT |
TOP | BOTTOM RIGHT | |||
XmTOP_RIGHT | XmVERTICAL | TOP | BOTTOM LEFT | BOTTOM |
RIGHT | BOTTOM RIGHT | |||
XmTOP_LEFT | XmHORIZONTAL | LEFT | BOTTOM RIGHT | RIGHT |
TOP | BOTTOM LEFT | |||
XmTOP_LEFT | XmVERTICAL | TOP | BOTTOM RIGHT | BOTTOM |
LEFT | BOTTOM LEFT | |||
There are three tab groups for tab group traversal inside the Notebook: major tabs, minor tabs, and the page scroller. The application can also create additional types of tab groups within the Notebook; for example, each page added by the application is treated as a separate tab group by the traversal actions.
Notebook inherits behavior, resources, and traits from Core, Composite, Constraint, and XmManager classes.
The class pointer is xmNotebookWidgetClass.
The class name is XmNotebook.
The following table defines a set of widget resources used by the programmer to specify data. The programmer can also set the resource values for the inherited classes to set attributes for this widget. To reference a resource by name or by class in a .Xdefaults file, remove the XmN or XmC prefix and use the remaining letters. To specify one of the defined values for a resource in a .Xdefaults file, remove the Xm prefix and use the remaining letters (in either lowercase or uppercase, but include any underscores between words). The codes in the access column indicate if the given resource can be set at creation time (C), set by using XtSetValues (S), retrieved by using XtGetValues (G), or is not applicable (N/A).
XmNotebook Resource Set | ||||
Name | Class | Type | Default | Access |
XmNbackPageBackground | XmCBackPageBackground | Pixel | dynamic | CSG |
XmNbackPageForeground | XmCBackPageForeground | Pixel | dynamic | CSG |
XmNbackPageNumber | XmCBackPageNumber | Cardinal | 2 | CSG |
XmNbackPagePlacement | XmCBackPagePlacement | unsigned char | dynamic | CSG |
XmNbackPageSize | XmCBackPageSize | Dimension | 8 | CSG |
XmNbindingPixmap | XmCBindingPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
XmNbindingType | XmCBindingType | unsigned char | XmSPIRAL | CSG |
XmNbindingWidth | XmCBindingWidth | Dimension | 25 | CSG |
XmNcurrentPageNumber | XmCCurrentPageNumber | int | dynamic | CSG |
XmNfirstPageNumber | XmCFirstPageNumber | int | 1 | CSG |
XmNframeBackground | XmCFrameBackground | Pixel | dynamic | CSG |
XmNframeShadowThickness | XmCShadowThickness | Dimension | 0 | CSG |
XmNinnerMarginHeight | XmCInnerMarginHeight | Dimension | 0 | CSG |
XmNinnerMarginWidth | XmCInnerMarginWidth | Dimension | 0 | CSG |
XmNlastPageNumber | XmCLastPageNumber | int | dynamic | CSG |
XmNminorTabSpacing | XmCMinorTabSpacing | Dimension | 3 | CSG |
XmNmajorTabSpacing | XmCMajorTabSpacing | Dimension | 3 | CSG |
XmNorientation | XmCOrientation | unsigned char | XmHORIZONTAL | CSG |
XmNpageChangedCallback | XmCCallback | XtCallbackList | NULL | C |
XmNotebook Constraint Resource Set | ||||
Name | Class | Type | Default | Access |
XmNnotebookChildType | XmCNotebookChildType | unsigned char | dynamic | CG |
XmNpageNumber | XmCPageNumber | int | dynamic | CSG |
XmNresizable | XmCResizable | Boolean | True | CSG |
Notebook inherits behavior and resources from the superclasses described in the following tables. For a complete description of each resource, refer to the reference page for that superclass.
XmManager Resource Set | ||||
Name | Class | Type | Default | Access |
XmNbottomShadowColor | XmCBottomShadowColor | Pixel | dynamic | CSG |
XmNbottomShadowPixmap | XmCBottomShadowPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
XmNforeground | XmCForeground | Pixel | dynamic | CSG |
XmNhelpCallback | XmCCallback | XtCallbackList | NULL | C |
XmNhighlightColor | XmCHighlightColor | Pixel | dynamic | CSG |
XmNhighlightPixmap | XmCHighlightPixmap | Pixmap | dynamic | CSG |
XmNinitialFocus | XmCInitialFocus | Widget | NULL | CSG |
XmNlayoutDirection | XmCLayoutDirection | XmDirection | dynamic | CG |
XmNnavigationType | XmCNavigationType | XmNavigationType | XmTAB_GROUP | CSG |
XmNpopupHandlerCallback | XmCCallback | XtCallbackList | NULL | C |
XmNshadowThickness | XmCShadowThickness | Dimension | 0 | CSG |
XmNstringDirection | XmCStringDirection | XmStringDirection | dynamic | CG |
XmNtopShadowColor | XmCTopShadowColor | Pixel | dynamic | CSG |
XmNtopShadowPixmap | XmCTopShadowPixmap | Pixmap | dynamic | CSG |
XmNtraversalOn | XmCTraversalOn | Boolean | True | CSG |
XmNunitType | XmCUnitType | unsigned char | dynamic | CSG |
XmNuserData | XmCUserData | XtPointer | NULL | CSG |
Composite Resource Set | ||||
Name | Class | Type | Default | Access |
XmNchildren | XmCReadOnly | WidgetList | NULL | G |
XmNinsertPosition | XmCInsertPosition | XtOrderProc | NULL | CSG |
XmNnumChildren | XmCReadOnly | Cardinal | 0 | G |
Core Resource Set | ||||
Name | Class | Type | Default | Access |
XmNaccelerators | XmCAccelerators | XtAccelerators | dynamic | CSG |
XmNancestorSensitive | XmCSensitive | Boolean | dynamic | G |
XmNbackground | XmCBackground | Pixel | dynamic | CSG |
XmNbackgroundPixmap | XmCPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
XmNborderColor | XmCBorderColor | Pixel | XtDefaultForeground | CSG |
XmNborderPixmap | XmCPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
XmNborderWidth | XmCBorderWidth | Dimension | 0 | CSG |
XmNcolormap | XmCColormap | Colormap | dynamic | CG |
XmNdepth | XmCDepth | int | dynamic | CG |
XmNdestroyCallback | XmCCallback | XtCallbackList | NULL | C |
XmNheight | XmCHeight | Dimension | dynamic | CSG |
XmNinitialResourcesPersistent | XmCInitialResourcesPersistent | Boolean | True | C |
XmNmappedWhenManaged | XmCMappedWhenManaged | Boolean | True | CSG |
XmNscreen | XmCScreen | Screen * | dynamic | CG |
XmNsensitive | XmCSensitive | Boolean | True | CSG |
XmNtranslations | XmCTranslations | XtTranslations | dynamic | CSG |
XmNwidth | XmCWidth | Dimension | dynamic | CSG |
XmNx | XmCPosition | Position | 0 | CSG |
XmNy | XmCPosition | Position | 0 | CSG |
A pointer to the following structure is passed to callbacks for XmNpageChangedCallback.
typedef struct {
int reason;
XEvent *event;
int page_number;
Widget page_widget;
int prev_page_number;
Widget prev_page_widget; } XmNotebookCallbackStruct;
Notebook inherits translations from Manager.
Notebook accelerators are added to all major tab and minor tab children of XmNotebook. Notebook accelerators are listed below. These accelerators might not directly correspond to a translation table.
Notebook action routines are described below:
The Notebook widget has the additional behavior described below:
The bindings for virtual keys are vendor specific. For information about bindings for virtual buttons and keys, see VirtualBindings(3).
Composite(3), Constraint(3), Core(3), XmCreateNotebook(3), XmManager(3), XmNotebookGetPageInfo(3), XmVaCreateNotebook(3), and XmVaCreateManagedNotebook(3).