home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / fonts / a_q / fontpool / !Ex-BASIC / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-01-10  |  8KB  |  258 lines

  1.    BASIC-Example of FontPool v0.12
  2.    Author: Eirik Hansen 1994/1995
  3.    All procedures that call the FontPool module are located
  4.    at the end of the program (starting with DEF PROCSetUp).
  5.    Feel free to use this file as a framework for more
  6.    serious programs.
  7.  p% 256
  8. SetUp
  9. CloseDown
  10. ---------------
  11. The main loop.
  12. - - - - - - - -
  13. CloseDown
  14.  "Wimp_Poll",0,p% 
  15.  ResCode%
  16.  ResCode% 
  17. +      
  18.   2    :
  19.  "Wimp_OpenWindow",,p%
  20.       
  21.   3    :Quit%=
  22.       
  23.   6    :
  24. MouseClick
  25. !      
  26.   9    :
  27. MenuSelection
  28.       
  29.  17,18 :
  30. Messages
  31.  Quit%
  32. !5-------------------------------------------------
  33. "4Determine the kind of message that was received?
  34. #5- - - - - - - - - - - - - - - - - - - - - - - - -
  35. Messages
  36.  p%!16 
  37.  0      : Quit%=
  38.  &400C0 : 
  39. MenuWarning
  40. ---------------------
  41. Creating the window..
  42. - - - - - - - - - - -
  43. CreateWindow
  44.  Temps%
  45.  "OS_Module",6,,,&800 
  46.  ,,Temps%
  47.  Indirect% &800
  48. IndEnd%=Indirect%+&800
  49. 4"In$="<Ex-BASIC$Dir>.Templates"
  50.  "Wimp_OpenTemplate",,In$
  51.  "Wimp_LoadTemplate",,Temps%,Indirect%,IndEnd%,-1,"Work",0 
  52.  ,,Indirect%
  53. FontIcon%=Temps%!108
  54. ConfIcon%=Temps%!(108+8*32)
  55. :!FontXIcon%=Temps%!(108+40*32)
  56. ;!FontYIcon%=Temps%!(108+41*32)
  57.  "Wimp_CreateWindow",,Temps% 
  58.  WinH%
  59.  "Wimp_CloseTemplate",,In$
  60.  "OS_Module",7,,Temps%
  61. A#-------------------------------
  62. B"Creates the 'indirected' menu.
  63. C#- - - - - - - - - - - - - - - -
  64. CreateMenu
  65.  Menu% 128
  66. P%=Menu%
  67. [OPT 2
  68.    EQUS "FontPool"
  69.    EQUD 0
  70.    EQUB 7      ;  Title fg
  71.    EQUB 2      ;  Title bg
  72.    EQUB 7      ;  WA fg
  73.    EQUB 0      ;  WA bg
  74.    EQUD 180    ;  ItemWdt
  75.    EQUD 44     ;  ItemHgt
  76.    EQUD 0      ;  Spacing
  77. R ;--The relevant menu-item...
  78. S@               EQUD 1<<3      ;  Generate Msg_SubMenuWarning
  79. TN.SubMenuPtr%   EQUD 0         ;  This word is later set up to point to the
  80. U3                              ;  FontPool-menu.
  81. V                EQUD &7000001
  82.                EQUS "Font"
  83.                EQUD 0
  84.                EQUD 0
  85. [F;--The rest are items that would normally be found in a font-menu.
  86. \A;--They are present only as an 'illustration' and are shaded.
  87.    EQUD 0
  88.    EQUD 1000
  89.    EQUD &7400001
  90.    EQUS "Size"
  91.    EQUD 0
  92.    EQUD 0
  93.    EQUD 0
  94.    EQUD 1000
  95.    EQUD &7400001
  96.    EQUS "Foreground"
  97.    EQUB 0
  98.    EQUB 0
  99.    EQUD &80
  100.    EQUD 1000
  101.    EQUD &7400001
  102.    EQUS "Background"
  103.    EQUB 0
  104.    EQUB 0
  105. ---------------------------
  106. Returns with 
  107.  if Icon%
  108. in Win% is selected, else
  109. returns 
  110. - - - - - - - - - - - - - -
  111. IsItSelected(Win%,Icon%)
  112.  X%,Y%
  113. !p%=Win%
  114. p%!4=Icon%
  115.  "Wimp_GetIconState",,p%
  116.  (p%!24 
  117.  &200000)<>0 =
  118. S===============================================================================
  119. OThe procedures below all call the FontPool module. They should hopefully be
  120. Qsufficiently commented to help build a 'real' program that utilizes FontPool.
  121. PNote the SWIs that update the submenu-pointer in the 'parent-item'. They all
  122. end with
  123.    ... 
  124.  !SubMenuPtr%
  125. This pointer is only necessary to update if the font-menu is ever opened using 'FontPool_CreateSubMenu' - which most programs would do.
  126. S-------------------------------------------------------------------------------
  127. Setting up..
  128. - - - - - - -
  129. SetUp
  130.  In$,In%,Ext%,N%,Mask%
  131. Quit%=
  132.  "Wimp_Initialise",200,&4B534154,"FontPool" 
  133.  ,TaskH%
  134. CreateWindow
  135. CreateMenu
  136. FontH%=0
  137. Font$=""
  138. OpenMenu%=
  139. ---Initialising FontPool...
  140.    &B=Fg col on selected items
  141.    &0=Bg..
  142.    &5=Fg col on unselected items
  143.    &0=Bg..
  144.   &0C=How long the menu can get before it gets alphabetized.
  145.    The leftmost bit (&8...) must be set or the
  146.    config-word is ignored. 
  147.  "FontPool_Hello",,&800C050B 
  148.  !SubMenuPtr%
  149. ---Open the window.
  150. !p%=WinH%
  151.  "Wimp_GetWindowState",,p%
  152.  "Wimp_OpenWindow",,p%
  153. 7---------------------------------------------------
  154.  A Msg_MenuWarning received..
  155. 7Opening the menu like this is only necessary if the
  156. 6font-menu is attached to a higher level menu-item.
  157. 6It gives FontPool a chance to re-build the menu if
  158. 6the Font$Path has changed since last time the menu
  159. was open!
  160. 7- - - - - - - - - - - - - - - - - - - - - - - - - -
  161. MenuWarning
  162.  p%!20 
  163.  !SubMenuPtr%
  164. G      
  165.  "FontPool_CreateSubMenu",,Font$,p%!24,p%!28 
  166.  !SubMenuPtr%
  167. /-------------------------------------------
  168. A mouse-click occurred.
  169. .A click on the Reconfigure icon causes the
  170. *menu to be recomputed because R2 is 
  171. .Also demonstrates how to use FontPool both
  172. .directly (MENU) and indirectly (ADJUST) if
  173. 'the mouse-click was on the window's
  174. work-area.
  175. /- - - - - - - - - - - - - - - - - - - - - -
  176. MouseClick
  177.  Config%
  178.  p%!16 
  179.  7   :
  180.   The reconfigure icon..
  181.       Config%=
  182. ($ConfIcon%)
  183. ;      
  184.  "FontPool_Configure",,Config%,
  185.  !SubMenuPtr%
  186.  39  :
  187.   The 'Use font on fontmenu' icon..
  188.       
  189. DoIChangeMenuFont
  190. ]      
  191.  p%!8=2 
  192.  "FontPool_CreateMenu",,Font$,!p%-100,p%!4+80 
  193.  !SubMenuPtr%:OpenMenu%=0
  194. N      
  195.  p%!8=1 
  196.  "Wimp_CreateMenu",,Menu%,!p%-100,p%!4+80:OpenMenu%=Menu%
  197.       
  198. ------------------------------------------
  199. ,If 'Use font on fontmenu' is set, do it!
  200. The format of FontSize% is
  201.    &xxxyyyhh where
  202.       xxx = x-size (*16)
  203.       yyy = y-size (*16)
  204. )       hh = menu item-height (0 here)
  205. ,So the <<24 and <<8 below multiplies the
  206. given icon-values with 16.
  207. -- - - - - - - - - - - - - - - - - - - - -
  208. DoIChangeMenuFont
  209. IsItSelected(WinH%, 39)=
  210. 9FontSize%=(
  211. ($FontXIcon%))<<24 
  212. ($FontYIcon%))<<12
  213.  "FontPool_Configure",,,,Font$,FontSize% 
  214.  !SubMenuPtr%
  215. )-------------------------------------
  216. (A menu-selection. Decide what to do!
  217. )- - - - - - - - - - - - - - - - - - -
  218. MenuSelection
  219. ---Lose the last font..
  220.  FontH% 
  221.  "Font_LoseFont",FontH%
  222. ---Instruct 'FontPool' to deal with the menu-selection - passing
  223.    the correct 'root-menu' (OpenMenu%) to the SWI-routine.
  224.    Returns with Selection%=TRUE if something is selected in
  225.    the font-menu, and Font$ as the selected font-name.
  226.  "FontPool_MenuSelection",,OpenMenu%,p%,0 
  227.  Selection%,,,Font$
  228. ---Now the application makes use of the 
  229.    menu-selection that took place.
  230.  Selection% 
  231.    SYS "Font_FindFont",,Font$,16<<4,16<<4,0,0 TO FontH%
  232.    $FontIcon%=Font$
  233. 5   $FontIcon%="No font selected (System font)"+
  234.    Font$=""
  235.    FontH%=0
  236. ---If the option is set, change the menu-font immediately.
  237. DoIChangeMenuFont
  238. ---Force redraw of the 'Current-font' icon.
  239. !p%=WinH%
  240. p%!4=0
  241. p%!8=0
  242. p%!12=0
  243.  "Wimp_SetIconState",,p%
  244. ---If ADJUST was used when selecting, re-open the CORRECT menu.
  245.  "Wimp_GetPointerInfo",,p%
  246.  p%!8=1 
  247.  "FontPool_CreateMenu",,Font$,,,OpenMenu% 
  248.  !SubMenuPtr%
  249. #-------------------------------
  250. #Bye bye.  Let's call it a day..
  251. #- - - - - - - - - - - - - - - -
  252. CloseDown
  253. ---This client is now history!!
  254.  "FontPool_Goodbye"
  255.  FontH% 
  256.  "Font_LoseFont",FontH%
  257.  "Wimp_CloseDown",TaskH%,&4B534154
  258.