You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
988 lines
58 KiB
988 lines
58 KiB
# -*- tcl -*- |
|
# Maintenance Instruction: leave the 999999.xxx.x as is and use punkshell 'dev make' or bin/punkmake to update from <pkg>-buildversion.txt |
|
# module template: punkshell/src/decktemplates/vendor/punk/modules/template_module-0.0.3.tm |
|
# |
|
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. |
|
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
# (C) 2025 |
|
# |
|
# @@ Meta Begin |
|
# Application punk::args::moduledoc::tkcore 999999.0a1.0 |
|
# Meta platform tcl |
|
# Meta license MIT |
|
# @@ Meta End |
|
|
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
# doctools header |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
#*** !doctools |
|
#[manpage_begin punkshell_module_punk::args::moduledoc::tkcore 0 999999.0a1.0] |
|
#[copyright "2025"] |
|
#[titledesc {Module API}] [comment {-- Name section and table of contents description --}] |
|
#[moddesc {-}] [comment {-- Description at end of page heading --}] |
|
#[require punk::args::moduledoc::tkcore] |
|
#[keywords module] |
|
#[description] |
|
#[para] - |
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
#*** !doctools |
|
#[section Overview] |
|
#[para] overview of punk::args::moduledoc::tkcore |
|
#[subsection Concepts] |
|
#[para] - |
|
|
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
## Requirements |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
#*** !doctools |
|
#[subsection dependencies] |
|
#[para] packages used by punk::args::moduledoc::tkcore |
|
#[list_begin itemized] |
|
|
|
package require Tcl 8.6- |
|
package require punk::args |
|
package require punk::ansi |
|
package require textblock |
|
#*** !doctools |
|
#[item] [package {Tcl 8.6}] |
|
#[item] [package {punk::args}] |
|
#[item] [package {textblock}] |
|
|
|
|
|
#*** !doctools |
|
#[list_end] |
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
#*** !doctools |
|
#[section API] |
|
|
|
|
|
|
|
tcl::namespace::eval punk::args::moduledoc::tkcore { |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
# Base namespace |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
#*** !doctools |
|
#[subsection {Namespace punk::args::moduledoc::tkcore}] |
|
#[para] Core API functions for punk::args::moduledoc::tkcore |
|
#[list_begin definitions] |
|
|
|
tcl::namespace::export {[a-z]*} ;# Convention: export all lowercase |
|
|
|
set A_WARN \x1b\[7m |
|
set A_RST \x1b\[0m |
|
|
|
variable manbase |
|
variable manbase_ext |
|
set patch [info patchlevel] |
|
lassign [split $patch .] major |
|
if {$major < 9} { |
|
set manbase "https://tcl.tk/man/tcl/TkCmd" |
|
set manbase_ext .htm |
|
} else { |
|
set manbase "https://tcl.tk/man/tcl9.0/TkCmd" |
|
set manbase_ext .html |
|
} |
|
proc manpage {cmd} { |
|
variable manbase |
|
variable manbase_ext |
|
return ${manbase}/${cmd}${manbase_ext} |
|
} |
|
|
|
|
|
variable PUNKARGS |
|
|
|
|
|
namespace eval argdoc { |
|
tcl::namespace::import ::punk::ansi::a+ |
|
tcl::namespace::import ::punk::args::moduledoc::tkcore::manpage |
|
# -- --- --- --- --- |
|
#non colour SGR codes |
|
# we can use these directly via ${$I} etc without marking a definition with @dynamic |
|
#This is because they don't need to change when colour switched on and off. |
|
set I [a+ italic] |
|
set NI [a+ noitalic] |
|
set B [a+ bold] |
|
set N [a+ normal] |
|
set T [a+ bold underline] |
|
set NT [a+ normal nounderline] |
|
# -- --- --- --- --- |
|
namespace import ::punk::args::helpers::* |
|
|
|
#proc example {str} { |
|
# #sample override of punk::args::helpers::example (without highlighting and inner placeholder processing) |
|
# set str [string trimleft $str \n] |
|
# set block [punk::ansi::ansiwrap Web-gray [textblock::frame -ansibase [a+ Web-gray bold white] -ansiborder [a+ black White] -boxlimits {hl} -type block $str]] |
|
# set result [textblock::bookend_lines $block [a] "[a defaultbg] [a]"] |
|
# return $result |
|
#} |
|
} |
|
|
|
|
|
namespace eval argdoc { |
|
lappend PUNKARGS [list { |
|
@id -id "(default)::punk::args::moduledoc::tkcore::common" |
|
} "@doc -name Manpage: -url [manpage index]" ] |
|
|
|
|
|
#list all tk_standardoptions |
|
#use punk::args::resolved_spec |
|
#{${[punk::args::resolved_def -types opts (default)::punk::args::moduledoc::tkcore::tk_standardoptions -disabledforeground -font ...]}} |
|
::punk::args::define { |
|
@id -id "(default)::punk::args::moduledoc::tkcore::tk_standardoptions" |
|
-activebackground -type colour -help\ |
|
"Specifies background color to use when drawing active elements. An element (a widget or portion of a widget) |
|
is active if the mouse cursor is positioned over the element and pressing a mouse button will cause some |
|
action to occur. If strict Motif compliance has been requested by setting the tk_strictMotif variable, this |
|
option will normally be ignored; the normal background color will be used instead. For some elements on |
|
Windows and Macintosh systems, the active color will only be used while mouse button 1 is pressed over the |
|
element." |
|
-activeborderwidth -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the width of the 3-D border drawn around active elements. See above |
|
for definition of active elements. The value may have any of the forms acceptable to Tk_GetPixels. This option |
|
is typically only available in widgets displaying more than one element at a time (e.g. menus but not buttons)." |
|
-activeforeground -type colour -help\ |
|
"Specifies foreground color to use when drawing active elements. See above for definition of active elements." |
|
-activerelief -type string -choicecolumns 6 -choices {raised sunken flat ridge solid groove} -help\ |
|
"Specifies the 3-D effect desired for the active item of the widget. See the -relief option for details." |
|
-anchor -type string -choicecolumns 9 -choices {n ne e se s sw w nw center} -help\ |
|
"Specifies how the information in a widget (e.g. text or a bitmap) is to be displayed in the widget. |
|
For example, ${$B}nw${$N} means display the information such that its top-left corner is at the top-left corner of the widget." |
|
-background|-bg -type colour -help\ |
|
"Specifies the normal background color to use when displaying the widget." |
|
-bitmap -type bmp -help\ |
|
"Specifies a bitmap to display in the widget, in any of the forms acceptable to Tk_GetBitmap. The exact |
|
way in which the bitmap is displayed may be affected by other options such as -anchor or -justify. |
|
Typically, if this option is specified then it overrides other options that specify a textual value to |
|
display in the widget but this is controlled by the ${$B}-compound${$N} option; the -bitmap option may be reset to |
|
an empty string to re-enable a text display. In widgets that support both -bitmap and -image options, |
|
-image will usually override -bitmap." |
|
-borderwidth|-bd -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the width of the 3-D border to draw around the outside of the |
|
widget (if such a border is being drawn; the -relief option typically determines this). The value may |
|
also be used when drawing 3-D effects in the interior of the widget. The value may have any of the |
|
forms acceptable to Tk_GetPixels." |
|
#todo - something better for large -choices lists |
|
#list of cursors is large, not obtainable dynamically, and has some that are platform specific. |
|
-cursor -type string -help\ |
|
"" |
|
-compound -type string -choicecolumns 6 -choices {none bottom top left right center} -help\ |
|
"Specifies if the widget should display text and bitmaps/images at the same time, and if so, where the |
|
bitmap/image should be placed relative to the text. Must be one of the values none, bottom, top, left, |
|
right, or center. For example, the (default) value none specifies that the bitmap or image should |
|
(if defined) be displayed instead of the text, the value ${$B}left${$N} specifies that the bitmap or image should |
|
be displayed to the left of the text, and the value ${$B}center${$N} specifies that the bitmap or image should be |
|
displayed on top of the text." |
|
-disabledforeground -type colour|literal() -help\ |
|
"Specifies foreground color to use when drawing a disabled element. If the option is specified |
|
as an empty string (which is typically the case on monochrome displays), disabled elements |
|
are drawn with the normal foreground color but they are dimmed by drawing them with a |
|
stippled fill pattern." |
|
-exportselection -type boolean -help\ |
|
"Specifies whether or not a selection in the widget should also be the X selection. The value may have any of the |
|
forms accepted by Tcl_GetBoolean, such as true, false, 0, 1, yes, or no. If the selection is exported, then |
|
selecting in the widget deselects the current X selection, selecting outside the widget deselects any widget |
|
selection, and the widget will respond to selection retrieval requests when it has a selection. The default is |
|
usually for widgets to export selections." |
|
-font -type tk_font -help\ |
|
"Specifies the font to use when drawing text inside the widget. The value may have any of the |
|
forms described in the font manual page under FONT DESCRIPTION." |
|
-foreground|-fg -type colour -help\ |
|
"Specifies the normal foreground color to use when displaying the widget." |
|
-highlightbackground -type colour -help\ |
|
"Specifies the color to display in the traversal highlight region when the widget does not have the input focus." |
|
-highlightcolor -type colour -help\ |
|
"Specifies the color to use for the traversal highlight rectangle that is drawn around the widget when it has the |
|
input focus." |
|
-highlightthicknes -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the width of the highlight rectangle to draw around the outside of the |
|
widget when it has the input focus. The value may have any of the forms acceptable to Tk_GetPixels. If the |
|
value is zero, no focus highlight is drawn around the widget." |
|
-image -type string -help\ |
|
"Specifies an image to display in the widget, which must have been created with the image create command. |
|
Typically, if the -image option is specified then it overrides other options that specify a bitmap or textual |
|
value to display in the widget, though this is controlled by the -compound option; the -image option may be |
|
reset to an empty string to re-enable a bitmap or text display." |
|
-insertbackground -type colour -help\ |
|
"Specifies the color to use as background in the area covered by the insertion cursor. This color will normally |
|
override either the normal background for the widget (or the selection background if the insertion cursor |
|
happens to fall in the selection)." |
|
-insertborderwidth -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the width of the 3-D border to draw around the insertion cursor. |
|
The value may have any of the forms acceptable to Tk_GetPixels." |
|
-insertofftime -type integer -typesynopsis {${$I}ms${$NI}} -range {0 ""} -help\ |
|
"Specifies a non-negative integer value indicating the number of milliseconds the insertion cursor should remain |
|
“off” in each blink cycle. If this option is zero then the cursor does not blink: it is on all the time." |
|
-insertontime -type integer -typesynopsis {${$I}ms${$NI}} -range {0 ""} -help\ |
|
"Specifies a non-negative integer value indicating the number of milliseconds the insertion cursor should remain |
|
“on” in each blink cycle." |
|
-insertwidth -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the total width of the insertion cursor. The value may have any of the |
|
forms acceptable to Tk_GetPixels. If a border has been specified for the insertion cursor (using the |
|
-insertborderwidth option), the border will be drawn inside the width specified by the -insertwidth option." |
|
-jump -type boolean -help\ |
|
"For widgets with a slider that can be dragged to adjust a value, such as scrollbars, this option determines when |
|
notifications are made about changes in the value. The option's value must be a boolean of the form accepted by |
|
Tcl_GetBoolean. If the value is false, updates are made continuously as the slider is dragged. If the value is |
|
true, updates are delayed until the mouse button is released to end the drag; at that point a single |
|
notification is made (the value “jumps” rather than changing smoothly)." |
|
-justify -type string -choicecolumns 3 -choices {left center right} -help\ |
|
"When there are multiple lines of text displayed in a widget, this option determines how the lines line up with |
|
each other. Must be one of left, center, or right. Left means that the lines' left edges all line up, center |
|
means that the lines' centers are aligned, and right means that the lines' right edges line up." |
|
-orient -type string -choiceprefix 1 -choicecolumns 2 -choices {horizontal vertical} -help\ |
|
"For widgets that can lay themselves out with either a horizontal or vertical orientation, such as scrollbars, |
|
this option specifies which orientation should be used. Must be either horizontal or vertical or an |
|
abbreviation of one of these." |
|
-padx -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating how much extra space to request for the widget in the X-direction. |
|
The value may have any of the forms acceptable to Tk_GetPixels. When computing how large a window it needs, |
|
the widget will add this amount to the width it would normally need (as determined by the width of the things |
|
displayed in the widget); if the geometry manager can satisfy this request, the widget will end up with extra |
|
internal space to the left and/or right of what it displays inside. Most widgets only use this option for |
|
padding text: if they are displaying a bitmap or image, then they usually ignore padding options." |
|
-pady -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating how much extra space to request for the widget in the Y-direction. |
|
The value may have any of the forms acceptable to Tk_GetPixels. When computing how large a window it needs, |
|
the widget will add this amount to the height it would normally need (as determined by the height of the things |
|
displayed in the widget); if the geometry manager can satisfy this request, the widget will end up with extra |
|
internal space above and/or below what it displays inside. Most widgets only use this option for padding text: |
|
if they are displaying a bitmap or image, then they usually ignore padding options." |
|
-placeholder -type string -help\ |
|
"Specifies a help text string to display if no text is otherwise displayed, that is when the widget is empty. |
|
The placeholder text is displayed using the values of the -font and -justify options." |
|
-placeholderforeground -type colour -help\ |
|
"Specifies the foreground color to use when the placeholder text is displayed. |
|
The default color is platform-specific." |
|
-relief -type string -choicecolumns 6 -choices {raised sunken flat ridge solid groove} -help\ |
|
"Specifies the 3-D effect desired for the widget. Acceptable values are raised, sunken, flat, ridge, solid, and |
|
groove. The value indicates how the interior of the widget should appear relative to its exterior; for example, |
|
raised means the interior of the widget should appear to protrude from the screen, relative to the exterior of |
|
the widget." |
|
-repeatdelay -type integer -typesynopsis {${$I}ms${$NI}} -help\ |
|
"Specifies the number of milliseconds a button or key must be held down before it begins to auto-repeat. Used, |
|
for example, on the up- and down-arrows in scrollbars." |
|
-repeatinterval -type integer -typesynopsis {${$I}ms${$NI}} -help\ |
|
"Used in conjunction with -repeatdelay: once auto-repeat begins, this option determines the number of |
|
milliseconds between auto-repeats." |
|
-selectbackground -type colour -help\ |
|
"Specifies the background color to use when displaying selected items." |
|
-selectborderwidth -type tk_screen_units -help\ |
|
"Specifies a non-negative value indicating the width of the 3-D border to draw around selected items. |
|
The value may have any of the forms acceptable to Tk_GetPixels." |
|
-selectforeground -type colour -help\ |
|
"Specifies the foreground color to use when displaying selected items." |
|
-setgrid -type boolean -help\ |
|
"Specifies a boolean value that determines whether this widget controls the resizing grid for its top-level window. |
|
This option is typically used in text widgets, where the information in the widget has a natural size (the size |
|
of a character) and it makes sense for the window's dimensions to be integral numbers of these units. These |
|
natural window sizes form a grid. If the -setgrid option is set to true then the widget will communicate with the |
|
window manager so that when the user interactively resizes the top-level window that contains the widget, the |
|
dimensions of the window will be displayed to the user in grid units and the window size will be constrained to |
|
integral numbers of grid units. See the section GRIDDED GEOMETRY MANAGEMENT in the wm manual entry for more |
|
details." |
|
-takefocus -type literal(0)|literal(1)|literal() -help\ |
|
"Determines whether the window accepts the focus during keyboard traversal (e.g., Tab and Shift-Tab). Before |
|
setting the focus to a window, the traversal scripts consult the value of the -takefocus option. A value of 0 |
|
means that the window should be skipped entirely during keyboard traversal. 1 means that the window should |
|
receive the input focus as long as it is viewable (it and all of its ancestors are mapped). An empty value for |
|
the option means that the traversal scripts make the decision about whether or not to focus on the window: the |
|
current algorithm is to skip the window if it is disabled, if it has no key bindings, or if it is not viewable. |
|
If the value has any other form, then the traversal scripts take the value, append the name of the window to it |
|
(with a separator space), and evaluate the resulting string as a Tcl script. The script must return 0, 1, or an |
|
empty string: a 0 or 1 value specifies whether the window will receive the input focus, and an empty string |
|
results in the default decision described above. Note that this interpretation of the option is defined entirely |
|
by the Tcl scripts that implement traversal: the widget implementations ignore the option entirely, so you can |
|
change its meaning if you redefine the keyboard traversal scripts." |
|
-text -type string -help\ |
|
"Specifies a string to be displayed inside the widget. The way in which the string is displayed depends on the |
|
particular widget and may be determined by other options, such as -anchor or -justify." |
|
-textvariable -type string -help\ |
|
"Specifies the name of a global variable. The value of the variable is a text string to be displayed inside the |
|
widget; if the variable value changes then the widget will automatically update itself to reflect the new value. |
|
The way in which the string is displayed in the widget depends on the particular widget and may be determined by |
|
other options, such as -anchor or -justify." |
|
-troughcolor -type colour -help\ |
|
"Specifies the color to use for the rectangular trough areas in widgets such as scrollbars and scales. This option |
|
is ignored for scrollbars on Windows (native widget does not recognize this option)." |
|
-underline -type indexexpression -help\ |
|
"Specifies the integer index of a character to underline in the widget. This option is used by the default |
|
bindings to implement keyboard traversal for menu buttons and menu entries. 0 corresponds to the first character |
|
of the text displayed in the widget, 1 to the next character, and so on. end corresponds to the last character, |
|
end-1 to the before last character, and so on." |
|
-wraplength -type tk_screen_units -help\ |
|
"For widgets that can perform word-wrapping, this option specifies the maximum line length. Lines that would |
|
exceed this length are wrapped onto the next line, so that no line is longer than the specified length. The |
|
value may be specified in any of the standard forms for screen distances. If this value is negative or zero |
|
then no wrapping is done: lines will break only at newline characters in the text." |
|
-xscrollcommand -type list -typesynopsis {${$I}cmdprefix${$NI}} -help\ |
|
"Specifies the prefix for a command used to communicate with horizontal scrollbars. When the view in the widget's |
|
window changes (or whenever anything else occurs that could change the display in a scrollbar, such as a change |
|
in the total size of the widget's contents), the widget will generate a Tcl command by concatenating the scroll |
|
command and two numbers. Each of the numbers is a fraction between 0 and 1, which indicates a position in the |
|
document. 0 indicates the beginning of the document, 1 indicates the end, .333 indicates a position one third |
|
the way through the document, and so on. The first fraction indicates the first information in the document |
|
that is visible in the window, and the second fraction indicates the information just after the last portion |
|
that is visible. The command is then passed to the Tcl interpreter for execution. Typically the -xscrollcommand |
|
option consists of the path name of a scrollbar widget followed by “set”, e.g. “.x.scrollbar set”: this will |
|
cause the scrollbar to be updated whenever the view in the window changes. If this option is not specified, |
|
then no command will be executed." |
|
-yscrollcommand -type list -typesynopsis {${$I}cmdprefix${$NI}} -help\ |
|
"Specifies the prefix for a command used to communicate with vertical scrollbars. This option is treated in the |
|
same way as the -xscrollcommand option, except that it is used for vertical scrollbars and is provided by |
|
widgets that support vertical scrolling. See the description of -xscrollcommand for details on how this option |
|
is used." |
|
|
|
} "@doc -name Manpage: -url [manpage options]" |
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
lappend PUNKARGS [list { |
|
@id -id ::bell |
|
@cmd -name "Tk Builtin: bell"\ |
|
-summary\ |
|
"Ring a display's bell."\ |
|
-help\ |
|
"This command rings the bell on the display for ${$I}window${$NI} and returns an empty string. |
|
If the ${$B}-displayof${$N} option is omitted, the display of the application's main window |
|
is used by default. The command uses the current bell-related settings for the |
|
display, which may be modified with programs such as ${$B}xset${$N}. |
|
If ${$B}-nice${$N} is not specified, this command also resets the screen saver for the screen. |
|
Some screen savers will ignore this, but others will reset so that the screen |
|
becomes visible again." |
|
@opts |
|
-displayof -type stringstartswith(.) -typesynopsis window |
|
-nice -type none |
|
@values -min 0 -max 0 |
|
} "@doc -name Manpage: -url [manpage bell]" ] |
|
|
|
|
|
|
|
|
|
|
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
lappend PUNKARGS_aliases {::button ::tk::button} |
|
punk::args::define { |
|
@id -id ::tk::button |
|
@cmd -name "Tk Builtin: tk::button"\ |
|
-summary\ |
|
"Create and manipulate 'button' action widgets."\ |
|
-help\ |
|
"The ${$B}button${$N} command creates a new window (given by the ${$I}pathName${$NI} argument) and makes it into a button |
|
widget. Additional options, described above, may be specified on the command line or in the option |
|
database to configure aspects of the button such as its colors, font, text, and initial relief. The |
|
${$B}button${$N} command returns its ${$I}pathName${$NI} argument. At the time this command is invoked, there must not |
|
exist a window named ${$I}pathName${$NI}, but ${$I}pathName${$NI}'s parent must exist. |
|
A button is a widget that displays a textual string, bitmap or image. If text is displayed, it must |
|
all be in a single font, but it can occupy multiple lines on the screen (if it contains newlines or |
|
if wrapping occurs because of the ${$B}-wraplength${$N} option) and one of the characters may optionally be |
|
underlined using the ${$B}-underline${$N} option. It can display itself in either of three different ways, |
|
according to the ${$B}-state${$N} option; it can be made to appear raised, sunken, or flat; and it can be made |
|
to flash. When a user invokes the button (by pressing mouse button 1 with the cursor over the button), |
|
then the Tcl command specified in the ${$B}-command${$N} option is invoked." |
|
@leaders |
|
pathName -type tk_path |
|
|
|
|
|
@opts -type string -parsekey "" -group "STANDARD OPTIONS" -grouphelp\ |
|
"" |
|
} { |
|
${[punk::args::resolved_def -types opts (default)::punk::args::moduledoc::tkcore::tk_standardoptions\ |
|
-activebackground\ |
|
-activeforeground\ |
|
-anchor\ |
|
-background|-bg\ |
|
-bitmap\ |
|
-borderwidth|-bd\ |
|
-compound\ |
|
-cursor\ |
|
-disabledforeground\ |
|
-font\ |
|
-foreground|-fg\ |
|
-highlightbackground\ |
|
-highlightcolor\ |
|
-highlightthickness\ |
|
-image\ |
|
-justify\ |
|
-padx\ |
|
-pady\ |
|
-relief\ |
|
-takefocus\ |
|
-text\ |
|
-textvariable\ |
|
-underline\ |
|
-wraplength\ |
|
]} |
|
} { |
|
@opts -type string -parsekey "" -group "WIDGET-SPECIFIC OPTIONS" -grouphelp\ |
|
"" |
|
-command -type script -help\ |
|
"Specifies a Tcl command to associate with the button. This command is typically invoked when mouse button 1 |
|
is released over the button window." |
|
-default -type string -choices {normal active disabled} -help\ |
|
"Specifies one of three states for the default ring: normal, active, or disabled. In active state, the button |
|
is drawn with the platform specific appearance for a default button. In normal state, the button is drawn |
|
with the platform specific appearance for a non-default button, leaving enough space to draw the default |
|
button appearance. The normal and active states will result in buttons of the same size. In disabled state, |
|
the button is drawn with the non-default button appearance without leaving space for the default appearance. |
|
The disabled state may result in a smaller button than the active state." |
|
-height -type tk_screen_units -help\ |
|
"Specifies a desired height for the button. If an image or bitmap is being displayed in the button then the |
|
value is in screen units (i.e. any of the forms acceptable to Tk_GetPixels); for text it is in lines of text. |
|
If this option is not specified, the button's desired height is computed from the size of the image or bitmap |
|
or text being displayed in it." |
|
-overrelief -type string -default "" -choicecolumns 7 -choices {raised sunken flat ridge solid groove ""} -help\ |
|
"Specifies an alternative relief for the button, to be used when the mouse cursor is over the widget. This |
|
option can be used to make toolbar buttons, by configuring -relief flat -overrelief raised. If the value of |
|
this option is the empty string, then no alternative relief is used when the mouse cursor is over the button. |
|
The empty string is the default value." |
|
-state -type string -choices {normal active disabled} -help\ |
|
"Specifies one of three states for the button: normal, active, or disabled. In normal state the button is |
|
displayed using the ${$B}-foreground${$N} and ${$B}-background${$N} options. The active state is typically used when the pointer |
|
is over the button. In active state the button is displayed using the ${$B}-activeforeground${$N} and ${$B}-activebackground${$N} |
|
options. Disabled state means that the button should be insensitive: the default bindings will refuse to |
|
activate the widget and will ignore mouse button presses. In this state the ${$B}-disabledforeground${$N} and |
|
${$B}-background${$N} options determine how the button is displayed." |
|
-width -type tk_screen_units -help\ |
|
"Specifies a desired width for the button. If an image or bitmap is being displayed in the button then the |
|
value is in screen units (i.e. any of the forms acceptable to Tk_GetPixels). For a text button (no image or |
|
with -compound none) then the width specifies how much space in characters to allocate for the text label. |
|
If the width is negative then this specifies a minimum width. If this option is not specified, the button's |
|
desired width is computed from the size of the image or bitmap or text being displayed in it." |
|
|
|
|
|
|
|
} "@doc -name Manpage: -url [manpage button]"\ |
|
{ |
|
@examples -help { |
|
This is the classic Tk “Hello, World!” demonstration: |
|
${[example { |
|
${$B}button${$N} .b -text "Hello, World!" -command exit |
|
pack .b |
|
}]} |
|
|
|
This example demonstrates how to handle button accelerators: |
|
${[example { |
|
${$B}button${$N} .b1 -text Hello -underline 0 |
|
${$B}button .b2${$N} -text World -underline 0 |
|
bind . <Key-h> {.b1 flash; .b1 invoke} |
|
bind . <Key-w> {.b2 flash; .b2 invoke} |
|
pack .b1 .b2 |
|
}]} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
punk::args::define { |
|
@id -id "(widgetcommand)Class_Button cget" |
|
@cmd -name "(widgetcommand)Class_Button cget" -help\ |
|
"Returns the current value of the configuration option given by option. |
|
Option may have any of the values accepted by the button command." |
|
@leaders -min 1 -max 1 |
|
option -type string |
|
} |
|
|
|
|
|
set CLASS_BUTTON_CHOICES [list cget configure flash invoke] |
|
#manual synopses for subcommands not yet defined |
|
set CLASS_BUTTON_CHOICELABELS [subst -novariables { |
|
}] |
|
set CLASS_BUTTON_CHOICEINFO [dict create] |
|
foreach sub $CLASS_BUTTON_CHOICES { |
|
#default for all |
|
dict set CLASS_BUTTON_CHOICEINFO $sub {{doctype native}} |
|
} |
|
foreach id [punk::args::get_ids "(widgetcommand)Class_Button *"] { |
|
if {[llength $id] == 2} { |
|
lassign $id _ sub |
|
dict set CLASS_BUTTON_CHOICEINFO $sub {{doctype native} {doctype punkargs}} |
|
#override manual synopsis entry |
|
#puts stderr "override manual synopsis entry with [punk::ns::synopsis "::package $sub"]" |
|
#dict set CLASS_BUTTON_CHOICELABELS $sub [punk::ansi::a+ normal][punk::ns::synopsis "(widgetcommand)Class_Button $sub"] |
|
dict set CLASS_BUTTON_CHOICELABELS $sub [punk::ansi::a+ normal][punk::args::synopsis "(widgetcommand)Class_Button $sub"] |
|
} |
|
} |
|
|
|
punk::args::define { |
|
@id -id (widgetcommand)Class_Button |
|
# ?? (instance)Class_Button ?? |
|
@cmd -name "Tk widget: (widgetcommand)Class_Button"\ |
|
-summary\ |
|
"widgetcommand for Tk class Button"\ |
|
-help\ |
|
"widgetcommand for Tk class Button" |
|
@leaders -min 1 -max 1 |
|
option -type string\ |
|
-choicecolumns 2\ |
|
-choicegroups { |
|
"actions" {flash invoke} |
|
}\ |
|
-choicelabels {${$CLASS_BUTTON_CHOICELABELS}}\ |
|
-choiceinfo {${$CLASS_BUTTON_CHOICEINFO}} |
|
|
|
} "@doc -name Manpage: -url [manpage button]" |
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
|
|
|
|
|
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
# ::wm subcommands |
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
punk::args::define { |
|
@id -id "::wm aspect" |
|
@cmd -name "Tk Built-in: ::wm aspect"\ |
|
-summary\ |
|
"Get/set aspect ratio restrictions."\ |
|
-help\ |
|
"If ${$I}minNumer${$NI}, ${$I}minDenom${$NI}, ${$I}maxNumer${$NI}, and ${$I}maxDenom${$NI} are all specified, then they will be passed to |
|
the window manager and the window manager should use them to enforce a range of acceptable |
|
aspect ratios for window. The aspect ratio of window (width/length) will be constrained to lie |
|
between ${$I}minNumer${$NI}/${$I}minDenom${$NI} and ${$I}maxNumer${$NI}/${$I}maxDenom${$NI}. If ${$I}minNumer${$NI} etc. are all specified as empty |
|
strings, then any existing aspect ratio restrictions are removed. If ${$I}minNumer${$NI} etc. are |
|
specified, then the command returns an empty string. Otherwise, it returns a Tcl list |
|
containing four elements, which are the current values of ${$I}minNumer${$NI}, ${$I}minDenom${$NI}, ${$I}maxNumer${$NI}, and |
|
${$I}maxDenom${$NI} (if no aspect restrictions are in effect, then an empty string is returned)." |
|
@values -min 1 |
|
window -type string |
|
#todo - punk::args - way to specify all number or all empty e.g |
|
# -type {(number number number number)|(literal() literal() literal() literal())} |
|
aspectratio\ |
|
-type {number|literal() number|literal() number|literal() number|literal()}\ |
|
-typesynopsis "${$I}minNumer${$NI} ${$I}minDenom${$NI} ${$I}maxNumer${$NI} ${$I}maxDenom${$NI}"\ |
|
-optional 1 |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
|
|
#attributes |
|
|
|
punk::args::define { |
|
@id -id "::wm client" |
|
@cmd -name "Tk Built-in: ::wm client"\ |
|
-summary\ |
|
"Get/set WM_CLIENT_MACHINE name for the window."\ |
|
-help\ |
|
"If ${$I}name${$NI} is specified, this command stores ${$I}name${$NI} (which should be the name of the host on which the application |
|
is executing) in ${$I}window${$NI}'s ${$B}WM_CLIENT_MACHINE${$N} property for use by the window manager or session manager. The |
|
command returns an empty string in this case. If ${$I}name${$NI} is not specified, the command returns the last name set |
|
in a wm client command for window. If ${$I}name${$NI} is specified as an empty string, the command deletes the |
|
${$B}WM_CLIENT_MACHINE${$N} property from ${$I}window${$NI}." |
|
@values -min 1 -max 2 |
|
window -type string |
|
name\ |
|
-type string\ |
|
-optional 1 |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
|
|
#colormapwindows |
|
#command |
|
#deiconify |
|
#focusmodel |
|
|
|
punk::args::define { |
|
@id -id "::wm forget" |
|
@cmd -name "Tk Built-in: ::wm forget"\ |
|
-summary\ |
|
"Unmap/Unmanage window."\ |
|
-help\ |
|
"The window will be unmapped from the screen and will no longer be managed by ${$B}wm${$N}. Windows created with the |
|
${$B}toplevel${$N} command will be treated like frame windows once they are no longer managed by ${$B}wm${$N}, however, the |
|
${$B}-menu${$N} configuration will be remembered and the menus will return once the widget is managed again." |
|
@values -min 1 -max 1 |
|
window -type string |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
|
|
punk::args::define { |
|
@id -id "::wm frame" |
|
@cmd -name "Tk Built-in: ::wm frame"\ |
|
-summary\ |
|
"Identifier of outermost frame containing window."\ |
|
-help\ |
|
"If ${$I}window${$NI} has been reparented by the window manager into a decorative frame, the command returns the |
|
platform specific window identifier for the outermost frame that contains ${$I}window${$NI} (the window whose parent |
|
is the root or virtual root). If ${$I}window${$NI} has not been reparented by the window manager then the command |
|
returns the platform specific window identifier for ${$I}window${$NI}." |
|
@values -min 1 -max 1 |
|
window -type string |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
|
|
#geometry |
|
#grid |
|
#group |
|
#iconbadge |
|
#iconbitmap |
|
#iconify |
|
#iconmask |
|
#iconname |
|
#iconphoto |
|
#iconposition |
|
#iconwindow |
|
punk::args::define { |
|
@id -id "::wm manage" |
|
@cmd -name "Tk Built-in: ::wm manage"\ |
|
-summary\ |
|
"Make frame/labelframe a toplevel."\ |
|
-help\ |
|
"The ${$I}widget${$NI} specified will become a stand alone top-level window. The window will be decorated with the window |
|
managers title bar, etc. Only frame, labelframe and toplevel widgets can be used with this command. Attempting |
|
to pass any other widget type will raise an error. Attempting to manage a toplevel widget is benign and achieves |
|
nothing. See also ${$B}GEOMETRY MANAGEMENT${$N}." |
|
@values -min 1 -max 1 |
|
widget -type string -help\ |
|
"frame, labelframe or toplevel" |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
|
|
#maxsize |
|
#minsize |
|
#overrideredirect |
|
#positionfrom |
|
#protocol |
|
punk::args::define { |
|
@id -id "::wm resizable" |
|
@cmd -name "Tk Built-in: ::wm resizable"\ |
|
-summary\ |
|
"Get/Set window width and height resizability."\ |
|
-help\ |
|
"This command controls whether or not the user may interactively resize a top-level window. If ${$I}width${$NI} and ${$I}height${$NI} are |
|
specified, they are boolean values that determine whether the width and height of window may be modified by the user. |
|
In this case the command returns an empty string. If ${$I}width${$NI} and ${$I}height${$NI} are omitted then the command returns a list |
|
with two 0/1 elements that indicate whether the width and height of window are currently resizable. By default, |
|
windows are resizable in both dimensions. If resizing is disabled, then the window's size will be the size from the |
|
most recent interactive resize or ${$B}wm geometry${$N} command. If there has been no such operation then the window's natural |
|
size will be used." |
|
@values -min 1 |
|
window -type string |
|
width_height\ |
|
-type {boolean boolean}\ |
|
-typesynopsis "${$I}width${$NI} ${$I}height${$NI}"\ |
|
-optional 1 |
|
} "@doc -name Manpage: -url [manpage wm]" |
|
#sizefrom |
|
#stackorder |
|
punk::args::define { |
|
@id -id "::wm state" |
|
@cmd -name "Tk Built-in: ::wm state"\ |
|
-summary\ |
|
"Get/set window state."\ |
|
-help\ |
|
"If newstate is specified, the window will be set to the new state, otherwise it returns the current state of window: |
|
either ${$B}normal${$N}, ${$B}iconic${$N}, ${$B}withdrawn${$N}, ${$B}icon${$N}, or (Windows and macOS only) ${$B}zoomed${$N}. The difference between ${$B}iconic${$N} and ${$B}icon${$N} is |
|
that ${$B}iconic${$N} refers to a window that has been iconified (e.g., with the wm iconify command) while ${$B}icon${$N} refers to a |
|
window whose only purpose is to serve as the icon for some other window (via the ${$B}wm iconwindow${$N} command). |
|
The ${$B}icon${$N} state cannot be set." |
|
@values -min 1 -max 2 |
|
window -type string |
|
newstate\ |
|
-type string\ |
|
-optional 1\ |
|
-choices {normal iconic withdrawn zoomed}\ |
|
-choicelabels {\ |
|
normal\ |
|
"" |
|
iconic\ |
|
"" |
|
withdrawn\ |
|
"" |
|
zoomed\ |
|
" (Windows and macOS only)" |
|
} |
|
|
|
} "@doc -name Manpage: -url [manpage wm]" |
|
#title |
|
#transient |
|
#withdraw |
|
|
|
|
|
|
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
# ::wm |
|
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
|
set WM_CHOICES [list aspect attributes client colormapwindows command deiconify focusmodel forget frame\ |
|
geometry grid group iconbadge iconbitmap iconify iconmask iconname iconphoto iconposition iconwindow\ |
|
manage maxsize minsize overrideredirect positionfrom protocol resizable sizefrom stackorder\ |
|
state title transient withdraw\ |
|
] |
|
#manual synopses for subcommands not yet defined |
|
set WM_CHOICELABELS [subst -novariables { |
|
}] |
|
set WM_CHOICEGROUPS [dict create {*}{ |
|
"" {} |
|
icon {iconbadge iconbitmap iconmask iconphoto iconposition iconwindow} |
|
}] |
|
set WM_GROUPALLOCATED [list] |
|
dict for {g glist} $WM_CHOICEGROUPS { |
|
lappend WM_GROUPALLOCATED {*}$glist |
|
} |
|
foreach sub $WM_CHOICES { |
|
if {$sub ni $WM_GROUPALLOCATED} { |
|
dict lappend WM_CHOICEGROUPS "" $sub |
|
} |
|
} |
|
set WM_CHOICEINFO [dict create] |
|
foreach sub $WM_CHOICES { |
|
#default for all |
|
dict set WM_CHOICEINFO $sub {{doctype native}} |
|
} |
|
foreach id [punk::args::get_ids "::wm *"] { |
|
if {[llength $id] == 2} { |
|
lassign $id _ sub |
|
dict set WM_CHOICEINFO $sub {{doctype native} {doctype punkargs}} |
|
#override manual synopsis entry |
|
#puts stderr "override manual synopsis entry with [punk::ns::synopsis "::wm $sub"]" |
|
dict set WM_CHOICELABELS $sub [punk::ansi::a+ normal][punk::args::synopsis "::wm $sub"] |
|
} |
|
} |
|
|
|
punk::args::define { |
|
@id -id ::wm |
|
@cmd -name "Tk Built-in: ::wm"\ |
|
-summary\ |
|
"Communicate with window manager."\ |
|
-help\ |
|
"The ${$B}wm${$N} command is used to interact with window managers in order to control such things as the |
|
title for a window, its geometry, or the increments in terms of which it may be resized. The ${$B}wm${$N} |
|
command can take any of a number of different forms, depending on the option argument. All of |
|
the forms expect at least one additional argument, window, which must be the path name of a |
|
top-level window. |
|
|
|
${$T}GEOMETRY MANAGMENT${$NT} |
|
By default a top-level window appears on the screen in its natural size, which is the one determined internally |
|
by its widgets and geometry managers. If the natural size of a top-level window changes, then the window's size |
|
changes to match. A top-level window can be given a size other than its natural size in two ways. First, the |
|
user can resize the window manually using the facilities of the window manager, such as resize handles. Second, |
|
the application can request a particular size for a top-level window using the wm geometry command. These two |
|
cases are handled identically by Tk; in either case, the requested size overrides the natural size. You can |
|
return the window to its natural by invoking wm geometry with an empty geometry string. |
|
|
|
Normally a top-level window can have any size from one pixel in each dimension up to the size of its screen. |
|
However, you can use the wm minsize and wm maxsize commands to limit the range of allowable sizes. The range |
|
set by wm minsize and wm maxsize applies to all forms of resizing, including the window's natural size as well |
|
as manual resizes and the wm geometry command. You can use any value accepted by Tk_GetPixels. You can also use |
|
the command wm resizable to completely disable interactive resizing in one or both dimensions. |
|
|
|
The wm manage and wm forget commands may be used to perform undocking and docking of windows. After a widget is |
|
managed by wm manage command, all other wm subcommands may be used with the widget. Only widgets created using |
|
the toplevel command may have an attached menu via the -menu configure option. A toplevel widget may be used as |
|
a frame and managed with any of the other geometry managers after using the wm forget command. Any menu |
|
associated with a toplevel widget will be hidden when managed by another geometry managers. The menus will |
|
reappear once the window is managed by wm. All custom bindtags for widgets in a subtree that have their top-level |
|
widget changed via a wm manage or wm forget command, must be redone to adjust any top-level widget path in the |
|
bindtags. Bindtags that have not been customized do not have to be redone. |
|
|
|
${$T}GRIDDED GEOMETRY MANAGEMENT${$NT} |
|
Gridded geometry management occurs when one of the widgets of an application supports a range of useful sizes. |
|
This occurs, for example, in a text editor where the scrollbars, menus, and other adornments are fixed in size but |
|
the edit widget can support any number of lines of text or characters per line. In this case, it is usually |
|
desirable to let the user specify the number of lines or characters-per-line, either with the wm geometry command |
|
or by interactively resizing the window. In the case of text, and in other interesting cases also, only discrete |
|
sizes of the window make sense, such as integral numbers of lines and characters-per-line; arbitrary pixel sizes |
|
are not useful. |
|
|
|
Gridded geometry management provides support for this kind of application. Tk (and the window manager) assume that |
|
there is a grid of some sort within the application and that the application should be resized in terms of grid |
|
units rather than pixels. Gridded geometry management is typically invoked by turning on the setGrid option for a |
|
widget; it can also be invoked with the wm grid command or by calling Tk_SetGrid. In each of these approaches the |
|
particular widget (or sometimes code in the application as a whole) specifies the relationship between integral |
|
grid sizes for the window and pixel sizes. To return to non-gridded geometry management, invoke wm grid with empty |
|
argument strings. |
|
|
|
When gridded geometry management is enabled then all the dimensions specified in wm minsize, wm maxsize, and |
|
wm geometry commands are treated as grid units rather than pixel units. Interactive resizing is also carried out in |
|
even numbers of grid units rather than pixels. |
|
|
|
${$T}BUGS${$NT} |
|
Most existing window managers appear to have bugs that affect the operation of the ${$B}wm${$N} command. For example, |
|
some changes will not take effect if the window is already active: the window will have to be withdrawn and |
|
de-iconified in order to make the change happen." |
|
@leaders -min 1 -max 1 |
|
subcommand -type string\ |
|
-choicecolumns 2\ |
|
-choicegroups\ |
|
{${$WM_CHOICEGROUPS}}\ |
|
-unindentedfields {-choicelabels}\ |
|
-choicelabels\ |
|
{${$WM_CHOICELABELS}}\ |
|
-choiceinfo {${$WM_CHOICEINFO}} |
|
@values -unnamed true |
|
} "@doc -name Manpage: -url [manpage wm]"\ |
|
{ |
|
@examples -help { |
|
A fixed-size window that says that it is fixed-size too: |
|
${[example { |
|
toplevel .fixed |
|
${$B}wm title${$N} .fixed "Fixed-size Window" |
|
${$B}wm resizable${$N} .fixed 0 0 |
|
}]} |
|
A simple dialog-like window, centred on the screen: |
|
${[example { |
|
# Create and arrange the dialog contents. |
|
toplevel .msg |
|
label .msg.l -text "This is a very simple dialog demo." |
|
button .msg.ok -text OK -default active -command {destroy .msg} |
|
pack .msg.ok -side bottom -fill x |
|
pack .msg.l -expand 1 -fill both |
|
|
|
# Now set the widget up as a centred dialog. |
|
|
|
# But first, we need the geometry managers to finish setting |
|
# up the interior of the dialog, for which we need to run the |
|
# event loop with the widget hidden completely... |
|
${$B}wm withdraw${$N} .msg |
|
update |
|
set x [expr {([winfo screenwidth .] - [winfo width .msg]) / 2}] |
|
set y [expr {([winfo screenheight .] - [winfo height .msg]) / 2}] |
|
${$B}wm geometry${$N} .msg +$x+$y |
|
${$B}wm transient${$N} .msg . |
|
${$B}wm title${$N} .msg "Dialog demo" |
|
${$B}wm deiconify${$N} .msg |
|
}]} |
|
}} |
|
|
|
|
|
} |
|
|
|
#*** !doctools |
|
#[list_end] [comment {--- end definitions namespace punk::args::moduledoc::tkcore ---}] |
|
} |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
# Secondary API namespace |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
tcl::namespace::eval punk::args::moduledoc::tkcore::lib { |
|
tcl::namespace::export {[a-z]*} ;# Convention: export all lowercase |
|
tcl::namespace::path [tcl::namespace::parent] |
|
#*** !doctools |
|
#[subsection {Namespace punk::args::moduledoc::tkcore::lib}] |
|
#[para] Secondary functions that are part of the API |
|
#[list_begin definitions] |
|
|
|
|
|
#*** !doctools |
|
#[list_end] [comment {--- end definitions namespace punk::args::moduledoc::tkcore::lib ---}] |
|
} |
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
|
|
|
|
|
|
# == === === === === === === === === === === === === === === |
|
# Sample 'about' function with punk::args documentation |
|
# == === === === === === === === === === === === === === === |
|
tcl::namespace::eval punk::args::moduledoc::tkcore { |
|
tcl::namespace::export {[a-z]*} ;# Convention: export all lowercase |
|
variable PUNKARGS |
|
variable PUNKARGS_aliases |
|
|
|
lappend PUNKARGS [list { |
|
@id -id "(package)punk::args::moduledoc::tkcore" |
|
@package -name "punk::args::moduledoc::tkcore" -help\ |
|
"punk::args documentation for Tk package" |
|
}] |
|
|
|
namespace eval argdoc { |
|
#namespace for custom argument documentation |
|
proc package_name {} { |
|
return punk::args::moduledoc::tkcore |
|
} |
|
proc about_topics {} { |
|
#info commands results are returned in an arbitrary order (like array keys) |
|
set topic_funs [info commands [namespace current]::get_topic_*] |
|
set about_topics [list] |
|
foreach f $topic_funs { |
|
set tail [namespace tail $f] |
|
lappend about_topics [string range $tail [string length get_topic_] end] |
|
} |
|
#Adjust this function or 'default_topics' if a different order is required |
|
return [lsort $about_topics] |
|
} |
|
proc default_topics {} {return [list Description *]} |
|
|
|
# ------------------------------------------------------------- |
|
# get_topic_ functions add more to auto-include in about topics |
|
# ------------------------------------------------------------- |
|
proc get_topic_Description {} { |
|
punk::args::lib::tstr [string trim { |
|
package punk::args::moduledoc::tkcore |
|
punk::args documentation for Tk |
|
} \n] |
|
} |
|
proc get_topic_License {} { |
|
return "MIT" |
|
} |
|
proc get_topic_Version {} { |
|
return "$::punk::args::moduledoc::tkcore::version" |
|
} |
|
proc get_topic_Contributors {} { |
|
set authors {{Julian Noble <julian@precisium.com.au}} |
|
set contributors "" |
|
foreach a $authors { |
|
append contributors $a \n |
|
} |
|
if {[string index $contributors end] eq "\n"} { |
|
set contributors [string range $contributors 0 end-1] |
|
} |
|
return $contributors |
|
} |
|
#proc get_topic_custom-topic {} { |
|
# punk::args::lib::tstr -return string { |
|
# "" |
|
# } |
|
#} |
|
# ------------------------------------------------------------- |
|
} |
|
|
|
# we re-use the argument definition from punk::args::standard_about and override some items |
|
set overrides [dict create] |
|
dict set overrides @id -id "::punk::args::moduledoc::tkcore::about" |
|
dict set overrides @cmd -name "punk::args::moduledoc::tkcore::about" |
|
dict set overrides @cmd -help [string trim [punk::args::lib::tstr { |
|
About punk::args::moduledoc::tkcore |
|
}] \n] |
|
dict set overrides topic -choices [list {*}[punk::args::moduledoc::tkcore::argdoc::about_topics] *] |
|
dict set overrides topic -choicerestricted 1 |
|
dict set overrides topic -default [punk::args::moduledoc::tkcore::argdoc::default_topics] ;#if -default is present 'topic' will always appear in parsed 'values' dict |
|
set newdef [punk::args::resolved_def -antiglobs -package_about_namespace -override $overrides ::punk::args::package::standard_about *] |
|
lappend PUNKARGS [list $newdef] |
|
proc about {args} { |
|
package require punk::args |
|
#standard_about accepts additional choices for topic - but we need to normalize any abbreviations to full topic name before passing on |
|
set argd [punk::args::parse $args withid ::punk::args::moduledoc::tkcore::about] |
|
lassign [dict values $argd] _leaders opts values _received |
|
punk::args::package::standard_about -package_about_namespace ::punk::args::moduledoc::tkcore::argdoc {*}$opts {*}[dict get $values topic] |
|
} |
|
} |
|
# end of sample 'about' function |
|
# == === === === === === === === === === === === === === === |
|
|
|
|
|
# ----------------------------------------------------------------------------- |
|
# register namespace(s) to have PUNKARGS,PUNKARGS_aliases variables checked |
|
# ----------------------------------------------------------------------------- |
|
# variable PUNKARGS |
|
# variable PUNKARGS_aliases |
|
namespace eval ::punk::args::register { |
|
#use fully qualified so 8.6 doesn't find existing var in global namespace |
|
lappend ::punk::args::register::NAMESPACES ::punk::args::moduledoc::tkcore ::punk::args::moduledoc::tkcore::argdoc |
|
} |
|
# ----------------------------------------------------------------------------- |
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
## Ready |
|
package provide punk::args::moduledoc::tkcore [tcl::namespace::eval punk::args::moduledoc::tkcore { |
|
variable pkg punk::args::moduledoc::tkcore |
|
variable version |
|
set version 999999.0a1.0 |
|
}] |
|
return |
|
|
|
#*** !doctools |
|
#[manpage_end] |
|
|
|
|