Index: trunk/FACT++/src/ftmctrl.cc
===================================================================
--- trunk/FACT++/src/ftmctrl.cc	(revision 10952)
+++ trunk/FACT++/src/ftmctrl.cc	(revision 10953)
@@ -898,11 +898,27 @@
     }
 
-    bool EnablePixel(uint16_t idx, bool enable)
+    bool EnablePixel(int16_t idx, bool enable)
+    {
+        if (idx<-1 || idx>FTM::StaticData::kMaxPixelIdx)
+            return false;
+
+        if (idx==-1)
+            for (int i=0; i<FTM::StaticData::kMaxPixelIdx; i++)
+                fStaticData.EnablePixel(idx, enable);
+        else
+            fStaticData.EnablePixel(idx, enable);
+
+        CmdSendStatDat();
+
+        return true;
+    }
+
+    bool DisableAllPixelsExcept(uint16_t idx)
     {
         if (idx>FTM::StaticData::kMaxPixelIdx)
             return false;
 
-        cout << "ENABLE " << idx << " " << enable << endl;
-        fStaticData.EnablePixel(idx, enable);
+        for (int i=0; i<FTM::StaticData::kMaxPixelIdx; i++)
+            fStaticData.EnablePixel(i, i==idx);
 
         CmdSendStatDat();
@@ -911,10 +927,21 @@
     }
 
+    bool DisableAllPatchesExcept(uint16_t idx)
+    {
+        if (idx>159)
+            return false;
+
+        for (int i=0; i<FTM::StaticData::kMaxPixelIdx; i++)
+            fStaticData.EnablePixel(i, i/9==idx);
+
+        CmdSendStatDat();
+
+        return true;
+    }
+
     bool TogglePixel(uint16_t idx)
     {
         if (idx>FTM::StaticData::kMaxPixelIdx)
             return false;
-
-        cout << "TOGGLE " << idx << endl;
 
         fStaticData.EnablePixel(idx, !fStaticData.Enabled(idx));
@@ -1379,5 +1406,28 @@
             return T::kSM_FatalError;
 
-        fFTM.EnablePixel(evt.GetUShort(), b);
+        if (!fFTM.EnablePixel(evt.GetUShort(), b))
+            T::Warn("EnablePixel -  Value out of range.");
+
+        return T::GetCurrentState();
+    }
+
+    int DisableAllPixelsExcept(const EventImp &evt)
+    {
+        if (!CheckEventSize(evt.GetSize(), "DisableAllPixelsExcept", 2))
+            return T::kSM_FatalError;
+
+        if (!fFTM.DisableAllPixelsExcept(evt.GetUShort()))
+            T::Warn("DisableAllPixelsExcept -  Value out of range.");
+
+        return T::GetCurrentState();
+    }
+
+    int DisableAllPatchesExcept(const EventImp &evt)
+    {
+        if (!CheckEventSize(evt.GetSize(), "DisableAllPatchesExcept", 2))
+            return T::kSM_FatalError;
+
+        if (!fFTM.DisableAllPatchesExcept(evt.GetUShort()))
+            T::Warn("DisableAllPatchesExcept -  Value out of range.");
 
         return T::GetCurrentState();
@@ -1389,5 +1439,6 @@
             return T::kSM_FatalError;
 
-        fFTM.TogglePixel(evt.GetUShort());
+        if (!fFTM.TogglePixel(evt.GetUShort()))
+            T::Warn("TogglePixel -  Value out of range.");
 
         return T::GetCurrentState();
@@ -1549,8 +1600,16 @@
         AddEvent("DISABLE_PIXEL", "S:1", kStateIdle)
             (boost::bind(&StateMachineFTM::EnablePixel, this, _1, false))
-            ("");
+            ("(-1 or all)");
 
         AddEvent("ENABLE_PIXEL", "S:1", kStateIdle)
             (boost::bind(&StateMachineFTM::EnablePixel, this, _1, true))
+            ("(-1 or all)");
+
+        AddEvent("DISABLE_ALL_PIXELS_EXCEPT", "S:1", kStateIdle)
+            (boost::bind(&StateMachineFTM::DisableAllPixelsExcept, this, _1))
+            ("");
+
+        AddEvent("DISABLE_ALL_PATCHES_EXCEPT", "S:1", kStateIdle)
+            (boost::bind(&StateMachineFTM::DisableAllPatchesExcept, this, _1))
             ("");
 
