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,137 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: dialog.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
5
+ =begin
6
+ = Dialog and Message Boxes
7
+
8
+ Dialog widgets are used to pop up a transient window for user feedback.
9
+ =end
10
+
11
+ require 'common'
12
+
13
+ module Demo
14
+ class Dialog < Demo::BasicWindow
15
+ def initialize
16
+ @count = 1
17
+
18
+ super('Dialogs')
19
+ set_border_width(8)
20
+
21
+ frame = Gtk::Frame.new('Dialogs')
22
+ add(frame)
23
+
24
+ vbox = Gtk::VBox.new(false, 8)
25
+ vbox.set_border_width(8)
26
+ frame.add(vbox)
27
+
28
+ # Standard message dialog
29
+ hbox = Gtk::HBox.new(false, 0)
30
+ vbox.pack_start(hbox, false, false, 0)
31
+ button = Gtk::Button.new('_Message Dialog', true)
32
+ button.signal_connect('clicked') do
33
+ message_dialog_clicked
34
+ end
35
+ hbox.pack_start(button, false, false, 0)
36
+
37
+ vbox.pack_start(Gtk::HSeparator.new, false, false, 0)
38
+
39
+ # Interactive dialog
40
+ hbox = Gtk::HBox.new(false, 8)
41
+ vbox.pack_start(hbox, false, false, 0)
42
+ vbox2 = Gtk::VBox.new(false, 0)
43
+
44
+ button = Gtk::Button.new('_Interactive Dialog')
45
+ button.signal_connect('clicked') do
46
+ interactive_dialog_clicked
47
+ end
48
+ hbox.pack_start(vbox2, false, false, 0)
49
+ vbox2.pack_start(button, false, false, 0)
50
+
51
+ table = Gtk::Table.new(2, 2, false)
52
+ table.set_row_spacings(4)
53
+ table.set_column_spacings(4)
54
+ hbox.pack_start(table, false, false, 0)
55
+
56
+ label = Gtk::Label.new('_Entry 1', true)
57
+ table.attach_defaults(label, 0, 1, 0, 1)
58
+
59
+ @entry1 = Gtk::Entry.new
60
+ table.attach_defaults(@entry1, 1, 2, 0, 1)
61
+ label.set_mnemonic_widget(@entry1)
62
+
63
+ label = Gtk::Label.new('E_ntry 2', true)
64
+
65
+ table.attach_defaults(label, 0, 1, 1, 2)
66
+
67
+ @entry2 = Gtk::Entry.new
68
+ table.attach_defaults(@entry2, 1, 2, 1, 2)
69
+ label.set_mnemonic_widget(@entry2)
70
+ end
71
+
72
+ def message_dialog_clicked
73
+ dialog = Gtk::MessageDialog.new(self,
74
+ Gtk::Dialog::MODAL |
75
+ Gtk::Dialog::DESTROY_WITH_PARENT,
76
+ Gtk::MessageDialog::INFO,
77
+ Gtk::MessageDialog::BUTTONS_OK,
78
+ <<EOS)
79
+ This message box has been popped up the following
80
+ number of times:
81
+
82
+ #{@count}
83
+ EOS
84
+ dialog.run
85
+ dialog.destroy
86
+ @count += 1
87
+ end
88
+
89
+ def interactive_dialog_clicked
90
+ dialog = Gtk::Dialog.new('Interactive Dialog',
91
+ self,
92
+ Gtk::Dialog::MODAL |
93
+ Gtk::Dialog::DESTROY_WITH_PARENT,
94
+ [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK],
95
+ ["_Non-stock Button", Gtk::Dialog::RESPONSE_CANCEL]
96
+ )
97
+
98
+ hbox = Gtk::HBox.new(false, 0)
99
+ hbox.set_border_width(8)
100
+ dialog.vbox.pack_start(hbox, false, false, 0)
101
+
102
+ stock = Gtk::Image.new(Gtk::Stock::DIALOG_QUESTION, Gtk::IconSize::DIALOG)
103
+ hbox.pack_start(stock, false, false, 0)
104
+
105
+ table = Gtk::Table.new(2, 2, false)
106
+ table.set_row_spacings(4)
107
+ table.set_column_spacings(4)
108
+ hbox.pack_start(table, true, true, 0)
109
+ label = Gtk::Label.new('_Entry 1', true)
110
+ table.attach_defaults(label,
111
+ 0, 1, 0, 1)
112
+ local_entry1 = Gtk::Entry.new
113
+ local_entry1.text = @entry1.text
114
+ table.attach_defaults(local_entry1, 1, 2, 0, 1)
115
+ label.set_mnemonic_widget(local_entry1)
116
+
117
+ label = Gtk::Label.new('E_ntry 2', true)
118
+ table.attach_defaults(label,
119
+ 0, 1, 1, 2)
120
+
121
+ local_entry2 = Gtk::Entry.new
122
+ local_entry2.text = @entry2.text
123
+ table.attach_defaults(local_entry2, 1, 2, 1, 2)
124
+ label.set_mnemonic_widget(local_entry2)
125
+
126
+ hbox.show_all
127
+ response = dialog.run
128
+
129
+ if response == Gtk::Dialog::RESPONSE_OK
130
+ @entry1.text = local_entry1.text
131
+ @entry2.text = local_entry2.text
132
+ end
133
+ dialog.destroy
134
+ end
135
+ end
136
+ end
137
+
@@ -0,0 +1,226 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: drawingarea.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
5
+ =begin
6
+ = Drawing Area
7
+
8
+ Gtk::DrawingArea is a blank area where you can draw custom displays
9
+ of various kinds.
10
+
11
+ This demo has two drawing areas. The checkerboard area shows
12
+ how you can just draw something; all you have to do is write
13
+ a signal handler for expose_event, as shown here.
14
+
15
+ The 'scribble' area is a bit more advanced, and shows how to handle
16
+ events such as button presses and mouse motion. Click the mouse
17
+ and drag in the scribble area to draw squiggles. Resize the window
18
+ to clear the area.
19
+ =end
20
+
21
+ require 'common'
22
+
23
+ module Demo
24
+ class DrawingArea < BasicWindow
25
+ def initialize
26
+ # Pixmap for scribble area, to store current scribbles
27
+ @pixmap = nil
28
+ super('Drawing Area')
29
+
30
+ self.border_width = 8
31
+
32
+ vbox = Gtk::VBox.new(false, 8)
33
+ vbox.border_width = 8
34
+ add(vbox)
35
+
36
+
37
+ ## Create the checkerboard area
38
+ label = Gtk::Label.new
39
+ label.set_markup('<u>Checkerboard pattern</u>')
40
+ vbox.pack_start(label, false, false, 0)
41
+
42
+ frame = Gtk::Frame.new
43
+ frame.shadow_type = Gtk::SHADOW_IN
44
+ vbox.pack_start(frame, true, true, 0)
45
+
46
+ da = Gtk::DrawingArea.new
47
+ # set a minimum size
48
+ da.set_size_request(100, 100)
49
+
50
+ frame.add(da)
51
+
52
+ da.signal_connect('expose_event') do |widget, event|
53
+ checkerboard_expose(widget)
54
+ end
55
+
56
+ ## Create the scribble area
57
+ label = Gtk::Label.new
58
+ label.set_markup('<u>Scribble area</u>')
59
+ vbox.pack_start(label, false, false, 0)
60
+
61
+ frame = Gtk::Frame.new
62
+ frame.shadow_type = Gtk::SHADOW_IN
63
+ vbox.pack_start(frame, true, true, 0)
64
+
65
+ da = Gtk::DrawingArea.new
66
+ # set a minimum size
67
+ da.set_size_request(100, 100)
68
+
69
+ frame.add(da)
70
+
71
+ # Signals used to handle backing pixmap
72
+ da.signal_connect('expose_event') do |*args|
73
+ scribble_expose_event(*args)
74
+ end
75
+ da.signal_connect('configure_event') do |widget, event|
76
+ scribble_configure_event(widget)
77
+ end
78
+
79
+ # Event signals
80
+ da.signal_connect('motion_notify_event') do |*args|
81
+ scribble_motion_notify_event(*args)
82
+ end
83
+ da.signal_connect('button_press_event') do |*args|
84
+ scribble_button_press_event(*args)
85
+ end
86
+
87
+ # Ask to receive events the drawing area doesn't normally
88
+ # subscribe to
89
+ da.events |= (Gdk::Event::LEAVE_NOTIFY_MASK |
90
+ Gdk::Event::BUTTON_PRESS_MASK |
91
+ Gdk::Event::POINTER_MOTION_MASK |
92
+ Gdk::Event::POINTER_MOTION_HINT_MASK)
93
+ end
94
+
95
+ # Create a new pixmap of the appropriate size to store our scribbles
96
+ def scribble_configure_event(widget)
97
+ @pixmap = Gdk::Pixmap.new(self.window,
98
+ widget.allocation.width,
99
+ widget.allocation.height,
100
+ -1)
101
+
102
+ # Initialize the pixmap to white
103
+ @pixmap.draw_rectangle(widget.style.white_gc,
104
+ true,
105
+ 0, 0,
106
+ widget.allocation.width,
107
+ widget.allocation.height)
108
+
109
+ # We've handled the configure event, no need for further processing.
110
+ return true
111
+ end
112
+
113
+ CHECK_SIZE = 10
114
+ SPACING = 2
115
+ def checkerboard_expose(da)
116
+ # At the start of an expose handler, a clip region of event.area
117
+ # is set on the window, and event.area has been cleared to the
118
+ # widget's background color. The docs for
119
+ # gdk_window_begin_paint_region give more details on how this
120
+ # works.
121
+
122
+
123
+ # It would be a bit more efficient to keep these
124
+ # GC's around instead of recreating on each expose, but
125
+ # this is the lazy/slow way.
126
+ gc1 = Gdk::GC.new(da.window)
127
+ gc1.rgb_fg_color = Gdk::Color.new(30000, 0, 30000)
128
+
129
+ gc2 = Gdk::GC.new(da.window)
130
+ gc2.rgb_fg_color = Gdk::Color.new(65535, 65535, 65535)
131
+
132
+ xcount = 0
133
+ SPACING.step(da.allocation.width, CHECK_SIZE + SPACING) do |i|
134
+ ycount = xcount % 2; # start with even/odd depending on row
135
+ SPACING.step(da.allocation.height, CHECK_SIZE + SPACING) do |j|
136
+ gc = if ycount % 2 == 1
137
+ gc1
138
+ else
139
+ gc2
140
+ end
141
+
142
+ # If we're outside event.area, this will do nothing.
143
+ # It might be mildly more efficient if we handled
144
+ # the clipping ourselves, but again we're feeling lazy.
145
+
146
+ da.window.draw_rectangle(gc, true, i, j, CHECK_SIZE, CHECK_SIZE)
147
+ ycount += 1
148
+ end
149
+ xcount += 1
150
+ end
151
+ # return true because we've handled this event, so no
152
+ # further processing is required.
153
+ #
154
+ return true
155
+ end
156
+
157
+ # Redraw the screen from the pixmap
158
+ def scribble_expose_event(widget, event)
159
+ # We use the 'foreground GC' for the widget since it already exists,
160
+ # but honestly any GC would work. The only thing to worry about
161
+ # is whether the GC has an inappropriate clip region set.
162
+ widget.window.draw_drawable(widget.style.fg_gc(widget.state),
163
+ @pixmap,
164
+ # Only copy the area that was exposed.
165
+ event.area.x, event.area.y,
166
+ event.area.x, event.area.y,
167
+ event.area.width, event.area.height)
168
+ return false
169
+ end
170
+
171
+
172
+
173
+ def draw_brush(widget, x, y)
174
+ update_rect = Gdk::Rectangle.new(x - 3, y - 3, 6, 6)
175
+
176
+ # Paint to the pixmap, where we store our state
177
+ @pixmap.draw_rectangle(widget.style.black_gc,
178
+ true,
179
+ update_rect.x, update_rect.y,
180
+ update_rect.width, update_rect.height)
181
+
182
+ # Now invalidate the affected region of the drawing area.
183
+ widget.window.invalidate(update_rect, false)
184
+ end
185
+
186
+ def scribble_button_press_event(widget, event)
187
+ unless @pixmap
188
+ # paranoia check, in case we haven't gotten a configure event
189
+ return false
190
+ end
191
+
192
+ if event.button == 1
193
+ draw_brush(widget, event.x, event.y)
194
+ end
195
+
196
+ # We've handled the event, stop processing
197
+ return true
198
+ end
199
+
200
+ def scribble_motion_notify_event(widget, event)
201
+ unless @pixmap
202
+ # paranoia check, in case we haven't gotten a configure event
203
+ return false
204
+ end
205
+
206
+ # This call is very important; it requests the next motion event.
207
+ # If you don't call Gdk::Window#pointer you'll only get
208
+ # a single motion event. The reason is that we specified
209
+ # Gdk::POINTER_MOTION_HINT_MASK to Gtk::Widget#set_events.
210
+ # If we hadn't specified that, we could just use event.x, event.y
211
+ # as the pointer location. But we'd also get deluged in events.
212
+ # By requesting the next event as we handle the current one,
213
+ # we avoid getting a huge number of events faster than we
214
+ # can cope.
215
+
216
+ win, x, y, state = event.window.pointer
217
+
218
+ if (state & Gdk::Window::BUTTON1_MASK) != 0
219
+ draw_brush(widget, x, y)
220
+ end
221
+
222
+ # We've handled it, stop processing
223
+ return true
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,172 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: editable_cells.rb,v 1.7 2005/02/06 18:25:13 kzys Exp $
5
+ =begin
6
+ = Tree View/Editable Cells
7
+
8
+ This demo demonstrates the use of editable cells in a Gtk::TreeView. If
9
+ you're new to the Gtk::TreeView widgets and associates, look into
10
+ the Gtk::ListStore example first.
11
+ =end
12
+ require 'common'
13
+
14
+ module Demo
15
+ class EditableCells < BasicWindow
16
+ Item = Struct.new('Item', :number, :product, :editable)
17
+ COLUMN_NUMBER, COLUMN_PRODUCT, COLUMN_EDITABLE, NUM_COLUMNS = *(0..4).to_a
18
+
19
+ def initialize
20
+ super('Shopping list')
21
+ self.border_width = 5
22
+
23
+ vbox = Gtk::VBox.new(false, 5)
24
+ add(vbox)
25
+
26
+ vbox.pack_start(Gtk::Label.new('Shopping list (you can edit the cells!)'),
27
+ false, false, 0)
28
+
29
+ sw = Gtk::ScrolledWindow.new
30
+ sw.shadow_type = Gtk::SHADOW_ETCHED_IN
31
+ sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
32
+ vbox.pack_start(sw, true, true, 0)
33
+
34
+ # create model
35
+ model = create_model
36
+
37
+ # create tree view
38
+ treeview = Gtk::TreeView.new(model)
39
+ treeview.rules_hint = true
40
+ treeview.selection.mode = Gtk::SELECTION_SINGLE
41
+
42
+ add_columns(treeview)
43
+
44
+ sw.add(treeview)
45
+
46
+ # some buttons
47
+ hbox = Gtk::HBox.new(true, 4)
48
+ vbox.pack_start(hbox, false, false, 0)
49
+
50
+ button = Gtk::Button.new('Add item')
51
+ button.signal_connect('clicked') do
52
+ add_item(model)
53
+ end
54
+ hbox.pack_start(button, true, true, 0)
55
+
56
+ button = Gtk::Button.new('Remove item')
57
+ button.signal_connect('clicked') do
58
+ remove_item(treeview)
59
+ end
60
+ hbox.pack_start(button, true, true, 0)
61
+
62
+ set_default_size(320, 200)
63
+ end
64
+
65
+ def create_model
66
+ # create array
67
+ @articles = []
68
+
69
+ add_items
70
+
71
+ # create list store
72
+ model = Gtk::ListStore.new(Integer, String, TrueClass)
73
+
74
+ # add items
75
+ @articles.each do |article|
76
+ iter = model.append
77
+
78
+ article.each_with_index do |value, index|
79
+ iter.set_value(index, value)
80
+ end
81
+ end
82
+ return model
83
+ end
84
+
85
+ def add_items
86
+ item = Item.new(3, 'bottles of coke', true)
87
+ @articles.push(item)
88
+
89
+ item = Item.new(5, 'packages of noodles', true)
90
+ @articles.push(item)
91
+
92
+ item = Item.new(2, 'packages of chocolate chip cookies', true)
93
+ @articles.push(item)
94
+
95
+ item = Item.new(1, 'can vanilla ice cream', true)
96
+ @articles.push(item)
97
+
98
+ item = Item.new(6, 'eggs', true)
99
+ @articles.push(item)
100
+ end
101
+
102
+ def add_columns(treeview)
103
+ model = treeview.model
104
+
105
+ # number column
106
+ renderer = Gtk::CellRendererText.new
107
+ renderer.signal_connect('edited') do |*args|
108
+ cell_edited(*args.push(model))
109
+ end
110
+ treeview.insert_column(-1, 'Number', renderer,
111
+ {
112
+ :text => COLUMN_NUMBER,
113
+ :editable => COLUMN_EDITABLE,
114
+ })
115
+ def renderer.column
116
+ COLUMN_NUMBER
117
+ end
118
+
119
+ # product column
120
+ renderer = Gtk::CellRendererText.new
121
+ renderer.signal_connect('edited') do |*args|
122
+ cell_edited(*args.push(model))
123
+ end
124
+ def renderer.column
125
+ COLUMN_PRODUCT
126
+ end
127
+ treeview.insert_column(-1, 'Product', renderer,
128
+ {
129
+ :text => COLUMN_PRODUCT,
130
+ :editable => COLUMN_EDITABLE,
131
+ })
132
+ end
133
+
134
+ def cell_edited(cell, path_string, new_text, model)
135
+ path = Gtk::TreePath.new(path_string)
136
+
137
+ column = cell.column
138
+
139
+ iter = model.get_iter(path)
140
+ case column
141
+ when COLUMN_NUMBER
142
+ i = iter.path.indices[0]
143
+ @articles[i].number = new_text.to_i
144
+ iter.set_value(column, @articles[i].number)
145
+ when COLUMN_PRODUCT
146
+ i = iter.path.indices[0]
147
+ @articles[i].product = new_text
148
+ iter.set_value(column, @articles[i].product)
149
+ end
150
+ end
151
+
152
+ def add_item(model)
153
+ foo = Item.new(0, 'Description here', true)
154
+ @articles.concat([foo])
155
+
156
+ iter = model.append
157
+ foo.each_with_index do |value, index|
158
+ iter.set_value(index, value)
159
+ end
160
+ end
161
+
162
+ def remove_item(treeview)
163
+ model = treeview.model
164
+ selection = treeview.selection
165
+
166
+ if iter = selection.selected
167
+ @articles.delete_at(iter.path.indices[0])
168
+ model.remove(iter)
169
+ end
170
+ end
171
+ end
172
+ end