mirror of https://github.com/zlatinb/muwire
on-demand fetching UI side
parent
8b1612460e
commit
9b1ab655d8
|
@ -24,6 +24,7 @@ import com.muwire.core.search.UIResultBatchEvent
|
|||
import com.muwire.core.search.UIResultEvent
|
||||
|
||||
import javax.swing.JTextField
|
||||
import javax.swing.tree.TreePath
|
||||
|
||||
@ArtifactProviderFor(GriffonController)
|
||||
class BrowseController {
|
||||
|
@ -126,7 +127,7 @@ class BrowseController {
|
|||
for(BrowseStatusEvent event : statusCopy) {
|
||||
model.status = event.status
|
||||
if(event.status == BrowseStatus.FETCHING) {
|
||||
model.currentBatch = event.currentItems
|
||||
model.currentBatch += event.currentItems
|
||||
model.totalResults = event.totalResults
|
||||
}
|
||||
}
|
||||
|
@ -221,4 +222,10 @@ class BrowseController {
|
|||
|
||||
mvcGroup.createMVCGroup("view-profile", uuid.toString(), params)
|
||||
}
|
||||
|
||||
void requestFetch(TreePath treePath, boolean recursive) {
|
||||
List<String> path = model.resultsTreeModel.getPathFromRoot(treePath)
|
||||
if (path != null)
|
||||
model.session.fetch(path, recursive)
|
||||
}
|
||||
}
|
|
@ -10,6 +10,8 @@ import javax.swing.JTable
|
|||
import javax.swing.JTextField
|
||||
import javax.swing.JTree
|
||||
import javax.swing.KeyStroke
|
||||
import javax.swing.event.TreeExpansionEvent
|
||||
import javax.swing.event.TreeExpansionListener
|
||||
import javax.swing.tree.TreePath
|
||||
import java.awt.event.ActionEvent
|
||||
import java.awt.event.KeyEvent
|
||||
|
@ -55,6 +57,8 @@ class BrowseView {
|
|||
|
||||
def sequentialDownloadCheckbox
|
||||
|
||||
private boolean onDemandExpansionRegistered
|
||||
|
||||
void initUI() {
|
||||
int rowHeight = application.context.get("row-height")
|
||||
int treeRowHeight = application.context.get("tree-row-height")
|
||||
|
@ -330,11 +334,13 @@ class BrowseView {
|
|||
Set<TreePath> expanded = new HashSet<>(treeExpansions.expandedPaths)
|
||||
model.resultsTreeModel.nodeStructureChanged(model.root)
|
||||
if (model.session == null && !model.session.supportsIncremental()) {
|
||||
if (treeExpansions.manualExpansion)
|
||||
expanded.each { tree.expandPath(it) }
|
||||
else
|
||||
TreeUtil.expand(tree)
|
||||
TreeUtil.expand(tree)
|
||||
} else if (!onDemandExpansionRegistered) {
|
||||
onDemandExpansionRegistered = true
|
||||
tree.addTreeExpansionListener(new OnDemandTreeExpansion())
|
||||
}
|
||||
if (treeExpansions.manualExpansion)
|
||||
expanded.each { tree.expandPath(it) }
|
||||
tree.setSelectionPaths(selectedPaths)
|
||||
}
|
||||
|
||||
|
@ -416,4 +422,16 @@ class BrowseView {
|
|||
controller.displayBatchedResults()
|
||||
}
|
||||
}
|
||||
|
||||
private class OnDemandTreeExpansion implements TreeExpansionListener {
|
||||
|
||||
@Override
|
||||
void treeExpanded(TreeExpansionEvent event) {
|
||||
controller.requestFetch(event.getPath(), false)
|
||||
}
|
||||
|
||||
@Override
|
||||
void treeCollapsed(TreeExpansionEvent event) {
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ import javax.swing.tree.DefaultMutableTreeNode
|
|||
import javax.swing.tree.DefaultTreeModel
|
||||
import javax.swing.tree.MutableTreeNode
|
||||
import javax.swing.tree.TreeNode
|
||||
import javax.swing.tree.TreePath
|
||||
import java.text.Collator
|
||||
|
||||
class ResultTreeModel extends DefaultTreeModel {
|
||||
|
@ -31,7 +32,8 @@ class ResultTreeModel extends DefaultTreeModel {
|
|||
elementNode = new MutableResultNode()
|
||||
elementNode.setUserObject(nodeData)
|
||||
node.addDescendant(elementNode)
|
||||
}
|
||||
} else
|
||||
removePlaceholder(elementNode)
|
||||
node = elementNode
|
||||
}
|
||||
|
||||
|
@ -59,16 +61,46 @@ class ResultTreeModel extends DefaultTreeModel {
|
|||
elementNode = new MutableResultNode()
|
||||
elementNode.setUserObject(nodeData)
|
||||
node.addDescendant(elementNode)
|
||||
} else {
|
||||
removePlaceholder(elementNode)
|
||||
}
|
||||
elementNode.getUserObject().addResult(event)
|
||||
node = elementNode
|
||||
}
|
||||
|
||||
def fileNode = new MutableResultNode(event)
|
||||
removePlaceholder(node)
|
||||
node.addDescendant(fileNode)
|
||||
}
|
||||
|
||||
private static void removePlaceholder(SortedTreeNode node) {
|
||||
TreeNode placeHolder = node.getByKey(ResultTreeRenderer.PLACEHOLDER)
|
||||
if (placeHolder != null)
|
||||
node.remove(placeHolder)
|
||||
node.addDescendant(fileNode)
|
||||
}
|
||||
|
||||
List<String> getPathFromRoot(TreePath treePath) {
|
||||
|
||||
MutableResultNode last = (MutableResultNode)treePath.getLastPathComponent()
|
||||
if (last.getChildCount() != 1)
|
||||
return null
|
||||
if (!(last.getChildAt(0) instanceof PlaceholderNode))
|
||||
return null
|
||||
|
||||
Object [] objects = treePath.getPath()
|
||||
|
||||
List<String> rv = new ArrayList<>()
|
||||
String hiddenRoot = null
|
||||
for (int i = 1; i < objects.length; i++) {
|
||||
Object userObject = objects[i].getUserObject()
|
||||
if (userObject instanceof ResultTreeRenderer.ResultTreeNode) {
|
||||
hiddenRoot = userObject.getHiddenRoot()
|
||||
rv << userObject.toString()
|
||||
}
|
||||
}
|
||||
|
||||
rv.add(0, hiddenRoot)
|
||||
rv
|
||||
}
|
||||
|
||||
static class MutableResultNode extends SortedTreeNode<UIResultEvent> {
|
||||
|
|
|
@ -94,6 +94,10 @@ class ResultTreeRenderer extends DefaultTreeCellRenderer {
|
|||
element
|
||||
}
|
||||
|
||||
String getHiddenRoot() {
|
||||
hiddenRoot
|
||||
}
|
||||
|
||||
void addResult(UIResultEvent event) {
|
||||
files++
|
||||
size += event.size
|
||||
|
|
Loading…
Reference in New Issue