West Farm
          吾本布衣,生于川北,躬耕于代碼的田地上。
          posts - 16,  comments - 15,  trackbacks - 0

          import java.util.ArrayList;
          import java.util.Arrays;
          import java.util.List;

          import org.eclipse.core.databinding.observable.value.IObservableValue;
          import org.eclipse.jface.databinding.swt.SWTObservables;
          import org.eclipse.swt.SWT;
          import org.eclipse.swt.custom.LineStyleEvent;
          import org.eclipse.swt.custom.LineStyleListener;
          import org.eclipse.swt.custom.StyleRange;
          import org.eclipse.swt.custom.StyledText;
          import org.eclipse.swt.custom.VerifyKeyListener;
          import org.eclipse.swt.events.TraverseEvent;
          import org.eclipse.swt.events.TraverseListener;
          import org.eclipse.swt.events.VerifyEvent;
          import org.eclipse.swt.graphics.Color;
          import org.eclipse.swt.layout.FillLayout;
          import org.eclipse.swt.widgets.Composite;
          import org.eclipse.wb.swt.SWTResourceManager;

          /**
           * 關(guān)鍵字高亮編輯器。This class is a simple customized widget that wrappes a  {
          @link org.eclipse.swt.custom.StyledText StyledText}. 
           * It consumes a keyword array and highlight them.
           * 
          @author ggfan@amarsoft
           *
           
          */
          public class KeywordsHighlightingEditor extends Composite{
              
              
          private Color color = SWTResourceManager.getColor(SWT.COLOR_BLUE);
              
              
          private Color variableColor = SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN);

              
          private String[] keywords;
              
              
          private StyledText st;
              
              
          public void setKeywordsColor(Color color){
                  
          this.color = color;
              }
              
              
          public void setKeywordsBgColor(Color color){
              
              }
              
              
          public IObservableValue observerContent(){
                  
          return SWTObservables.observeText(st, SWT.Modify);
              }

              
          public KeywordsHighlightingEditor(Composite parent, String[] keywords) {
                  
          super(parent, SWT.NONE);
                  
          this.keywords = keywords;
                  
          this.setLayout(new FillLayout());
                  st 
          = new StyledText(this, SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
                  
          // 禁止回車鍵換行
                  st.addVerifyKeyListener(new VerifyKeyListener(){
                      
          public void verifyKey(VerifyEvent event) {
                          
          if(event.keyCode == SWT.CR){
                              event.doit 
          = false;
                          }
                      }
                  });
                  
          // Tab鍵失去焦點(diǎn)而不是插入制表符
                  st.addTraverseListener(new TraverseListener(){
                      
          public void keyTraversed(TraverseEvent e) {
                          
          if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
                              e.doit 
          = true;
                          }
                      }
                  });
                  st.addLineStyleListener(
          new SQLSegmentLineStyleListener());
              }
              
              
          private class SQLSegmentLineStyleListener implements LineStyleListener {

                  @Override
                  
          public void lineGetStyle(LineStyleEvent event) {
                      
          if(keywords == null || keywords.length == 0){
                          
          return;
                      }
                      List
          <StyleRange> styles = new ArrayList<StyleRange>();
                      
          int start = 0;
                      
          int length = event.lineText.length();
                      
          while (start < length) {
                          
          if (Character.isLetter(event.lineText.charAt(start))) {
                              StringBuffer buf 
          = new StringBuffer();
                              
          int i = start;
                              
          for (; i < length && Character.isLetter(event.lineText.charAt(i)); i++) {
                                  buf.append(event.lineText.charAt(i));
                              }
                              
          if(Arrays.asList(keywords).contains(buf.toString())) {
                                  styles.add(
          new StyleRange(event.lineOffset + start, i - start, color, null, SWT.BOLD));
                              }
                              start 
          = i;
                          }
          else if (event.lineText.charAt(start) == '#') {
                              StringBuffer buf 
          = new StringBuffer();
                              buf.append(
          '#');
                              
          int i = start + 1;
                              
          for (; i < length && Character.isLetter(event.lineText.charAt(i)); i++) {
                                  buf.append(event.lineText.charAt(i));
                              }
                              
          if(buf.toString().matches("#[a-zA-Z]+\\d?")) {
                                  styles.add(
          new StyleRange(event.lineOffset + start, i - start, variableColor, null, SWT.NORMAL));
                              }
                              start 
          = i;
                          }
                          
          else{
                              start 
          ++;
                          }
                      }
                      event.styles 
          = (StyleRange[]) styles.toArray(new StyleRange[0]);
                  }

              }
              
          }
          posted on 2011-10-12 10:42 West Farmer 閱讀(939) 評(píng)論(0)  編輯  收藏 所屬分類: Eclipse-RCP

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 惠来县| 彰化市| 宁津县| 尚义县| 岳西县| 青浦区| 泸水县| 新蔡县| 西青区| 罗定市| 威信县| 滦平县| 雅江县| 深水埗区| 丹巴县| 竹山县| 义马市| 宜城市| 盘锦市| 乐平市| 新民市| 门头沟区| 武川县| 长宁区| 双辽市| 东港市| 白银市| 雷山县| 河津市| 毕节市| 万荣县| 南康市| 岚皋县| 扶余县| 伊川县| 太保市| 景宁| 屏东市| 玉山县| 沐川县| 龙里县|