Scott, It sounds like you have been a very busy beaver. I think we are all salivating at the prospect of seeing what you have done. A picture would speak a thousand words, and actual jar files would speak volumes.
Regarding creating a new tool vs integrating with Chainsaw, it can go either way. Personally, I would like to see changes integrated with the existing Chainsaw. We already have Chainsaw and LF5, and adding a third will just get to be too much, IMO. Enough people are already confused and asking whether they should use Chainsaw or LF5. If the features are compelling enough then changes can be made in the Chainsaw base to accomadate them. However, with that said, there is no reason that your code could not be checked into the log4j-sandbox and built/evolved from there. That way, other folks could look at what you have done, suggest improvements, figure out the best path for migrating the features into the Chainsaw code, etc. Features could be moved over in bits that make sense. Some very good changes from Paul have just been applied, and I'm sure there is more work that could be done to modularize various parts of Chainsaw to fit your changes in. Are you interested in submitting the code to the log4j-sandbox? We'd really like to get you involved. -Mark > -----Original Message----- > From: Scott Deboy [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 11, 2003 10:48 AM > To: Log4J Developers List > Subject: Tab pane UI status > > > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]