Continue working on stale tabs.

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@4874 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Derek DeMoro
2006-08-10 05:53:10 +00:00
committed by derek
parent f14902dc4b
commit f9a5eca9ba
5 changed files with 223 additions and 167 deletions

View File

@ -14,14 +14,7 @@
<option name="CHANGE_BEFORE" value="" />
<option name="CHANGE_AFTER" value="" />
</component>
<component name="CheckinPanelState">
<Excluded key="C:\spark\build\lib\dist\smack.jar" />
<Excluded key="C:\spark\build\lib\dist\smackx-debug.jar" />
<Excluded key="C:\spark\build\lib\dist\smackx.jar" />
<Excluded key="C:\spark\build\projects\Spark.iws" />
<Excluded key="C:\spark\src\java\org\jivesoftware\AccountCreationWizard.java" />
<Excluded key="C:\spark\src\java\org\jivesoftware\LoginDialog.java" />
</component>
<component name="CheckinPanelState" />
<component name="Commander">
<leftPanel />
<rightPanel />
@ -126,46 +119,37 @@
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="ChatRoom.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ChatRoom.java">
<provider selected="true" editor-type-id="text-editor">
<state line="454" column="0" selection-start="15832" selection-end="15832" vertical-scroll-proportion="-0.01494396">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GroupChatRoom.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/rooms/GroupChatRoom.java">
<provider selected="true" editor-type-id="text-editor">
<state line="509" column="40" selection-start="17242" selection-end="17242" vertical-scroll-proportion="0.23785803">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ChatRoomImpl.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/rooms/ChatRoomImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state line="582" column="28" selection-start="20487" selection-end="20487" vertical-scroll-proportion="0.82316315">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ChatManager.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ChatManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="422" column="41" selection-start="14020" selection-end="14020" vertical-scroll-proportion="0.19551681">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ChatContainer.java" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="ChatContainer.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ChatContainer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="122" column="0" selection-start="3974" selection-end="3974" vertical-scroll-proportion="0.66625154">
<state line="1084" column="16" selection-start="35520" selection-end="35520" vertical-scroll-proportion="0.49514562">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SparkTab.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="32" selection-start="586" selection-end="586" vertical-scroll-proportion="0.33252427">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TabPanel.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/TabPanel.java">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="47" selection-start="143" selection-end="143" vertical-scroll-proportion="0.10965435">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ChatPreferencePanel.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/sparkimpl/preference/chat/ChatPreferencePanel.java">
<provider selected="true" editor-type-id="text-editor">
<state line="87" column="114" selection-start="3894" selection-end="3894" vertical-scroll-proportion="0.4975728">
<folding />
</state>
</provider>
@ -174,43 +158,16 @@
<file leaf-file-name="SparkTabbedPane.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="11" selection-start="1812" selection-end="1812" vertical-scroll-proportion="0.3325031">
<state line="395" column="17" selection-start="11918" selection-end="11918" vertical-scroll-proportion="0.82402915">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PluginManager.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/PluginManager.java">
<file leaf-file-name="ChatManager.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ChatManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="54" column="52" selection-start="1599" selection-end="1694" vertical-scroll-proportion="0.25305623">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SparkManager.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/SparkManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="171" column="52" selection-start="5584" selection-end="5584" vertical-scroll-proportion="0.21882641">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ContactGroup.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ContactGroup.java">
<provider selected="true" editor-type-id="text-editor">
<state line="547" column="0" selection-start="16407" selection-end="16407" vertical-scroll-proportion="0.19800748">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ContactList.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ContactList.java">
<provider selected="true" editor-type-id="text-editor">
<state line="330" column="0" selection-start="12210" selection-end="12210" vertical-scroll-proportion="0.19800748">
<state line="422" column="23" selection-start="13960" selection-end="13960" vertical-scroll-proportion="0.4223301">
<folding />
</state>
</provider>
@ -575,13 +532,13 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1280" height="994" extended-state="0" />
<frame x="0" y="0" width="1280" height="995" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="8" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3298731" order="7" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.2019544" order="0" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32" order="1" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3194925" order="1" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32036614" order="8" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3990476" order="6" />
@ -592,7 +549,7 @@
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.26761904" order="2" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.2496" order="2" />
<window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="3" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.37759817" order="4" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.37716264" order="4" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.27142859" order="8" />
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
@ -624,7 +581,6 @@
<option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
<MESSAGE value="1) Fixed title pane.&#10;2) Fixed reconnection UI confusion.&#10;3) Added JID to Vcard Profile." />
<MESSAGE value="1) Fixed history.&#10;2) Updating gateway support." />
<MESSAGE value="Added better support for Gateway icons." />
<MESSAGE value="Fixing Fastpath bug with Spark OS." />
@ -634,6 +590,7 @@
<MESSAGE value="Fixing ChatRoom scroll issue." />
<MESSAGE value="Fixed broadcasting issue with HEADLINE." />
<MESSAGE value="Update ContactList with subtle actions." />
<MESSAGE value="Added Timeout on Chat Rooms." />
</component>
<component name="VssConfiguration">
<option name="CLIENT_PATH" value="" />
@ -674,27 +631,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/sparkimpl/preference/chat/ChatPreference.java">
<provider selected="true" editor-type-id="text-editor">
<state line="86" column="57" selection-start="2996" selection-end="2996" vertical-scroll-proportion="0.511432">
<folding />
</state>
</provider>
</entry>
<entry file="jar://C:/Program Files/Java/jdk1.5.0_03/src.zip!/java/util/AbstractList.java">
<provider selected="true" editor-type-id="text-editor">
<state line="448" column="0" selection-start="16639" selection-end="16639" vertical-scroll-proportion="0.34552845">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/util/ModelUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="23" column="19" selection-start="519" selection-end="519" vertical-scroll-proportion="-7.469512">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/util/StringUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="23" column="21" selection-start="607" selection-end="611" vertical-scroll-proportion="0.5731707">
@ -709,13 +645,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ChatManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="422" column="41" selection-start="14020" selection-end="14020" vertical-scroll-proportion="0.19551681">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ContactList.java">
<provider selected="true" editor-type-id="text-editor">
<state line="330" column="0" selection-start="12210" selection-end="12210" vertical-scroll-proportion="0.19800748">
@ -723,13 +652,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ContactGroup.java">
<provider selected="true" editor-type-id="text-editor">
<state line="547" column="0" selection-start="16407" selection-end="16407" vertical-scroll-proportion="0.19800748">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/SparkManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="171" column="52" selection-start="5584" selection-end="5584" vertical-scroll-proportion="0.21882641">
@ -765,16 +687,51 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ContactGroup.java">
<provider selected="true" editor-type-id="text-editor">
<state line="194" column="9" selection-start="6426" selection-end="6426" vertical-scroll-proportion="0.4252734">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="11" selection-start="1812" selection-end="1812" vertical-scroll-proportion="0.3325031">
<state line="395" column="17" selection-start="11918" selection-end="11918" vertical-scroll-proportion="0.82402915">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/sparkimpl/preference/chat/ChatPreferencePanel.java">
<provider selected="true" editor-type-id="text-editor">
<state line="87" column="114" selection-start="3894" selection-end="3894" vertical-scroll-proportion="0.4975728">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/TabPanel.java">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="47" selection-start="143" selection-end="143" vertical-scroll-proportion="0.10965435">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="32" selection-start="586" selection-end="586" vertical-scroll-proportion="0.33252427">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ui/ChatContainer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="122" column="0" selection-start="3974" selection-end="3974" vertical-scroll-proportion="0.66625154">
<state line="1084" column="16" selection-start="35520" selection-end="35520" vertical-scroll-proportion="0.49514562">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../src/java/org/jivesoftware/spark/ChatManager.java">
<provider selected="true" editor-type-id="text-editor">
<state line="422" column="23" selection-start="13960" selection-end="13960" vertical-scroll-proportion="0.4223301">
<folding />
</state>
</provider>

View File

@ -36,8 +36,6 @@ import org.jivesoftware.spark.ui.rooms.GroupChatRoom;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.preference.chat.ChatPreference;
import org.jivesoftware.sparkimpl.preference.chat.ChatPreferences;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
import java.awt.Color;
import java.awt.Font;
@ -421,32 +419,13 @@ public class ChatManager implements MessageEventNotificationListener {
* Checks every room every 30 seconds to see if it's timed out.
*/
private void checkRoomsForTimeout() {
int delay = 30000; // delay for 5 sec.
int delay = 60000; // delay for 5 sec.
int period = 30000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
for (ChatRoom chatRoom : getChatContainer().getChatRooms()) {
long lastActivity = chatRoom.getLastActivity();
long currentTime = System.currentTimeMillis();
long diff = currentTime - lastActivity;
int minutes = (int)(diff / (60 * 1000F));
LocalPreferences pref = SettingsManager.getLocalPreferences();
int timeoutMinutes = pref.getChatLengthDefaultTimeout();
try {
ChatRoom activeChatRoom = getChatContainer().getActiveChatRoom();
if(activeChatRoom == chatRoom){
continue;
}
}
catch (ChatRoomNotFoundException e) {
}
if (timeoutMinutes <= minutes) {
for (ChatRoom chatRoom : getChatContainer().getStaleChatRooms()) {
// Turn tab gray
int index = getChatContainer().indexOfComponent(chatRoom);
SparkTab tab = getChatContainer().getTabAt(index);
@ -460,7 +439,6 @@ public class ChatManager implements MessageEventNotificationListener {
titleLabel.repaint();
}
}
}
}, delay, period);
}

View File

@ -14,13 +14,6 @@ import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.util.ModelUtil;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
@ -41,6 +34,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
/**
*
*/
@ -307,6 +307,18 @@ public class SparkTabbedPane extends JPanel implements MouseListener {
return null;
}
public Component getComponentInTab(SparkTab tab) {
Component[] comps = tabs.getComponents();
for (int i = 0; i < comps.length; i++) {
Component c = comps[i];
if (c == tab) {
return getComponentAt(i);
}
}
return null;
}
public void removeComponent(Component comp) {
Component[] comps = mainPanel.getComponents();
for (int i = 0; i < comps.length; i++) {

View File

@ -14,7 +14,6 @@ import org.jivesoftware.MainWindow;
import org.jivesoftware.Spark;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.FromContainsFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
@ -32,6 +31,7 @@ import org.jivesoftware.spark.ui.status.StatusItem;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.spark.util.SwingWorker;
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;
@ -41,6 +41,8 @@ import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
@ -52,12 +54,14 @@ import java.util.List;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
@ -215,8 +219,16 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
}
// Create ChatRoom UI and dock
addTab(room.getTabTitle(), room.getTabIcon(), room, tooltip);
SparkTab tab = addTab(room.getTabTitle(), room.getTabIcon(), room, tooltip);
tab.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
checkTabPopup(e);
}
public void mousePressed(MouseEvent e) {
checkTabPopup(e);
}
});
room.addMessageListener(this);
@ -891,6 +903,8 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
Font newFont = new Font(oldFont.getFontName(), Font.BOLD, oldFont.getSize());
titleLabel.setFont(newFont);
titleLabel.setForeground(Color.red);
titleLabel.validate();
titleLabel.repaint();
}
}
@ -898,11 +912,16 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
final int index = indexOfComponent(room);
if (index != -1) {
SparkTab tab = getTabAt(index);
Font font = tab.getTitleLabel().getFont();
tab.getTitleLabel().setForeground(Color.black);
final JLabel titleLabel = tab.getTitleLabel();
Font font = titleLabel.getFont();
titleLabel.setForeground(Color.black);
Font newFont = font.deriveFont(Font.PLAIN);
tab.getTitleLabel().setFont(newFont);
titleLabel.setFont(newFont);
titleLabel.validate();
titleLabel.repaint();
}
}
@ -1004,7 +1023,8 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
}
public Collection<ChatRoom> getChatRooms() {
return chatRoomList;
final List<ChatRoom> list = new ArrayList<ChatRoom>(chatRoomList);
return list;
}
public ChatFrame getChatFrame() {
@ -1036,5 +1056,94 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
}
}
/**
* Returns a Collection of stale chat rooms.
*
* @return a collection of stale chat rooms.
*/
public Collection<ChatRoom> getStaleChatRooms() {
final List<ChatRoom> staleRooms = new ArrayList<ChatRoom>();
for (ChatRoom chatRoom : getChatRooms()) {
long lastActivity = chatRoom.getLastActivity();
long currentTime = System.currentTimeMillis();
long diff = currentTime - lastActivity;
int minutes = (int)(diff / (60 * 1000F));
LocalPreferences pref = SettingsManager.getLocalPreferences();
int timeoutMinutes = pref.getChatLengthDefaultTimeout();
try {
ChatRoom activeChatRoom = getActiveChatRoom();
if (activeChatRoom == chatRoom) {
continue;
}
}
catch (ChatRoomNotFoundException e) {
}
if (timeoutMinutes <= minutes) {
staleRooms.add(chatRoom);
}
}
return staleRooms;
}
private void checkTabPopup(MouseEvent e) {
final SparkTab tab = (SparkTab)e.getSource();
if (!e.isPopupTrigger()) {
return;
}
final JPopupMenu popup = new JPopupMenu();
// Handle closing this room.
Action closeThisAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
ChatRoom chatRoom = (ChatRoom)getComponentInTab(tab);
if (chatRoom != null) {
closeTab(chatRoom);
}
}
};
closeThisAction.putValue(Action.NAME, "Close this room");
popup.add(closeThisAction);
if (getChatRooms().size() > 1) {
// Handle closing other rooms.
Action closeOthersAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
ChatRoom chatRoom = (ChatRoom)getComponentInTab(tab);
if (chatRoom != null) {
for (ChatRoom cRoom : getChatRooms()) {
if (chatRoom != cRoom) {
closeTab(cRoom);
}
}
}
}
};
closeOthersAction.putValue(Action.NAME, "Close all other rooms");
popup.add(closeOthersAction);
Action closeOldAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
for(ChatRoom rooms : getStaleChatRooms()){
closeTab(rooms);
}
}
};
closeOldAction.putValue(Action.NAME, "Close stale rooms");
popup.add(closeOldAction);
}
popup.show(tab, e.getX(), e.getY());
}
}

View File

@ -85,7 +85,7 @@ public class ChatPreferencePanel extends JPanel implements ActionListener {
chatWindowPanel.add(hideChatHistory, new GridBagConstraints(0, 3, 2, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
JLabel chatTimeoutLabel = new JLabel();
ResourceUtils.resLabel(chatTimeoutLabel, chatTimeoutField, "&Inactive chats expire after (min):");
ResourceUtils.resLabel(chatTimeoutLabel, chatTimeoutField, "&Minutes before an inactive room becomes stale:");
chatWindowPanel.add(chatTimeoutLabel, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
chatWindowPanel.add(chatTimeoutField, new GridBagConstraints(1, 4, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0));