- Name: Ofey
Friday, January 21, 2005
When working with large amounts of relational records (csv files, database records, music files index), a common task is to filter out a subset or records from a given set. For example, in a master-detail database design, the master recordset, which is typically smaller than the detail recordset, can be filtered out and the filtered subset of master records can then be used to perform additional tasks on the detail records that they point to.
A common example of this usage is your own mp3 player application (for example, the iTunes application). This application will allow you to choose an mp3 file (the detail record) based on criteria such as Artist, Album, Song (the master record). Once the master record is choosen (i.e., the Artist, Album and Song) it then performs a task on the detail record (i.e., play the mp3 file).
This Gtk2::Ex::RecordsFilter widget is inspired by the iTunes song browser widget. But this widget carries certain functionality which is not present in the iTunes song browser. The iTunes song browser allows the user to choose one song (one master record) at a time and play it. However, a more general usage should allow the user to choose multiple master records at a time. One approach for such multiple selections is to enable the user to click on different records with the CTRL key pressed and then choose all the highlighted records in one shot. This widget takes a different approach, which I call the 'shopping cart' approach. This is explained in the next section.
The top half the widget shows all the master records. The records are shown in a hierarchical fashion similar to the iTunes song browser. Clicking on a parent node on the left-most box will cause all the boxes on its right to show only the child nodes.
The user can click on any entry in the top half and then click on the add to selection button and the record will show up in the bottom half. If the entry clicked is in one of the left boxes, then the widget automatically discovers all the child nodes and adds them to the selection. Upon adding to selection, the record is removed from the top half and shows up in the bottom half. The remove from selection button works in the reverse way.
The user can click on multiple records in the top half using the CTRL key.