Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

SWT StyledText

/* SWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.StringTokenizer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ExtendedModifyEvent; import org.eclipse.swt.custom.ExtendedModifyListener; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; public class Ch5Persistent extends Composite {   private static final String END_STYLES_MARK = "***EndStyles***";   private static final String START_STYLES_MARK = "***Styles***";   private static final String START_TEXT_MARK = "***Text***";   private static final String FILE_NAME = "editorData.txt";   private boolean doBold = false;   private StyledText styledText;   public Ch5Persistent(Composite parent) {     super(parent, SWT.NONE);     buildControls();   }   protected void buildControls() {     this.setLayout(new FillLayout());     styledText = new StyledText(this, SWT.MULTI | SWT.V_SCROLL);     load();     styledText.addExtendedModifyListener(new ExtendedModifyListener() {       public void modifyText(ExtendedModifyEvent event) {         if (doBold) {           StyleRange style = new StyleRange(event.start,               event.length, null, null, SWT.BOLD);           styledText.setStyleRange(style);         }       }     });     styledText.addKeyListener(new KeyAdapter() {       public void keyPressed(KeyEvent e) {         switch (e.keyCode) {         case SWT.F1:           toggleBold();           break;         default:         //ignore everything else         }       }     });   }   private void toggleBold() {     doBold = !doBold;     if (styledText.getSelectionCount() > 0) {       Point selectionRange = styledText.getSelectionRange();       StyleRange style = new StyleRange(selectionRange.x,           selectionRange.y, null, null, doBold ? SWT.BOLD               : SWT.NORMAL);       styledText.setStyleRange(style);     }   }   private void load() {     File file = new File(FILE_NAME);     if (file.exists()) {       try {         BufferedReader reader = new BufferedReader(new FileReader(file));         String currLine = reader.readLine();         StringTokenizer tokenizer = new StringTokenizer(currLine);         tokenizer.nextToken(); //discard START_TEXT_MARKER         String contentLengthString = tokenizer.nextToken();         int contentLength = Integer.parseInt(contentLengthString);         readContent(reader, contentLength);         //find the beginning of the styles section         while (((currLine = reader.readLine()) != null)             && !START_STYLES_MARK.equals(currLine))           ;         readStyles(reader, currLine);         reader.close();       } catch (IOException e) {         e.printStackTrace();       }     }   }   private void readStyles(BufferedReader reader, String currLine)       throws IOException {     while (!END_STYLES_MARK.equals(currLine)) {       currLine = reader.readLine();       if (!END_STYLES_MARK.equals(currLine))         buildOneStyle(currLine);     }   }   private void readContent(BufferedReader reader, int contentLength)       throws IOException {     char[] buffer = new char[contentLength];     reader.read(buffer, 0, contentLength);     styledText.append(new String(buffer));   }   private void buildOneStyle(String styleText) {     StringTokenizer tokenizer = new StringTokenizer(styleText);     int startPos = Integer.parseInt(tokenizer.nextToken());     int length = Integer.parseInt(tokenizer.nextToken());     StyleRange style = new StyleRange(startPos, length, null, null,         SWT.BOLD);     styledText.setStyleRange(style);   }   private void save() {     try {       PrintWriter writer = new PrintWriter(new BufferedWriter(           new FileWriter(FILE_NAME)));       String text = styledText.getText();       writer.println(START_TEXT_MARK + " " + text.length());       writer.println(text);       writer.println(START_STYLES_MARK);       StyleRange[] styles = styledText.getStyleRanges();       for (int i = 0; i < styles.length; i++) {         writer.println(styles[i].start + " " + styles[i].length);       }       writer.println(END_STYLES_MARK);       writer.flush();       writer.close();     } catch (IOException e) {       e.printStackTrace();     }   } }