/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package modmanager.gui.views;
import modmanager.business.ManagerOptions;
import modmanager.business.Mod;
import java.awt.Point;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JComponent;
import javax.swing.event.ListSelectionListener;
/**
* @author George
*/
public abstract class ModsTableView {
protected static final ManagerOptions options = ManagerOptions.getInstance();
public ModsTableView(ArrayList<Mod> _modsList) {
setModsList(_modsList);
if (getComponent() != null) {
getComponent().addMouseListener(new TableViewMouseListener());
}
}
/**
* @return the modsList
*/
private int previousHash = 0;
public ArrayList<Mod> getModsList() {
if (modsList.toString().hashCode() != previousHash) {
previousHash = modsList.toString().hashCode();
sortList();
}
return modsList;
}
/**
* @param modsList the modsList to set
*/
public void setModsList(ArrayList<Mod> modsList) {
this.modsList = modsList;
if (modsList.toString().hashCode() != previousHash) {
previousHash = modsList.toString().hashCode();
sortList();
}
}
private void sortList() {
if (modsList != null && !modsList.isEmpty()) {
Mod[] list = new Mod[modsList.size()];
for (int i = 0; i < list.length; i++) {
list[i] = modsList.get(i);
}
quickSort(list, 0, list.length - 1);
ArrayList<Mod> newList = new ArrayList<Mod>();
newList.addAll(Arrays.asList(list));
this.modsList = newList;
}
}
/**
* @param kl The key listener to add to this view's component
*/
public void addKeyListener(KeyListener kl) {
getComponent().addKeyListener(kl);
}
/**
* @return the component
*/
public JComponent getComponent() {
return component;
}
/**
* @param component the component to set
*/
protected void setComponent(JComponent component) {
this.component = component;
this.component.addMouseListener(new TableViewMouseListener());
}
public abstract void applyOptions();
public abstract Mod getModAt(int x, int y);
public abstract Mod getModAt(Point p);
public abstract Mod getSelectedMod();
public abstract void setSelectedMod(Mod mod);
public abstract boolean hasModSelected();
public abstract void addListSelectionListener(ListSelectionListener lsl);
public abstract void selectNextMod();
public abstract void selectPrevMod();
protected ArrayList<Mod> modsList;
private JComponent component;
void quickSort(Mod arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1) {
quickSort(arr, left, index - 1);
}
if (index < right) {
quickSort(arr, index, right);
}
}
int partition(Mod arr[], int left, int right) {
int i = left, j = right;
Mod tmp;
Mod pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i].getName().compareToIgnoreCase(pivot.getName()) < 0) {
i++;
}
while (arr[j].getName().compareToIgnoreCase(pivot.getName()) > 0) {
j--;
}
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
}
}