/*
* MainMode.java
*
* Created on November 21, 2004, 12:59 AM
*/
package pt.jkaiui.ui.modes;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import pt.jkaiui.JKaiUI;
import pt.jkaiui.core.Arena;
import pt.jkaiui.core.KaiObject;
import pt.jkaiui.core.User;
import pt.jkaiui.ui.ChatPanel;
/**
*
* @author pedro
*/
public abstract class MainMode extends javax.swing.JPanel implements I_MainMode, ActionListener {
protected static Logger _logger;
public static final int WIDTH = 250;
protected final ImageIcon CHAT_ICON = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/chat.png"));
private ListModel listModel;
public JList list;
/** Creates new form MainMode */
public MainMode() {
setLayout(new java.awt.BorderLayout());
setFocusable(false);
list = new JList();
list.setCellRenderer(new KaiListCellRenderer());
listModel = getListModel();
list.setModel(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent me){
// Display menu if right mouse button clicked
if (SwingUtilities.isRightMouseButton(me)){
// System.out.println("mainmode click");
JList list = (JList) me.getComponent();
// What an ugly way to get MainMode... !
// MainMode mode = (MainMode) list.getParent().getParent().getParent();
int Index = list.locationToIndex(me.getPoint());
if (Index != -1) {
list.setSelectedIndex(Index);
JPopupMenu popup = getPopupMenu( (KaiObject) list.getSelectedValue());
if (popup != null) {
popup.show(list, me.getX(), me.getY());
}
}
}
// Lets fetch double-click!
else if(SwingUtilities.isLeftMouseButton(me) && me.getClickCount() == 2){
JList list = (JList) me.getComponent();
Object obj = list.getSelectedValue();
if( obj instanceof User){
User user = (User) obj;
if(user.isOnline()){
JKaiUI.getChatManager().openChat(user);
}
}
if( obj instanceof Arena){
// enter arena
Arena arena = (Arena) obj;
JKaiUI.getManager().enterArena(arena);
}
}
Object selected = JKaiUI.getMainUI().jTabbedPane.getSelectedComponent();
if(selected instanceof ChatPanel)
((ChatPanel)selected).getInputField().requestFocus();
}
}
);
// Set the preferred row count. This affects the preferredSize
// of the JList when it's in a scrollpane.
list.setVisibleRowCount(15);
list.setFixedCellWidth(WIDTH);
// Add list to a scrollpane
JScrollPane scrollPane = new JScrollPane(list);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
add(scrollPane,BorderLayout.CENTER);
setVisible(false);
}
/**
* Setter for property modeName.
* @param modeName New value of property modeName.
*/
public void setModeName(String modeName) {
JKaiUI.getMainUI().SetModeTitle(modeName);
}
public abstract String getName();
public abstract ListModel getListModel();
public void previewMode(){
_logger.fine("Previewing "+ getName());
setModeName(getName() + " - " + java.util.ResourceBundle.getBundle("pt/jkaiui/ui/Bundle").getString("LBL_Preview"));
JKaiUI.getMainUI().getJPanelMode().removeAll();
JKaiUI.getMainUI().getJPanelMode().add(this,BorderLayout.CENTER);
setVisible(true);
JKaiUI.getMainUI().getJPanelMode().repaint();
}
public void selectMode(){
_logger.fine("Selecting "+ getName());
JKaiUI.getMainUI().getJPanelMode().removeAll();
setSize(250, JKaiUI.getMainUI().jTabbedPane.getHeight());
JKaiUI.getMainUI().getJPanelMode().add(this,BorderLayout.CENTER);
setModeName(getName());
setVisible(true);
JKaiUI.getMainUI().getJPanelMode().repaint();
// Setting special commands
JPanel panel = JKaiUI.getMainUI().getSpecialCommandsPanel();
panel.removeAll();
_logger.config("Adding special commands");
Vector components = getSpecialComponents();
Iterator i = components.iterator();
while(i.hasNext()){
Component comp = (Component) i.next();
panel.add(comp);
}
panel.repaint();
}
public Insets getInsets(){
return new Insets(0,3,3,0);
}
protected abstract JPopupMenu getPopupMenu(KaiObject obj);
public abstract Vector getSpecialComponents();
public void setRoomFontSize(int size){
((KaiListPanel)list.getCellRenderer()).setFontSize(size);
}
}