gtk2 0.20.1 → 0.90.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. data/ChangeLog +30 -0
  2. data/Rakefile +60 -54
  3. data/ext/gtk2/Makefile +163 -0
  4. data/ext/gtk2/depend +10 -0
  5. data/ext/gtk2/extconf.rb +202 -0
  6. data/{src → ext/gtk2}/global.h +0 -0
  7. data/ext/gtk2/gtk2.def +27 -0
  8. data/{src → ext/gtk2}/init.c +0 -0
  9. data/{src → ext/gtk2}/rbgdk.c +0 -0
  10. data/{src → ext/gtk2}/rbgdk.h +0 -0
  11. data/{src → ext/gtk2}/rbgdkatom.c +0 -0
  12. data/{src → ext/gtk2}/rbgdkcairo.c +0 -0
  13. data/{src → ext/gtk2}/rbgdkcolor.c +0 -0
  14. data/{src → ext/gtk2}/rbgdkcolormap.c +0 -0
  15. data/{src → ext/gtk2}/rbgdkconst.c +0 -0
  16. data/{src → ext/gtk2}/rbgdkconversions.h +0 -0
  17. data/{src → ext/gtk2}/rbgdkcursor.c +0 -0
  18. data/{src → ext/gtk2}/rbgdkdevice.c +0 -0
  19. data/{src → ext/gtk2}/rbgdkdisplay.c +0 -0
  20. data/{src → ext/gtk2}/rbgdkdisplaymanager.c +0 -0
  21. data/{src → ext/gtk2}/rbgdkdragcontext.c +0 -0
  22. data/{src → ext/gtk2}/rbgdkdraw.c +0 -0
  23. data/{src → ext/gtk2}/rbgdkevent.c +0 -0
  24. data/{src → ext/gtk2}/rbgdkgc.c +0 -0
  25. data/{src → ext/gtk2}/rbgdkgeometry.c +0 -0
  26. data/{src → ext/gtk2}/rbgdkimage.c +0 -0
  27. data/{src → ext/gtk2}/rbgdkinput.c +0 -0
  28. data/{src → ext/gtk2}/rbgdkkeymap.c +0 -0
  29. data/{src → ext/gtk2}/rbgdkkeysyms.h +0 -466
  30. data/{src → ext/gtk2}/rbgdkkeyval.c +0 -0
  31. data/{src → ext/gtk2}/rbgdkpango.c +0 -0
  32. data/{src → ext/gtk2}/rbgdkpangorenderer.c +0 -0
  33. data/{src → ext/gtk2}/rbgdkpixbuf.c +0 -0
  34. data/{src → ext/gtk2}/rbgdkpixmap.c +0 -0
  35. data/{src → ext/gtk2}/rbgdkproperty.c +0 -0
  36. data/{src → ext/gtk2}/rbgdkrectangle.c +0 -0
  37. data/{src → ext/gtk2}/rbgdkregion.c +0 -0
  38. data/{src → ext/gtk2}/rbgdkrgb.c +0 -0
  39. data/{src → ext/gtk2}/rbgdkscreen.c +0 -0
  40. data/{src → ext/gtk2}/rbgdkselection.c +0 -0
  41. data/{src → ext/gtk2}/rbgdkthreads.c +0 -0
  42. data/{src → ext/gtk2}/rbgdktimecoord.c +0 -0
  43. data/{src → ext/gtk2}/rbgdkvisual.c +0 -0
  44. data/{src → ext/gtk2}/rbgdkwindow.c +0 -0
  45. data/{src → ext/gtk2}/rbgdkwindowattr.c +0 -0
  46. data/{src → ext/gtk2}/rbgdkx11.c +0 -0
  47. data/{src → ext/gtk2}/rbgtk.c +0 -0
  48. data/{src → ext/gtk2}/rbgtk.h +0 -4
  49. data/{src → ext/gtk2}/rbgtkaboutdialog.c +0 -0
  50. data/{src → ext/gtk2}/rbgtkaccelerator.c +0 -0
  51. data/{src → ext/gtk2}/rbgtkaccelgroup.c +0 -0
  52. data/{src → ext/gtk2}/rbgtkaccelgroupentry.c +0 -0
  53. data/{src → ext/gtk2}/rbgtkaccelkey.c +0 -0
  54. data/{src → ext/gtk2}/rbgtkaccellabel.c +0 -0
  55. data/{src → ext/gtk2}/rbgtkaccelmap.c +0 -0
  56. data/{src → ext/gtk2}/rbgtkaccessible.c +0 -0
  57. data/{src → ext/gtk2}/rbgtkaction.c +0 -0
  58. data/{src → ext/gtk2}/rbgtkactiongroup.c +0 -0
  59. data/{src → ext/gtk2}/rbgtkadjustment.c +0 -0
  60. data/{src → ext/gtk2}/rbgtkalignment.c +0 -0
  61. data/{src → ext/gtk2}/rbgtkallocation.c +0 -0
  62. data/{src → ext/gtk2}/rbgtkarrow.c +0 -0
  63. data/{src → ext/gtk2}/rbgtkaspectframe.c +0 -0
  64. data/{src → ext/gtk2}/rbgtkassistant.c +0 -0
  65. data/{src → ext/gtk2}/rbgtkbbox.c +0 -0
  66. data/{src → ext/gtk2}/rbgtkbin.c +0 -0
  67. data/{src → ext/gtk2}/rbgtkbindingset.c +0 -0
  68. data/{src → ext/gtk2}/rbgtkborder.c +0 -0
  69. data/{src → ext/gtk2}/rbgtkbox.c +0 -0
  70. data/{src → ext/gtk2}/rbgtkbuildable.c +0 -0
  71. data/{src → ext/gtk2}/rbgtkbuilder.c +0 -0
  72. data/{src → ext/gtk2}/rbgtkbutton.c +0 -0
  73. data/{src → ext/gtk2}/rbgtkcalendar.c +0 -0
  74. data/{src → ext/gtk2}/rbgtkcelleditable.c +0 -0
  75. data/{src → ext/gtk2}/rbgtkcelllayout.c +0 -0
  76. data/{src → ext/gtk2}/rbgtkcellrenderer.c +0 -0
  77. data/{src → ext/gtk2}/rbgtkcellrendereraccel.c +0 -0
  78. data/{src → ext/gtk2}/rbgtkcellrenderercombo.c +0 -0
  79. data/{src → ext/gtk2}/rbgtkcellrendererpixbuf.c +0 -0
  80. data/{src → ext/gtk2}/rbgtkcellrendererprogress.c +0 -0
  81. data/{src → ext/gtk2}/rbgtkcellrendererspin.c +0 -0
  82. data/{src → ext/gtk2}/rbgtkcellrenderertext.c +0 -0
  83. data/{src → ext/gtk2}/rbgtkcellrenderertoggle.c +0 -0
  84. data/{src → ext/gtk2}/rbgtkcellview.c +0 -0
  85. data/{src → ext/gtk2}/rbgtkcheckbutton.c +0 -0
  86. data/{src → ext/gtk2}/rbgtkcheckmenuitem.c +0 -0
  87. data/{src → ext/gtk2}/rbgtkclipboard.c +0 -0
  88. data/{src → ext/gtk2}/rbgtkcolorbutton.c +0 -0
  89. data/{src → ext/gtk2}/rbgtkcolorsel.c +0 -0
  90. data/{src → ext/gtk2}/rbgtkcolorselectiondialog.c +0 -0
  91. data/{src → ext/gtk2}/rbgtkcombo.c +0 -0
  92. data/{src → ext/gtk2}/rbgtkcombobox.c +0 -0
  93. data/{src → ext/gtk2}/rbgtkcomboboxentry.c +0 -0
  94. data/{src → ext/gtk2}/rbgtkconst.c +0 -0
  95. data/{src → ext/gtk2}/rbgtkcontainer.c +0 -0
  96. data/{src → ext/gtk2}/rbgtkconversions.h +0 -0
  97. data/{src → ext/gtk2}/rbgtkcurve.c +0 -0
  98. data/{src → ext/gtk2}/rbgtkdialog.c +0 -0
  99. data/{src → ext/gtk2}/rbgtkdrag.c +0 -0
  100. data/{src → ext/gtk2}/rbgtkdrawingarea.c +0 -0
  101. data/{src → ext/gtk2}/rbgtkeditable.c +0 -0
  102. data/{src → ext/gtk2}/rbgtkentry.c +0 -0
  103. data/{src → ext/gtk2}/rbgtkentrycompletion.c +0 -0
  104. data/{src → ext/gtk2}/rbgtkeventbox.c +0 -0
  105. data/{src → ext/gtk2}/rbgtkexpander.c +0 -0
  106. data/{src → ext/gtk2}/rbgtkfilechooser.c +0 -0
  107. data/{src → ext/gtk2}/rbgtkfilechooserbutton.c +0 -0
  108. data/{src → ext/gtk2}/rbgtkfilechooserdialog.c +0 -0
  109. data/{src → ext/gtk2}/rbgtkfilechooserwidget.c +0 -0
  110. data/{src → ext/gtk2}/rbgtkfilefilter.c +0 -0
  111. data/{src → ext/gtk2}/rbgtkfilesel.c +0 -0
  112. data/{src → ext/gtk2}/rbgtkfixed.c +0 -0
  113. data/{src → ext/gtk2}/rbgtkfontbutton.c +0 -0
  114. data/{src → ext/gtk2}/rbgtkfontselection.c +0 -0
  115. data/{src → ext/gtk2}/rbgtkfontselectiondialog.c +0 -0
  116. data/{src → ext/gtk2}/rbgtkframe.c +0 -0
  117. data/{src → ext/gtk2}/rbgtkgamma.c +0 -0
  118. data/{src → ext/gtk2}/rbgtkhandlebox.c +0 -0
  119. data/{src → ext/gtk2}/rbgtkhbbox.c +0 -0
  120. data/{src → ext/gtk2}/rbgtkhbox.c +0 -0
  121. data/{src → ext/gtk2}/rbgtkhpaned.c +0 -0
  122. data/{src → ext/gtk2}/rbgtkhruler.c +0 -0
  123. data/{src → ext/gtk2}/rbgtkhscale.c +0 -0
  124. data/{src → ext/gtk2}/rbgtkhscrollbar.c +0 -0
  125. data/{src → ext/gtk2}/rbgtkhseparator.c +0 -0
  126. data/{src → ext/gtk2}/rbgtkiconfactory.c +0 -0
  127. data/{src → ext/gtk2}/rbgtkiconinfo.c +0 -0
  128. data/{src → ext/gtk2}/rbgtkiconset.c +0 -0
  129. data/{src → ext/gtk2}/rbgtkiconsize.c +0 -0
  130. data/{src → ext/gtk2}/rbgtkiconsource.c +0 -0
  131. data/{src → ext/gtk2}/rbgtkicontheme.c +0 -0
  132. data/{src → ext/gtk2}/rbgtkiconview.c +0 -0
  133. data/{src → ext/gtk2}/rbgtkimage.c +0 -0
  134. data/{src → ext/gtk2}/rbgtkimagemenuitem.c +0 -0
  135. data/{src → ext/gtk2}/rbgtkimcontext.c +0 -0
  136. data/{src → ext/gtk2}/rbgtkimcontextsimple.c +0 -0
  137. data/{src → ext/gtk2}/rbgtkimmulticontext.c +0 -0
  138. data/{src → ext/gtk2}/rbgtkinits.c +2 -6
  139. data/{src → ext/gtk2}/rbgtkinputdialog.c +0 -0
  140. data/{src → ext/gtk2}/rbgtkinvisible.c +0 -0
  141. data/{src → ext/gtk2}/rbgtkitem.c +0 -0
  142. data/{src → ext/gtk2}/rbgtkitemfactory.c +0 -0
  143. data/{src → ext/gtk2}/rbgtklabel.c +0 -0
  144. data/{src → ext/gtk2}/rbgtklayout.c +0 -0
  145. data/{src → ext/gtk2}/rbgtklinkbutton.c +0 -0
  146. data/{src → ext/gtk2}/rbgtkliststore.c +0 -0
  147. data/{src → ext/gtk2}/rbgtkmacros.h +0 -0
  148. data/{src → ext/gtk2}/rbgtkmain.c +0 -0
  149. data/{src → ext/gtk2}/rbgtkmenu.c +0 -0
  150. data/{src → ext/gtk2}/rbgtkmenubar.c +0 -0
  151. data/{src → ext/gtk2}/rbgtkmenuitem.c +0 -0
  152. data/{src → ext/gtk2}/rbgtkmenushell.c +0 -0
  153. data/{src → ext/gtk2}/rbgtkmenutoolbutton.c +0 -0
  154. data/{src → ext/gtk2}/rbgtkmessagedialog.c +0 -0
  155. data/{src → ext/gtk2}/rbgtkmisc.c +0 -0
  156. data/{src → ext/gtk2}/rbgtknotebook.c +0 -0
  157. data/{src → ext/gtk2}/rbgtkobject.c +0 -0
  158. data/{src → ext/gtk2}/rbgtkoptionmenu.c +0 -0
  159. data/{src → ext/gtk2}/rbgtkpagesetup.c +0 -0
  160. data/{src → ext/gtk2}/rbgtkpagesetupunixdialog.c +0 -0
  161. data/{src → ext/gtk2}/rbgtkpaned.c +0 -0
  162. data/{src → ext/gtk2}/rbgtkpapersize.c +0 -0
  163. data/{src → ext/gtk2}/rbgtkplug.c +0 -0
  164. data/{src → ext/gtk2}/rbgtkprintcontext.c +0 -0
  165. data/{src → ext/gtk2}/rbgtkprinter.c +0 -0
  166. data/{src → ext/gtk2}/rbgtkprintjob.c +0 -0
  167. data/{src → ext/gtk2}/rbgtkprintoperation.c +0 -0
  168. data/{src → ext/gtk2}/rbgtkprintoperationpreview.c +0 -0
  169. data/{src → ext/gtk2}/rbgtkprintsettings.c +0 -0
  170. data/{src → ext/gtk2}/rbgtkprintunixdialog.c +0 -0
  171. data/{src → ext/gtk2}/rbgtkprogress.c +0 -0
  172. data/{src → ext/gtk2}/rbgtkprogressbar.c +0 -0
  173. data/{src → ext/gtk2}/rbgtkradioaction.c +0 -0
  174. data/{src → ext/gtk2}/rbgtkradiobutton.c +0 -0
  175. data/{src → ext/gtk2}/rbgtkradiomenuitem.c +0 -0
  176. data/{src → ext/gtk2}/rbgtkradiotoolbutton.c +0 -0
  177. data/{src → ext/gtk2}/rbgtkrange.c +0 -0
  178. data/{src → ext/gtk2}/rbgtkrc.c +0 -0
  179. data/{src → ext/gtk2}/rbgtkrcstyle.c +0 -0
  180. data/{src → ext/gtk2}/rbgtkrecentaction.c +0 -0
  181. data/{src → ext/gtk2}/rbgtkrecentchooser.c +0 -0
  182. data/{src → ext/gtk2}/rbgtkrecentchooserdialog.c +0 -0
  183. data/{src → ext/gtk2}/rbgtkrecentchoosermenu.c +0 -0
  184. data/{src → ext/gtk2}/rbgtkrecentchooserwidget.c +0 -0
  185. data/{src → ext/gtk2}/rbgtkrecentdata.c +0 -0
  186. data/{src → ext/gtk2}/rbgtkrecentfilter.c +0 -0
  187. data/{src → ext/gtk2}/rbgtkrecentfilterinfo.c +0 -0
  188. data/{src → ext/gtk2}/rbgtkrecentinfo.c +0 -0
  189. data/{src → ext/gtk2}/rbgtkrecentmanager.c +0 -0
  190. data/{src → ext/gtk2}/rbgtkruler.c +0 -0
  191. data/{src → ext/gtk2}/rbgtkscale.c +0 -0
  192. data/{src → ext/gtk2}/rbgtkscalebutton.c +0 -0
  193. data/{src → ext/gtk2}/rbgtkscrollbar.c +0 -0
  194. data/{src → ext/gtk2}/rbgtkscrolledwindow.c +0 -0
  195. data/{src → ext/gtk2}/rbgtkselection.c +0 -0
  196. data/{src → ext/gtk2}/rbgtkselectiondata.c +0 -0
  197. data/{src → ext/gtk2}/rbgtkseparator.c +0 -0
  198. data/{src → ext/gtk2}/rbgtkseparatormenuitem.c +0 -0
  199. data/{src → ext/gtk2}/rbgtkseparatortoolitem.c +0 -0
  200. data/{src → ext/gtk2}/rbgtksettings.c +0 -0
  201. data/{src → ext/gtk2}/rbgtksizegroup.c +0 -0
  202. data/{src → ext/gtk2}/rbgtksocket.c +0 -0
  203. data/{src → ext/gtk2}/rbgtkspinbutton.c +0 -0
  204. data/{src → ext/gtk2}/rbgtkstatusbar.c +0 -0
  205. data/{src → ext/gtk2}/rbgtkstatusicon.c +0 -0
  206. data/{src → ext/gtk2}/rbgtkstock.c +0 -0
  207. data/{src → ext/gtk2}/rbgtkstyle.c +0 -0
  208. data/{src → ext/gtk2}/rbgtktable.c +0 -0
  209. data/{src → ext/gtk2}/rbgtktargetlist.c +0 -0
  210. data/{src → ext/gtk2}/rbgtktearoffmenuitem.c +0 -0
  211. data/{src → ext/gtk2}/rbgtktextappearance.c +0 -0
  212. data/{src → ext/gtk2}/rbgtktextattributes.c +0 -0
  213. data/{src → ext/gtk2}/rbgtktextbuffer.c +0 -0
  214. data/{src → ext/gtk2}/rbgtktextchild.c +0 -0
  215. data/{src → ext/gtk2}/rbgtktextiter.c +0 -0
  216. data/{src → ext/gtk2}/rbgtktextmark.c +0 -0
  217. data/{src → ext/gtk2}/rbgtktexttag.c +0 -0
  218. data/{src → ext/gtk2}/rbgtktexttagtable.c +0 -0
  219. data/{src → ext/gtk2}/rbgtktextview.c +0 -0
  220. data/{src → ext/gtk2}/rbgtktoggleaction.c +0 -0
  221. data/{src → ext/gtk2}/rbgtktogglebutton.c +0 -0
  222. data/{src → ext/gtk2}/rbgtktoggletoolbutton.c +0 -0
  223. data/{src → ext/gtk2}/rbgtktoolbar.c +0 -0
  224. data/{src → ext/gtk2}/rbgtktoolbutton.c +0 -0
  225. data/{src → ext/gtk2}/rbgtktoolitem.c +0 -0
  226. data/{src → ext/gtk2}/rbgtktooltip.c +0 -0
  227. data/{src → ext/gtk2}/rbgtktooltips.c +0 -0
  228. data/{src → ext/gtk2}/rbgtktreedragdest.c +0 -0
  229. data/{src → ext/gtk2}/rbgtktreedragsource.c +0 -0
  230. data/{src → ext/gtk2}/rbgtktreeiter.c +0 -0
  231. data/{src → ext/gtk2}/rbgtktreemodel.c +0 -0
  232. data/{src → ext/gtk2}/rbgtktreemodelfilter.c +0 -0
  233. data/{src → ext/gtk2}/rbgtktreemodelsort.c +0 -0
  234. data/{src → ext/gtk2}/rbgtktreepath.c +0 -0
  235. data/{src → ext/gtk2}/rbgtktreerowreference.c +0 -0
  236. data/{src → ext/gtk2}/rbgtktreeselection.c +0 -0
  237. data/{src → ext/gtk2}/rbgtktreesortable.c +0 -0
  238. data/{src → ext/gtk2}/rbgtktreestore.c +0 -0
  239. data/{src → ext/gtk2}/rbgtktreeview.c +0 -0
  240. data/{src → ext/gtk2}/rbgtktreeviewcolumn.c +0 -0
  241. data/{src → ext/gtk2}/rbgtkuimanager.c +0 -0
  242. data/{src → ext/gtk2}/rbgtkvbbox.c +0 -0
  243. data/{src → ext/gtk2}/rbgtkvbox.c +0 -0
  244. data/{src → ext/gtk2}/rbgtkviewport.c +0 -0
  245. data/{src → ext/gtk2}/rbgtkvolumebutton.c +0 -0
  246. data/{src → ext/gtk2}/rbgtkvpaned.c +0 -0
  247. data/{src → ext/gtk2}/rbgtkvruler.c +0 -0
  248. data/{src → ext/gtk2}/rbgtkvscale.c +0 -0
  249. data/{src → ext/gtk2}/rbgtkvscrollbar.c +0 -0
  250. data/{src → ext/gtk2}/rbgtkvseparator.c +0 -0
  251. data/{src → ext/gtk2}/rbgtkwidget.c +0 -0
  252. data/{src → ext/gtk2}/rbgtkwindow.c +0 -0
  253. data/{src → ext/gtk2}/rbgtkwindowgroup.c +0 -0
  254. data/extconf.rb +48 -113
  255. data/{src/lib → lib}/gtk2.rb +0 -0
  256. data/{src/lib → lib}/gtk2/base.rb +12 -1
  257. data/sample/gtk-demo/README +7 -0
  258. data/sample/gtk-demo/alphatest.png +0 -0
  259. data/sample/gtk-demo/apple-red.png +0 -0
  260. data/sample/gtk-demo/appwindow.rb +233 -0
  261. data/sample/gtk-demo/background.jpg +0 -0
  262. data/sample/gtk-demo/builder.rb +51 -0
  263. data/sample/gtk-demo/button_box.rb +84 -0
  264. data/sample/gtk-demo/cairo-arc-negative.rb +41 -0
  265. data/sample/gtk-demo/cairo-arc.rb +41 -0
  266. data/sample/gtk-demo/cairo-clip-image.rb +51 -0
  267. data/sample/gtk-demo/cairo-clip-rectangle.rb +35 -0
  268. data/sample/gtk-demo/cairo-clip.rb +35 -0
  269. data/sample/gtk-demo/cairo-curve-rectangle.rb +76 -0
  270. data/sample/gtk-demo/cairo-curve-to.rb +43 -0
  271. data/sample/gtk-demo/cairo-dash.rb +39 -0
  272. data/sample/gtk-demo/cairo-fill-and-stroke.rb +32 -0
  273. data/sample/gtk-demo/cairo-fill-and-stroke2.rb +38 -0
  274. data/sample/gtk-demo/cairo-gradient.rb +35 -0
  275. data/sample/gtk-demo/cairo-image-pattern.rb +39 -0
  276. data/sample/gtk-demo/cairo-image.rb +49 -0
  277. data/sample/gtk-demo/cairo-line-cap.rb +53 -0
  278. data/sample/gtk-demo/cairo-line-join.rb +41 -0
  279. data/sample/gtk-demo/cairo-long-lines.rb +41 -0
  280. data/sample/gtk-demo/cairo-operator.rb +83 -0
  281. data/sample/gtk-demo/cairo-path.rb +28 -0
  282. data/sample/gtk-demo/cairo-pattern-fill.rb +88 -0
  283. data/sample/gtk-demo/cairo-self-intersect.rb +32 -0
  284. data/sample/gtk-demo/cairo-text-align-center.rb +45 -0
  285. data/sample/gtk-demo/cairo-text-extents.rb +46 -0
  286. data/sample/gtk-demo/cairo-text.rb +43 -0
  287. data/sample/gtk-demo/changedisplay.rb +408 -0
  288. data/sample/gtk-demo/clipboard.rb +72 -0
  289. data/sample/gtk-demo/colorsel.rb +84 -0
  290. data/sample/gtk-demo/common.rb +88 -0
  291. data/sample/gtk-demo/demo.ui +258 -0
  292. data/sample/gtk-demo/dialog.rb +137 -0
  293. data/sample/gtk-demo/drawingarea.rb +226 -0
  294. data/sample/gtk-demo/editable_cells.rb +172 -0
  295. data/sample/gtk-demo/entry_completion.rb +63 -0
  296. data/sample/gtk-demo/expander.rb +40 -0
  297. data/sample/gtk-demo/floppybuddy.gif +0 -0
  298. data/sample/gtk-demo/gnome-applets.png +0 -0
  299. data/sample/gtk-demo/gnome-calendar.png +0 -0
  300. data/sample/gtk-demo/gnome-foot.png +0 -0
  301. data/sample/gtk-demo/gnome-fs-directory.png +0 -0
  302. data/sample/gtk-demo/gnome-fs-regular.png +0 -0
  303. data/sample/gtk-demo/gnome-gimp.png +0 -0
  304. data/sample/gtk-demo/gnome-gmush.png +0 -0
  305. data/sample/gtk-demo/gnome-gsame.png +0 -0
  306. data/sample/gtk-demo/gnu-keys.png +0 -0
  307. data/sample/gtk-demo/gtk-logo-rgb.gif +0 -0
  308. data/sample/gtk-demo/hypertext.rb +211 -0
  309. data/sample/gtk-demo/iconview.rb +109 -0
  310. data/sample/gtk-demo/images.rb +197 -0
  311. data/sample/gtk-demo/item_factory.rb +94 -0
  312. data/sample/gtk-demo/list_store.rb +138 -0
  313. data/sample/gtk-demo/main.rb +380 -0
  314. data/sample/gtk-demo/menus.rb +172 -0
  315. data/sample/gtk-demo/panes.rb +156 -0
  316. data/sample/gtk-demo/pixbufs.rb +176 -0
  317. data/sample/gtk-demo/printing.rb +128 -0
  318. data/sample/gtk-demo/rotated_text.rb +84 -0
  319. data/sample/gtk-demo/ruby-gnome2-logo.png +0 -0
  320. data/sample/gtk-demo/sizegroup.rb +118 -0
  321. data/sample/gtk-demo/stock_browser.rb +235 -0
  322. data/sample/gtk-demo/textview.rb +435 -0
  323. data/sample/gtk-demo/tree_store.rb +270 -0
  324. data/sample/misc/aboutdialog.rb +42 -0
  325. data/sample/misc/aboutdialog2.rb +42 -0
  326. data/sample/misc/alpha-demo.rb +70 -0
  327. data/sample/misc/assistant.rb +347 -0
  328. data/sample/misc/bindings.rb +107 -0
  329. data/sample/misc/button.rb +69 -0
  330. data/sample/misc/button2.rb +28 -0
  331. data/sample/misc/buttonbox.rb +93 -0
  332. data/sample/misc/cairo-pong.rb +215 -0
  333. data/sample/misc/calendar.rb +62 -0
  334. data/sample/misc/checkbutton.rb +46 -0
  335. data/sample/misc/colorselection.rb +25 -0
  336. data/sample/misc/combo_check.rb +71 -0
  337. data/sample/misc/combobox.rb +86 -0
  338. data/sample/misc/composited-windows.rb +113 -0
  339. data/sample/misc/cursor.rb +32 -0
  340. data/sample/misc/dialog.rb +44 -0
  341. data/sample/misc/dialog2.rb +39 -0
  342. data/sample/misc/dnd.rb +65 -0
  343. data/sample/misc/dndtreeview.rb +56 -0
  344. data/sample/misc/drag-move.rb +131 -0
  345. data/sample/misc/drawing.rb +90 -0
  346. data/sample/misc/entry.rb +34 -0
  347. data/sample/misc/entrycompletion.rb +39 -0
  348. data/sample/misc/expander.rb +27 -0
  349. data/sample/misc/filechooser.rb +49 -0
  350. data/sample/misc/fileselection.rb +26 -0
  351. data/sample/misc/frame.rb +69 -0
  352. data/sample/misc/gc.rb +59 -0
  353. data/sample/misc/gdkscreen.rb +32 -0
  354. data/sample/misc/gnome-logo-icon.png +0 -0
  355. data/sample/misc/helloworld.rb +35 -0
  356. data/sample/misc/iconview.rb +38 -0
  357. data/sample/misc/image.rb +42 -0
  358. data/sample/misc/itemfactory.rb +73 -0
  359. data/sample/misc/itemfactory2.rb +74 -0
  360. data/sample/misc/keyboard_grab.rb +29 -0
  361. data/sample/misc/label.rb +33 -0
  362. data/sample/misc/linkbutton.rb +42 -0
  363. data/sample/misc/listview.rb +92 -0
  364. data/sample/misc/menu.rb +81 -0
  365. data/sample/misc/misc_button.rb +59 -0
  366. data/sample/misc/mouse-gesture.rb +465 -0
  367. data/sample/misc/pangorenderer.rb +66 -0
  368. data/sample/misc/pointer_grab.rb +34 -0
  369. data/sample/misc/print.rb +247 -0
  370. data/sample/misc/properties.rb +85 -0
  371. data/sample/misc/radiobutton.rb +47 -0
  372. data/sample/misc/recentchooserdialog.rb +59 -0
  373. data/sample/misc/rgtk+cairo.rb +44 -0
  374. data/sample/misc/scalebutton.rb +25 -0
  375. data/sample/misc/settings.rb +41 -0
  376. data/sample/misc/statusicon.rb +123 -0
  377. data/sample/misc/stock.rb +36 -0
  378. data/sample/misc/style_property.rb +67 -0
  379. data/sample/misc/style_property.rc +19 -0
  380. data/sample/misc/t-gtkplug.rb +58 -0
  381. data/sample/misc/t-gtksocket.rb +65 -0
  382. data/sample/misc/test.xpm +92 -0
  383. data/sample/misc/textbuffer_serialize.rb +130 -0
  384. data/sample/misc/threads.rb +72 -0
  385. data/sample/misc/to_drawable.rb +42 -0
  386. data/sample/misc/togglebutton.rb +34 -0
  387. data/sample/misc/toolbar.rb +55 -0
  388. data/sample/misc/tooltips.rb +204 -0
  389. data/sample/misc/tree_combo.rb +85 -0
  390. data/sample/misc/tree_progress.rb +69 -0
  391. data/sample/misc/treemodelfilter.rb +55 -0
  392. data/sample/misc/treeview.rb +71 -0
  393. data/sample/misc/uimanager.rb +148 -0
  394. data/sample/misc/uimanager2.rb +91 -0
  395. data/sample/misc/uimanager2.xml +36 -0
  396. data/sample/misc/window.rb +24 -0
  397. data/sample/misc/xbm_cursor.rb +43 -0
  398. data/sample/testgtk/3DRings.xpm +116 -0
  399. data/sample/testgtk/FilesQueue.xpm +98 -0
  400. data/sample/testgtk/Modeller.xpm +117 -0
  401. data/sample/testgtk/README +14 -0
  402. data/sample/testgtk/button.rb +133 -0
  403. data/sample/testgtk/buttonbox.rb +108 -0
  404. data/sample/testgtk/check-n.xpm +21 -0
  405. data/sample/testgtk/check-y.xpm +21 -0
  406. data/sample/testgtk/checkbutton.rb +67 -0
  407. data/sample/testgtk/circles.xbm +46 -0
  408. data/sample/testgtk/colorselect.rb +33 -0
  409. data/sample/testgtk/dialog.rb +47 -0
  410. data/sample/testgtk/entry.rb +73 -0
  411. data/sample/testgtk/filesel.rb +67 -0
  412. data/sample/testgtk/fontselection.rb +56 -0
  413. data/sample/testgtk/gammacurve.rb +70 -0
  414. data/sample/testgtk/labels.rb +73 -0
  415. data/sample/testgtk/layout.rb +108 -0
  416. data/sample/testgtk/marble.xpm +408 -0
  417. data/sample/testgtk/menu.rb +79 -0
  418. data/sample/testgtk/notebook.rb +281 -0
  419. data/sample/testgtk/pixmap.rb +58 -0
  420. data/sample/testgtk/progressbar.rb +181 -0
  421. data/sample/testgtk/radiobutton.rb +61 -0
  422. data/sample/testgtk/range.rb +65 -0
  423. data/sample/testgtk/reparent.rb +91 -0
  424. data/sample/testgtk/rulers.rb +46 -0
  425. data/sample/testgtk/sample.rb +80 -0
  426. data/sample/testgtk/savedposition.rb +87 -0
  427. data/sample/testgtk/scrolledwindow.rb +67 -0
  428. data/sample/testgtk/shapedwindow.rb +99 -0
  429. data/sample/testgtk/spinbutton.rb +181 -0
  430. data/sample/testgtk/statusbar.rb +89 -0
  431. data/sample/testgtk/test.xpm +92 -0
  432. data/sample/testgtk/testgtk.rb +179 -0
  433. data/sample/testgtk/testgtkrc +146 -0
  434. data/sample/testgtk/testgtkrc2 +21 -0
  435. data/sample/testgtk/togglebutton.rb +53 -0
  436. data/sample/testgtk/toolbar.rb +82 -0
  437. data/sample/testgtk/tooltips.rb +41 -0
  438. data/sample/testgtk/wmhints.rb +40 -0
  439. data/test/run-test.rb +10 -8
  440. data/test/test_gtk_builder.rb +1 -1
  441. metadata +495 -334
  442. data/src/makeinits.rb +0 -57
  443. data/src/makekeysyms.rb +0 -5
@@ -0,0 +1,94 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: item_factory.rb,v 1.4 2005/02/12 23:02:43 kzys Exp $
5
+ =begin
6
+ = Item Factory
7
+
8
+ The Gtk::ItemFactory object allows the easy creation of menus
9
+ from an array of descriptions of menu items.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class ItemFactory < BasicWindow
15
+ def initialize
16
+ super('Item Factory')
17
+
18
+ accel_group = Gtk::AccelGroup.new
19
+ item_factory = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR,
20
+ '<main>', accel_group)
21
+
22
+ add_accel_group(accel_group)
23
+ set_border_width(0)
24
+ ifactory_cb = proc do |data, widget|
25
+ puts "ItemFactory: activated \"#{Gtk::ItemFactory.path_from_widget(widget)}\""
26
+ end
27
+ menu_items = [
28
+ ['/_File'],
29
+ ['/File/tearoff1',
30
+ '<Tearoff>', nil, nil, ifactory_cb],
31
+ ['/File/_New',
32
+ '<Item>', '<control>N', nil, ifactory_cb],
33
+ ['/File/_Open',
34
+ '<Item>', '<control>O', nil, ifactory_cb],
35
+ ['/File/_Save',
36
+ '<Item>', '<control>S', nil, ifactory_cb],
37
+ ['/File/Save _As...',
38
+ '<Item>', nil, nil, ifactory_cb],
39
+ ['/File/sep1', '<Separator>'],
40
+ ['/File/_Quit',
41
+ '<Item>', '<control>Q', nil, ifactory_cb],
42
+
43
+ ['/_Preferences'],
44
+ ['/_Preferences/_Color'],
45
+ [ '/_Preferences/Color/_Red',
46
+ '<RadioItem>', nil, nil, ifactory_cb],
47
+ ['/_Preferences/Color/_Green',
48
+ '/Preferences/Color/Red', nil, nil, ifactory_cb],
49
+ ['/_Preferences/Color/_Blue',
50
+ '/Preferences/Color/Red', nil, nil, ifactory_cb],
51
+ ['/_Preferences/_Shape'],
52
+ ['/_Preferences/Shape/_Square',
53
+ '<RadioItem>', nil, nil, ifactory_cb],
54
+ [ '/_Preferences/Shape/_Rectangle',
55
+ '/Preferences/Shape/Square', nil, nil, ifactory_cb],
56
+ [ '/_Preferences/Shape/_Oval',
57
+ '/Preferences/Shape/Rectangle', nil, nil, ifactory_cb],
58
+
59
+ [ '/_Help', '<LastBranch>'],
60
+ [ '/Help/_About', '<Item>', nil, nil, ifactory_cb],
61
+ ]
62
+ item_factory.create_items(menu_items)
63
+
64
+ item_factory.get_item('/Preferences/Shape/Oval').set_active(true)
65
+
66
+ box1 = Gtk::VBox.new(false, 0)
67
+ add(box1)
68
+
69
+ box1.pack_start(item_factory.get_widget('<main>'), false, false, 0)
70
+
71
+ label = Gtk::Label.new("Type\n<alt>\nto start")
72
+ label.set_size_request(200, 200)
73
+ label.set_alignment(0.5, 0.5)
74
+ box1.pack_start(label, true, true, 0)
75
+
76
+ separator = Gtk::HSeparator.new
77
+ box1.pack_start(separator)
78
+
79
+
80
+ box2 = Gtk::VBox.new(false, 10)
81
+ box2.set_border_width(10)
82
+ box1.pack_start(box2, false, true, 0)
83
+
84
+ button = Gtk::Button.new('close')
85
+ # TODO: Need signal_connect_swapped?
86
+ button.signal_connect('clicked') do
87
+ quit
88
+ end
89
+ box2.pack_start(button, true, true, 0)
90
+ button.set_flags(Gtk::Widget::CAN_DEFAULT)
91
+ button.grab_default
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,138 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: list_store.rb,v 1.5 2005/02/06 18:25:13 kzys Exp $
5
+ =begin
6
+ = Tree View/List Store
7
+
8
+ The Gtk::ListStore is used to store data in list form, to be used
9
+ later on by a Gtk::TreeView to display it. This demo builds a
10
+ simple Gtk::ListStore and displays it. See the Stock Browser
11
+ demo for a more advanced example.
12
+ =end
13
+ require 'common'
14
+
15
+ module Demo
16
+ class ListStore < BasicWindow
17
+ Bug = Struct.new('Bug', :fixed, :number, :severity, :description)
18
+ COLUMN_FIXED, COLUMN_NUMBER, COLUMN_SEVERITY, COLUMN_DESCRIPTION,
19
+ NUM_COLUMNS = *(0..5).to_a
20
+ DATA = [
21
+ [ false, 60482, 'Normal', 'scrollable notebooks and hidden tabs' ],
22
+ [ false, 60620, 'Critical', 'gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe' ],
23
+ [ false, 50214, 'Major', 'Xft support does not clean up correctly' ],
24
+ [ true, 52877, 'Major', 'GtkFileSelection needs a refresh method. ' ],
25
+ [ false, 56070, 'Normal', "Can't click button after setting in sensitive" ],
26
+ [ true, 56355, 'Normal', 'GtkLabel - Not all changes propagate correctly' ],
27
+ [ false, 50055, 'Normal', 'Rework width/height computations for TreeView' ],
28
+ [ false, 58278, 'Normal', "gtk_dialog_set_response_sensitive doesn't work" ],
29
+ [ false, 55767, 'Normal', 'Getters for all setters' ],
30
+ [ false, 56925, 'Normal', 'Gtkcalender size' ],
31
+ [ false, 56221, 'Normal', 'Selectable label needs right-click copy menu' ],
32
+ [ true, 50939, 'Normal', 'Add shift clicking to GtkTextView' ],
33
+ [ false, 6112, 'Enhancement','netscape-like collapsable toolbars' ],
34
+ [ false, 1, 'Normal', 'First bug :=)' ],
35
+ ].collect do |ary|
36
+ Bug.new(*ary)
37
+ end
38
+ def initialize
39
+ super('GtkListStore demo')
40
+ self.border_width = 8
41
+
42
+ vbox = Gtk::VBox.new(false, 8)
43
+ add(vbox)
44
+
45
+ label = Gtk::Label.new('This is the bug list (note: not based on real data, it would be nice to have a nice ODBC interface to bugzilla or so, though).')
46
+ vbox.pack_start(label, false, false, 0)
47
+
48
+ sw = Gtk::ScrolledWindow.new(nil, nil)
49
+ sw.shadow_type = Gtk::SHADOW_ETCHED_IN
50
+ sw.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC)
51
+ vbox.pack_start(sw, true, true, 0)
52
+
53
+ # create tree model
54
+ model = create_model
55
+
56
+ # create tree view
57
+ treeview = Gtk::TreeView.new(model)
58
+ treeview.rules_hint = true
59
+ treeview.search_column = COLUMN_DESCRIPTION
60
+
61
+ sw.add(treeview)
62
+
63
+ # add columns to the tree view
64
+ add_columns(treeview)
65
+
66
+ set_default_size(280, 250)
67
+ end
68
+
69
+ def create_model
70
+ # create list store
71
+ store = Gtk::ListStore.new(TrueClass, Integer, String, String)
72
+
73
+ # add data to the list store
74
+ DATA.each do |bug|
75
+ iter = store.append
76
+ bug.each_with_index do |value, index|
77
+ iter[index] = value
78
+ end
79
+ end
80
+ return store
81
+ end
82
+
83
+ def add_columns(treeview)
84
+ # column for fixed toggles
85
+ renderer = Gtk::CellRendererToggle.new
86
+ renderer.signal_connect('toggled') do |cell, path|
87
+ fixed_toggled(treeview.model, path)
88
+ end
89
+
90
+ column = Gtk::TreeViewColumn.new('Fixed?',
91
+ renderer,
92
+ 'active' => COLUMN_FIXED)
93
+
94
+ # set this column to a fixed sizing (of 50 pixels)
95
+ column.sizing = Gtk::TreeViewColumn::FIXED
96
+ column.fixed_width = 50
97
+ treeview.append_column(column)
98
+
99
+ # column for bug numbers
100
+ renderer = Gtk::CellRendererText.new
101
+ column = Gtk::TreeViewColumn.new('Bug number',
102
+ renderer,
103
+ 'text' => COLUMN_NUMBER)
104
+ column.set_sort_column_id(COLUMN_NUMBER)
105
+ treeview.append_column(column)
106
+
107
+ # column for severities
108
+ renderer = Gtk::CellRendererText.new
109
+ column = Gtk::TreeViewColumn.new('Severity',
110
+ renderer,
111
+ 'text' => COLUMN_SEVERITY)
112
+ column.set_sort_column_id(COLUMN_SEVERITY)
113
+ treeview.append_column(column)
114
+
115
+ # column for description
116
+ renderer = Gtk::CellRendererText.new
117
+ column = Gtk::TreeViewColumn.new('Description',
118
+ renderer,
119
+ 'text' => COLUMN_DESCRIPTION)
120
+ column.set_sort_column_id(COLUMN_DESCRIPTION)
121
+ treeview.append_column(column)
122
+ end
123
+
124
+ def fixed_toggled(model, path_str)
125
+ path = Gtk::TreePath.new(path_str)
126
+
127
+ # get toggled iter
128
+ iter = model.get_iter(path)
129
+ fixed =iter[COLUMN_FIXED]
130
+
131
+ # do something with the value
132
+ fixed ^= 1
133
+
134
+ # set new value
135
+ iter[COLUMN_FIXED] = fixed
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,380 @@
1
+ #! /usr/bin/env ruby
2
+ =begin
3
+ main.rb - Main class of gtk-demo.
4
+
5
+ Copyright (c) 2003-2006 Ruby-GNOME2 Project Team
6
+ This program is licenced under the same licence as Ruby-GNOME2.
7
+
8
+ $Id: main.rb,v 1.20 2007/07/09 13:21:54 ggc Exp $
9
+ =end
10
+
11
+ require 'gtk2'
12
+
13
+ module Demo
14
+
15
+ class Main < Gtk::Window
16
+ TITLE_COLUMN, FILENAME_COLUMN, CLASS_COLUMN, ITALIC_COLUMN = 0, 1, 2, 3
17
+
18
+ def initialize
19
+ super()
20
+
21
+ @current_file = nil
22
+
23
+ @info_buffer = Gtk::TextBuffer.new
24
+ @source_buffer = Gtk::TextBuffer.new
25
+
26
+ set_title('Ruby/GTK+ Code Demos')
27
+ signal_connect('destroy') do
28
+ Gtk.main_quit
29
+ end
30
+
31
+ signal_connect("key_press_event") do |widget, event|
32
+ if event.state.control_mask? and event.keyval == Gdk::Keyval::GDK_q
33
+ destroy
34
+ true
35
+ else
36
+ false
37
+ end
38
+ end
39
+
40
+ hbox = Gtk::HBox.new
41
+ add(hbox)
42
+
43
+ tree = create_tree
44
+ scrolled_window = Gtk::ScrolledWindow.new
45
+ scrolled_window.add(tree)
46
+ hbox.pack_start(scrolled_window, false, false, 0)
47
+
48
+ notebook = Gtk::Notebook.new
49
+ hbox.pack_start(notebook, true, true, 0)
50
+
51
+ notebook.append_page(create_text(@info_buffer, false),
52
+ Gtk::Label.new('_Info', true))
53
+
54
+ notebook.append_page(create_text(@source_buffer, true),
55
+ Gtk::Label.new('_Source', true))
56
+
57
+ @info_buffer.create_tag('title',
58
+ {'font' => 'Sans 18'})
59
+
60
+ @source_buffer.create_tag('comment',
61
+ {'foreground' => 'red'})
62
+ @source_buffer.create_tag('const',
63
+ {'foreground' => 'ForestGreen'})
64
+ @source_buffer.create_tag('string',
65
+ {
66
+ 'foreground' => 'RosyBrown',
67
+ 'weight' => Pango::FontDescription::WEIGHT_BOLD
68
+ })
69
+ @source_buffer.create_tag('reserved',
70
+ {'foreground' => 'purple'})
71
+ end
72
+
73
+ def script_info(path)
74
+ title = nil
75
+ klass = nil
76
+ depend = nil
77
+
78
+ file = File.open(path)
79
+ file.each do |ln|
80
+ if not title and ln =~ /^=\s+(.*)$/
81
+ title = $1
82
+ if title =~ /^(.*)\((.+?)\)$/
83
+ title = $1
84
+ depend = $2
85
+ end
86
+ elsif not klass and ln =~ /\s*class\s+([A-Z][A-Za-z0-9_]*)/
87
+ klass = $1
88
+ end
89
+
90
+ if title and klass
91
+ break
92
+ end
93
+ end
94
+
95
+ if not klass
96
+ raise "File not found: #{path}. This script should be run from its directory."
97
+ end
98
+
99
+ return title, klass.intern, depend
100
+ end
101
+
102
+ def generate_index
103
+ # Target scripts
104
+ scripts = Dir.glob('*.rb') - %w(common.rb main.rb)
105
+
106
+ # Generate index tree
107
+ children = {}
108
+ index = []
109
+
110
+ scripts.each do |fn|
111
+ title, klass, depend = script_info(fn)
112
+
113
+ if depend and not Gtk.const_defined?(depend)
114
+ next
115
+ end
116
+
117
+ if title =~ %r{^(.+?)/(.+)$}
118
+ parent = $1
119
+ child = $2
120
+
121
+ unless children[parent]
122
+ children[parent] = []
123
+ index += [[parent, nil, nil, []]]
124
+ end
125
+
126
+ children[parent] += [[child, fn, klass]]
127
+ else
128
+ index += [[title, fn, klass]]
129
+ end
130
+ end
131
+
132
+ # Sort children
133
+ children.each_key do |parent|
134
+ children[parent].sort! do |a, b|
135
+ a[0] <=> b[0]
136
+ end
137
+ end
138
+
139
+ # Expand children
140
+ index.collect! do |row|
141
+ if row[3]
142
+ row[3] = children[row[0]]
143
+ end
144
+
145
+ row
146
+ end
147
+
148
+ index.sort! do |a, b|
149
+ a[0] <=> b[0]
150
+ end
151
+
152
+ index
153
+ end
154
+
155
+ def create_tree
156
+ model = Gtk::TreeStore.new(String, String, String, TrueClass)
157
+
158
+ tree_view = Gtk::TreeView.new
159
+ tree_view.set_model(model)
160
+ selection = tree_view.selection
161
+
162
+ selection.set_mode(Gtk::SELECTION_BROWSE)
163
+ tree_view.set_size_request(200, -1)
164
+
165
+ append_children(model, generate_index)
166
+
167
+ cell = Gtk::CellRendererText.new
168
+ cell.style = Pango::FontDescription::STYLE_ITALIC
169
+ column = Gtk::TreeViewColumn.new("Widget (double click for demo)", cell,
170
+ {
171
+ 'text' => TITLE_COLUMN,
172
+ 'style_set' => ITALIC_COLUMN,
173
+ })
174
+
175
+ tree_view.append_column(column)
176
+
177
+ selection.signal_connect('changed') do |selection|
178
+ iter = selection.selected
179
+ load_file(iter.get_value(FILENAME_COLUMN)) if iter
180
+ end
181
+ tree_view.signal_connect('row_activated') do |tree_view, path, column|
182
+ row_activated_cb(tree_view.model, path)
183
+ end
184
+
185
+ tree_view.expand_all
186
+ return tree_view
187
+ end
188
+
189
+ def append_children(model, source, parent = nil)
190
+ source.each do |title, filename, klass, children|
191
+ iter = model.append(parent)
192
+
193
+ [title, filename, klass].each_with_index do |value, i|
194
+ if value
195
+ iter.set_value(i, value)
196
+ end
197
+ end
198
+ iter.set_value(ITALIC_COLUMN, false)
199
+
200
+ if children
201
+ append_children(model, children, iter)
202
+ end
203
+ end
204
+ end
205
+
206
+ def row_activated_cb(model, path)
207
+ iter = model.get_iter(path)
208
+ iter.set_value(ITALIC_COLUMN, true)
209
+
210
+ lib = iter.get_value(FILENAME_COLUMN)
211
+ if lib
212
+ require(lib)
213
+
214
+ klass = Demo.const_get(iter.get_value(CLASS_COLUMN))
215
+ window = klass.new
216
+ window.signal_connect('destroy') do
217
+ iter.set_value(ITALIC_COLUMN, false)
218
+ end
219
+ window.show_all
220
+ @window = window
221
+ end
222
+ end
223
+
224
+ def create_text(buffer, is_source)
225
+ scrolled_window = Gtk::ScrolledWindow.new
226
+ scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC,
227
+ Gtk::POLICY_AUTOMATIC)
228
+ scrolled_window.set_shadow_type(Gtk::SHADOW_IN)
229
+
230
+ text_view = Gtk::TextView.new
231
+
232
+ text_view.set_buffer(buffer)
233
+ text_view.set_editable(false)
234
+ text_view.set_cursor_visible(false)
235
+
236
+ scrolled_window.add(text_view)
237
+
238
+ if is_source
239
+ font_desc = Pango::FontDescription.new('Monospace 12')
240
+ text_view.modify_font(font_desc)
241
+
242
+ text_view.set_wrap_mode(Gtk::TextTag::WRAP_NONE)
243
+ else
244
+ text_view.set_wrap_mode(Gtk::TextTag::WRAP_WORD)
245
+ text_view.set_pixels_above_lines(2)
246
+ text_view.set_pixels_below_lines(2)
247
+ end
248
+
249
+ return scrolled_window
250
+ end
251
+
252
+ def fontify(start_iter = @source_buffer.start_iter,
253
+ end_iter = @source_buffer.end_iter)
254
+ str = @source_buffer.get_text(start_iter, end_iter, true)
255
+
256
+ tokenizer = RubyTokonizer.new
257
+ tokenizer.tokenize(str, start_iter.offset) do |tag, start, last|
258
+ @source_buffer.apply_tag(tag.to_s,
259
+ @source_buffer.get_iter_at_offset(start),
260
+ @source_buffer.get_iter_at_offset(last))
261
+ end
262
+ end
263
+
264
+
265
+ def load_file(filename)
266
+ if filename == @current_file
267
+ return
268
+ end
269
+
270
+ @info_buffer.delete(*@info_buffer.bounds)
271
+
272
+ @source_buffer.delete(*@source_buffer.bounds)
273
+
274
+ file = begin
275
+ File.open(filename)
276
+ rescue
277
+ $stderr.puts "Cannot open: #{$!}" if $DEBUG
278
+ return
279
+ end
280
+ start = @info_buffer.get_iter_at_offset(0)
281
+ state = :before_header
282
+
283
+ file.each do |line|
284
+ case state
285
+ when :before_header
286
+ if line =~ /^=begin$/
287
+ state = :in_header
288
+ end
289
+ when :in_header
290
+ if line =~ /^=end$/
291
+ state = :body
292
+ start = @source_buffer.get_iter_at_offset(0)
293
+ elsif line =~ /^=\s+(.*)$/
294
+ title = $1
295
+ title.gsub!(/\s*\(.*\)$/, '') # Delete depend field
296
+
297
+ last = start
298
+
299
+ @info_buffer.insert(last, title)
300
+ start = last.clone
301
+
302
+ start.backward_chars(title.length)
303
+ @info_buffer.apply_tag('title', start, last)
304
+
305
+ start = last
306
+ else
307
+ @info_buffer.insert(start, line)
308
+ end
309
+ when :body # Reading program body
310
+ @source_buffer.insert(start, line)
311
+ end
312
+ end
313
+
314
+ fontify
315
+
316
+ @current_file = filename
317
+ end
318
+ end
319
+
320
+ class RubyTokonizer
321
+ RESERVED_WORDS = %w(begin end module class def if then else while unless do case when require yield)
322
+ RESERVED_WORDS_PATTERN = Regexp.compile(/(^|\s+)(#{RESERVED_WORDS.collect do |pat| Regexp.quote(pat) end.join('|')})(\s+|$)/)
323
+
324
+ def tokenize(str, index = 0)
325
+ until str.empty?
326
+ tag = nil
327
+
328
+ case str
329
+ when /".+?"/, /'.+?'/
330
+ tag = :string
331
+ when /#.*$/
332
+ tag = :comment
333
+ when RESERVED_WORDS_PATTERN
334
+ tag = :reserved
335
+ when /[A-Z][A-Za-z0-9_]+/
336
+ tag = :const
337
+ end
338
+
339
+ if tag
340
+ tokenize($~.pre_match, index) do |*args|
341
+ yield(*args)
342
+ end
343
+ yield(tag, index + $~.begin(0), index + $~.end(0))
344
+ index += (str.length - $~.post_match.length)
345
+ str = $~.post_match
346
+ else
347
+ index += str.length
348
+ str = ''
349
+ end
350
+ end
351
+ end
352
+ end
353
+ end
354
+
355
+
356
+ target = ARGV.shift
357
+ if target
358
+ Demo::INDEX.each do |title, filename, klass_symbol, children|
359
+ if target == filename or target == klass_symbol.id2name
360
+ require filename
361
+
362
+ window = Demo.const_get(klass_symbol).new
363
+ window.show_all
364
+
365
+ class << window
366
+ def quit
367
+ Gtk.main_quit
368
+ end
369
+ end
370
+
371
+ break
372
+ end
373
+ end
374
+ else
375
+ main = Demo::Main.new
376
+ main.set_default_size(600, 400)
377
+ main.show_all
378
+ end
379
+
380
+ Gtk.main