Writing selected variables to XML now falls back to those in current plot.
Modified main build system to work on Windows.
October 2005 (Michael)
Redesigned the menu management system. Instead of manually creating menus for
things like the modes on the fly, I employed the GtkUIManager that allows one to
merge and unmerge UI elements specified as XML and driven by GtkActions. This
makes things a little cleaner, even though some menus like "Display" and the
"Edges" scatterplot menu are still manually constructed. Now that the actions
are factored nicely it would be easy to express them in ways besides menus, like
toolbars. This also makes the radio indicators show up in the menus on my system
(they were missing in the original GTK2 build). I'm running the latest version
Redesigned the splot layout mechanism. The original version required specifying
the dimensions of an splot. In the case of displays with multiple plots, this
required explicitly resizing plots when the number of plots or the size of the
window changed. This design was not really in the "spirit" of the GTK layout
paradigm and required the use of deprecated functions (they were deprecated in
an effort to discourage such schemes). The new design gives a default size to a
display and then just lets GTK handle the sizing of the component plots. This
seems to work great. It prevents ugly things like being able to shrink a display
so that the menubar is no longer visible and greatly simplifies the layout of
All text rendering is now anti-aliased and based on UTF8 (via Pango). I was
successful in translating the variables in a dataset to Korean and the Korean
script was correctly displayed throughout GGobi.
The GUI is now much more easily navigable from the keyboard. Most buttons,
labeled entries, notebook tabs, etc now have mnemonics.
Added the imode and pmode to the display tree. The display tree is now based on
a columned tree widget and has columns for the display name, dataset and modes.
The modes are not kept in sync yet, due to the lack of events for changing them.
These events will be added when ggobi is tweaked for better embedding (ie
Rggobi2). Ideally we could allow the user to set the modes from the display tree
by using a combo box.
The variable manipulation tool was reimplemented using a single GtkTreeModel
aligned with the dataset. By using filters and sort proxy models the single
model drives both the 'real' and 'categorical' tree views. Sorting is now
completely transparent. Given the tree structure, the categorical levels are now
children of their corresponding variable. There are some questions I have about
the tool. How does rescaling work with categorical variables? How does one
create a new categorical variable?
File load and save dialogs are now based on the GtkFileChooser dialog. This is a
lot cleaner than GtkFileSelection in that it is an actual GtkDialog and it has a
nicer file list and supports configurable bookmarks. I added the input plugin
selection widget to it, as well as a button that pops up a dialog for entering a
location with automatic completion (the GtkFileChooser does not have a path
entry in the main GUI, go figure).
Many of the user actions now have associated stock icons. These are only those
available by default in GTK. Hadley might make some new icons for GGobi specific
The rulers now work in GTK2, except there is some issue with the pan
functionality when dragging on a ruler.
Accelerators now work in displays. Before the key handlers were blocking the
signal so that the accelerators never responded.
Most menus and comboboxes now have tearoff items that allow one to tear off the
menu as a toplevel window. This emulates a toolbar.
Overall, all deprecated widgets were replaced with GTK2 equivalents.
Result: GGobi now compiles sans warnings with the GTK_DISABLE_DEPRECATED cflag.
The GTK2 combo box does not allow one to set its active element without emitting
the 'changed' signal. The only problem I've seen this cause is that all plots
have the 'hand' mouse icon for manual manipulation of a tour. This happens when
a display is activated and its cpanels are reconfigured from the display's
state. Since the default state includes active manual manipulation, the cursor
is changed for the plot, even though the tour is not the active viewmode. One
possible fix for this is to reconfigure the panels when the corresponding view
mode / imode is set. Maybe a nicer fix would be to create an API separate from
the GUI for manipulating the tour's state. Then have the combobox callback call
the API function and that function could check whether the tour is the current
view mode before changing the cursor. There would also need to be a signal for
setting the pmode which would set the cursor correctly when the tour became
The plugins have not been converted yet. Actually a couple have been (partially)
converted. I would like to know which plugins we are deciding to maintain. Then
I could just convert those.
Right now I *think* GGobi only requires GTK 2.4, which was released a couple of
years ago. I haven't tested this though. The only major reason for moving to 2.6
would be the about dialog, but the existing about dialog has a certain charm to
it. GTK 2.8 would allow us to draw some things using cairo (vector graphics). I
think cairo would be too slow to use for the actual plotting though. I am not
sure. It would allow us to do cool things like alpha-blending of the colors to
deal with overplotting. This is not supported through the GDK X11 backend, since
most X servers do not support compositing yet.
For all displays, restored the option that allows the View and
Interaction Menus to be radio buttons; the default is still false,
but we may change it to true (set in ggobi.c).
(The ggobirc "preference" is <useRadioMenuItems on="true" /> )
Treating the Options like the Reset items, so that now tour menus
also appear in the display menubar as appropriate.
Removed the Reset menus for Brush and Scale from the main menubar.
Now when a display is in Brush or Scale mode, a menu with the
interaction mode name appears in the menubar of the display. Moving
the brushing option from the display Options menu to the Brush menu.
Fixed a bug: the 'Show axes' option wasn't working on the barchart
display Options menu.
Removed the DisplayTree item from the main menubar; added a "Show
DisplayTree" item to the bottom of the Display menu.
When a new display is opened, its initial variables are now chosen
based on the variables displayed in the display that was current when
the new one was initialized.
Added alt-t/p accelerators to toggle between persistent and transient
brushing; transient brush now drawn as a dotted line. (One tester
says it doesn't work on the Mac.)
Corrected a bug in the behavior of the "linkby" notebook on the
brushing panel, and improved its behavior (I hope) so that only the
relevant tab in the notebook is sensitive for each display. (One
tester says this isn't working; it works for the author.)
Split the ViewMode menu into a View menu (representing projection),
as needed, and an Interaction menu. This involved changes to over 60
Fixed a bug in linking brushing by variable that was causing the wrong
variable to be designated the linking variable.
Fixed a (very recent) bug in the GraphLayout and ggvis plugins which
caused new windows to be imperfectly linked to the brethren.
Added new graphviz layout algorithms to the GraphLayout plugin.
New signal added for the creation of a new displayd object. This is
emitted after the display is fully constructed and is being
registered. We will miss a display if it is constructed separately
and not explicitly added to the collection of known displays. But
that currently never happens and will be rare even when we instantiate
the classes outside of the ggobi control panel, e.g. in RGtk.
The 'PlotMenu' plug-in provides the infrastructure for adding
pop-menus for splot's, i.e. panels on displays. These are potentially
contentious, but are convenient at least for sophisticated users. As
plugins, they work well as an optional add-on. We can add
functionality to this module and splot's as desired.
Drag and drop for parallel coordinates displays. One can drag a
"panel" onto another panel and currently they get swapped in position.
Different strategies for inserting the initial panel beside the target
one and moving those in between is easily done also.
Two routines added to the "API": ggobi_data_set_var_type and
ggobi_data_set_time_var to allow for users to specify the type of a
variable and whether it is a time variable or not.
Menu item added to each display to bring the associated control panel
to the foreground.
Option to use check menu items for the interactive modes for a
display, i.e. Scale, Brush, Identify, ... This gives a visual display
of what is the currently active mode and also a way to turn it off
directly rather than requiring to switch to a different,
display-dependent mode, e.g. XYPlot. In ggobirc as <useRadioMenuItems
removed (ifdef'ed away) the calls to display_add()
for each of the display types. These resulted in display_add being
called twice: there and via the extended_display_open_cb. This
fixes the message about "Display has already been added...."
Information about mismatching structure sizes for plugins and
"modules" (i.e. Rggobi) announce which module is complaining.
(Added the GGobiPluginDetails to the call to
Paused tours were causing problems with consuming large amount of
cycles. This seems to be fixed now.
time variables In the XML files, one can specify that a variable can
be used as a time variable using an attribute time. The value
of the attribute should be "yes" or "true". (No upper case!)
Such variables can then be identified when creating a time
statusbar is now non-editable by the user.
parcoords_new and tsplot_new become *_with_vars
and the original versions take an exta argument
windowDisplayd has an field that allows the constructor to
specify that we don't want a window. The creation
code then honors this and leaves the display to be managed
by the creator.
scatmat_new now takes a display argument and has changes to allow the
lack of a window. Pass NULL for the display argument and it will
create the basic display.
Added --home as an argument for ggobi and ggobi-config to compute
the location of the "installed" GGobi files.
GGobi home directory displayed on the spash screen
Configuration now supports --enable-local.
Getting the names of the data modes (getDataModeNames) now computes
these from the plugins by querying them dynamically. The caller should
free the resulting array of strings, but not the strings themselves.
The return type of the routine no longer refers to a constant array.
Added CSV to the DataModeNames since the enums and this list were out of synch.
This should be removed very soon.
Changed the order of initialization so that default plugins (input
plugins) are done in ggobiInit() as is the initialization of the
session options (initSessionOptions).
Fixed the error in addVariableInternal which made all variables categorical.
Switch on the number of levels.
Moved from built-in data formats/modes to extensible plugins and a
uniform framework. Each plugin lists its set of supported mode names.
Implications for Rggobi.
Read Excel files directly via --datamode=excel and
ExcelReader plugin on Windows.
Support for reading CSV files (either using the CSV
or the ExcelReader plugin.)
Input plugins can have multiple modeName tags within a modeNames tag.
Input plugin modeName used as the target for --datamode=<name>
"About plugins" display window separates the general and input plugins
into separate pages.
Select input plugin/mode from the File selection menu when opening a
Added an item `New' to the File menu
Added an item `About plugins' to the Help menu
Added the ability to read an initialization file
-init, GGOBIRC, ~/.ggobirc
Added the plugin mechanism, registered in the initialization file.
Added a plugin for viewing data
(See the Data menu beside the Help assuming the plugin is found.)