From 5bf3e195d9b86351848b3c4bcf6dc8052d3d7501 Mon Sep 17 00:00:00 2001 From: David Kocher Date: Mon, 23 Apr 2007 19:14:59 +0000 Subject: [PATCH] Add transfer window search --- en.lproj/Queue.nib/classes.nib | 1 + en.lproj/Queue.nib/info.nib | 4 +- en.lproj/Queue.nib/keyedobjects.nib | Bin 12930 -> 13980 bytes source/ch/cyberduck/core/AttributedList.java | 13 ++-- .../ch/cyberduck/core/NullTransferFilter.java | 28 ++++++++ source/ch/cyberduck/core/TransferFilter.java | 26 ++++++++ .../ui/cocoa/CDBookmarkTableDataSource.java | 60 ++++-------------- .../ui/cocoa/CDTransferController.java | 42 ++++++++++-- .../ui/cocoa/CDTransferTableDataSource.java | 59 +++++++++++++---- 9 files changed, 162 insertions(+), 71 deletions(-) create mode 100644 source/ch/cyberduck/core/NullTransferFilter.java create mode 100644 source/ch/cyberduck/core/TransferFilter.java diff --git a/en.lproj/Queue.nib/classes.nib b/en.lproj/Queue.nib/classes.nib index b609518bcbd..d19c4783281 100644 --- a/en.lproj/Queue.nib/classes.nib +++ b/en.lproj/Queue.nib/classes.nib @@ -21,6 +21,7 @@ LANGUAGE = Java; OUTLETS = { bandwidthPopup = NSPopUpButton; + filterField = NSSearchField; iconView = NSImageView; localField = NSTextField; localLabel = NSTextField; diff --git a/en.lproj/Queue.nib/info.nib b/en.lproj/Queue.nib/info.nib index 1136a0d4421..007127c6c74 100644 --- a/en.lproj/Queue.nib/info.nib +++ b/en.lproj/Queue.nib/info.nib @@ -3,11 +3,11 @@ IBDocumentLocation - 347 184 356 240 0 0 1920 1178 + 137 130 356 240 0 0 1920 1178 IBEditorPositions 132 - 886 738 147 130 0 0 1920 1178 + 814 738 291 130 0 0 1920 1178 IBFramework Version 446.1 diff --git a/en.lproj/Queue.nib/keyedobjects.nib b/en.lproj/Queue.nib/keyedobjects.nib index f19e5961242b982c53d3f07e27aa1222686a5508..921d78d067ea06d6afe7361b93383fdbde9ee8bc 100644 GIT binary patch delta 9428 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 jJUO0RkJnS+DfAS3#(4rD@SUe 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 diff --git a/source/ch/cyberduck/core/AttributedList.java b/source/ch/cyberduck/core/AttributedList.java index c8b4cf07e14..e8e51e375d3 100644 --- a/source/ch/cyberduck/core/AttributedList.java +++ b/source/ch/cyberduck/core/AttributedList.java @@ -23,7 +23,14 @@ import com.apple.cocoa.foundation.NSObject; import java.lang.reflect.Array; -import java.util.*; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.Set; /** * Facade for com.apple.cocoa.foundation.NSMutableArray @@ -409,6 +416,4 @@ public void add(Object o) { public List subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("Not implemented"); } -} - - +} \ No newline at end of file diff --git a/source/ch/cyberduck/core/NullTransferFilter.java b/source/ch/cyberduck/core/NullTransferFilter.java new file mode 100644 index 00000000000..8ed166dff66 --- /dev/null +++ b/source/ch/cyberduck/core/NullTransferFilter.java @@ -0,0 +1,28 @@ +package ch.cyberduck.core; + +/* + * Copyright (c) 2007 David Kocher. All rights reserved. + * http://cyberduck.ch/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * dkocher@cyberduck.ch + */ + +/** + * @version $Id$ + */ +public class NullTransferFilter implements TransferFilter { + public boolean accept(Transfer transfer) { + return true; + } +} diff --git a/source/ch/cyberduck/core/TransferFilter.java b/source/ch/cyberduck/core/TransferFilter.java new file mode 100644 index 00000000000..ea790191aaf --- /dev/null +++ b/source/ch/cyberduck/core/TransferFilter.java @@ -0,0 +1,26 @@ +package ch.cyberduck.core; + +/* + * Copyright (c) 2007 David Kocher. All rights reserved. + * http://cyberduck.ch/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * dkocher@cyberduck.ch + */ + +/** + * @version $Id$ + */ +public interface TransferFilter { + public abstract boolean accept(Transfer transfer); +} diff --git a/source/ch/cyberduck/ui/cocoa/CDBookmarkTableDataSource.java b/source/ch/cyberduck/ui/cocoa/CDBookmarkTableDataSource.java index 30c051188c0..22c4a87e9c4 100644 --- a/source/ch/cyberduck/ui/cocoa/CDBookmarkTableDataSource.java +++ b/source/ch/cyberduck/ui/cocoa/CDBookmarkTableDataSource.java @@ -20,8 +20,20 @@ import ch.cyberduck.core.*; -import com.apple.cocoa.application.*; -import com.apple.cocoa.foundation.*; +import com.apple.cocoa.application.NSApplication; +import com.apple.cocoa.application.NSDraggingInfo; +import com.apple.cocoa.application.NSDraggingSource; +import com.apple.cocoa.application.NSEvent; +import com.apple.cocoa.application.NSImage; +import com.apple.cocoa.application.NSPasteboard; +import com.apple.cocoa.application.NSTableColumn; +import com.apple.cocoa.application.NSTableView; +import com.apple.cocoa.foundation.NSArray; +import com.apple.cocoa.foundation.NSMutableArray; +import com.apple.cocoa.foundation.NSObject; +import com.apple.cocoa.foundation.NSPoint; +import com.apple.cocoa.foundation.NSRect; +import com.apple.cocoa.foundation.NSSize; import org.apache.log4j.Logger; @@ -79,50 +91,6 @@ public class CDBookmarkTableDataSource extends NSObject { // } // } // return filtered; -// } -// -// /** -// * Overwritten returning filtered resultset -// * @param row -// * @return -// */ -// public Object get(int row) { -// return this.filter(HostCollection.instance()).get(row); -// } -// -// /** -// * Overwritten returning filtered resultset -// * @param item -// * @return -// */ -// public int indexOf(Host item) { -// return this.filter(HostCollection.instance()).indexOf(item); -// } -// -// /** -// * Overwritten returning filtered resultset -// * @param row -// */ -// public void remove(int row) { -// HostCollection.instance().remove( -// HostCollection.instance().indexOf(this.filter(HostCollection.instance()).get(row))); -// } -// -// /** -// * Overwritten returning filtered resultset -// * @param item -// * @return -// */ -// public int lastIndexOf(Host item) { -// return this.filter(HostCollection.instance()).lastIndexOf(item); -// } -// -// /** -// * Overwritten returning filtered resultset -// * @return -// */ -// public int size() { -// return this.filter(HostCollection.instance()).size(); // } /** diff --git a/source/ch/cyberduck/ui/cocoa/CDTransferController.java b/source/ch/cyberduck/ui/cocoa/CDTransferController.java index b64145488e5..124f0fdb8ad 100644 --- a/source/ch/cyberduck/ui/cocoa/CDTransferController.java +++ b/source/ch/cyberduck/ui/cocoa/CDTransferController.java @@ -134,6 +134,28 @@ public void queueSizeStepperChanged(final Object sender) { Queue.instance().notifyAll(); } } + + private NSTextField filterField; // IBOutlet + + public void setFilterField(NSTextField filterField) { + this.filterField = filterField; + NSNotificationCenter.defaultCenter().addObserver(this, + new NSSelector("filterFieldTextDidChange", new Class[]{Object.class}), + NSControl.ControlTextDidChangeNotification, + this.filterField); + } + + public void filterFieldTextDidChange(NSNotification notification) { + NSDictionary userInfo = notification.userInfo(); + if(null != userInfo) { + Object o = userInfo.allValues().lastObject(); + if(null != o) { + final String searchString = ((NSText) o).string(); + transferModel.setFilter(searchString); + this.reloadData(); + } + } + } private NSPopUpButton bandwidthPopup; @@ -378,7 +400,7 @@ private void updateHighlight() { private void updateSelection() { log.debug("updateSelection"); this.updateLabels(); - this.updateIcon(); + this.updateIcon(null); this.updateBandwidthPopup(); toolbar.validateVisibleItems(); } @@ -409,10 +431,6 @@ private void updateLabels() { } } - private void updateIcon() { - this.updateIcon(null); - } - /** * */ @@ -592,7 +610,7 @@ public void finish() { public void cleanup() { window.toolbar().validateVisibleItems(); - updateIcon(); + updateIcon(null); if(transfer.isComplete() && !transfer.isCanceled()) { if(transfer instanceof DownloadTransfer) { Growl.instance().notify("Download complete", transfer.getName()); @@ -647,6 +665,7 @@ public void pause(final Object lock) { private static final String TOOLBAR_SHOW = "Show"; private static final String TOOLBAR_TRASH = "Trash"; private static final String TOOLBAR_QUEUE = "Maximum Transfers"; + private static final String TOOLBAR_FILTER = "Search"; /** * NSToolbar.Delegate @@ -738,6 +757,14 @@ public NSToolbarItem toolbarItemForItemIdentifier(NSToolbar toolbar, String item item.setMaxSize(this.queueSizeView.frame().size()); return item; } + if(itemIdentifier.equals(TOOLBAR_FILTER)) { + item.setLabel(NSBundle.localizedString(TOOLBAR_FILTER, "")); + item.setPaletteLabel(NSBundle.localizedString(TOOLBAR_FILTER, "")); + item.setView(this.filterField); + item.setMinSize(this.filterField.frame().size()); + item.setMaxSize(this.filterField.frame().size()); + return item; + } // itemIdent refered to a toolbar item that is not provide or supported by us or cocoa. // Returning null will inform the toolbar this kind of item is not supported. return null; @@ -909,7 +936,7 @@ public void trashButtonClicked(final Object sender) { } } } - this.updateIcon(); + this.updateIcon(null); } /** @@ -947,6 +974,7 @@ public NSArray toolbarAllowedItemIdentifiers(NSToolbar toolbar) { TOOLBAR_OPEN, TOOLBAR_TRASH, TOOLBAR_QUEUE, + TOOLBAR_FILTER, NSToolbarItem.CustomizeToolbarItemIdentifier, NSToolbarItem.SpaceItemIdentifier, NSToolbarItem.SeparatorItemIdentifier, diff --git a/source/ch/cyberduck/ui/cocoa/CDTransferTableDataSource.java b/source/ch/cyberduck/ui/cocoa/CDTransferTableDataSource.java index b8f39a2ffca..3b498383704 100644 --- a/source/ch/cyberduck/ui/cocoa/CDTransferTableDataSource.java +++ b/source/ch/cyberduck/ui/cocoa/CDTransferTableDataSource.java @@ -18,14 +18,7 @@ * dkocher@cyberduck.ch */ -import ch.cyberduck.core.AbstractCollectionListener; -import ch.cyberduck.core.DownloadTransfer; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.PathFactory; -import ch.cyberduck.core.SessionFactory; -import ch.cyberduck.core.Transfer; -import ch.cyberduck.core.TransferCollection; -import ch.cyberduck.core.TransferFactory; +import ch.cyberduck.core.*; import com.apple.cocoa.application.NSDraggingInfo; import com.apple.cocoa.application.NSPasteboard; @@ -38,6 +31,7 @@ import org.apache.log4j.Logger; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; /** @@ -72,13 +66,54 @@ public void collectionItemRemoved(Object item) { TransferCollection.instance().load(); } + /** + * + */ + private TransferFilter filter = new NullTransferFilter(); + + /** + * + * @param searchString + */ + public void setFilter(final String searchString) { + if(null == searchString || searchString.length() == 0) { + // Revert to the default filter + this.filter = new NullTransferFilter(); + } + else { + // Setting up a custom filter + this.filter = new TransferFilter() { + public boolean accept(Transfer transfer) { + // Match for pathnames and hostname + return transfer.getName().indexOf(searchString) != -1 + || transfer.getHost().getHostname().indexOf(searchString) != -1; + } + }; + } + } + + private Collection filter(Collection c) { + if(null == filter) { + return c; + } + Collection filtered = new Collection(c); + Transfer t = null; + for(Iterator i = filtered.iterator(); i.hasNext();) { + if(!filter.accept(t = (Transfer) i.next())) { + //temporarly remove the t from the collection + i.remove(); + } + } + return filtered; + } + /** * * @param view */ public int numberOfRowsInTableView(NSTableView view) { synchronized(TransferCollection.instance()) { - return TransferCollection.instance().size(); + return this.filter(TransferCollection.instance()).size(); } } @@ -93,13 +128,13 @@ public Object tableViewObjectValueForLocation(NSTableView view, NSTableColumn ta if (row < numberOfRowsInTableView(view)) { final String identifier = (String) tableColumn.identifier(); if (identifier.equals(ICON_COLUMN)) { - return (Transfer) TransferCollection.instance().get(row); + return (Transfer) this.filter(TransferCollection.instance()).get(row); } if (identifier.equals(PROGRESS_COLUMN)) { - return ((CDProgressController)controllers.get(TransferCollection.instance().get(row))).view(); + return ((CDProgressController)controllers.get(this.filter(TransferCollection.instance()).get(row))).view(); } if (identifier.equals(TYPEAHEAD_COLUMN)) { - return ((Transfer) TransferCollection.instance().get(row)).getName(); + return ((Transfer) this.filter(TransferCollection.instance()).get(row)).getName(); } throw new IllegalArgumentException("Unknown identifier: " + identifier); }