1 29 38 39 package org.planetamessenger.mos.ui; 40 41 import java.util.*; 42 import org.planetamessenger.mos.engine.*; 43 import org.planetamessenger.mos.forms.JMOSSendMessageDlg; 44 45 46 47 public class JMessagePane extends javax.swing.JTabbedPane { 48 49 HashMap<String , JTabContent> hTabs; 50 JMOSSendMessageDlg parent; 51 52 53 58 public JMessagePane( JMOSSendMessageDlg parent ) { 59 60 super( javax.swing.JTabbedPane.TOP, javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT ); 61 this.parent = parent; 62 hTabs = new HashMap<String , JTabContent>(); 63 setAutoscrolls( true ); 64 } 65 66 70 public void addTab( org.planetamessenger.plugin.JContactListItem item ) { 71 72 if( hTabs.get( item.getUserId() ) == null ) { 73 JTabContent tabContent = new JTabContent( parent, item ); 74 75 addTab( item.getNickName() + ":" + item.getUserId(), null, tabContent ); 76 addChangeListener( tabContent ); 77 setSelectedIndex( this.getTabCount() - 1 ); 78 hTabs.put( item.getUserId(), tabContent ); 79 } 80 else { 81 JTabContent tabContent = ( JTabContent ) hTabs.get( item.getUserId() ); 82 int nTabIndex = indexOfComponent( tabContent ); 83 84 this.setIconAt( nTabIndex, JSharedObjects.getResources().getIcon( JResources.MESSAGE_BLINK ) ); 85 } 86 } 87 88 93 public void setText( org.planetamessenger.plugin.JContactListItem item, String strText ) { 94 95 JTabContent tabContent = ( JTabContent ) hTabs.get( item.getUserId() ); 96 97 98 if( tabContent != null ) { 99 String strHistory = strText; 100 101 if( strText.compareTo( "" ) == 0 ) 102 setSelectedComponent( tabContent ); 103 else 104 tabContent.addHistoryText( strHistory ); 105 } 106 } 107 108 112 public boolean contains( org.planetamessenger.plugin.JContactListItem item ) { 113 114 if( hTabs.get( ( item == null ? "" : item.getUserId() ) ) == null ) 115 return false; 116 else 117 return true; 118 } 119 120 124 public boolean isItemActive( org.planetamessenger.plugin.JContactListItem item ) { 125 126 if( item != null ) { 127 JTabContent tabContent = ( JTabContent ) hTabs.get( item.getUserId() ); 128 129 130 if( tabContent != null ) 131 return getSelectedComponent().equals( tabContent ); 132 } 133 134 return false; 135 } 136 137 140 public JTabContent getActiveItem() { 141 142 Iterator<JTabContent> itItems = hTabs.values().iterator(); 143 JTabContent tabContent; 144 145 146 while( itItems.hasNext() ) { 147 tabContent = itItems.next(); 148 149 if( tabContent != null ) { 150 if( isItemActive( tabContent.ownerItem ) ) 151 return tabContent; 152 } 153 } 154 155 return null; 156 } 157 158 161 public void disableCurrentTabMessageIcon() { 162 163 JTabContent tabContent = getActiveItem(); 164 165 if( tabContent != null ) { 166 int nIndex = this.indexOfComponent( tabContent ); 167 168 setIconAt( nIndex, null ); 169 } 170 } 171 172 176 public void removeAll() { 177 178 super.removeAll(); 179 hTabs.clear(); 180 } 181 182 185 public void removeSelectedTab() { 186 187 int nTabNumber = this.getSelectedIndex(); 188 189 190 if( nTabNumber < 0 ) 191 return; 192 193 JTabContent tabContent = ( JTabContent ) getComponentAt( nTabNumber ); 194 195 196 removeChangeListener( tabContent ); 197 hTabs.remove( tabContent.ownerItem.getUserId() ); 198 removeTabAt( nTabNumber ); 199 200 if( getTabCount() == 0 ) 201 parent.dispose(); 202 else 203 if( getTabCount() == 1 ) 204 this.disableCurrentTabMessageIcon(); 205 } 206 207 214 class JCloseTabIcon implements javax.swing.Icon { 215 216 static final int CLOSE_ICON = 0; 217 static final int MESSAGE_ICON = 1; 218 private final int CLOSE_BTN_WIDTH = 16; 219 private final int CLOSE_BTN_HEIGHT = 16; 220 221 private int nCoordX; 222 private int nCoordY; 223 private int nWidth; 224 private int nHeight; 225 private int nIconType; 226 private javax.swing.Icon fileIcon; 227 228 229 234 public JCloseTabIcon( javax.swing.Icon fileIcon, int nIconType ) { 235 236 this.fileIcon = fileIcon; 237 this.nIconType = nIconType; 238 239 if( fileIcon == null ) { 240 nWidth = CLOSE_BTN_WIDTH; 241 nHeight = CLOSE_BTN_HEIGHT; 242 } 243 else { 244 nWidth = fileIcon.getIconWidth(); 245 nHeight = fileIcon.getIconHeight(); 246 } 247 } 248 249 257 public void paintIcon( java.awt.Component c, java.awt.Graphics g, int x, int y ) { 258 259 int nTmpY = y + 2; 260 261 this.nCoordX = x; 262 this.nCoordY = y; 263 264 if( fileIcon != null ) { 265 fileIcon.paintIcon( c, g, x, nTmpY - 1 ); 266 } 267 else { 268 java.awt.Color color = g.getColor(); 269 270 g.setColor( java.awt.Color.black ); 271 g.drawLine( x + 1, nTmpY, x + 12, nTmpY ); 272 g.drawLine( x + 1, nTmpY + 13, x + 12, nTmpY + 13 ); 273 g.drawLine( x, nTmpY + 1, x, nTmpY + 12 ); 274 g.drawLine( x + 13, nTmpY + 1, x + 13, nTmpY + 12 ); 275 g.drawLine( x + 3, nTmpY + 3, x + 10, nTmpY + 10 ); 276 g.drawLine( x + 3, nTmpY + 4, x + 9, nTmpY + 10 ); 277 g.drawLine( x + 4, nTmpY + 3, x + 10, nTmpY + 9 ); 278 g.drawLine( x + 10, nTmpY + 3, x + 3, nTmpY + 10 ); 279 g.drawLine( x + 10, nTmpY + 4, x + 4, nTmpY + 10 ); 280 g.drawLine( x + 9, nTmpY + 3, x + 3, nTmpY + 9 ); 281 g.setColor( color ); 282 } 283 } 284 285 289 public int getIconWidth() { 290 291 return nWidth; 292 } 293 294 298 public int getIconHeight() { 299 300 return nHeight; 301 } 302 303 306 public int getIconType() { 307 308 return nIconType; 309 } 310 311 315 public java.awt.Rectangle getBounds() { 316 317 return new java.awt.Rectangle ( nCoordX, nCoordY, nWidth, nHeight ); 318 } 319 } 320 } 322 | Popular Tags |