[dasher: 91/217] Commands for speaking or copying ward, sentence or paragraph finished.



commit 9a48f56cb4dcfc3bd3c1e89a70059dbd98f944b7
Author: ipomoena <amajorek google com>
Date:   Sat Oct 17 13:42:25 2015 -0700

    Commands for speaking or copying ward, sentence or paragraph finished.
    
    Also changes in control box layout and syntax for move and delete
    commands.

 Data/control/control.dtd               |    4 +-
 Data/control/control.xml               |  249 +++++++++++++++++---------------
 Src/DasherCore/ControlManager.cpp      |   49 +++++--
 Src/DasherCore/DasherInterfaceBase.cpp |    4 +-
 Src/DasherCore/DasherInterfaceBase.h   |    2 +-
 5 files changed, 172 insertions(+), 136 deletions(-)
---
diff --git a/Data/control/control.dtd b/Data/control/control.dtd
index 5d9c428..f938a43 100644
--- a/Data/control/control.dtd
+++ b/Data/control/control.dtd
@@ -10,11 +10,11 @@
 
 <!ELEMENT move EMPTY>
 <!ATTLIST move forward (yes|no) #REQUIRED>
-<!ATTLIST move dist (char|word|line|sentence|paragraph|file) #REQUIRED>
+<!ATTLIST move dist (char|word|line|sentence|paragraph|all) #REQUIRED>
 
 <!ELEMENT delete EMPTY>
 <!ATTLIST delete forward (yes|no) #REQUIRED>
-<!ATTLIST delete dist (char|word|line|sentence|paragraph|file) #REQUIRED>
+<!ATTLIST delete dist (char|word|line|sentence|paragraph|all) #REQUIRED>
 
 <!ELEMENT copy EMPTY>
 <!ATTLIST copy dist (all|new|repeat|sentence|paragraph) #REQUIRED>
diff --git a/Data/control/control.xml b/Data/control/control.xml
index f98f30b..93844b2 100644
--- a/Data/control/control.xml
+++ b/Data/control/control.xml
@@ -1,22 +1,150 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <nodes>
   <alph/>
-  <node label="Pause" color="241">
-    <pause/>
+  
+  <node label="Stop" color="242">
+    <stop/>
     <alph/>
     <root/>
   </node>
-  <node label="Stop" color="242">
-    <stop/>
+
+  <node label="Pause" color="241">
+    <pause/>
     <alph/>
     <root/>
   </node>
+
+  <node name="CTL_MOVE" label="Move" color="-1">
+    <node name="CTL_MOVE_FORWARD" label="&#x2192;" color="-1">
+      <node label="&#x25B8;" color="-1">
+        <move forward="yes" dist="char"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;" color="-1">
+        <move forward="yes" dist="word"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;&#x25B8;" color="-1">
+        <move forward="yes" dist="line"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;&#x25B8;&#x25B8;" color="-1">
+        <move forward="yes" dist="all"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+    </node>
+    <node name="CTL_MOVE_BACKWARD" label="&#x2190;" color="-1">
+      <node label="&#x25C2;" color="-1">
+        <move forward="no" dist="char"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;" color="-1">
+        <move forward="no" dist="word"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;&#x25C2;" color="-1">
+        <move forward="no" dist="line"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;&#x25C2;&#x25C2;" color="-1">
+        <move forward="no" dist="all"/>
+        <root/>
+        <ref name="CTL_MOVE_FORWARD"/>
+        <ref name="CTL_MOVE_BACKWARD"/>
+      </node>
+    </node>
+  </node>
+  
+  <node name="CTL_DELETE" label="Delete" color="-1">
+    <node name="CTL_DELETE_FORWARD" label="&#x2192;" color="-1">
+      <node label="&#x25B8;" color="-1">
+        <delete forward="yes" dist="char"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;" color="-1">
+        <delete forward="yes" dist="word"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;&#x25B8;" color="-1">
+        <delete forward="yes" dist="line"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25B8;&#x25B8;&#x25B8;&#x25B8;" color="-1">
+        <delete forward="yes" dist="all"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+    </node>
+    <node name="CTL_DELETE_BACKWARD" label="&#x2190;" color="-1">
+      <node label="&#x25C2;" color="-1">
+        <delete forward="no" dist="char"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;" color="-1">
+        <delete forward="no" dist="word"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;&#x25C2;" color="-1">
+        <delete forward="no" dist="line"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+      <node label="&#x25C2;&#x25C2;&#x25C2;&#x25C2;" color="-1">
+        <delete forward="no" dist="all"/>
+        <root/>
+        <ref name="CTL_DELETE_FORWARD"/>
+        <ref name="CTL_DELETE_BACKWARD"/>
+      </node>
+    </node>
+    <node label="All" color="-1">
+      <alph/>
+      <node label="confirm" color="-1">
+        <delete forward="yes" dist="all"/>
+        <delete forward="no" dist="all"/>
+        <alph/>
+      </node>
+      <alph/>
+    </node>
+  </node>
+  
   <node label="Speak" color="-1">
     <node label="All" color="-1">
       <speak what="all"/>
       <alph/>
       <root/>
     </node>
+    <node label="&#182;" color="-1">
+      <speak what="paragraph"/>
+      <move forward="yes" dist="paragraph"/>
+      <alph/>
+      <root/>
+    </node>
     <node label="New" color="-1">
       <speak what="new"/>
       <alph/>
@@ -52,117 +180,4 @@
     </node>
   </node>
   
-  <node name="CTL_MOVE" label="Move" color="-1">
-  <node name="CTL_MOVE_FORWARD" label="&#x2192;" color="-1">
-    <node label="&#x25B8;" color="-1">
-      <move forward="yes" dist="char"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;" color="-1">
-      <move forward="yes" dist="word"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;&#x25B8;" color="-1">
-      <move forward="yes" dist="line"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;&#x25B8;&#x25B8;" color="-1">
-      <move forward="yes" dist="file"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-  </node>
-  <node name="CTL_MOVE_BACKWARD" label="&#x2190;" color="-1">
-    <node label="&#x25C2;" color="-1">
-      <move forward="no" dist="char"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;" color="-1">
-      <move forward="no" dist="word"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;&#x25C2;" color="-1">
-      <move forward="no" dist="line"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;&#x25C2;&#x25C2;" color="-1">
-      <move forward="no" dist="file"/>
-      <root/>
-      <ref name="CTL_MOVE_FORWARD"/>
-      <ref name="CTL_MOVE_BACKWARD"/>
-    </node>
-  </node>
-</node>
-<node name="CTL_DELETE" label="Delete" color="-1">
-  <node name="CTL_DELETE_FORWARD" label="&#x2192;" color="-1">
-    <node label="&#x25B8;" color="-1">
-      <delete forward="yes" dist="char"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;" color="-1">
-      <delete forward="yes" dist="word"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;&#x25B8;" color="-1">
-      <delete forward="yes" dist="line"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25B8;&#x25B8;&#x25B8;&#x25B8;" color="-1">
-      <delete forward="yes" dist="file"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-  </node>
-  <node name="CTL_DELETE_BACKWARD" label="&#x2190;" color="-1">
-    <node label="&#x25C2;" color="-1">
-      <delete forward="no" dist="char"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;" color="-1">
-      <delete forward="no" dist="word"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;&#x25C2;" color="-1">
-      <delete forward="no" dist="line"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-    <node label="&#x25C2;&#x25C2;&#x25C2;&#x25C2;" color="-1">
-      <delete forward="no" dist="file"/>
-      <root/>
-      <ref name="CTL_DELETE_FORWARD"/>
-      <ref name="CTL_DELETE_BACKWARD"/>
-    </node>
-  </node>
-</node>
-<node label="New" color="-1">
-  <delete forward="yes" dist="file"/>
-  <delete forward="no" dist="file"/>
-  <alph/>
-</node>
 </nodes>
diff --git a/Src/DasherCore/ControlManager.cpp b/Src/DasherCore/ControlManager.cpp
index 68828bb..1f1e04c 100644
--- a/Src/DasherCore/ControlManager.cpp
+++ b/Src/DasherCore/ControlManager.cpp
@@ -252,6 +252,18 @@ public:
   }
 };
 
+class TextDistanceAction : public CControlBase::Action {
+  CDasherInterfaceBase::TextAction* m_header;
+  CControlManager::EditDistance m_dist;
+public:
+  TextDistanceAction(CDasherInterfaceBase::TextAction* header, CControlManager::EditDistance dist) 
+    : m_header(header), m_dist(dist)  {
+  }
+  virtual void happen(CControlBase::CContNode *pNode) {
+    m_header->executeOnDistance(m_dist);
+  }
+};
+
 class Pause : public CControlBase::Action{
 public:
   void happen(CControlBase::CContNode *pNode) {
@@ -316,43 +328,52 @@ CControlManager::CControlManager(CSettingsUser *pCreateFrom, CNodeCreationManage
   // Key in actions map is name plus arguments in alphabetical order.
   m_actions["stop"] = new MethodAction<CDasherInterfaceBase>(pInterface, &CDasherInterfaceBase::Done);
   m_actions["pause"] = new Pause();
-
-  m_actions["speak what=cancel"] = new SpeakCancel();
-  m_actions["speak what=all"] = new MethodAction<SpeechHeader>(m_pSpeech, &SpeechHeader::executeOnAll);
-  m_actions["speak what=new"] = new MethodAction<SpeechHeader>(m_pSpeech, &SpeechHeader::executeOnNew);
-  m_actions["speak what=repeat"] = new MethodAction<SpeechHeader>(m_pSpeech, &SpeechHeader::executeLast);
-
-  m_actions["copy what=all"] = new MethodAction<CopyHeader>(m_pCopy, &CopyHeader::executeOnAll);
-  m_actions["copy what=new"] = new MethodAction<CopyHeader>(m_pCopy, &CopyHeader::executeOnNew);
-  m_actions["copy what=repeat"] = new MethodAction<CopyHeader>(m_pCopy, &CopyHeader::executeLast);
-
+  if (pInterface->SupportsSpeech()) {
+    m_actions["speak what=all"] = new TextDistanceAction(m_pSpeech, EDIT_FILE);
+    m_actions["speak what=paragraph"] = new TextDistanceAction(m_pSpeech, EDIT_PARAGRAPH);
+    m_actions["speak what=sentence"] = new TextDistanceAction(m_pSpeech, EDIT_SENTENCE);
+    m_actions["speak what=line"] = new TextDistanceAction(m_pSpeech, EDIT_LINE);
+    m_actions["speak what=word"] = new TextDistanceAction(m_pSpeech, EDIT_WORD);
+    m_actions["speak what=new"] = new MethodAction<SpeechHeader>(m_pSpeech, &SpeechHeader::executeOnNew);
+    m_actions["speak what=repeat"] = new MethodAction<SpeechHeader>(m_pSpeech, &SpeechHeader::executeLast);
+    m_actions["speak what=cancel"] = new SpeakCancel();
+  }
+  if (pInterface->SupportsClipboard()) {
+    m_actions["copy what=all"] = new TextDistanceAction(m_pCopy, EDIT_FILE);
+    m_actions["copy what=paragraph"] = new TextDistanceAction(m_pCopy, EDIT_PARAGRAPH);
+    m_actions["copy what=sentence"] = new TextDistanceAction(m_pCopy, EDIT_SENTENCE);
+    m_actions["copy what=line"] = new TextDistanceAction(m_pCopy, EDIT_LINE);
+    m_actions["copy what=word"] = new TextDistanceAction(m_pCopy, EDIT_WORD);
+    m_actions["copy what=new"] = new MethodAction<CopyHeader>(m_pCopy, &CopyHeader::executeOnNew);
+    m_actions["copy what=repeat"] = new MethodAction<CopyHeader>(m_pCopy, &CopyHeader::executeLast);
+  }
   m_actions["move dist=char forward=yes"] = new Move(true, EDIT_CHAR);
   m_actions["move dist=word forward=yes"] = new Move(true, EDIT_WORD);
   m_actions["move dist=line forward=yes"] = new Move(true, EDIT_LINE);
   m_actions["move dist=sentence forward=yes"] = new Move(true, EDIT_SENTENCE);
   m_actions["move dist=paragraph forward=yes"] = new Move(true, EDIT_PARAGRAPH);
-  m_actions["move dist=file forward=yes"] = new Move(true, EDIT_FILE);
+  m_actions["move dist=all forward=yes"] = new Move(true, EDIT_FILE);
 
   m_actions["move dist=char forward=no"] = new Move(false, EDIT_CHAR);
   m_actions["move dist=word forward=no"] = new Move(false, EDIT_WORD);
   m_actions["move dist=line forward=no"] = new Move(false, EDIT_LINE);
   m_actions["move dist=sentence forward=no"] = new Move(false, EDIT_SENTENCE);
   m_actions["move dist=paragraph forward=no"] = new Move(false, EDIT_PARAGRAPH);
-  m_actions["move dist=file forward=no"] = new Move(false, EDIT_FILE);
+  m_actions["move dist=all forward=no"] = new Move(false, EDIT_FILE);
 
   m_actions["delete dist=char forward=yes"] = new Delete(true, EDIT_CHAR);
   m_actions["delete dist=word forward=yes"] = new Delete(true, EDIT_WORD);
   m_actions["delete dist=line forward=yes"] = new Delete(true, EDIT_LINE);
   m_actions["delete dist=sentence forward=yes"] = new Delete(true, EDIT_SENTENCE);
   m_actions["delete dist=paragraph forward=yes"] = new Delete(true, EDIT_PARAGRAPH);
-  m_actions["delete dist=file forward=yes"] = new Delete(true, EDIT_FILE);
+  m_actions["delete dist=all forward=yes"] = new Delete(true, EDIT_FILE);
 
   m_actions["delete dist=char forward=no"] = new Delete(false, EDIT_CHAR);
   m_actions["delete dist=word forward=no"] = new Delete(false, EDIT_WORD);
   m_actions["delete dist=line forward=no"] = new Delete(false, EDIT_LINE);
   m_actions["delete dist=sentence forward=no"] = new Delete(false, EDIT_SENTENCE);
   m_actions["delete dist=paragraph forward=no"] = new Delete(false, EDIT_PARAGRAPH);
-  m_actions["delete dist=file forward=no"] = new Delete(false, EDIT_FILE);
+  m_actions["delete dist=all forward=no"] = new Delete(false, EDIT_FILE);
 
   m_pInterface->ScanFiles(this, "control.xml"); //just look for the one
 
diff --git a/Src/DasherCore/DasherInterfaceBase.cpp b/Src/DasherCore/DasherInterfaceBase.cpp
index d6fdea6..073d167 100644
--- a/Src/DasherCore/DasherInterfaceBase.cpp
+++ b/Src/DasherCore/DasherInterfaceBase.cpp
@@ -420,8 +420,8 @@ CDasherInterfaceBase::TextAction::~TextAction() {
   m_pIntf->m_vTextActions.erase(this);
 }
 
-void CDasherInterfaceBase::TextAction::executeOnAll() {
-  (*this)(strLast = m_pIntf->GetAllContext());
+void CDasherInterfaceBase::TextAction::executeOnDistance(CControlManager::EditDistance dist) {
+  (*this)(strLast = m_pIntf->GetTextAroundCursor(dist));
   m_iStartOffset = m_pIntf->GetAllContextLenght();
 }
 
diff --git a/Src/DasherCore/DasherInterfaceBase.h b/Src/DasherCore/DasherInterfaceBase.h
index 3ff06e6..a7bcaff 100644
--- a/Src/DasherCore/DasherInterfaceBase.h
+++ b/Src/DasherCore/DasherInterfaceBase.h
@@ -180,7 +180,7 @@ public:
   class TextAction {
   public:
     TextAction(CDasherInterfaceBase *pMgr);
-    void executeOnAll();
+    void executeOnDistance(CControlManager::EditDistance dist);
     void executeOnNew();
     void executeLast();
     void NotifyOffset(int iOffset);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]