/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2016 Maxence Bernard
*
* muCommander 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 3 of the License, or
* (at your option) any later version.
*
* muCommander 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, see <http://www.gnu.org/licenses/>.
*/
package com.mucommander.ui.quicklist;
import com.mucommander.ui.quicklist.item.QuickListDataList;
import javax.swing.*;
/**
* FileTablePopupWithDataList is a FileTablePopup which contains FileTablePopupDataList.
*
* @author Arik Hadas
*/
public abstract class QuickListWithDataList<T> extends QuickList {
protected QuickListDataList dataList;
private QuickListWithEmptyMsg emptyPopup;
public QuickListWithDataList(QuickListContainer container, String header, String emptyPopupHeader) {
super(container, header);
// get the TablePopupDataList.
dataList = getList();
// add JScrollPane that contains the TablePopupDataList to the popup.
JScrollPane scroll = new JScrollPane(dataList,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setBorder(null);
scroll.getVerticalScrollBar().setFocusable( false );
scroll.getHorizontalScrollBar().setFocusable( false );
add(scroll);
dataList.addFocusListener(this);
// create TablePopupWithEmptyMsg that will be shown instead of this popup, if this
// popup's data list won't have any elements.
emptyPopup = new QuickListWithEmptyMsg(container, header, emptyPopupHeader);
}
protected abstract T[] getData();
/**
* This function will be called when an element from the data list will be selected.
*
* @param item - The selected item from the data list.
*/
public void itemSelected(T item) {
setVisible(false);
acceptListItem(item);
}
@Override
protected boolean prepareForShowing(QuickListContainer container) {
boolean toShow = false;
// if data list contains at least 1 element, show this popup.
T[] data;
if ((data = getData()).length > 0) {
dataList.setListData(data);
toShow = true;
}
// else, show popup with a "no elements" message.
else
emptyPopup.show();
return toShow;
}
@Override
protected void getFocus() {
// to overcome #552 (right recentQL not focused) both must be used:
// invokeLater and requestFocus (requestFocusInWindow is not sufficient)
SwingUtilities.invokeLater(new Runnable() {
public void run() {
dataList.requestFocus();
}
});
}
/**
* This function defines what should be done with a selected item from the data list.
*
* @param item - The selected item from the data list.
*/
protected abstract void acceptListItem(T item);
protected abstract QuickListDataList<T> getList();
}