|
What this is
Other links
The source code
/*
* VFSDirectoryEntryTableModel.java - VFS directory entry table model
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2003 Slava Pestov
*
* 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.gjt.sp.jedit.browser;
import javax.swing.table.*;
import javax.swing.*;
import java.util.*;
import org.gjt.sp.jedit.io.VFS;
import org.gjt.sp.jedit.io.VFSManager;
import org.gjt.sp.jedit.*;
import org.gjt.sp.util.Log;
/**
* @author Slava Pestov
* @version $Id: VFSDirectoryEntryTableModel.java,v 1.9 2004/01/14 04:36:50 spestov Exp $
* @since jEdit 4.2pre1
*/
public class VFSDirectoryEntryTableModel extends AbstractTableModel
{
//{{{ VFSDirectoryEntryTableModel constructor
public VFSDirectoryEntryTableModel()
{
extAttrs = new ArrayList();
} //}}}
//{{{ setRoot() method
public void setRoot(VFS vfs, ArrayList list)
{
extAttrs.clear();
addExtendedAttributes(vfs);
/* if(files != null && files.length != 0)
fireTableRowsDeleted(0,files.length - 1); */
files = new Entry[list.size()];
for(int i = 0; i < files.length; i++)
{
files[i] = new Entry((VFS.DirectoryEntry)list.get(i),0);
}
/* if(files.length != 0)
fireTableRowsInserted(0,files.length - 1); */
fireTableStructureChanged();
} //}}}
//{{{ expand() method
public int expand(VFS vfs, Entry entry, ArrayList list)
{
int startIndex = -1;
for(int i = 0; i < files.length; i++)
{
if(files[i] == entry)
startIndex = i;
}
collapse(vfs,startIndex);
addExtendedAttributes(vfs);
entry.expanded = true;
if(list != null)
{
Entry[] newFiles = new Entry[files.length + list.size()];
System.arraycopy(files,0,newFiles,0,startIndex + 1);
for(int i = 0; i < list.size(); i++)
{
newFiles[startIndex + i + 1] = new Entry(
(VFS.DirectoryEntry)list.get(i),
entry.level + 1);
}
System.arraycopy(files,startIndex + 1,
newFiles,startIndex + list.size() + 1,
files.length - startIndex - 1);
this.files = newFiles;
/* fireTableRowsInserted(startIndex + 1,
startIndex + list.size() + 1); */
}
/* fireTableRowsUpdated(startIndex,startIndex); */
fireTableStructureChanged();
return startIndex;
} //}}}
//{{{ collapse() method
public void collapse(VFS vfs, int index)
{
Entry entry = files[index];
if(!entry.expanded)
return;
entry.expanded = false;
int lastIndex = index + 1;
while(lastIndex < files.length)
{
Entry e = files[lastIndex];
if(e.level <= entry.level)
break;
else
lastIndex++;
if(e.expanded)
{
removeExtendedAttributes(VFSManager.getVFSForPath(
e.dirEntry.path));
}
}
removeExtendedAttributes(vfs);
Entry[] newFiles = new Entry[files.length - lastIndex + index + 1];
System.arraycopy(files,0,newFiles,0,index + 1);
System.arraycopy(files,lastIndex,newFiles,index + 1,
files.length - lastIndex);
files = newFiles;
/* fireTableRowsUpdated(index,index);
fireTableRowsDeleted(index + 1,lastIndex); */
fireTableStructureChanged();
} //}}}
//{{{ getColumnCount() method
public int getColumnCount()
{
return 1 + extAttrs.size();
} //}}}
//{{{ getRowCount() method
public int getRowCount()
{
if(files == null)
return 0;
else
return files.length;
} //}}}
//{{{ getColumnName() method
public String getColumnName(int col)
{
if(col == 0)
return jEdit.getProperty("vfs.browser.name");
else
return jEdit.getProperty("vfs.browser." + getExtendedAttribute(col - 1));
} //}}}
//{{{ getColumnClass() method
public Class getColumnClass(int col)
{
return Entry.class;
} //}}}
//{{{ getValueAt() method
public Object getValueAt(int row, int col)
{
if(files == null)
return null;
else
return files[row];
} //}}}
//{{{ getExtendedAttribute() method
public String getExtendedAttribute(int index)
{
return ((ExtendedAttribute)extAttrs.get(index)).name;
} //}}}
//{{{ Package-private members
Entry[] files;
//}}}
//{{{ Private members
private List extAttrs;
//{{{ addExtendedAttributes() method
private void addExtendedAttributes(VFS vfs)
{
String[] attrs = vfs.getExtendedAttributes();
vfs_attr_loop: for(int i = 0; i < attrs.length; i++)
{
Iterator iter = extAttrs.iterator();
while(iter.hasNext())
{
ExtendedAttribute attr = (ExtendedAttribute)
iter.next();
if(attrs[i].equals(attr.name))
{
attr.ref++;
continue vfs_attr_loop;
}
}
// this vfs has an extended attribute which is not
// in the list. add it to the end with a ref count
// of 1
extAttrs.add(new ExtendedAttribute(attrs[i]));
}
} //}}}
//{{{ removeExtendedAttributes() method
private void removeExtendedAttributes(VFS vfs)
{
String[] attrs = vfs.getExtendedAttributes();
vfs_attr_loop: for(int i = 0; i < attrs.length; i++)
{
Iterator iter = extAttrs.iterator();
while(iter.hasNext())
{
ExtendedAttribute attr = (ExtendedAttribute)
iter.next();
if(attrs[i].equals(attr.name))
{
if(--attr.ref == 0)
{
// we no longer have any
// dirs using this extended
// attribute
iter.remove();
}
continue vfs_attr_loop;
}
}
// this vfs has an extended attribute which is not
// in the list ???
Log.log(Log.WARNING,this,"We forgot about " + attrs[i]);
}
} //}}}
//}}}
//{{{ Entry class
static class Entry
{
VFS.DirectoryEntry dirEntry;
boolean expanded;
// how deeply we are nested
int level;
Entry(VFS.DirectoryEntry dirEntry, int level)
{
this.dirEntry = dirEntry;
this.level = level;
}
} //}}}
//{{{ ExtendedAttribute class
static class ExtendedAttribute
{
/* reference counter allows us to remove a column from
* the table when no directory using this column is
* visible */
int ref;
String name;
ExtendedAttribute(String name)
{
this.name = name;
ref = 1;
}
} //}}}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.