/*
* JKaiUI.java
*
* Created on November 16, 2004, 3:46 PM
*/
package pt.jkaiui;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Vector;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.logging.Logger;
import javax.swing.JPanel;
import pt.jkaiui.core.*;
import pt.jkaiui.core.messages.DetachEngineOut;
import pt.jkaiui.manager.ChatManager;
import pt.jkaiui.manager.Manager;
import pt.jkaiui.tools.log.*;
import pt.jkaiui.ui.*;
import pt.jkaiui.ui.modes.ArenaMode;
import pt.jkaiui.ui.modes.DiagMode;
import pt.jkaiui.ui.modes.MainMode;
import pt.jkaiui.ui.modes.MessengerMode;
import pt.jkaiui.ui.modes.MessengerModeListModel;
import pt.jkaiui.filelog.*;
import static pt.jkaiui.core.KaiConfig.ConfigTag.*;
/**
*
* @author pedro
*/
public class JKaiUI {
public static final int DISCONNECTED = 10;
public static final int CONNECTED = 11;
public static int status = DISCONNECTED;
public static final int MESSENGER_MODE = 0;
public static final int ARENA_MODE = 1;
public static final int DIAG_MODE = 2;
public static int CURRENT_MODE = MESSENGER_MODE;
private static MainUI mainUI;
private static KaiConfig kaiConfig;
private static Logger _logger;
private static Vector modesVector;
private static Manager manager;
public static String ARENA;
public static HashSet ADMINISTRATORS = new HashSet();
public static HashSet MODERATORS = new HashSet();
/**
* Holds value of property chatManager.
*/
private static ChatManager chatManager;
private static LogFileManager logFileManager;
private static final String uiname = "JKaiUI Custom";
private static final String version = " ver.0.5.1(2012/1/15)";
private static final String version2 = "0.5.1";
private static String KaiEngineVersion;
public static boolean develflag = false;//true: devel verion false:normal version
/** Creates a new instance of JKaiUI */
// public JKaiUI(){
// init();
// }
public JKaiUI(String[] args){
//switch normal, devel mode depend on argments
if(args.length > 0 && args[0].equals("devel")){
develflag = true;
}
if (isMac()) {
// JFrame�Ƀ��j���[������̂ł͂Ȃ��A��ʓI��OSX�A�v�����l�ɉ�ʏ�[�̃X�N���[�����j���[�ɂ���.
System.setProperty("apple.laf.useScreenMenuBar", "true");
// �X�N���[�����j���[���[�ɕ\�L�����A�v���P�[�V��������ݒ肷��
// (�����ݒ肵�Ȃ��ƃN���X���ɂȂ�B)
System.setProperty("com.apple.mrj.application.apple.menu.about.name",JKaiUI.getUIName());
}
System.out.println(Locale.getDefault().getDisplayCountry());
init();
}
private void init() {
mainUI = new MainUI();
updateStatus();
// Moved the setVisible call until after everything is loaded in MainUI's constructor.
//mainUI.setVisible(true);
try {
ConfigLog.createDefaulLoggerHandlers(mainUI.getLogEditorPane());
_logger = ConfigLog.getLogger(this.getClass().getName());
_logger.config("Log Started at " + new java.util.Date().toString());
} catch (Exception e) {
System.out.println("Failed to init log: " + e.getMessage());
}
// Add Modes
try {
addModes(mainUI.getJPanelMode());
} catch (Exception e) {
System.out.println("JKaiUI init:" + e.getMessage());
}
chatManager = new ChatManager();
logFileManager = new LogFileManager();
mainUI.repaint();
mainUI.setVisible(true);
//setting folder
File settingFolder = new File(JKaiUI.getConfig().getConfigSettingFolder());
File settingSaveFolder = new File(JKaiUI.getConfig().getConfigSettingFolder()+"/setting");
File soundFolder = new File(JKaiUI.getConfig().getConfigSettingFolder()+"/sound");
File emoticonsFolder = new File(JKaiUI.getConfig().getConfigSettingFolder()+"/emoticons");
try {
if (!settingFolder.exists()) {
settingFolder.mkdir();
}
if (!settingSaveFolder.exists()) {
settingSaveFolder.mkdir();
}
if (!soundFolder.exists()) {
soundFolder.mkdir();
}
if (!emoticonsFolder.exists()) {
emoticonsFolder.mkdir();
}
} catch (Exception e) {
System.out.println("setting folder open err:"+e);
}
connect();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
//javax.swing.SwingUtilities.invokeLater(new Runnable() {
// public void run() {
new JKaiUI(args);
// }
//});
}
private static boolean isMac() {
// MacOSX�œ��삵�Ă��邩?
return System.getProperty("os.name").toLowerCase().startsWith("mac os x");
}
/**
* Getter for property mainUI.
* @return Value of property mainUI.
*/
public static MainUI getMainUI() {
return mainUI;
}
/**
* Setter for property mainUI.
* @param mainUI New value of property mainUI.
*/
public void setMainUI(MainUI mainUI) {
this.mainUI = mainUI;
}
public static KaiConfig getConfig(){
if( kaiConfig == null ){
kaiConfig = new KaiConfig();
kaiConfig.readConfig();
}
return kaiConfig;
}
public void addModes(JPanel panel){
_logger.config("Creating modes");
modesVector = new Vector();
// Init Modesx
MessengerMode messengerMode = new MessengerMode();
ArenaMode arenaMode = new ArenaMode();
DiagMode diagMode = new DiagMode();
// Add to vector
modesVector.add(messengerMode); // 0
modesVector.add(arenaMode); // 1
modesVector.add(diagMode); // 2
// Show one
_logger.info("Selecting Messenger Mode");
((MainMode)modesVector.get(MESSENGER_MODE)).selectMode();
}
public static void resetModeName(){
MainMode m = (MainMode) modesVector.get(CURRENT_MODE);
m.setModeName(m.getName());
}
public static void selectMode(Object cl){
// Add all to UI
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m.getClass().getName().equals(cl.getClass().getName()) ){
m.selectMode();
return;
}
}
}
public static MessengerMode getMessengerMode(){
return (MessengerMode) getModesVector().get(0);
}
public static ArenaMode getArenaMode(){
return (ArenaMode) getModesVector().get(1);
}
public static DiagMode getDiagMode(){
return (DiagMode) getModesVector().get(2);
}
public static Vector getModesVector(){
return modesVector;
}
public static void connect(){
if(kaiConfig != null && mainUI != null) {
if(kaiConfig.getConfig(HOST).equals("") || kaiConfig.getConfig(PASSWORD).equals("")) {
boolean shouldOpenSettingsDialog;
// Should check if the program is being ran for the first time?
if(mainUI.askYesNoDialog("MSG_SettingsNotConfiguredQuestion", "MSG_Error")) {
mainUI.openSettings();
}
} else {
getManager().connect();
}
}
}
public static void connected(){
status = CONNECTED;
updateStatus();
}
public static Manager getManager(){
if(manager == null)
manager = new Manager();
return manager;
}
public static void disconnect(){
if(status != DISCONNECTED){
DetachEngineOut out = new DetachEngineOut();
JKaiUI.getManager().getExecuter().execute(out);
}
}
public static void disconnected(){
//Clean lists
MessengerModeListModel model = (MessengerModeListModel) JKaiUI.getArenaMode().getListModel();
model.clear();
model = (MessengerModeListModel) JKaiUI.getMessengerMode().getListModel();
model.clear();
model = (MessengerModeListModel) JKaiUI.getDiagMode().getListModel();
model.clear();
mainUI.getListModelChatUsers().clear();
mainUI.UpdateChatUsersQuantity();
status = DISCONNECTED;
updateStatus();
}
public static void updateStatus(){
if (status == DISCONNECTED){
mainUI.jButtonMessengerMode.setEnabled(false);
mainUI.jButtonArenaMode.setEnabled(false);
mainUI.jButtonDiagMode.setEnabled(false);
mainUI.SetDisConnectedStatus();
try{
getArenaMode().enableGoParentArena(false);
} catch (NullPointerException e){
// do nothing. must be first init
System.out.println("JKaiUI updateStatus:"+e);
}
} else if(status == CONNECTED){
mainUI.jButtonArenaMode.setEnabled(true);
mainUI.jButtonDiagMode.setEnabled(true);
mainUI.SetConnectedStatus();
getArenaMode().enableGoParentArena(true);
}
}
/**
* Getter for property chatManager.
* @return Value of property chatManager.
*/
public static ChatManager getChatManager() {
return chatManager;
}
public static LogFileManager getLogFileManager() {
return logFileManager;
}
public static String getVersion(){
return version;
}
public static String getVersion2(){
return version2;
}
public static void setKaiEngineVersion(String version){
KaiEngineVersion = version;
}
public static String getUIName(){
return uiname;
}
public static String getKaiEngineVersion(){
return KaiEngineVersion;
}
}