[Gtk-sharp-list] [PATCH] TreeView support for GTK#

Kristian Rietveld kris@gtk.org
09 Aug 2002 22:28:50 +0200


--=-cRM78EnDeOBdrAZdhemf
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hello,

I spent a few hours hacking on TreeView support in GTK# and this is the
result. The attached patch gets the core working. There are some more
things to figure out before the support is complete.

To apply the patch:
* untar the tarball (doh)
* put the files in the sample/ and gtk/ subdirectories in the correct
directories in the gtk-sharp source tree
* apply treeviewstuff.diff
* run the parser and generator and finally recompile the assemblies.
* if everything turned out well, you should be able to compile and run
the treeviewdemo in samples/

As mentioned above, there are some issues left. The generator does not
generate source code for properties which return an interface. As a
temporarily solution, I put the Model property of TreeView in
TreeView.custom. I think this can be fixed in the generator, but I'm not
sure.

The TreeView is (in?)famous for it's exotic vararg-using methods. These
need some special handling in the parse/generation process. Or we just
ditch those methods and create much nicer C#-style methods. A list of
known exotic vararg-using methods:
Gtk.ListStore.Set / Gtk.ListStore.SetValist
Gtk.TreeStore.Set / Gtk.TreeStore.SetValist
Gtk.TreeModel.Get / Gtk.TreeModel.GetValist
Gtk.TreeViewColumn.NewWithAttributes
Gtk.TreeViewColumn.SetAttributes
Gtk.TreeView.InsertColumnWithAttributes

TreeView's signal emitting methods were renamed to names like InsertRow,
ChangeRow, etc. This isn't really correct, because those methods do not
actually insert or change a row. They only emit the row_inserted and
row_changed signals. These methods are only used by GtkTreeModels
implemented outside of gtk+. Therefore I renamed those methods to
EmitRowInserted, EmitRowChanged, etc. The names RowInserted/RowChanged
aren't possible because of the defined events in Gtk.TreeModel.

My TreeView demo is an incredibly quick and dirty hack. At least it
shows how to use TreeStore/TreeView and it's a bit cooler than just
having integers and "foo" or "lalala" (:. Duncan mentioned on IRC that
it would be cool to write an ildasm clone. I'll try to look into that as
a fun side project. Maybe somebody wants to volunteer to draw icons? The
stock icons in gtk won't do I think.

That's all for now. Please try it out and send some feedback.


thanks,


	Kris

--=-cRM78EnDeOBdrAZdhemf
Content-Disposition: attachment; filename=patch.tar.gz
Content-Type: application/x-gzip; name=patch.tar.gz
Content-Transfer-Encoding: base64

H4sIAKsJVD0AA+0c/XPitvJ+hZn+DyqTaaFgg/lMyMdcLnfNZd7dNS9k2pnXuWEECPCLsaktJ5e2
+d/friQb2xhI0pBcX627AJZWq/3SaleWPad8OK2+2mqp1Zq1TqcF37Vap92MfavyqtZp1VsIWK+/
qhm1dsd4RVrbJUsW3+PUJeTVlWt66+A2tf9Ny1zo36OzucW2ZQYP0r8B9UbdaDUy/T9Hien/0mXs
Z5PdvGUzRx8+Gbswn2vthN4j+m91mi2h/2anZTQbbYBv1XD+156KgHXlH67/apUEWgeNE4386Nth
DRmBIeSrVfhPjn0+ddwu+RfIgZvUJhcm49fMGpEDFM3rCb/SHXdypMCLwxKp12r1Zfh83qYz5s3p
kJFTftUTpueRP/I53zPtCendepzN9uOX+luX3sBlsvqCjS025KZjJ1uO5/O3zoya0BC0nH4wByEY
DB393ZtSd46gc39gmUMytKjnkeiEQApzc9e8ppwRMBoOUNje446LFfh5SGzfshBNEvLaMUfk3HWG
zPMub+eMFLHvGWcumVOX2bxCRDUvQV8cKRe2m/gBmEEfYV2xJAbJgaT1U8Y/stmAuV6xRG4c+3sO
n+4VGfmAziG+baKEZzAGG6k+3pC6t5JH5ulYOQby6XBKihLVmT12yMwkpk24HAC0P/Jg3JKQQy6H
wtR/phYM8gn0qQiM1BZnpo4tQGkCXjCaCn/p9LiLGoFxJIM5IVjUJrNHpOj4XMijoqSmkEugHuMK
lQSpVUiEgHQYQ8pdwtzl8W+98o5BZLOBdZuiwLCJerOHqTGUvrQBFDvgQMFjxcPEzh8mdf6iQhdA
sWkhIfh9FOLMfQsq5QQshhI3x6Qop+O3cj6WxCgu475ryyFPHNtzLKb/4sJwH0wbuhc+OHSEUhhR
TsnYdWaESn2aMEV0vaCoDSe60qMavWiCXJAD8J8jipONWp6OFVK4FUFDjsiyCVqN9TDbiZofWlDo
AfUT30W9qSuwquOQs4hpgV+4YWRI0YF4U+eGDB3XMgeBH/EcMLclZyK8CffHYxxRgER8i/AsQh/K
moXJFku6NN1DUph5cpBCCUazuWn7TBnFZkNPwXlvqy8EwiqsN/ktmfrCiUgodBgJg5fLUNTeP4Ly
0LLRQH79TKg78UKbB7oBnOJCqJ/ZJg+t4xfTHoEqYe1UUlAVxUJskS/I4QFMf8ssxtm7a1AxKcs+
4uI9tUcW2p0EOHkT7TKmvsV75u+BrMXPYrtZqzR3a4qU3tB1LIuNFAXeTQAbry8u8B6PQBXejeqf
nO+LOSLY4NeRGSJqpBeQ6Pi1/p7RESySP5ueObCQUO4G1hZ0OXEsf2YLrcLPBD7VqOg7YZZ1AbbC
XJAJdggvZK9o+yX7woN+Crd+aXJBRAErCrGmczq86kFUCn2iiCuC4DgWkNAxB4sY+OAcE9AFDsMW
wExDCUjrDvhQOEqpIkCjfZAIsMM9RaBwL0SAFYVYU0QEUcQVMgZHyeJo4jKIgwcyMFbIQOEIfPuN
NDl+rSrQCHvgCo8tKzS46FS78ANhrFylgtlCij8N/guhKnEqcj4dw/yNT+KeObGpJeo9CnIpLipK
AnI/Of6/fTOUqkchGkbnE1q2cCd3+bv8mvhf5n8c9HsN+hWeXB+Z4/FT5hjr87+60ek0F/l/rQPw
zWazluV/z1HOYKZ86ZKTKbUn7IMzyR/+9ZK/OOmRsWmxLqnOHNupQm6oeZhgVcNxKtd5CMhcE8wO
Yi4XvjwwaGLoYA15NECi+USbE80VVRECNU1bXOX2IDGdyEyz1urW612jQTQ0q5xEVS6X06GN3a5h
dI2mhM6/fk00o9IgZaNSb5DXr/NlhNJqu1ptj6Qkvcmst5wv537A+NhjbhXySX3GOMVQsksouBRK
Br4NQZozJhhawGQmrg9pbwVboSsl19QNagmEdIRPGfkAo8rVDoIjWPj9IVxUyFDwQ2YiJyMimwbE
gAXd9EdnxKzvwYMI30HYzPSEZCU0DOjCcn/NiDOnv0GYIsYTnYHoILYMgTB67jtXklYkPhxBR7hP
J1PTGkFoiRxA2JRo5VPRrseF81EJRp/PpGxE1DiEbhhlDhihuDrDT7AgjHMdxA59gU28FOwGKCfM
Zi4FoVRlgqoPPcAZSObG5FNChxhwgUCp8Lc26sJ2bA2dM+CQWQFIH2M2iH1thyMNN5AYcIZZGJm7
zpy5/DYYU+2VfaRXDG1cN+0KSd8/C1TviZg5XEQBC4ZchM7nIR/8qhoqWx+CT3JmFVG7EGlqbc9x
edACmIK2dDxyk0dUdon8Nn8XC4kQKIla/FswV7B34BJMfSQuXn8xZzAH9KEzO8qTPFnI4kdzzBmz
cQOpeO54JqIsdaEz6BQWKBrKEJIEj0MYhqZE88r3pEyaLXuhlBFX+6PdJXe0S2K0okNKwRhzTY1u
q92tdxauaVd4pg3dUnxUs15pkzJ87jXRS4ls8qBKg/jnKC+uERH8PKjixAXndKC+oU1ubOEsOizA
uKHVFUQzAMjJcyTjpIOquow3ntlANl/beAwm4a6FeMMwdV0Bcu6yNeNfCPcUazyoCs7kb8m/7BLK
hsBCP2H8sCCcScAvQChHYzHw7IcFFE3hyBTUy5YFJLYdzWGYPvUOquIqbBMu5Ai8+0FV/lTjR5VT
XiinfA/lxKZ5UkEnjn0NUhQuFt3tpXO2JPGoUGJSuYdY0uUCnpT3U4WzVjorxbMkn8cJKCmcU8aX
pZFs/dF0vVVGHIC4zkxuyawyZQAKVsE1IJ8gDVnXrJbKNSDnYustM3kweWntoeFv2+SHONDXZfM9
pu56pNi9bGOjbYvl6xJItoS94HyGYPDgW4iCIIcxRfQOVPq4R+wRTcM4RIJh/NJqYfxiNBsVo7Ol
ACaSKx1BzNe3AKIvtgL7Nru5BilHAB4jd8xDvEJCpNe0z2/nLF2kFrMnfNoXvR8pW8jjhkvSbO9V
OiDN9i4IVQhzSXIkrykEEa7ht2XJAHdqJrVElmX8xudc+Bocc6/ZFIPWIAgNVKiktsqfSBsvKIBA
YvgRiEuLiUvumV04Nwk3EbS/m5kcWiXYKAS6ny0JHsAMBQ+txrZ4uHQmEwt5eE89tbav4yWAkt0e
xVO7LXlqN7fFk3R6G/UiwR7HRKcjmei0tsWE3A3ayIQEexQPu7uSh932tni4YI47Yi6Q6a3nwlOQ
j2LEaDVqlcYeOph66GE2sRKsTAEn8ZUJXWThaDJ3wO1EVyctxrfcdUpn3QgZ0ZYY0RaMaAEjmnJr
WnrggAFkoSqbVc8VjInOhQSpchftWSgN8hyJLJo8LOcfWmRR28xZoDJtjcoi4vrhK1DbamEsZVLP
JQuyRhZkhSyW52J8TyyyV/o8W2KRAVfuiC3tz3dIlM7IdlikOldfbGvV691Gq1tfbNR3opth0U4b
9uuNdsVogXuC7zq6J+L5A+Dviz8/RzXioTLcp8QjEqS4Y+MW8yHZESr2+nipHY1xD0BYzD4REOoL
ASWEDal7zxxY6oQM4szlcrNbhUhEffv5cqwOtb6PW6qR8xk7qGVFhnYUqtwLMIpzEgJIE56fsN+I
NLgQIhcZEgmUwMKW9vOagAA755Ka3B1hlpeGVKQHiLQcRWrLUxZxpGLYO/F1ByOIQQTKCCGAcmcH
NfZr8zNiFYQoNj3GI/dmFVjrcyXo0f5c2hd74AqtrG18jjNfzt1jWMXM+nEVlDqIEyNCclqOCS5G
TlxsEXICwW6BHBJ84sdd4B2Wb0Fs2Tuk3PNYuV/eWNovb5AopegflvHl2hH/YOBueSuyW94QDiKl
1wYHITMVGQ/jGZgRRERdkORO8aR3UiJV3/bomJEqpLxd5HbKLMvRbhzXGunsCzS4XV2vTixzID6k
NPSRZQUt/GohpWj96Ar/IvXvEfMvAvHQW0HBQKRZjxxY5mjH87nAn9fAX/lgKmlcRcaBJN0XPzzz
dyZ/DMFMIYcXFzvF008/fXzXvzy+OH132SuRfPlJ8AbnDfA+2IqB4F/KGN0UQX48AXhNU5LUnFTa
doqWM6QWpOB8Ci53p0hhgV4c8Csl8KL1NPZwqwI+98TSohjpirNNUsgxprp4kElerSIsIdsNFEXR
gYtMyqxLErcbwWekjJki6g3jJtECn0OLURsnjjsj2pj8gIgCZ5RyD3bL3ihlxJXuqG4k3VHdIAtC
0RmloEu5d9cKvRGgRG+0oVuaO2rJxFB8QUX8HLyYyacSKdL+xzfC+8NSxOSvHKqU3+KBqcI+VH0j
V2OvD4ErnhYqwmoEMY869Eq++47IGv3MOw5ugv/5Z1B54vg2xzOYNYT0+iA+7FrA++IFCHNCSIQJ
EC6DQSWeI9M/iB0uckQaYVXPH8jDisVahTRK4rznKeOFEhBf3kT5Munh8Ifh8F8NO0Sy4/0lRRhp
LEqaig8hqodEBVQp2sYkTlQJzQvP/8jzX7icbO+M0cOf/zOarXb2/NdzlIX+k+dPnm6MDc9/1Y1a
e/H8l9B/s92qZ+f/nqNUq+Iwy0L5J0L5RMPq6AE0sQcTPzT05E+GSYDLqenJ82Dwbaq9ZELxZpw4
FUd9oAEP2ELgchsswwCBXXQ8hvvrW8s6m80dlxcLGDV8MQytrtcKpc95PKYvzuZCUs9cmwwcx8J4
sY9hUn+Gu0riTm9/qPbUSPHM5ueQuLv0piLO7qG4Yg9mVIgCiTwdo47vC/TRIwLyyYIlFOoRDAEO
A8k1YANd8jy+pClKhv4f5jrySLDEJ3AprKJanXlTl3cPFJkJq1UaZfYKmanf4dMUSjSIJrZ7SYpK
CtiyXgh2ihiWmBdonpj3leZi86mk6eH2UhGisFPNJtjNXGE2Qdd7W0+EzLXmU1H03NeCXtqLZeWx
ZbH+J0+aPt0YG9Z/wzCaS+t/LTv//yxFrf8L5cfW/7CaiPt1Y8xV/xYxQBVwHHj+bEbd29gZPZX7
H1SDRgXrMri68o4uxRH0oYM7jeIWdtCQz917Md9PI+DTE1CQtmamDxasG0/A7T3XIKDjpW05Kw8v
Kf4/8kzB04yxMf8zkvlfq4nvf8n8//ZL0v8L5aevAdiU5YFZHpjlgVkemOWB/yclvv6/yP5vu9Fq
Le//Zvnfs5TI+p+y/7t4wc3fZ93P5+L5kLzOyYdBPEKJ69zoAVA1DhVUL9Kg5b74aDKS4ToOl+cC
8WlWrFkIMUQfIoqtL2TjAiNeHRF6bvnwAlXvpnlEILJYUgTi6FtuVsUgKwbfHG3crdKAPBb+OA3E
+oq3kq3XAKFc9cTqiXkNIcJcPZm8He1IQ33ssh/QtqyrM4V3zcIfdk7VXEDYhoU+QsEaHapnmh6n
xHjnF5tHc0nGU0yk8wDV/9VMWsyigXi+DUFUbzmTPHkcdpsTqa+GfsR8ctk4DqXIXTW33qiRVmBP
RbVmpoWUb5hwSOaCsn+4tuXq/gzKPpYDPZWuFd0PV3W2PZFtT2TbE9n2xEuXeP4feUPQE46x8f5v
c+n+b7PVyvL/5yiR/F8ofyn9F2/S/Ftl/w9wlMrDhT4ID8rjoWTpjKJOUsYTsfBM3hg/V6+2SgZk
i1DslEEAhqRLpAMm3jJsenOL3gLhg9sw6RFvB1uKskJ/G7tRQ+SnjE3A88l3+C4ITrrXJGvSsQYv
zI1hlj2LscqSfH2ufIclvnZXvc2yqIZSiOIeV73O9qVtPCtZyUpWspKVrGQlK1nJSlaykpWsZCUr
Wfmnlv8BKhP81QB4AAA=

--=-cRM78EnDeOBdrAZdhemf--