MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Disabling Groups of Cells

  • To: mathgroup at smc.vnet.net
  • Subject: [mg44844] Re: Disabling Groups of Cells
  • From: juliuscarver at hotmail.com (Julius Carver)
  • Date: Wed, 3 Dec 2003 04:24:38 -0500 (EST)
  • References: <bovf8u$l2c$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Ok man, i read your post and found it interesting. Here is my
solution:

Let's assume I've selected interactively the section that I want to
disable. Then I move the selection to the last cell of the section
with

SelectionMove[nb, After, Cell]; SelectionMove[nb, Previous, Cell]

where nb denotes the notebook where the section is placed.

After that I apply this recursive process

While[Not[MatchQ[NotebookRead[nb], Cell[__, "Section", ___]]],
  If[MatchQ[NotebookRead[nb], Cell[__, "Input", ___]], 
    SetOptions[NotebookSelection[nb], Evaluatable -> False]];
  SelectionMove[nb, Previous, Cell]]

With this cycle i look for input cells in the section from bottom to
top, and tell Mathematica to change the option Evaluatable of these
cells to False. As you can see, While does not stop until it finds a
cell of style "Section".

Finally, as you want enable and disable only sections, I define the
next command to make sure that the process will only be applied when
you have selected an entire section

MatchQ[NotebookRead[nb], Cell[CellGroupData[{Cell[_, "Section"], __},
_]]]

This gives True if a section is selected and false otherwise. Putting
the pieces together we obtain

If[MatchQ[NotebookRead[nb], Cell[CellGroupData[{Cell[_, "Section"],
__}, _]]],
   SelectionMove[nb, After, Cell];
  SelectionMove[nb, Previous, Cell]; 
  While[Not[MatchQ[NotebookRead[nb], Cell[__, "Section", ___]]],
    If[MatchQ[NotebookRead[nb], Cell[__, "Input", ___]], 
      SetOptions[NotebookSelection[nb], Evaluatable -> False]];
    SelectionMove[nb, Previous, Cell]]]

Of course, the most simple way of using this code is to feed a button
with it, so i put it in this palette

Cell[BoxData[
      GridBox[{{ButtonBox["Disable", 
              ButtonFunction :> 
                Module[{nb}, nb = SelectedNotebook[]; 
                  If[MatchQ[NotebookRead[nb], 
                      Cell[CellGroupData[{Cell[_, "Section"], __},
_]]],
                    SelectionMove[nb, After, Cell]; 
                    SelectionMove[nb, Previous, Cell]; 
                    While[\[InvisibleSpace]! (MatchQ[NotebookRead[nb],
                            Cell[__, "Section", ___]]), 
                      If[MatchQ[NotebookRead[nb], Cell[__, "Input",
___]],
                        SetOptions[NotebookSelection[nb], 
                          Evaluatable -> False]]; 
                      SelectionMove[nb, Previous, Cell]]]], 
              ButtonEvaluator -> Automatic, Active -> True]},
{ButtonBox[
              "Enable", 
              ButtonFunction :> 
                Module[{nb}, nb = SelectedNotebook[]; 
                  If[MatchQ[NotebookRead[nb], 
                      Cell[CellGroupData[{Cell[_, "Section"], __},
_]]],
                    SelectionMove[nb, After, Cell]; 
                    SelectionMove[nb, Previous, Cell]; 
                    While[\[InvisibleSpace]! (MatchQ[NotebookRead[nb],
                            Cell[__, "Section", ___]]), 
                      If[MatchQ[NotebookRead[nb], Cell[__, "Input",
___]],
                        SetOptions[NotebookSelection[nb], 
                          Evaluatable -> True]]; 
                      SelectionMove[nb, Previous, Cell]]]], 
              ButtonEvaluator -> Automatic, Active -> True]}}]]] //
CellPrint

Hope this helps
Julius


  • Prev by Date: RE: Namespaces/Context in Packages?
  • Next by Date: Suggestion: Visualization of complex functions with Mathematica
  • Previous by thread: Re: Bad Command or FIlename (v2.2.2DOS)
  • Next by thread: Re: Disabling Groups of Cells