📄 mabstracttextwindow.java
字号:
package net.jumperz.app.MDoorman.windows;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.layout.*;
import java.io.*;
import java.util.*;
import net.jumperz.gui.*;
import net.jumperz.app.MDoorman.*;
import net.jumperz.util.*;
import net.jumperz.net.*;
public abstract class MAbstractTextWindow
extends MWindow
{
public static final int WINDOW_STYLE = SWT.MAX | SWT.MIN | SWT.RESIZE;
protected StyledText text;
protected Button sendButton, disconnectButton;
protected Menu bar, editDropMenu, fileDropMenu, breakDropMenu;
protected MenuItem editCascadeItem, fileCascadeItem, breakCascadeItem, selectAllItem, cutItem, copyItem, pasteItem, saveItem, clItem;
protected Map menuBreakMap;
protected abstract void updateGui();
protected abstract void onSendButtonClick();
protected abstract void onDisconnectButtonClick();
protected abstract MHttpData getHttpData( byte[] buffer ) throws IOException;
protected int type;
// --------------------------------------------------------------------------------
public MAbstractTextWindow( String windowName, Shell shell )
{
super( windowName, shell );
}
// --------------------------------------------------------------------------------
protected final void init2()
{
windowValue = new int[]{ 200, 300, 100, 500 };
FormData d1 = new FormData();
d1.top = new FormAttachment( 0, 1 );
d1.left = new FormAttachment( 0, 1 );
d1.right = new FormAttachment( 100, -1 );
d1.bottom = new FormAttachment( 100, -37 );
text = new StyledText( shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
text.addListener( SWT.Selection, this );
text.addListener( SWT.Modify, this );
text.setLayoutData( d1 );
FormData d2 = new FormData( 65, 25 );
d2.right = new FormAttachment( 100, -80 );
d2.bottom = new FormAttachment( 100, -5 );
sendButton = new Button( shell, SWT.PUSH );
sendButton.setLayoutData( d2 );
sendButton.setText( "&Send" );
sendButton.setEnabled( false );
sendButton.addListener( SWT.Selection, this );
FormData d3 = new FormData( 65, 25 );
d3.right = new FormAttachment( 100, -10 );
d3.bottom = new FormAttachment( 100, -5 );
disconnectButton = new Button( shell, SWT.PUSH );
disconnectButton.setLayoutData( d3 );
disconnectButton.setText( "&Disconnect" );
disconnectButton.setEnabled( false );
disconnectButton.addListener( SWT.Selection, this );
bar = new Menu( shell, SWT.BAR );
shell.setMenuBar( bar );
fileCascadeItem = new MenuItem( bar, SWT.CASCADE );
fileCascadeItem.setText( "&File" );
fileDropMenu = new Menu( shell, SWT.DROP_DOWN );
fileCascadeItem.setMenu( fileDropMenu );
saveItem = new MenuItem( fileDropMenu, SWT.PUSH );
saveItem.setText( "&Save As\tCtrl+S" );
saveItem.setAccelerator( SWT.CTRL + 'S' );
editCascadeItem = new MenuItem( bar, SWT.CASCADE );
editCascadeItem.setText( "&Edit" );
editDropMenu = new Menu( shell, SWT.DROP_DOWN );
editCascadeItem.setMenu( editDropMenu );
copyItem = new MenuItem( editDropMenu, SWT.PUSH );
copyItem.setText( "&Copy\tCtrl+C" );
copyItem.setAccelerator( SWT.CTRL + 'C' );
pasteItem = new MenuItem( editDropMenu, SWT.PUSH );
pasteItem.setText( "&Paste\tCtrl+V" );
pasteItem.setAccelerator( SWT.CTRL + 'V' );
cutItem = new MenuItem( editDropMenu, SWT.PUSH );
cutItem.setText( "Cu&t\tCtrl+X" );
cutItem.setAccelerator( SWT.CTRL + 'X' );
new MenuItem( editDropMenu, SWT.SEPARATOR );
selectAllItem = new MenuItem( editDropMenu, SWT.PUSH );
selectAllItem.setText( "Select &All\tCtrl+A" );
selectAllItem.setAccelerator( SWT.CTRL + 'A' );
new MenuItem( editDropMenu, SWT.SEPARATOR );
clItem = new MenuItem( editDropMenu, SWT.PUSH );
clItem.setText( "&Set Content-Length" );
breakCascadeItem = new MenuItem( bar, SWT.CASCADE );
breakCascadeItem.setText( "&Break" );
breakDropMenu = new Menu( shell, SWT.DROP_DOWN );
breakCascadeItem.setMenu( breakDropMenu );
MSwtUtil.addListenerToMenuItems( fileDropMenu, this );
MSwtUtil.addListenerToMenuItems( editDropMenu, this );
MSwtUtil.addListenerToMenuItems( breakDropMenu, this );
menuBreakMap = new HashMap();
/*
Font font = new Font( doorman.display, "MS UI Gothic", 10, SWT.NORMAL );
text.setFont(font);
*/
init3();
setBreakMenu();
updateMenus();
}
//--------------------------------------------------------------------------------
public void setBreakMenu()
{
MSwtUtil.removeMenuItems( breakDropMenu );
java.util.List l = doorman.breakList;
for( int i = 0; i < l.size(); ++i )
{
MBreak _break = ( MBreak )l.get( i );
if( _break.getType() == type )
{
MenuItem m = new MenuItem( breakDropMenu, SWT.CHECK );
m.setText( _break.getName() );
m.setSelection( _break.getEnabled() );
m.addListener( SWT.Selection, this );
menuBreakMap.put( m, _break );
}
}
}
// --------------------------------------------------------------------------------
public String getText()
{
return text.getText();
}
// --------------------------------------------------------------------------------
public void setText( String s )
{
text.setText( s );
}
// --------------------------------------------------------------------------------
public void setFont( Font font )
{
text.setFont( font );
}
// --------------------------------------------------------------------------------
protected void init3()
{
}
// --------------------------------------------------------------------------------
protected final void handleEvent2( Event event )
{
if( event.widget == sendButton )
{
switch( event.type )
{
case SWT.Selection:
onSendButtonClick();
break;
}
}
else if( event.widget == disconnectButton )
{
switch( event.type )
{
case SWT.Selection:
onDisconnectButtonClick();
break;
}
}
else if( event.widget == selectAllItem )
{
switch( event.type )
{
case SWT.Selection:
onSelectAllClick();
break;
}
}
else if( event.widget == cutItem )
{
switch( event.type )
{
case SWT.Selection:
onCutClick();
break;
}
}
else if( event.widget == copyItem )
{
switch( event.type )
{
case SWT.Selection:
onCopyClick();
break;
}
}
else if( event.widget == pasteItem )
{
switch( event.type )
{
case SWT.Selection:
onPasteClick();
break;
}
}
else if( event.widget == saveItem )
{
switch( event.type )
{
case SWT.Selection:
onSaveClick();
break;
}
}
else if( event.widget == clItem )
{
switch( event.type )
{
case SWT.Selection:
onClClick();
break;
}
}
else if( event.widget == text )
{
switch( event.type )
{
case SWT.Selection:
updateMenus();
break;
case SWT.Modify:
updateMenus();
break;
}
}
else if( menuBreakMap.containsKey( event.widget ) )
{
switch( event.type )
{
case SWT.Selection:
onBreakMenuSelect( event.widget );
break;
}
}
handleEvent3( event );
}
//--------------------------------------------------------------------------------
private void onBreakMenuSelect( Widget menu )
{
MBreak _break = ( MBreak )menuBreakMap.get( menu );
_break.setEnabled( !_break.getEnabled() );
//doorman.optionWindow.updateBreakTable();
}
// --------------------------------------------------------------------------------
private void onSaveClick()
{
MBaseSession selectedSession = doorman.selectedSession;
if( selectedSession == null )
{
return;
}
String fileName = doorman.saveFile();
if( fileName == null )
{
return;
}
try
{
MStringUtil.saveStringToFile( text.getText(), fileName, doorman.getEnc() );
}
catch( IOException e )
{
doorman.notifyException( e );
}
}
// --------------------------------------------------------------------------------
private void onClClick()
{
try
{
byte[] buffer = text.getText().getBytes( doorman.getEnc() );
MHttpData httpData = getHttpData( buffer );
setContentLength( httpData, buffer );
}
catch( IOException ignored )
{
}
}
// --------------------------------------------------------------------------------
private void setContentLength( MHttpData httpData, byte[] buffer )
throws IOException
{
if( httpData.hasBody() )
{
if( httpData.headerExists( "Content-Length" ) )
{
int total = buffer.length;
int headerLength = httpData.getHeader().length;
int contentLength = total - headerLength;
httpData.setHeaderValue( "Content-Length", Integer.toString( contentLength ) );
byte[] bodyBuffer = new byte[ contentLength ];
System.arraycopy( buffer, headerLength, bodyBuffer, 0, contentLength );
httpData.setBody( bodyBuffer );
text.setText( MStringUtil.byteArrayToString( httpData.toByteArray(), doorman.getEnc() ) );
}
}
}
// --------------------------------------------------------------------------------
protected void handleEvent3( Event event )
{
}
// --------------------------------------------------------------------------------
private void onPasteClick()
{
text.paste();
}
// --------------------------------------------------------------------------------
private void onCopyClick()
{
text.copy();
}
// --------------------------------------------------------------------------------
private void onCutClick()
{
text.cut();
}
// --------------------------------------------------------------------------------
protected void onSelectAllClick()
{
text.selectAll();
updateMenus();
}
//--------------------------------------------------------------------------------
protected void updateMenus()
{
boolean textExists = text.getText().length() > 0;
boolean textSelected = text.getSelectionText().length() > 0;
copyItem.setEnabled( textSelected );
cutItem.setEnabled( textSelected );
selectAllItem.setEnabled( textExists );
clItem.setEnabled( textExists );
saveItem.setEnabled( textExists );
}
// --------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -