From 30e9f8dae0024c61c083016fb9c5af0663e88496 Mon Sep 17 00:00:00 2001 From: Vasiliy Bout Date: Wed, 24 Feb 2010 13:15:11 +0000 Subject: [PATCH] new FBTree class has been added git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@1059 6a642e6f-84f6-412e-ac94-c4a38d5a04b0 --- .../android/fbreader/LibraryTabActivity.java | 3 +- .../fbreader/library/BookInSeriesTree.java | 4 +- .../fbreader/library/LibraryTree.java | 46 +++----------- .../geometerplus/fbreader/tree/FBTree.java | 62 +++++++++++++++++++ 4 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 src/org/geometerplus/fbreader/tree/FBTree.java diff --git a/src/org/geometerplus/android/fbreader/LibraryTabActivity.java b/src/org/geometerplus/android/fbreader/LibraryTabActivity.java index 6ccbda12b..135bc559f 100644 --- a/src/org/geometerplus/android/fbreader/LibraryTabActivity.java +++ b/src/org/geometerplus/android/fbreader/LibraryTabActivity.java @@ -35,6 +35,7 @@ import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.fbreader.fbreader.FBReader; import org.geometerplus.fbreader.bookmodel.BookModel; import org.geometerplus.fbreader.library.*; +import org.geometerplus.fbreader.tree.FBTree; public class LibraryTabActivity extends TabActivity implements MenuItem.OnMenuItemClickListener { static LibraryTabActivity Instance; @@ -184,7 +185,7 @@ public class LibraryTabActivity extends TabActivity implements MenuItem.OnMenuIt if (myCurrentBook == null) { return null; } - for (LibraryTree tree : myLibraryTree) { + for (FBTree tree : myLibraryTree) { if ((tree instanceof BookTree) && ((BookTree)tree).Book.equals(myCurrentBook)) { return tree; } diff --git a/src/org/geometerplus/fbreader/library/BookInSeriesTree.java b/src/org/geometerplus/fbreader/library/BookInSeriesTree.java index 6b092b832..3567b7311 100644 --- a/src/org/geometerplus/fbreader/library/BookInSeriesTree.java +++ b/src/org/geometerplus/fbreader/library/BookInSeriesTree.java @@ -19,13 +19,15 @@ package org.geometerplus.fbreader.library; +import org.geometerplus.fbreader.tree.FBTree; + public final class BookInSeriesTree extends BookTree { BookInSeriesTree(LibraryTree parent, Book book) { super(parent, book, false); } @Override - public int compareTo(LibraryTree tree) { + public int compareTo(FBTree tree) { if (tree instanceof BookInSeriesTree) { final long difference = Book.getSeriesInfo().Index - ((BookTree)tree).Book.getSeriesInfo().Index; diff --git a/src/org/geometerplus/fbreader/library/LibraryTree.java b/src/org/geometerplus/fbreader/library/LibraryTree.java index 8e6c231f3..0e155de2f 100644 --- a/src/org/geometerplus/fbreader/library/LibraryTree.java +++ b/src/org/geometerplus/fbreader/library/LibraryTree.java @@ -21,9 +21,11 @@ package org.geometerplus.fbreader.library; import java.util.*; -import org.geometerplus.zlibrary.core.tree.ZLTree; +//import org.geometerplus.zlibrary.core.tree.ZLTree; -public abstract class LibraryTree extends ZLTree implements Comparable { +import org.geometerplus.fbreader.tree.FBTree; + +public abstract class LibraryTree extends FBTree { protected LibraryTree() { super(); } @@ -44,18 +46,12 @@ public abstract class LibraryTree extends ZLTree implements Compara return new BookTree(this, book, showAuthors); } - public abstract String getName(); - - protected String getSortKey() { - return getName(); - } - private String myChildrenString; public String getSecondString() { if (myChildrenString == null) { StringBuilder builder = new StringBuilder(); int count = 0; - for (LibraryTree subtree : subTrees()) { + for (FBTree subtree : subTrees()) { if (count++ > 0) { builder.append(", "); } @@ -69,43 +65,21 @@ public abstract class LibraryTree extends ZLTree implements Compara return myChildrenString; } - public int compareTo(LibraryTree ct) { - final String key0 = getSortKey(); - final String key1 = ct.getSortKey(); - if (key0 == null) { - return (key1 == null) ? 0 : -1; - } - if (key1 == null) { - return 1; - } - return key0.toLowerCase().compareTo(key1.toLowerCase()); - } - - public final void sortAllChildren() { - List children = subTrees(); - if (!children.isEmpty()) { - Collections.sort(children); - for (LibraryTree tree : children) { - tree.sortAllChildren(); - } - } - } - public boolean removeBook(Book book) { - final LinkedList toRemove = new LinkedList(); - for (LibraryTree tree : this) { + final LinkedList toRemove = new LinkedList(); + for (FBTree tree : this) { if ((tree instanceof BookTree) && ((BookTree)tree).Book.equals(book)) { toRemove.add(tree); } } - for (LibraryTree tree : toRemove) { + for (FBTree tree : toRemove) { tree.removeSelf(); - LibraryTree parent = tree.Parent; + FBTree parent = tree.Parent; for (; (parent != null) && !parent.hasChildren(); parent = parent.Parent) { parent.removeSelf(); } for (; parent != null; parent = parent.Parent) { - parent.myChildrenString = null; + ((LibraryTree)parent).myChildrenString = null; } } return !toRemove.isEmpty(); diff --git a/src/org/geometerplus/fbreader/tree/FBTree.java b/src/org/geometerplus/fbreader/tree/FBTree.java new file mode 100644 index 000000000..3f41046c4 --- /dev/null +++ b/src/org/geometerplus/fbreader/tree/FBTree.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2010 Geometer Plus + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +package org.geometerplus.fbreader.tree; + +import java.util.*; + +import org.geometerplus.zlibrary.core.tree.ZLTree; + +public abstract class FBTree extends ZLTree implements Comparable { + protected FBTree() { + super(); + } + + protected FBTree(FBTree parent) { + super(parent); + } + + public abstract String getName(); + + protected String getSortKey() { + return getName(); + } + + public int compareTo(FBTree ct) { + final String key0 = getSortKey(); + final String key1 = ct.getSortKey(); + if (key0 == null) { + return (key1 == null) ? 0 : -1; + } + if (key1 == null) { + return 1; + } + return key0.toLowerCase().compareTo(key1.toLowerCase()); + } + + public final void sortAllChildren() { + List children = subTrees(); + if (!children.isEmpty()) { + Collections.sort(children); + for (FBTree tree : children) { + tree.sortAllChildren(); + } + } + } +}