I've been working on the tab pane UI - which isn't released because it
needs cleaned up and it includes the column sorting code provided by
Claude Duguay and I haven't been told the T's have been crossed and the
I's dotted.

I wanted to let the group know what I've been doing and get some
feedback on the choices I've made, specifically the filtering, since
that's primarily what I've been working on.

I started by modifying Chainsaw and ended up rewriting things from the
ground up with my own UI.  The colorizing and display filtering was
easier to create from the ground up than add, at least that's how I felt
at the time.  I didn't reinvent the wheel, I used some existing Chainsaw
code, but not much.

Chainsaw takes up a good amount of space with the filtering panel and
I've moved that functionality primarily to a popup.  I'm not sure if
Chainsaw devotees would be upset with the choices I've made so I'm not
sure if this UI should be a patch to Chainsaw or a new UI.  I obviously
want contribute something useful so I'm happy to provide this code as a
patch to Chainsaw if that's what people would like.  

If people don't want these changes to become 'Chainsaw', I'm just as
happy calling it something else.  I know Paul Smith has mentioned he's
looking at an MDI interface, so maybe there's some way we could make the
new UI support both.  I'd like as much feedback as people are willing to
provide.  If people aren't interested in this becoming a log4j
contribution, I suppose I'd just keep it for my personal work, since
that's primarily why I started down this road.

Here's what I does.

 * Logging events are added to a table on a tab pane which is identified
by the combination of an app name and the source machine name or IP.  If
neither are provided, there will still be a unique match on two empty
strings and all entries will go to that tab pane.

The features described below are applied to each tab pane separately:
 * Sort on any column ascending or descending
 * Pause/unpause event reception
 * Define an overriding display filter (display filters are described
below)
 * Find/find next

These features are available via a context popup menu:
 * Show/hide tool tips per logging event
 * Clear entries
 * Select displayed columns
 * Select tool tip columns
 * Define color filters
 * Apply a color filter (a submenu containing radio buttons for the
column names appears)
 * Clear color filters
 * Define display filters
 * Apply a display filter (a submenu containing radio buttons for the
column names appears)
 * Clear display filters

Choosing the 'select displayed columns' or 'select tooltip columns' pops
up a window with a checkbox for each available column.  If the checkbox
is selected, the column is added in the tooltip or display.  (The
tooltip is multi-line, html-based).  All columns are displayed and are
added to the tooltip by default.

Here's how the color filtering works.  When 'Define color filters' is
selected, a popup appears.

On the left are a series of radio buttons which map to a number of the
columns in the table. (see below)

To the right of the radio buttons is a list which is populated with the
unique entries for that column.  For example, if Thread is the selected
radio button, all of the unique entries in table's Thread column would
appear.  To the right of the list is the color chooser UI
(Swatches/HSB/RGB).

If an entry in the list is selected, and then a color is selected, the
entry's background color changes to the selected color.  All color
selections are remembered, so if you re-open this popup, the color
choices you've made for each column reappear as you previously colorized
them.  

If the column you are changing is the active color filter, the table's
colors change in real-time to match the colors you're selecting.  The
'Apply' button makes the currently selected radio button column the
color filter for the pane.
COLOR FILTER POPUP
O Class         Category1               Color chooser UI
O Method                Category2               
O NDC                   Category3               
O MDC                   Category4               
X Category                                      
O Thread                                        
O Level                                 
O File                                  
[Apply]                                 

Here's how the display filtering works.  When 'Define display filters'
is selected, a popup appears.

Similar to the color filter, the column list appears on the left as
radio buttons.  As radio buttons are selected, the entries in the list
change to the unique contents of the selected column.
DISPLAY FILTER POPUP
O Class         Category1               Active Display Levels   Global
display levels
O Method                Category2               [ ] FATAL
[ ] FATAL
O NDC                   Category3               [ ] ERROR
[ ] ERROR
O MDC                   Category4               [ ] DEBUG
[ ] DEBUG
X Category                                      [ ] INFO
[ ] INFO
O Thread                                        [ ] WARN
[ ] WARN
O Level                                 
O File                                  
[Apply]

To the right of the list is a group of checkboxes which display each
available level.  Similar to the color filter, as an entry in the list
is selected, the active display levels get checked.  To add a display
level, check the box.

Global display levels affect all entries for the column.  Selecting the
global 'ERROR' checkbox with Category selected as the active column will
make all entries in the Category list (Category 1-4 in the
above-example) will have the 'ERROR' level filter added.  Conversely,
unchecking a global level that is checked will remove the 'ERROR' level
filter from all entries in the Category list.

If no display filters exist for the selected column, all entries are
shown.  

If the active display filter is the column you're modifying, the
underlying data changes in real-time.  Selecting apply makes the
currently selected column the active display filter.

The only issue is I don't have a good way to show that some entries in
the list have a level active and some don't (the global list will
display that as unchecked).  If someone has a good idea here, let me
know.

As I mentioned above, I also added an overriding display filter.  A drop
down column list is and a text field for entering the field exists above
the table in the tab pane.  If a value is in the text field, that value
is matched for the selected column and matching entries are displayed in
the table.  Existing display filters are ignored.  If the text field is
empty, existing display filters are applied.

While the filters work using the regexp package (which could be oro, I
just haven't looked in to it), the find is an exact-match (indexOf
string comparison).  Find scrolls the view to the found row.

There's more to add but I wanted to get some feedback on the utility of
the filters I've described above.  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to