This is an automated email from the git hooks/post-receive script.

pini pushed a commit to tag upstream/1.1.0_beta1
in repository sikuli.

commit ac72eba3a99275f577047d2d1e31f2bf321a0433
Author: Raimund Hocke <[email protected]>
Date:   Tue Feb 18 11:35:24 2014 +0100

    added a Set Type action to the IDE tab context menu: allows to switch the 
scripting language of the tab (TODO: use popSelect for more languages/content 
types)
---
 .../src/main/java/org/sikuli/basics/Settings.java  |   2 +
 IDE/src/main/java/org/sikuli/ide/EditorPane.java   | 106 ++++++++++++++++-----
 .../java/org/sikuli/ide/SikuliIDEPopUpMenu.java    |  29 +++++-
 3 files changed, 113 insertions(+), 24 deletions(-)

diff --git a/Basics/src/main/java/org/sikuli/basics/Settings.java 
b/Basics/src/main/java/org/sikuli/basics/Settings.java
index c4af0ea..09c5db7 100644
--- a/Basics/src/main/java/org/sikuli/basics/Settings.java
+++ b/Basics/src/main/java/org/sikuli/basics/Settings.java
@@ -107,6 +107,8 @@ public class Settings {
        public static String RPYTHON = "jython";
        public static String RRUBY = "jruby";
        public static String EDEFAULT = EPYTHON;
+       public static String TypeCommentToken = "---SikuliX---";
+       public static String TypeCommentDefault = "# This script uses %s " + 
TypeCommentToken + "\n";
 
        static {
     Properties props = System.getProperties(); //for debugging
diff --git a/IDE/src/main/java/org/sikuli/ide/EditorPane.java 
b/IDE/src/main/java/org/sikuli/ide/EditorPane.java
index 7fee103..2786d74 100755
--- a/IDE/src/main/java/org/sikuli/ide/EditorPane.java
+++ b/IDE/src/main/java/org/sikuli/ide/EditorPane.java
@@ -68,23 +68,23 @@ public class EditorPane extends JTextPane implements 
KeyListener, CaretListener
                showThumbs = !pref.getPrefMorePlainText();
        }
 
-       private void initEditorPane() {
-               addKeyListener(this);
-               addCaretListener(this);
-               popMenuImage = new SikuliIDEPopUpMenu("POP_IMAGE", this);
-               if (!popMenuImage.isValidMenu()) {
-                       popMenuImage = null;
-               }
+       public void initBeforeLoad(String scriptType) {
+               initBeforeLoad(scriptType, false);
        }
 
-       public void initBeforeLoad(String scriptType) {
-               //TODO ask for scripttype on new pane
+       public void reInit(String scriptType) {
+               initBeforeLoad(scriptType, true);
+       }
+
+       public void initBeforeLoad(String scriptType, boolean reInit) {
                String scrType = null;
                boolean paneIsEmpty = false;
+
                if (scriptType == null) {
                        scriptType = Settings.EDEFAULT;
                        paneIsEmpty = true;
                }
+
                if (Settings.EPYTHON.equals(scriptType)) {
                        scrType = Settings.CPYTHON;
                        _indentationLogic = 
SikuliIDE.getIDESupport(scriptType).getIndentationLogic();
@@ -93,40 +93,56 @@ public class EditorPane extends JTextPane implements 
KeyListener, CaretListener
                        scrType = Settings.CRUBY;
                        _indentationLogic = null;
                }
+
                if (scrType != null) {
                        sikuliContentType = scrType;
                        SikuliEditorKit ek = new SikuliEditorKit(this);
                        setEditorKit(ek);
                        setContentType(scrType);
-                       if (paneIsEmpty) {
-                               this.setText("");
-                       }
-                       pref.addPreferenceChangeListener(new 
PreferenceChangeListener() {
-                               @Override
-                               public void 
preferenceChange(PreferenceChangeEvent event) {
-                                       if (event.getKey().equals("TAB_WIDTH")) 
{
-                                               
_indentationLogic.setTabWidth(Integer.parseInt(event.getNewValue()));
+
+                       if (_indentationLogic != null) {
+                               pref.addPreferenceChangeListener(new 
PreferenceChangeListener() {
+                                       @Override
+                                       public void 
preferenceChange(PreferenceChangeEvent event) {
+                                               if 
(event.getKey().equals("TAB_WIDTH")) {
+                                                       
_indentationLogic.setTabWidth(Integer.parseInt(event.getNewValue()));
+                                               }
                                        }
-                               }
-                       });
+                               });
+                       }
                }
-               Debug.log(3, "InitTab: %s :--: %s", getContentType(), 
getEditorKit());
+
                initKeyMap();
+
                if (transferHandler == null) {
                        transferHandler = new MyTransferHandler();
                }
                setTransferHandler(transferHandler);
                _highlighter = new EditorCurrentLineHighlighter(this);
+
                addCaretListener(_highlighter);
+
                setFont(new Font(pref.getFontName(), Font.PLAIN, 
pref.getFontSize()));
                setMargin(new Insets(3, 3, 3, 3));
                setBackground(Color.WHITE);
                if (!Settings.isMac()) {
                        setSelectionColor(new Color(170, 200, 255));
                }
+
                updateDocumentListeners();
 
-               initEditorPane();
+               addKeyListener(this);
+               addCaretListener(this);
+               popMenuImage = new SikuliIDEPopUpMenu("POP_IMAGE", this);
+               if (!popMenuImage.isValidMenu()) {
+                       popMenuImage = null;
+               }
+
+               if (paneIsEmpty || reInit) {
+                       this.setText(String.format(Settings.TypeCommentDefault, 
getSikuliContentType()));
+               }
+
+               Debug.log(3, "InitTab: %s :--: %s", getContentType(), 
getEditorKit());
        }
 
        public String getSikuliContentType() {
@@ -657,15 +673,59 @@ public class EditorPane extends JTextPane implements 
KeyListener, CaretListener
 
        //<editor-fold defaultstate="collapsed" desc="replace text patterns 
with image buttons">
        public boolean reparse() {
-               File temp = FileManager.createTempFile("py");
+               File temp = null;
                Element e = this.getDocument().getDefaultRootElement();
                if (e.getEndOffset() - e.getStartOffset() == 1) {
                        return true;
                }
+               if ((temp = reparseBefore()) != null) {
+                       if (reparseAfter(temp)) {
+                       updateDocumentListeners();
+                       return true;
+                       }
+               }
+               return false;
+       }
+
+       public File reparseBefore() {
+               Element e = this.getDocument().getDefaultRootElement();
+               if (e.getEndOffset() - e.getStartOffset() == 1) {
+                       return null;
+               }
+               File temp = FileManager.createTempFile("reparse");
                try {
                        writeFile(temp.getAbsolutePath());
+                       return temp;
+               } catch (IOException ex) {
+               }
+               return null;
+       }
+
+       public boolean reparseCheckContent() {
+               Element e = this.getDocument().getDefaultRootElement();
+               String txt;
+               if (e.getElementCount() > 2) {
+                       return false;
+               } else if (e.getElement(1).getEndOffset() - 
e.getElement(1).getStartOffset() > 1) {
+                       return false;
+               } else {
+                       int is = e.getElement(0).getStartOffset();
+                       int ie = e.getElement(0).getEndOffset();
+                       try {
+                               txt = e.getElement(0).getDocument().getText(is, 
ie - 1);
+                               if (txt.endsWith(Settings.TypeCommentToken)) {
+                                       return true;
+                               }
+                       } catch (BadLocationException ex) {
+                               return false;
+                       }
+               }
+               return false;
+       }
+
+       public boolean reparseAfter(File temp) {
+               try {
                        this.read(new BufferedReader(new InputStreamReader(new 
FileInputStream(temp), "UTF8")), null);
-                       updateDocumentListeners();
                        return true;
                } catch (IOException ex) {
                }
diff --git a/IDE/src/main/java/org/sikuli/ide/SikuliIDEPopUpMenu.java 
b/IDE/src/main/java/org/sikuli/ide/SikuliIDEPopUpMenu.java
index 9806d31..b22d874 100644
--- a/IDE/src/main/java/org/sikuli/ide/SikuliIDEPopUpMenu.java
+++ b/IDE/src/main/java/org/sikuli/ide/SikuliIDEPopUpMenu.java
@@ -8,6 +8,8 @@ import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import org.sikuli.basics.Debug;
+import org.sikuli.basics.Settings;
+import org.sikuli.basics.SikuliX;
 import org.sikuli.script.Image;
 import org.sikuli.script.ImagePath;
 
@@ -198,8 +200,33 @@ public class SikuliIDEPopUpMenu extends JPopupMenu {
       super(item);
     }
 
-    public void doSetType(ActionEvent ae) {
+               public void doSetType(ActionEvent ae) {
+                       //TODO use a popUpSelect for more language options
                        Debug.log(3, "doSetType: selected");
+                       String error = "";
+                       EditorPane cp = 
SikuliIDE.getInstance().getCurrentCodePane();
+                       String targetType = Settings.CRUBY;
+                       String targetEnding = Settings.ERUBY;
+                       if (cp.getSikuliContentType().equals(Settings.CRUBY)) {
+                               targetEnding = Settings.EPYTHON;
+                               targetType = Settings.CPYTHON;
+                       }
+                       if (cp.reparseBefore() != null) {
+                               if (!cp.reparseCheckContent()) {
+                                       if (!SikuliX.popAsk(String.format(
+                                                                       "Switch 
to %s requested, but tab is not empty!\n"
+                                                                       + 
"Click YES, to discard content and switch\n"
+                                                                       + 
"Click NO to cancel this action and keep content.",
+                                                                       
targetType))) {
+                                               error = "with errors";
+                                       }
+                               }
+                       }
+                       if (error.isEmpty()) {
+                               cp.reInit(targetEnding);
+                               
cp.setText(String.format(Settings.TypeCommentDefault, 
cp.getSikuliContentType()));
+                       }
+                       Debug.log(3, "doSetType: completed " + error);
                }
 
     public void doMoveTab(ActionEvent ae) throws NoSuchMethodException {

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/sikuli.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to