pack.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:11k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1990-1994 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: pack.n,v 1.3.6.1 2004/10/28 12:25:22 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH pack n 4.0 Tk "Tk Built-In Commands"
  12. .BS
  13. '" Note:  do not modify the .SH NAME line immediately below!
  14. .SH NAME
  15. pack - Geometry manager that packs around edges of cavity
  16. .SH SYNOPSIS
  17. fBpack fIoption arg fR?fIarg ...fR?
  18. .BE
  19. .SH DESCRIPTION
  20. .PP
  21. The fBpackfR command is used to communicate with the packer,
  22. a geometry manager that arranges the children of a parent by
  23. packing them in order around the edges of the parent.
  24. The fBpackfR command can have any of several forms, depending
  25. on the fIoptionfR argument:
  26. .TP
  27. fBpack fIslave fR?fIslave ...fR? ?fIoptionsfR?
  28. If the first argument to fBpackfR is a window name (any value
  29. starting with ``.''), then the command is processed in the same
  30. way as fBpack configurefR.
  31. .TP
  32. fBpack configure fIslave fR?fIslave ...fR? ?fIoptionsfR?
  33. The arguments consist of the names of one or more slave windows
  34. followed by pairs of arguments that specify how
  35. to manage the slaves.
  36. See ``THE PACKER ALGORITHM'' below for details on how the options
  37. are used by the packer.
  38. The following options are supported:
  39. .RS
  40. .TP
  41. fB-after fIotherfR
  42. fIOtherfR must the name of another window.
  43. Use its master as the master for the slaves, and insert
  44. the slaves just after fIotherfR in the packing order.
  45. .TP
  46. fB-anchor fIanchorfR
  47. fIAnchorfR must be a valid anchor position such as fBnfR
  48. or fBswfR; it specifies where to position each slave in its
  49. parcel.
  50. Defaults to fBcenterfR.
  51. .TP
  52. fB-before fIotherfR
  53. fIOtherfR must the name of another window.
  54. Use its master as the master for the slaves, and insert
  55. the slaves just before fIotherfR in the packing order.
  56. .TP
  57. fB-expand fIbooleanfR
  58. Specifies whether the slaves should be expanded to consume
  59. extra space in their master.
  60. fIBooleanfR may have any proper boolean value, such as fB1fR
  61. or fBnofR.
  62. Defaults to 0.
  63. .TP
  64. fB-fill fIstylefR
  65. If a slave's parcel is larger than its requested dimensions, this
  66. option may be used to stretch the slave.
  67. fIStylefR must have one of the following values:
  68. .RS
  69. .TP
  70. fBnonefR
  71. Give the slave its requested dimensions plus any internal padding
  72. requested with fB-ipadxfR or fB-ipadyfR.  This is the default.
  73. .TP
  74. fBxfR
  75. Stretch the slave horizontally to fill the entire width of its
  76. parcel (except leave external padding as specified by fB-padxfR).
  77. .TP
  78. fByfR
  79. Stretch the slave vertically to fill the entire height of its
  80. parcel (except leave external padding as specified by fB-padyfR).
  81. .TP
  82. fBbothfR
  83. Stretch the slave both horizontally and vertically.
  84. .RE
  85. .TP
  86. fB-in fIotherfR
  87. Insert the slave(s) at the end of the packing order for the master
  88. window given by fIotherfR.
  89. .TP
  90. fB-ipadx fIamountfR
  91. fIAmountfR specifies how much horizontal internal padding to
  92. leave on each side of the slave(s).
  93. fIAmountfR must be a valid screen distance, such as fB2fR or fB.5cfR.
  94. It defaults to 0.
  95. .TP
  96. fB-ipady fIamountfR
  97. fIAmountfR specifies how much vertical internal padding to
  98. leave on each side of the slave(s).
  99. fIAmountfR  defaults to 0.
  100. .TP
  101. fB-padx fIamountfR
  102. fIAmountfR specifies how much horizontal external padding to
  103. leave on each side of the slave(s).  fIAmountfR may be a list
  104. of two values to specify padding for left and right separately.
  105. fIAmountfR defaults to 0.
  106. .TP
  107. fB-pady fIamountfR
  108. fIAmountfR specifies how much vertical external padding to
  109. leave on each side of the slave(s).  fIAmountfR may be a list
  110. of two values to specify padding for top and bottom separately.
  111. fIAmountfR defaults to 0.
  112. .TP
  113. fB-side fIsidefR
  114. Specifies which side of the master the slave(s) will be packed against.
  115. Must be fBleftfR, fBrightfR, fBtopfR, or fBbottomfR.
  116. Defaults to fBtopfR.
  117. .LP
  118. If no fB-infR, fB-afterfR or fB-beforefR option is specified
  119. then each of the slaves will be inserted at the end of the packing list
  120. for its parent unless it is already managed by the packer (in which
  121. case it will be left where it is).
  122. If one of these options is specified then all the slaves will be
  123. inserted at the specified point.
  124. If any of the slaves are already managed by the geometry manager
  125. then any unspecified options for them retain their previous values rather
  126. than receiving default values.
  127. .RE
  128. .TP
  129. fBpack forget fIslave fR?fIslave ...fR?
  130. Removes each of the fIslavefRs from the packing order for its
  131. master and unmaps their windows.
  132. The slaves will no longer be managed by the packer.
  133. .TP
  134. fBpack info fIslavefR
  135. Returns a list whose elements are the current configuration state of
  136. the slave given by fIslavefR in the same option-value form that
  137. might be specified to fBpack configurefR.
  138. The first two elements of the list are ``fB-in fImasterfR'' where
  139. fImasterfR is the slave's master.
  140. .TP
  141. fBpack propagate fImasterfR ?fIbooleanfR?
  142. If fIbooleanfR has a true boolean value such as fB1fR or fBonfR
  143. then propagation is enabled for fImasterfR, which must be a window
  144. name (see ``GEOMETRY PROPAGATION'' below).
  145. If fIbooleanfR has a false boolean value then propagation is
  146. disabled for fImasterfR.
  147. In either of these cases an empty string is returned.
  148. If fIbooleanfR is omitted then the command returns fB0fR or
  149. fB1fR to indicate whether propagation is currently enabled
  150. for fImasterfR.
  151. Propagation is enabled by default.
  152. .TP
  153. fBpack slaves fImasterfR
  154. Returns a list of all of the slaves in the packing order for fImasterfR.
  155. The order of the slaves in the list is the same as their order in
  156. the packing order.
  157. If fImasterfR has no slaves then an empty string is returned.
  158. .SH "THE PACKER ALGORITHM"
  159. .PP
  160. For each master the packer maintains an ordered list of slaves
  161. called the fIpacking listfR.
  162. The fB-infR, fB-afterfR, and fB-beforefR configuration
  163. options are used to specify the master for each slave and the slave's
  164. position in the packing list.
  165. If none of these options is given for a slave then the slave
  166. is added to the end of the packing list for its parent.
  167. .PP
  168. The packer arranges the slaves for a master by scanning the
  169. packing list in order.
  170. At the time it processes each slave, a rectangular area within
  171. the master is still unallocated.
  172. This area is called the fIcavityfR;  for the first slave it
  173. is the entire area of the master.
  174. .PP
  175. For each slave the packer carries out the following steps:
  176. .IP [1]
  177. The packer allocates a rectangular fIparcelfR for the slave
  178. along the side of the cavity given by the slave's fB-sidefR option.
  179. If the side is top or bottom then the width of the parcel is
  180. the width of the cavity and its height is the requested height
  181. of the slave plus the fB-ipadyfR and fB-padyfR options.
  182. For the left or right side the height of the parcel is
  183. the height of the cavity and the width is the requested width
  184. of the slave plus the fB-ipadxfR and fB-padxfR options.
  185. The parcel may be enlarged further because of the fB-expandfR
  186. option (see ``EXPANSION'' below)
  187. .IP [2]
  188. The packer chooses the dimensions of the slave.
  189. The width will normally be the slave's requested width plus
  190. twice its fB-ipadxfR option and the height will normally be
  191. the slave's requested height plus twice its fB-ipadyfR
  192. option.
  193. However, if the fB-fillfR option is fBxfR or fBbothfR
  194. then the width of the slave is expanded to fill the width of the parcel,
  195. minus twice the fB-padxfR option.
  196. If the fB-fillfR option is fByfR or fBbothfR
  197. then the height of the slave is expanded to fill the width of the parcel,
  198. minus twice the fB-padyfR option.
  199. .IP [3]
  200. The packer positions the slave over its parcel.
  201. If the slave is smaller than the parcel then the fB-anchorfR
  202. option determines where in the parcel the slave will be placed.
  203. If fB-padxfR or fB-padyfR is non-zero, then the given
  204. amount of external padding will always be left between the
  205. slave and the edges of the parcel.
  206. .PP
  207. Once a given slave has been packed, the area of its parcel
  208. is subtracted from the cavity, leaving a smaller rectangular
  209. cavity for the next slave.
  210. If a slave doesn't use all of its parcel, the unused space
  211. in the parcel will not be used by subsequent slaves.
  212. If the cavity should become too small to meet the needs of
  213. a slave then the slave will be given whatever space is
  214. left in the cavity.
  215. If the cavity shrinks to zero size, then all remaining slaves
  216. on the packing list will be unmapped from the screen until
  217. the master window becomes large enough to hold them again.
  218. .SH "EXPANSION"
  219. .PP
  220. If a master window is so large that there will be extra space
  221. left over after all of its slaves have been packed, then the
  222. extra space is distributed uniformly among all of the slaves
  223. for which the fB-expandfR option is set.
  224. Extra horizontal space is distributed among the expandable
  225. slaves whose fB-sidefR is fBleftfR or fBrightfR,
  226. and extra vertical space is distributed among the expandable
  227. slaves whose fB-sidefR is fBtopfR or fBbottomfR.
  228. .SH "GEOMETRY PROPAGATION"
  229. .PP
  230. The packer normally computes how large a master must be to
  231. just exactly meet the needs of its slaves, and it sets the
  232. requested width and height of the master to these dimensions.
  233. This causes geometry information to propagate up through a
  234. window hierarchy to a top-level window so that the entire
  235. sub-tree sizes itself to fit the needs of the leaf windows.
  236. However, the fBpack propagatefR command may be used to
  237. turn off propagation for one or more masters.
  238. If propagation is disabled then the packer will not set
  239. the requested width and height of the packer.
  240. This may be useful if, for example, you wish for a master
  241. window to have a fixed size that you specify.
  242. .SH "RESTRICTIONS ON MASTER WINDOWS"
  243. .PP
  244. The master for each slave must either be the slave's parent
  245. (the default) or a descendant of the slave's parent.
  246. This restriction is necessary to guarantee that the
  247. slave can be placed over any part of its master that is
  248. visible without danger of the slave being clipped by its parent.
  249. .SH "PACKING ORDER"
  250. .PP
  251. If the master for a slave is not its parent then you must make sure
  252. that the slave is higher in the stacking order than the master.
  253. Otherwise the master will obscure the slave and it will appear as
  254. if the slave hasn't been packed correctly.
  255. The easiest way to make sure the slave is higher than the master is
  256. to create the master window first:  the most recently created window
  257. will be highest in the stacking order.
  258. Or, you can use the fBraisefR and fBlowerfR commands to change
  259. the stacking order of either the master or the slave.
  260. .SH EXAMPLE
  261. .CS
  262. # Make the widgets
  263. label .t -text "This widget is at the top"    -bg red
  264. label .b -text "This widget is at the bottom" -bg green
  265. label .l -text "Left\nHand\nSide"
  266. label .r -text "Right\nHand\nSide"
  267. text .mid
  268. .mid insert end "This layout is like Java's BorderLayout"
  269. # Lay them out
  270. fBpackfR .t   -side top    -fill x
  271. fBpackfR .b   -side bottom -fill x
  272. fBpackfR .l   -side left   -fill y
  273. fBpackfR .r   -side right  -fill y
  274. fBpackfR .mid -expand 1    -fill both
  275. .CE
  276. .SH "SEE ALSO"
  277. grid(n), place(n)
  278. .SH KEYWORDS
  279. geometry manager, location, packer, parcel, propagation, size