CURRENT
-------

Problem with partial occupancies (Na2CO3) and OpenGL drawing - v. slow.

The new perspective mode drawing screws up the selection box 
checking in OpenGL - atoms aren't where they're expected to be :-(

redo the element/cova lookup thing so that GULP species data like
for things like H2 don't interfere with a 'normal' hydrogen.
Also, gdis number should match the atomic number.

NB: gtk_widget_show() must be called after creating radio buttons
that we wish to set active to reflect an existing model mode.

The use of bash (exec -> "sh") is the cause of the pid
difference when spawning gulp jobs via the old method under linux.
The mac uses zsh (or something else) which doesn't do this.

New bitwise or/and for atom status flags (check!) also use
for everything (ie primary/orig etc.)

CIF parsing needs a little work (specs?).
burkeite? CIF files in models/ are not correct, as the origin setting
is wrong. Changing it to :2 (instead of the :1 default) fixes the
problem - should gdis allow the user to manually change stuff like this?

split load_data routines into separate routines for different
filetypes. ie eliminate need for the parse_pak stuff. (partly done)

Remove necessity to pre-calc num_frames in animation.

separate the frame drawing from the model atom etc. drawing, as
often we just wish to change the yellow/white frame border on a
change of active model.

Creator - instead of highlighting only when an atom is in the grid
plane, draw a line (shortest possible) to the grid plane. The effect
should be something like the old elite game (option to switch it
off though as it may be annoying in some cases).

When saving - allow conversion (if fractional) to cartesian?

In the middle of implementing a digitized sphere molecular/solvent
surface calculation method. Currently, only does contact and
solv. acc. points. Better sphere digitization? (triangle tessellation?)
Plus, a calculation of the respective surf areas (vol?) is needed.
Heading towards a simple summation - what about misfit inaccuracy where
the contact surface hits the re-entrant surface? 
Maybe replace molsurf calc with an inflating (ie fill) cube/grid algorithm.
This could make use of the previous solsurf calc for getting a list
of probe positions that define the re-entrant part of the molsurf.

Implement a better pbc method where a model has a flag
that indicates if pbc constraint (atom or mol) is on or off. Would
also need additional data in atom_pak specifying the translation
amount needed to bring the atom or mol (NB: these would be separate
numbers!!!) into the primary cell. This would allow toggling between
pbc constraint on & off because the base coords (x,y,z) would stay
the same - just the calc'd translations are applied by update_coords
'on the fly' when computing rx & pixel coords. This differs from the
current method which (irreversibly) forces (x,y,z) to be within the 
primary cell.
Could have a constraint pak w/ type = (none, atoms, mols, unfragment),
followed by a list of translations for each atom.

POVRay has problems if two like objects are placed at the same position,
eg partially occ. sites will cause render to fail. Perhaps some sort of
redundancy checker should be run before the .pov file is generated.

Can we change the font style to do overscores for facet labeling,
instead of the uglier 'minus sign' method.

I think cutting/pasting/moving (esp. between cart/frac) models
should be working a little better (still far from perfect though).
But, really need to write a routine for converting (BOTH WAYS) between
cartesian and fractional coordinates. Two routines I think. One
for converting a single point, and the other for all atoms in
a model. The latter would be faster than to loop over all atoms
& calling the former - as matrix inversion need only be done once.

Implemented babel filter -> needs testing 

Added symmetry code which can remove only rotation/inversions at present.

Apparently, GULP output (result from min?) and marvin output
files have some sort of reflection deal going on (-ve rotation
or y plane reflection???) that causes rendered images and the
main display to differ. (could be the failed non 90 latmat 
conversion thing in povray again)

use gtk_widget_set_sensitive(w, T/F) to 'grey out' stuff we don't want
the user messing with? (eg rendering options on diff model types)
(trouble is, would have to make widget global, so pick_model could
make an appropriate call (refresh sensitivity) when switching models)

change all x,y,z data items to x[3] arrays, so vec macros can be used.

implement cell labelling? eg a,b,c/o at the vertices/origin?

make it so that properties in the model tree (eg display shells)
can be added/subtracted individually & on-the-fly as the user changes
features of the model (eg such as pasting in some new shells).

Added new surface dialog, for interfacing to Andrew's surface
generation code. Found out about attaching data to an object
(such as a widget - which can be passed to a callback) which
is absolutely fantastic for sending more data to callbacks.
Use this to simplify/reduce the number of globals & spinner callbacks
in other parts of the code (eg render/space dialogs?)
Also, play with adding a destroy object function & see what happens.

enter alternate ?_exe programs, other than by hand editing .gdisrc?
(eg some sort of setup dialog)

use atoms->label for FF typing? bonds? 
atoms->element no longer used, since can modify seek to just strip ->label?

Submit GULP job to background - bring up a tail -f -> dialog
to view what's happening. read potentials, or just copy the
orig (user supplied) inp file with the coords etc filled in.
Add a dump/movie output so you can view the results *after*
gulp has finished. 
Parsing potentials - decided not to be too clever, just search
for buck/lenn etc. and store that line & the next (maybe display
in a spread sheet/table fashion? ie w/o understanding what each means).
Also species & element are replicated. (spring too)
Can auto add things like print 1 (for tail) and dump/movie etc
Fails on potentials that span more than one line (check for '&' ?)

Geometry panel - add a search mode? eg on a mouse click performs:
find [5] nearest [atoms/mols] type [inter/intra] to selected [atom/mol].

Implemented a user bond data structure which can be used to indicate
double, triple bonds. The bond must exist (ie based on cova radius).
Is there a better way? (it's a bit of a hack)
eg more sophisticated bond calculation/manipulation? (comb w/ typing?)

Do nicer looking ellipses instead of circles for angle measurements.

Implemented user resizing for the creator grid
  - mostly ok, but doesn't *quite* get the calculated grid Ang spacing right

Implemented code to interface with GULP & minimise structures
  - needs more testing/improvement of the interface
  - needs a bigger/better default potentials library

POVray sometimes puts ugly white dots on a rendered sphere. Only
noticed it happening occasionaly on hydrogen (ie on the grey shaded
regions of white spheres).

Add scrolled win for viewing atoms & coords & status flags of a model.
Could then undelete/edit atoms directly. This could be a general 'data'
child of a model that contains periodic or not + sginfo/pbc etc that
can also be edited & auto updated by gdis.

Make an option to enable the user to either: save transformed model
(ie with all the centering & rotations done in gdis), or just save
the original configuration. The difference is mainly between using
(x,y,z) and (rx,ry,rz) as save coordinates - but also the centroid.

Merge with dock/CARA/radbin/resc/clusc RDF perl scripts?

THINK ABOUT - an undo function (store past operations that have inverses,
              can undo an operation if it has an inverse).
            - internal scripting (guile?), so that gdis can be run to do
              operations on files without a GUI coming up.
            - with the use of model_ptr() to get model data, (ie the central
              model database can be 'locked') is it possible to use pthreads 
              to improve efficiency eg file I/O ???

NOTES
-----

All access to model data is accomplished by 1st making a call to model_ptr()
to get a pointer to the appropriate model's data. This routine takes care
of all the shuffling around when models are deleted or loaded so that you
only have to give it the model number.

