diff options
author | Siva Velusamy <vsiva@google.com> | 2011-12-13 09:33:51 -0800 |
---|---|---|
committer | Siva Velusamy <vsiva@google.com> | 2011-12-13 09:33:51 -0800 |
commit | daa5a5c9200708b09983bf3852b94bb8ebab1e27 (patch) | |
tree | 5d4aaa7d5543e4d8ac592285e315e00f55d4fc88 /ddms/libs | |
parent | fc339fe1ed3c54e2622d8d22f070774048824cab (diff) | |
download | sdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.zip sdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.tar.gz sdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.tar.bz2 |
logcat: when copying items, index into filtered list.
The previous commit introduced a bug: The SWT table model is a list of
logcat messages before any filters are applied. But the user sees the
filtered messages. So when user selects items in the table, the
selection index will not match the index in the input model.
This patch applies all current filters to the input model and then
indexes this filtered list to get the same items that the user has
selected in the view.
Change-Id: If955bd5c22e1c587bcf5fe32092f513d53c0d8ef
Diffstat (limited to 'ddms/libs')
-rw-r--r-- | ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java index 22052f9..608086d 100644 --- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java +++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java @@ -674,12 +674,12 @@ public final class LogCatPanel extends SelectionDependentPanel if (!(input instanceof LogCatMessageList)) { return Collections.emptyList(); } - Object []items = ((LogCatMessageList) input).toArray(); + List<LogCatMessage> filteredItems = applyCurrentFilters((LogCatMessageList) input); List<LogCatMessage> selectedMessages = new ArrayList<LogCatMessage>(indices.length); for (int i : indices) { - if (i < items.length) { - LogCatMessage m = (LogCatMessage) items[i]; + if (i < filteredItems.size()) { + LogCatMessage m = filteredItems.get(i); selectedMessages.add(m); } } @@ -687,6 +687,36 @@ public final class LogCatPanel extends SelectionDependentPanel return selectedMessages; } + private List<LogCatMessage> applyCurrentFilters(LogCatMessageList msgList) { + Object[] items = msgList.toArray(); + List<LogCatMessage> filteredItems = new ArrayList<LogCatMessage>(items.length); + List<LogCatViewerFilter> filters = getFiltersToApply(); + + for (Object item : items) { + if (!(item instanceof LogCatMessage)) { + continue; + } + + LogCatMessage msg = (LogCatMessage) item; + if (!isMessageFiltered(msg, filters)) { + filteredItems.add(msg); + } + } + + return filteredItems; + } + + private boolean isMessageFiltered(LogCatMessage msg, List<LogCatViewerFilter> filters) { + for (LogCatViewerFilter f : filters) { + if (!f.select(null, null, msg)) { + // message does not make it through this filter + return true; + } + } + + return false; + } + private void createLogcatViewTable(Composite parent) { // The SWT.VIRTUAL bit causes the table to be rendered faster. However it makes all rows // to be of the same height, thereby clipping any rows with multiple lines of text. @@ -912,10 +942,7 @@ public final class LogCatPanel extends SelectionDependentPanel } private void updateAppliedFilters() { - /* list of filters to apply = saved filter + live filters */ - List<LogCatViewerFilter> filters = new ArrayList<LogCatViewerFilter>(); - filters.add(getSelectedSavedFilter()); - filters.addAll(getCurrentLiveFilters()); + List<LogCatViewerFilter> filters = getFiltersToApply(); mViewer.setFilters(filters.toArray(new LogCatViewerFilter[filters.size()])); /* whenever filters are changed, the number of displayed logs changes @@ -923,6 +950,14 @@ public final class LogCatPanel extends SelectionDependentPanel scrollToLatestLog(); } + private List<LogCatViewerFilter> getFiltersToApply() { + /* list of filters to apply = saved filter + live filters */ + List<LogCatViewerFilter> filters = new ArrayList<LogCatViewerFilter>(); + filters.add(getSelectedSavedFilter()); + filters.addAll(getCurrentLiveFilters()); + return filters; + } + private List<LogCatViewerFilter> getCurrentLiveFilters() { List<LogCatViewerFilter> liveFilters = new ArrayList<LogCatViewerFilter>(); |