selecting a column in a grid
- To: mathgroup at smc.vnet.net
- Subject: [mg98160] selecting a column in a grid
- From: "Paul Ellsmore" <paul.ellsmore at nanion.co.uk>
- Date: Wed, 1 Apr 2009 05:54:45 -0500 (EST)
Hi, I have a tricky problem with a graphical user interface. I have a grid of data, and I want to be able to MouseClick in the grid to either select a row or a column. Using GUIKit, this is trivial, but I want to be able to distribute my program using PlayerPro, which won't support GUIKit. Selecting a row is straightforward using EventHandler and EventHandlerScaled, since I know how many rows there are and they are all one line in height. However, the column widths change according to the data, since I have set ItemSize to Auto. So is there some way of retrieving the actual values used in ItemSize, when Auto is used? I have tried CurrentValue[ItemSize] in many variations, but it always fails. I could, of course, look at the data that will be in the grid, and compute the widths of each column accordingly, and synthesize the values that ItemSize will take. To do that, though, I would need to know what the pixel width of a particular text string will be, which varies with font family, size etc. Is there an easy way to do this? This is essentially what Mathematica does when ItemSize is set to Auto, but I have no idea how to do it myself. Currently I have EventHandler wrapped around the whole grid. Is it possible to wrap it around each individual cell in a grid? I have tried a few ideas, but they don't seem to work. The documentation suggests that EventHandler can be wrapped around any expression, but that doesn't seem to be the case, or at least the wrapped expression doesn't seem to display properly inside other constructs, such as Grid, Column etc. Is there some better approach I could take, rather than using EventHandler? All ideas gratefully received. Cheers, Paul. Dr. Paul A. Ellsmore Nanion Limited Oxford Centre for Innovation Mill Street Oxford United Kingdom OX2 0JX Tel: +44 (0) 1865 811175 Fax: +44 (0) 1865 248594