From: Paul S. <pag...@ma...> - 2002-10-03 21:25:38
|
This is a timely message :) > Vic Kelson wrote: > >> Paul Spencer did a tablular attribute view dialog > >> already for CIETMap using a gtkextra table widget. What are you using > >> for > >> the table? Could you notify the list of your work on the attribute > >> editing > >> dialog and your broader use of OpenEV? Would you like CVS commit access? > > > > > > Hey -- is his version available? That's what I am planning! > > Vic, > > Paul can be reached as sp...@dm.... I believe he may already have > checked some of his core work on attribute display but I couldn't find it. > [snip] > > Paul's work was to use a gtkextra table to display all the attributes > defined in the GvShapes schema, including blanking (or showing NULL?) > for missing attributes. The difficult part of the work is that a > fixed table is used to provide a dynamic view onto a large number of > GvShapes without having to load all off them into the table as this > results in unacceptable performance for large sets of shapes. > I did implement this functionality in this way initially but I had lots of problems with GtkExtra::GtkSheet, it seemed that I couldn't force it to work the way I wanted it too. To use it directly meant creating a spreadsheet the size of the whole data set which resulted in a large amount of memory being sucked up. So I tried to create a range of cells big enough to fit the viewable area and use GtkAdjustment's to track the current row/column in my GvShapes object and populate those cells as required. This turned out to be relatively easy but I had lots of problems making GtkSheet resize, change columns etc. I resorted to building my own widget in python, which turned out to be much easier in the end. You should be able to find it in cvs as pgushapesgrid.py. It displays a 'window' on the GvShapes object and is very efficient for large shape files (20000 + shapes). It uses a display index to determine which shapes to display. If the index list is empty then it displays all shapes, otherwise it uses the list. This should allow for custom sorting algorithms based on clicking a column header for example. It doesn't support editing, but I added support to track the currently selected cell and implemented a simple example of how you could enable editing using a GtkEntry. The folks at Atlantis have need of a very similar capability, I think we need to develop a list of desired features and then sign up to work on them. Perhaps if everyone could get/take a look at the existing pgushapesgrid.py and I'll send the example to anyone who emails me directly. A preliminary list of features required: o provide signals (through GvSignaler, unless this is redone as a GtkWidget) for column-selection and some others - such as cell-selection, row-selection o add a row number column at the left edge o allow row selection (multi-row) when clicking the row number - this should select the shape(s) in the GvShapeLayer? o track the current selection (link to GvShapeLayer selection mechanism) o allow for sub-selection? o allow row deletion o access/edit geographic attributes (points) - in a separate dialog when double clicking a row, for example o add new shape - need to be able to specify geography o test current implementation of editing o implement 'in-cell' editing o vertical splitter - allow the user to drag a vertical split to create two separate grids that display the same rows but (potentially) different columns Thats all I can think of right now. I think there should be two things here, the widget that displays the data and generates signals when you click stuff, and a dialog box that implements the actual features when a user clicks stuff. Feedback is welcome :) Cheers, Paul |