diff --git a/src/java/org/jivesoftware/LoginDialog.java b/src/java/org/jivesoftware/LoginDialog.java index 58b0a719..bc6ce4d4 100644 --- a/src/java/org/jivesoftware/LoginDialog.java +++ b/src/java/org/jivesoftware/LoginDialog.java @@ -724,6 +724,9 @@ public final class LoginDialog { if (!hasErrors) { localPref = SettingsManager.getLocalPreferences(); + if (localPref.isDebuggerEnabled()) { + XMPPConnection.DEBUG_ENABLED = true; + } SmackConfiguration.setPacketReplyTimeout(localPref.getTimeOut() * 1000); diff --git a/src/java/org/jivesoftware/LoginSettingDialog.java b/src/java/org/jivesoftware/LoginSettingDialog.java index c11a9e4e..2d095620 100644 --- a/src/java/org/jivesoftware/LoginSettingDialog.java +++ b/src/java/org/jivesoftware/LoginSettingDialog.java @@ -89,6 +89,8 @@ public class LoginSettingDialog implements PropertyChangeListener { private JCheckBox useSSOBox = new JCheckBox(); private JTextField ssoServerField = new JTextField(); + private JCheckBox debuggerBox = new JCheckBox(); + /** * Empty Constructor. */ @@ -136,6 +138,7 @@ public class LoginSettingDialog implements PropertyChangeListener { ResourceUtils.resLabel(resourceLabel, resourceField, Res.getString("label.resource")); ResourceUtils.resButton(compressionBox, "Use Co&mpression"); ResourceUtils.resButton(useSSOBox, "&Use Single Sign-On (SSO)"); + ResourceUtils.resButton(debuggerBox, "Start &Debugger on startup"); inputPanel.add(autoDiscoverBox, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); @@ -171,6 +174,7 @@ public class LoginSettingDialog implements PropertyChangeListener { inputPanel.add(useSSLBox, new GridBagConstraints(0, 4, 2, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); inputPanel.add(compressionBox, new GridBagConstraints(0, 5, 2, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); + inputPanel.add(debuggerBox, new GridBagConstraints(0, 6, 2, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); // Create the title panel for this dialog titlePanel = new TitlePanel("Advanced Connection Preferences", "", SparkRes.getImageIcon(SparkRes.BLANK_24x24), true); @@ -232,6 +236,8 @@ public class LoginSettingDialog implements PropertyChangeListener { } }); + debuggerBox.setSelected(localPreferences.isDebuggerEnabled()); + // Construct main panel w/ layout. final JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); @@ -317,6 +323,7 @@ public class LoginSettingDialog implements PropertyChangeListener { localPreferences.setSSL(useSSLBox.isSelected()); localPreferences.setXmppHost(xmppHostField.getText()); localPreferences.setCompressionEnabled(compressionBox.isSelected()); + localPreferences.setDebuggerEnabled(debuggerBox.isSelected()); optionsDialog.setVisible(false); localPreferences.setResource(resource); diff --git a/src/java/org/jivesoftware/Spark.java b/src/java/org/jivesoftware/Spark.java index b0cd7580..cd6d9fc7 100644 --- a/src/java/org/jivesoftware/Spark.java +++ b/src/java/org/jivesoftware/Spark.java @@ -14,22 +14,21 @@ import de.javasoft.plaf.synthetica.SyntheticaBlueMoonLookAndFeel; import de.javasoft.plaf.synthetica.SyntheticaLookAndFeel; import org.jivesoftware.resource.Default; import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smackx.debugger.EnhancedDebuggerWindow; import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; import org.jivesoftware.sparkimpl.settings.local.SettingsManager; -import java.awt.Color; -import java.awt.Font; -import java.io.File; -import java.io.IOException; - import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Font; +import java.io.File; +import java.io.IOException; + /** * In many cases, you will need to know the structure of the Spark installation, such as the directory structures, what * type of system Spark is running on, and also the arguments which were passed into Spark on startup. The Spark @@ -59,11 +58,6 @@ public final class Spark { } public void startup() { - EnhancedDebuggerWindow.PERSISTED_DEBUGGER = true; - EnhancedDebuggerWindow.MAX_TABLE_ROWS = 10; - XMPPConnection.DEBUG_ENABLED = true; - - String current = System.getProperty("java.library.path"); String classPath = System.getProperty("java.class.path"); @@ -308,6 +302,7 @@ public final class Spark { public static String getUserHome() { return USER_HOME; } + /** * Returns the Spark directory for the current user (user.home). The user home is where all user specific * files are placed to run Spark within a multi-user system. diff --git a/src/java/org/jivesoftware/spark/ui/ChatArea.java b/src/java/org/jivesoftware/spark/ui/ChatArea.java index d6a3411c..772df3d5 100644 --- a/src/java/org/jivesoftware/spark/ui/ChatArea.java +++ b/src/java/org/jivesoftware/spark/ui/ChatArea.java @@ -18,6 +18,8 @@ import org.jivesoftware.spark.util.BrowserLauncher; import org.jivesoftware.spark.util.ModelUtil; import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.plugin.emoticons.EmoticonManager; +import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; +import org.jivesoftware.sparkimpl.settings.local.SettingsManager; import javax.swing.AbstractAction; import javax.swing.Action; @@ -99,6 +101,12 @@ public class ChatArea extends JTextPane implements MouseListener, MouseMotionLis public ChatArea() { emoticonManager = EmoticonManager.getInstance(); + // Set Default Font + final LocalPreferences pref = SettingsManager.getLocalPreferences(); + int fs = pref.getChatRoomFontSize(); + fontSize = fs; + setFontSize(fs); + // Cut Action final Action cutAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { diff --git a/src/java/org/jivesoftware/spark/ui/ContactItem.java b/src/java/org/jivesoftware/spark/ui/ContactItem.java index f8a094cd..a56c02bc 100644 --- a/src/java/org/jivesoftware/spark/ui/ContactItem.java +++ b/src/java/org/jivesoftware/spark/ui/ContactItem.java @@ -27,6 +27,8 @@ import org.jivesoftware.spark.util.ModelUtil; import org.jivesoftware.spark.util.TaskEngine; import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.profile.VCardManager; +import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; +import org.jivesoftware.sparkimpl.settings.local.SettingsManager; import javax.imageio.ImageIO; import javax.swing.Icon; @@ -69,6 +71,7 @@ public class ContactItem extends JPanel { private JLabel sideIcon; + private int fontSize; /** * Creates a new instance of a contact. @@ -79,6 +82,10 @@ public class ContactItem extends JPanel { public ContactItem(String nickname, String fullyQualifiedJID) { setLayout(new GridBagLayout()); + // Set Default Font + final LocalPreferences pref = SettingsManager.getLocalPreferences(); + fontSize = pref.getContactListFontSize(); + // Set default presence presence = new Presence(Presence.Type.unavailable); @@ -94,7 +101,7 @@ public class ContactItem extends JPanel { nicknameLabel.setText(nickname); - descriptionLabel.setFont(new Font("Dialog", Font.PLAIN, 11)); + descriptionLabel.setFont(new Font("Dialog", Font.PLAIN, fontSize)); descriptionLabel.setForeground((Color)UIManager.get("ContactItemDescription.foreground")); descriptionLabel.setHorizontalTextPosition(JLabel.LEFT); descriptionLabel.setHorizontalAlignment(JLabel.LEFT); @@ -375,7 +382,7 @@ public class ContactItem extends JPanel { isAvailable = true; } else if (!presence.isAvailable()) { - getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize)); getNicknameLabel().setForeground((Color)UIManager.get("ContactItemOffline.color")); RosterEntry entry = SparkManager.getConnection().getRoster().getEntry(getJID()); @@ -383,13 +390,13 @@ public class ContactItem extends JPanel { && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus()) { // Do not move out of group. setIcon(SparkRes.getImageIcon(SparkRes.SMALL_QUESTION)); - getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize)); setStatusText("Pending"); } else { setIcon(null); - setFont(new Font("Dialog", Font.PLAIN, 11)); - getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, 11)); + setFont(new Font("Dialog", Font.PLAIN, fontSize)); + getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize)); setAvailable(false); if (ModelUtil.hasLength(status)) { setStatusText(status); @@ -425,7 +432,7 @@ public class ContactItem extends JPanel { if (isAvailable) { - getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize)); if ("Online".equals(status) || Res.getString("available").equalsIgnoreCase(status)) { setStatusText(""); } @@ -434,7 +441,7 @@ public class ContactItem extends JPanel { } } else if (presence.isAvailable()) { - getNicknameLabel().setFont(new Font("Dialog", Font.ITALIC, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.ITALIC, fontSize)); getNicknameLabel().setForeground(Color.gray); if (status != null) { setStatusText(status); @@ -475,7 +482,7 @@ public class ContactItem extends JPanel { */ public void showUserComingOnline() { // Change Font - getNicknameLabel().setFont(new Font("Dialog", Font.BOLD, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.BOLD, fontSize)); getNicknameLabel().setForeground(new Color(255, 128, 0)); } @@ -484,7 +491,7 @@ public class ContactItem extends JPanel { */ public void showUserGoingOfflineOnline() { // Change Font - getNicknameLabel().setFont(new Font("Dialog", Font.BOLD, 11)); + getNicknameLabel().setFont(new Font("Dialog", Font.BOLD, fontSize)); getNicknameLabel().setForeground(Color.red); } diff --git a/src/java/org/jivesoftware/spark/ui/TranscriptWindow.java b/src/java/org/jivesoftware/spark/ui/TranscriptWindow.java index 9d15590c..25ad60d8 100644 --- a/src/java/org/jivesoftware/spark/ui/TranscriptWindow.java +++ b/src/java/org/jivesoftware/spark/ui/TranscriptWindow.java @@ -23,21 +23,6 @@ import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; import org.jivesoftware.sparkimpl.settings.local.SettingsManager; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; -import java.awt.Toolkit; -import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Iterator; -import java.util.List; - import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JComponent; @@ -53,6 +38,21 @@ import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Toolkit; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + /** * The TranscriptWindow class. Provides a default implementation * of a Chat Window. In general, extensions could override this class @@ -70,7 +70,7 @@ public class TranscriptWindow extends ChatArea { /** * The default font used in the chat window for all messages. */ - private Font defaultFont = new Font("Dialog", Font.PLAIN, 12); + private Font defaultFont; private Date lastPost; @@ -80,6 +80,12 @@ public class TranscriptWindow extends ChatArea { public TranscriptWindow() { setEditable(false); + // Set Default Font + final LocalPreferences pref = SettingsManager.getLocalPreferences(); + int fontSize = pref.getChatRoomFontSize(); + defaultFont = new Font("Dialog", Font.PLAIN, fontSize); + + addMouseListener(this); addMouseMotionListener(this); setDragEnabled(true); @@ -467,7 +473,7 @@ public class TranscriptWindow extends ChatArea { writer.write(buf.toString()); writer.close(); JOptionPane.showMessageDialog(SparkManager.getMainWindow(), "Chat transcript has been saved.", - "Chat Transcript Saved", JOptionPane.INFORMATION_MESSAGE); + "Chat Transcript Saved", JOptionPane.INFORMATION_MESSAGE); } } catch (Exception ex) { @@ -477,7 +483,7 @@ public class TranscriptWindow extends ChatArea { } - public void cleanup(){ + public void cleanup() { clear(); } diff --git a/src/java/org/jivesoftware/spark/ui/themes/ThemePanel.java b/src/java/org/jivesoftware/spark/ui/themes/ThemePanel.java index dbaaad46..eae8b038 100644 --- a/src/java/org/jivesoftware/spark/ui/themes/ThemePanel.java +++ b/src/java/org/jivesoftware/spark/ui/themes/ThemePanel.java @@ -29,6 +29,7 @@ import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.JTextField; import javax.swing.text.BadLocationException; import java.awt.Color; @@ -54,6 +55,12 @@ public class ThemePanel extends JPanel { private JButton addThemeButton; private JButton addEmoticonButton; + private JTextField contactListFontField; + private JLabel contactListFontLabel; + + private JTextField chatRoomFontField; + private JLabel chatRoomFontLabel; + private JCheckBox emoticonCheckBox; private JFileChooser fc; @@ -80,6 +87,13 @@ public class ThemePanel extends JPanel { systemLookAndFeelBox = new JCheckBox(); + + contactListFontField = new JTextField(); + contactListFontLabel = new JLabel(); + + chatRoomFontField = new JTextField(); + chatRoomFontLabel = new JLabel(); + // Set ResourceUtils ResourceUtils.resLabel(messageStyleLabel, messageStyleBox, Res.getString("label.message.style") + ":"); ResourceUtils.resLabel(emoticonsLabel, emoticonBox, Res.getString("label.emoticons") + ":"); @@ -89,6 +103,9 @@ public class ThemePanel extends JPanel { ResourceUtils.resButton(addThemeButton, "&Add..."); ResourceUtils.resButton(addEmoticonButton, "A&dd..."); + ResourceUtils.resLabel(contactListFontLabel, contactListFontField, "Contact &List font size:"); + ResourceUtils.resLabel(chatRoomFontLabel, chatRoomFontField, "Chat &Room font size:"); + // Build UI buildUI(); } @@ -114,6 +131,12 @@ public class ThemePanel extends JPanel { if (Spark.isWindows()) { add(systemLookAndFeelBox, new GridBagConstraints(0, 4, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); } + + add(chatRoomFontLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); + add(chatRoomFontField, new GridBagConstraints(1, 5, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0)); + add(contactListFontLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); + add(contactListFontField, new GridBagConstraints(1, 6, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0)); + // Activate live one. LocalPreferences pref = SettingsManager.getLocalPreferences(); String theme = pref.getTheme(); @@ -147,6 +170,17 @@ public class ThemePanel extends JPanel { emoticonCheckBox.setSelected(pref.areEmoticonsEnabled()); systemLookAndFeelBox.setSelected(pref.useSystemLookAndFeel()); + + try { + int chatRoomFontSize = pref.getChatRoomFontSize(); + int contactListFontSize = pref.getContactListFontSize(); + + chatRoomFontField.setText(Integer.toString(chatRoomFontSize)); + contactListFontField.setText(Integer.toString(contactListFontSize)); + } + catch (Exception e) { + Log.error(e); + } } /** @@ -284,4 +318,12 @@ public class ThemePanel extends JPanel { } } + public String getChatRoomFontSize(){ + return chatRoomFontField.getText(); + } + + public String getContactListFontSize(){ + return contactListFontField.getText(); + } + } diff --git a/src/java/org/jivesoftware/spark/ui/themes/ThemePreference.java b/src/java/org/jivesoftware/spark/ui/themes/ThemePreference.java index be72ed2f..55cc3c95 100644 --- a/src/java/org/jivesoftware/spark/ui/themes/ThemePreference.java +++ b/src/java/org/jivesoftware/spark/ui/themes/ThemePreference.java @@ -12,6 +12,7 @@ package org.jivesoftware.spark.ui.themes; import org.jivesoftware.resource.SparkRes; import org.jivesoftware.spark.preference.Preference; +import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; import org.jivesoftware.sparkimpl.settings.local.SettingsManager; @@ -85,6 +86,17 @@ public class ThemePreference implements Preference { pref.setEmoticonPack(pack); pref.setEmoticonsEnabled(emotEnabled); pref.setUseSystemLookAndFeel(panel.useSystemLookAndFeel()); + + try { + String chatRoomFontSize = panel.getChatRoomFontSize(); + String contactListFontSize = panel.getContactListFontSize(); + + pref.setChatRoomFontSize(Integer.parseInt(chatRoomFontSize)); + pref.setContactListFontSize(Integer.parseInt(contactListFontSize)); + } + catch (NumberFormatException e) { + Log.error(e); + } } diff --git a/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreferences.java b/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreferences.java index 3531c975..b0aa2378 100644 --- a/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreferences.java +++ b/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreferences.java @@ -559,6 +559,30 @@ public class LocalPreferences { return getBoolean("ssoEnabled", false); } + public void setDebuggerEnabled(boolean enabled) { + setBoolean("debuggerEnabled", enabled); + } + + public boolean isDebuggerEnabled() { + return getBoolean("debuggerEnabled", false); + } + + public void setContactListFontSize(int fontSize) { + setInt("contactListFontSize", fontSize); + } + + public int getContactListFontSize() { + return getInt("contactListFontSize", 11); + } + + public void setChatRoomFontSize(int fontSize) { + setInt("chatRoomFontSize", fontSize); + } + + public int getChatRoomFontSize() { + return getInt("chatRoomFontSize", 12); + } + private boolean getBoolean(String property, boolean defaultValue) { return Boolean.parseBoolean(props.getProperty(property, Boolean.toString(defaultValue))); } @@ -567,4 +591,12 @@ public class LocalPreferences { props.setProperty(property, Boolean.toString(value)); } + private int getInt(String property, int defaultValue) { + return Integer.parseInt(props.getProperty(property, Integer.toString(defaultValue))); + } + + private void setInt(String property, int value) { + props.setProperty(property, Integer.toString(value)); + } + }