⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oyoahadirectorymodel.java

📁 java 开源,Swing外观:JGoodies look & feel. ... JGoodies look&feels让你的Swing 应用程序与applets看起来更漂亮.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* ====================================================================
 * Copyright (c) 2001-2003 OYOAHA. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. The names "OYOAHA" must not be used to endorse or promote products 
 *    derived from this software without prior written permission. 
 *    For written permission, please contact email@oyoaha.com.
 *
 * 3. Products derived from this software may not be called "OYOAHA",
 *    nor may "OYOAHA" appear in their name, without prior written
 *    permission.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL OYOAHA OR ITS CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.oyoaha.swing.plaf.oyoaha.filechooser;

import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.beans.*;

public class OyoahaDirectoryModel extends AbstractListModel implements PropertyChangeListener
{
  public final static int USE_EXTENTION = 0;
  public final static int USE_TYPE = 1;
  public final static int USE_CASESENSITIVE_EXTENTION = 3;
  public final static int USE_NONE = 4;

  public final static int BY_NAME = 0;
  public final static int BY_CASESENSITIVE_NAME = 1;
  public final static int BY_SIZE = 2;
  public final static int BY_DATE = 3;

  protected boolean inverse;
  protected boolean onlyType;

  protected JFileChooser filechooser = null;
  protected OyoahaFileView view = null;

  protected Thread loadThread = null;
  protected int use = USE_EXTENTION;
  protected int mode = BY_NAME;

  protected int fetchID;
  protected int length;
  protected Object[] cached;

  public OyoahaDirectoryModel(JFileChooser filechooser, OyoahaFileView view)
  {
    this.filechooser = filechooser;
    this.view = view;
    validateFileCache();
  }

  public static String getMode(int mode)
  {
    switch(mode)
    {
      case USE_TYPE:
      return "use_type";
      case USE_CASESENSITIVE_EXTENTION:
      return "use_casesensitive_extention";
      case USE_NONE:
      return "use_none";
      default:
      return "use_extention";
    }
  }

  public static String getSort(int mode)
  {
    switch(mode)
    {
      case BY_CASESENSITIVE_NAME:
      return "by_casesensitive_name";
      case BY_SIZE:
      return "by_size";
      case BY_DATE:
      return "by_date";
      default:
      return "by_name";
    }
  }

  public static int getModeFromString(String string)
  {
    string = string.toLowerCase();

    if(string.equals("use_type"))
    {
      return USE_TYPE;
    }
    else
    if(string.equalsIgnoreCase("use_casesensitive_extention"))
    {
      return USE_CASESENSITIVE_EXTENTION;
    }
    else
    if(string.equalsIgnoreCase("use_none"))
    {
      return USE_NONE;
    }

    return USE_EXTENTION;
  }

  public static int geSortFromString(String string)
  {
    string = string.toLowerCase();

    if(string.equals("by_casesensitive_name"))
    {
      return BY_CASESENSITIVE_NAME;
    }
    else
    if(string.equalsIgnoreCase("by_size"))
    {
      return BY_SIZE;
    }
    else
    if(string.equalsIgnoreCase("by_date"))
    {
      return BY_DATE;
    }

    return BY_NAME;
  }

  public void inverse()
  {
    inverse = !inverse;
    validateFileCache();
  }

  public void setInverse(boolean inverse)
  {
    this.inverse = inverse;
    validateFileCache();
  }

  public void setMode(int mode)
  {
    this.mode = mode;
    validateFileCache();
  }

  public void setUse(int use)
  {
    this.use = use;
    validateFileCache();
  }

  public boolean isInverse()
  {
    return inverse;
  }

  public int getMode()
  {
    return mode;
  }

  public int getUse()
  {
    return use;
  }

  public void propertyChange(PropertyChangeEvent e)
  {
    String prop = e.getPropertyName();

    if(prop == JFileChooser.DIRECTORY_CHANGED_PROPERTY || prop == JFileChooser.FILE_VIEW_CHANGED_PROPERTY || prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY || prop == JFileChooser.FILE_HIDING_CHANGED_PROPERTY || prop == JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)
    {
      invalidateFileCache();
      validateFileCache();
    }
  }

  public void invalidateFileCache()
  {
    length = 0;
    cached = null;
  }

  public void validateFileCache()
  {
    File currentDirectory = filechooser.getCurrentDirectory();

    if(currentDirectory == null)
    {
      invalidateFileCache();
      return;
    }

    if(loadThread != null)
    {
      loadThread.interrupt();
    }

    fetchID++;
    fireContentsChanged();
    invalidateFileCache();

    switch(use)
    {
      case USE_NONE:
        loadThread = new OyoahaLoadFilesThread(fetchID, currentDirectory);
      break;
      case USE_TYPE:
        loadThread = new OyoahaLoadFilesByTypeThread(fetchID, currentDirectory);
      break;
      default: //USE_EXTENTION
        loadThread = new OyoahaLoadFilesByExtentionThread(fetchID, currentDirectory);
      break;
    }

    loadThread.start();
  }

  protected void fireIntervalAdded(int start, int end)
  {
    fireIntervalAdded(this, start, end);
  }

  protected void fireContentsChanged()
  {
    fireContentsChanged(this, -1, length);
  }

  public int getSize()
  {
    return length;
  }

  public void replace(Object source, Object target)
  {
    int index = indexOf(source);

    if(index>-1)
    {
      cached[index] = target;
    }
  }

  public boolean contains(Object o)
  {
    return indexOf(o)>=0;
  }

  public int indexOf(Object o)
  {
    for(int i=0;i<length;i++)
    {
      if(o.equals(cached[i]))
      return i;
    }

    return -1;
  }

  public Object getElementAt(int index)
  {
    if(cached!=null)
    {
      return cached[index];
    }

    return null;
  }

  protected final void quickSortListFiles(ListFiles[] objects, int lo0, int hi0)
  {
    int lo = lo0;
    int hi = hi0;
    Object mid;

    if (hi0 > lo0)
    {
      mid = objects[(lo0 + hi0)/2];

      while(lo<=hi)
      {
        while((lo < hi0) && ltb(objects[lo], mid))
        {
          ++lo;
        }

        while((hi > lo0) && ltb(mid, objects[hi]))
        {
          --hi;
        }

        if(lo<=hi)
        {
          ListFiles o = objects[lo];
          objects[lo] = objects[hi];
          objects[hi] = o;

          ++lo;
          --hi;
        }
      }

      if(lo0<hi)
      {
        quickSortListFiles(objects, lo0, hi);
      }

      if(lo<hi0)
      {
        quickSortListFiles(objects, lo, hi0);
      }
    }
  }

  protected final boolean ltb(Object a, Object b)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -