package org.arong.egdownloader.ui.list;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import org.arong.egdownloader.db.impl.PictureDom4jDbTemplate;
import org.arong.egdownloader.db.impl.SettingDom4jDbTemplate;
import org.arong.egdownloader.db.impl.TaskDom4jDbTemplate;
import org.arong.egdownloader.ui.ComponentConst;
import org.arong.egdownloader.ui.CursorManager;
import org.arong.egdownloader.ui.IconManager;
import org.arong.egdownloader.ui.swing.AJMenuItem;
import org.arong.egdownloader.ui.swing.AJPopupMenu;
import org.arong.egdownloader.ui.window.EgDownloaderWindow;
import org.arong.egdownloader.ui.window.GroupWindow;
import org.arong.egdownloader.ui.window.InitWindow;
import org.arong.util.FileUtil;
/**
* 任务组列表
* @author dipoo
* @since 2015-01-07
*/
public class GroupList extends JList {
private static final long serialVersionUID = -7702879865264332528L;
private JPopupMenu popupMenu;
private JMenuItem deleteMenu = new AJMenuItem("删除", new Color(0,0,85), IconManager.getIcon("delete"), null);
public GroupList(List<File> groups, final GroupWindow window, final EgDownloaderWindow mainWindow){
this.setModel(new GroupListModel(groups));
//this.setCellRenderer(new GroupListCellReader());
this.setCursor(CursorManager.getPointerCursor());
this.setForeground(Color.BLUE);
this.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseClicked(MouseEvent me) {
int clickNum = me.getClickCount();
GroupList list = (GroupList)me.getSource();
//左键
if(me.getButton() == MouseEvent.BUTTON1){
//双击
if(2 == clickNum){
String groupName = "";
if(list.getSelectedIndex() != 0){
groupName = list.getSelectedValue().toString();
if(groupName.indexOf("|") != -1){
groupName = groupName.substring(groupName.indexOf("|") + 1, groupName.length()).trim();
}
}
//如果是在主界面切换的任务组,且选择的任务组不变,则关闭任务组列表窗口
if(mainWindow != null && groupName.equals(ComponentConst.groupName)){
window.dispose();
return;
}
if(mainWindow != null){
//保存前一个任务组的数据
mainWindow.saveTaskGroupData();
mainWindow.dispose();
}
ComponentConst.groupName = groupName;
ComponentConst.changeDataPath(groupName);
ComponentConst.changeDataXmlPath();
window.dispose();
if(mainWindow != null){
/**
* 更新dom
*/
SettingDom4jDbTemplate.updateDom();
TaskDom4jDbTemplate.updateDom();
PictureDom4jDbTemplate.updateDom();
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new InitWindow();
}
});
}
}//右键
else if(me.getButton() == MouseEvent.BUTTON3){
int rowIndex = list.locationToIndex(me.getPoint());
//使之选中
list.getSelectionModel().setSelectionInterval(rowIndex, rowIndex);
if(popupMenu == null){
popupMenu = new AJPopupMenu(deleteMenu);
}
popupMenu.show(list, me.getPoint().x, me.getPoint().y);
}
}
});
final GroupList this_ = this;
deleteMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(this_.getSelectedIndex() == 0){
JOptionPane.showMessageDialog(this_, "默认空间不能删除");
}else{
String name = this_.getSelectedValue().toString();
if(name.indexOf("|") != -1){
name = name.substring(name.indexOf("|") + 1, name.length()).trim();
}
int r = JOptionPane.showConfirmDialog(this_, "删除任务组将会删除已下载的漫画,且不可恢复,您确定要删除任务组:" + name + "吗?");
if(r == JOptionPane.OK_OPTION){
//如果是在主界面切换的任务组,且选择的任务组不变,则关闭主窗口
if(mainWindow != null && name.equals(ComponentConst.groupName)){
mainWindow.saveTaskGroupData();
mainWindow.dispose();
}
File file = new File(ComponentConst.ROOT_DATA_PATH + "/" + name);
if(file.exists()){
FileUtil.deleteFile(file);
}
File dataFile = new File(ComponentConst.ROOT_DATA_PATH);
if(!dataFile.exists()){
dataFile.mkdirs();
if(window != null){
window.dispose();
}
ComponentConst.groupName = "";
ComponentConst.changeDataPath("");
ComponentConst.changeDataXmlPath();
/**
* 更新dom
*/
SettingDom4jDbTemplate.updateDom();
TaskDom4jDbTemplate.updateDom();
PictureDom4jDbTemplate.updateDom();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new InitWindow();
}
});
}else{
File[] files = dataFile.listFiles();
List<File> groups = new ArrayList<File>();
for(File file2 : files){
if(file2.isDirectory()){
groups.add(file2);
}
}
if(groups.size() > 0){
this_.setModel(new GroupListModel(groups));
this_.updateUI();
}else{
if(window != null){
window.dispose();
}
ComponentConst.groupName = "";
ComponentConst.changeDataPath("");
ComponentConst.changeDataXmlPath();
/**
* 更新dom
*/
SettingDom4jDbTemplate.updateDom();
TaskDom4jDbTemplate.updateDom();
PictureDom4jDbTemplate.updateDom();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new InitWindow();
}
});
}
}
}
}
}
});
}
}