platform-ui-home/R3_1/undo-redo-proposal/undo-redo support.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1, Tue Nov 9 17:20:03 2004 UTC revision 1.2, Tue Nov 9 19:43:11 2004 UTC
# Line 1  Line 1 
1  <html xmlns:o="urn:schemas-microsoft-com:office:office"  <html xmlns:v="urn:schemas-microsoft-com:vml"
2    xmlns:o="urn:schemas-microsoft-com:office:office"
3  xmlns:w="urn:schemas-microsoft-com:office:word"  xmlns:w="urn:schemas-microsoft-com:office:word"
4    xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
5  xmlns="http://www.w3.org/TR/REC-html40">  xmlns="http://www.w3.org/TR/REC-html40">
6    
7  <head>  <head>
# Line 9  Line 11 
11  <meta name=Originator content="Microsoft Word 10">  <meta name=Originator content="Microsoft Word 10">
12  <link rel=File-List href="undo-redo%20support_files/filelist.xml">  <link rel=File-List href="undo-redo%20support_files/filelist.xml">
13  <title>Undo/redo support in Eclipse</title>  <title>Undo/redo support in Eclipse</title>
14    <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
15     name="date"/>
16  <!--[if gte mso 9]><xml>  <!--[if gte mso 9]><xml>
17   <o:DocumentProperties>   <o:DocumentProperties>
18    <o:Author>IBM_USER</o:Author>    <o:Author>IBM_USER</o:Author>
19    <o:LastAuthor>IBM_USER</o:LastAuthor>    <o:LastAuthor>IBM_USER</o:LastAuthor>
20    <o:Revision>2</o:Revision>    <o:Revision>2</o:Revision>
21    <o:TotalTime>4244</o:TotalTime>    <o:TotalTime>4237</o:TotalTime>
22    <o:LastPrinted>2004-11-08T17:14:00Z</o:LastPrinted>    <o:LastPrinted>2004-11-08T17:14:00Z</o:LastPrinted>
23    <o:Created>2004-11-09T00:31:00Z</o:Created>    <o:Created>2004-11-09T19:14:00Z</o:Created>
24    <o:LastSaved>2004-11-09T00:31:00Z</o:LastSaved>    <o:LastSaved>2004-11-09T19:14:00Z</o:LastSaved>
25    <o:Pages>1</o:Pages>    <o:Pages>1</o:Pages>
26    <o:Words>6200</o:Words>    <o:Words>6221</o:Words>
27    <o:Characters>35342</o:Characters>    <o:Characters>35461</o:Characters>
28    <o:Company>IBM</o:Company>    <o:Company>IBM</o:Company>
29    <o:Lines>294</o:Lines>    <o:Lines>295</o:Lines>
30    <o:Paragraphs>82</o:Paragraphs>    <o:Paragraphs>83</o:Paragraphs>
31    <o:CharactersWithSpaces>41460</o:CharactersWithSpaces>    <o:CharactersWithSpaces>41599</o:CharactersWithSpaces>
32    <o:Version>10.6626</o:Version>    <o:Version>10.6626</o:Version>
33   </o:DocumentProperties>   </o:DocumentProperties>
34  </xml><![endif]--><!--[if gte mso 9]><xml>  </xml><![endif]--><!--[if gte mso 9]><xml>
35   <w:WordDocument>   <w:WordDocument>
36    <w:SpellingState>Clean</w:SpellingState>    <w:SpellingState>Clean</w:SpellingState>
   <w:GrammarState>Clean</w:GrammarState>  
37    <w:Compatibility>    <w:Compatibility>
38     <w:BreakWrappedTables/>     <w:BreakWrappedTables/>
39     <w:SnapToGridInCell/>     <w:SnapToGridInCell/>
# Line 39  Line 42 
42    </w:Compatibility>    </w:Compatibility>
43    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
44   </w:WordDocument>   </w:WordDocument>
45  </xml><![endif]-->  </xml><![endif]--><!--[if !mso]><object
46     classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
47    <style>
48    st1\:*{behavior:url(#ieooui) }
49    </style>
50    <![endif]-->
51  <style>  <style>
52  <!--  <!--
53   /* Font Definitions */   /* Font Definitions */
# Line 137  Line 145 
145          font-size:12.0pt;          font-size:12.0pt;
146          font-family:"Times New Roman";          font-family:"Times New Roman";
147          mso-fareast-font-family:"Times New Roman";}          mso-fareast-font-family:"Times New Roman";}
148    a:link, span.MsoHyperlink
149            {color:#0000EE;
150            text-decoration:underline;
151            text-underline:single;}
152    a:visited, span.MsoHyperlinkFollowed
153            {color:purple;
154            text-decoration:underline;
155            text-underline:single;}
156  span.SpellE  span.SpellE
157          {mso-style-name:"";          {mso-style-name:"";
158          mso-spl-e:yes;}          mso-spl-e:yes;}
 span.GramE  
         {mso-style-name:"";  
         mso-gram-e:yes;}  
159  @page Section1  @page Section1
160          {size:8.5in 11.0in;          {size:8.5in 11.0in;
161          margin:1.0in .75in .5in 1.0in;          margin:1.0in .75in .5in 1.0in;
# Line 544  Line 557 
557  <![endif]-->  <![endif]-->
558  </head>  </head>
559    
560  <body lang=EN-US style='tab-interval:.5in'>  <body lang=EN-US link="#0000EE" vlink=purple style='tab-interval:.5in'>
561    
562  <div class=Section1>  <div class=Section1>
563    
564  <h1>Generalized Undo Support in Eclipse</h1>  <h1>Generalized Undo Support in Eclipse</h1>
565    
566    <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Last
567    updated:<span style='mso-spacerun:yes'>  </span></span><st1:date Month="11"
568    Day="9" Year="2004"><span style='font-size:10.0pt;font-family:Arial'>Nov 9,
569     2004</span></st1:date><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
570    
571    <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Status:<span
572    style='mso-spacerun:yes'>  </span>Under investigation (see bug </span><a
573    href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37716">37716</a>)<span
574    style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>
575    
576  <h2>Problem Description<o:p></o:p></h2>  <h2>Problem Description<o:p></o:p></h2>
577    
578  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>In R3.0.1  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>In R3.0.1
# Line 583  Line 606 
606  font-family:"Courier New";mso-fareast-font-family:"Courier New"'><span  font-family:"Courier New";mso-fareast-font-family:"Courier New"'><span
607  style='mso-list:Ignore'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='mso-list:Ignore'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
608  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Is  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Is
609  <span class=GramE>undo</span> strictly linear?<o:p></o:p></span></p>  undo strictly linear?<o:p></o:p></span></p>
610    
611  <p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l21 level2 lfo1;  <p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l21 level2 lfo1;
612  tab-stops:list 1.0in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list 1.0in'><![if !supportLists]><span style='font-size:10.0pt;
# Line 619  Line 642 
642  implementation of a centralized undo mechanism should be straightforward, it  implementation of a centralized undo mechanism should be straightforward, it
643  has not been provided in previous releases due to problems in defining the  has not been provided in previous releases due to problems in defining the
644  proper undo semantics across different plug-ins.<span  proper undo semantics across different plug-ins.<span
645  style='mso-spacerun:yes'>   </span>The challenge in defining consistent,  style='mso-spacerun:yes'>   </span>The challenge in defining consistent, predictable
646  predictable undo semantics can best be understood by looking at the two  undo semantics can best be understood by looking at the two different undo
647  different undo models provided in the R3.0.1 release of the base Eclipse SDK.<span  models provided in the R3.0.1 release of the base Eclipse SDK.<span
648  style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>  style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
649    
650  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
# Line 672  Line 695 
695  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
696    
697  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The context  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The context
698  for an operation helps determine where the undo for that operation is available.<span  for an operation helps determine where the undo for that operation is
699  style='mso-spacerun:yes'>  </span>When the contexts for different operations  available.<span style='mso-spacerun:yes'>  </span>When the contexts for different
700  are completely separate, the semantics for undoing an operation from either  operations are completely separate, the semantics for undoing an operation from
701  context are easily understood.<span style='mso-spacerun:yes'>  </span>Undoing an  either context are easily understood.<span style='mso-spacerun:yes'> 
702  operation from one context does not affect the operation history from the other  </span>Undoing an operation from one context does not affect the operation
703  context. <o:p></o:p></span></p>  history from the other context. <o:p></o:p></span></p>
704    
705  <h3>Undo scopes </h3>  <h3>Undo scopes </h3>
706    
# Line 789  Line 812 
812  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Examining  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Examining
813  scenarios and the desired behavior shows that any one (or more) of the three  scenarios and the desired behavior shows that any one (or more) of the three
814  alternatives are desirable at different times, depending on what the user is  alternatives are desirable at different times, depending on what the user is
815  trying to achieve.<span style='mso-spacerun:yes'>  </span>Appendix A collects various  trying to achieve.<span style='mso-spacerun:yes'>  </span>Appendix A collects
816  <span class=SpellE>refactoring</span> and edit scenarios to help demonstrate  various <span class=SpellE>refactoring</span> and edit scenarios to help
817  the challenge.<o:p></o:p></span></p>  demonstrate the challenge.<o:p></o:p></span></p>
818    
819  <h3>Linear vs. selective undo<o:p></o:p></h3>  <h3>Linear vs. selective undo<o:p></o:p></h3>
820    
# Line 971  Line 994 
994    
995  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
996    
997  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
998  style='font-size:10.0pt;font-family:Arial'>public</span></span><span  font-family:Arial'>public interface <span class=SpellE>IOperation</span> {<o:p></o:p></span></p>
 style='font-size:10.0pt;font-family:Arial'> interface <span class=SpellE>IOperation</span>  
 {<o:p></o:p></span></p>  
999    
1000  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1001  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void <span class=SpellE>addContext</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>addContext</span>(<span  
1002  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>           </span>//  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>           </span>//
1003  add the context to the operation’s contexts<o:p></o:p></span></p>  add the context to the operation’s contexts<o:p></o:p></span></p>
1004    
1005  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span
1006  class=GramE><span style='font-size:10.0pt;font-family:Arial'>boolean</span></span></span><span  style='font-size:10.0pt;font-family:Arial'>boolean</span></span><span
1007  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>hasContext</span>(<span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>hasContext</span>(<span
1008  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>     </span>//answer  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>     </span>//answer
1009  whether the receiver’s contexts contain the context<o:p></o:p></span></p>  whether the receiver’s contexts contain the context<o:p></o:p></span></p>
1010    
1011  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1012  font-family:Arial'>List <span class=SpellE><span class=GramE>getContexts</span></span><span  font-family:Arial'>List <span class=SpellE>getContexts</span>();<span
1013  class=GramE>(</span>);<span style='mso-tab-count:1'>                                    </span>//  style='mso-tab-count:1'>                                    </span>// answer
1014  answer the list of contexts assigned to the receiver.<o:p></o:p></span></p>  the list of contexts assigned to the receiver.<o:p></o:p></span></p>
1015    
1016  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span
1017  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span
1018  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>canExecute</span>();<span
 class=GramE>canExecute</span></span><span class=GramE>(</span>);<span  
1019  style='mso-tab-count:1'>                                </span>// answer whether  style='mso-tab-count:1'>                                </span>// answer whether
1020  the receiver can be executed<o:p></o:p></span></p>  the receiver can be executed<o:p></o:p></span></p>
1021    
1022  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span
1023  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span
1024  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>canRedo</span>();<span
 class=GramE>canRedo</span></span><span class=GramE>(</span>);<span  
1025  style='mso-tab-count:1'>                                    </span>// answer  style='mso-tab-count:1'>                                    </span>// answer
1026  whether the receiver can be redone<o:p></o:p></span></p>  whether the receiver can be redone<o:p></o:p></span></p>
1027    
1028  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=SpellE><span
1029  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span  style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span
1030  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>canUndo</span>();<span
 class=GramE>canUndo</span></span><span class=GramE>(</span>);<span  
1031  style='mso-tab-count:1'>                                    </span>// answer  style='mso-tab-count:1'>                                    </span>// answer
1032  whether the receiver can be undone<o:p></o:p></span></p>  whether the receiver can be undone<o:p></o:p></span></p>
1033    
1034  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1035  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void execute(<span class=SpellE>IProgressMonitor</span>);<span
 style='font-size:10.0pt;font-family:Arial'> execute(<span class=SpellE>IProgressMonitor</span>);<span  
1036  style='mso-tab-count:1'>                  </span>// execute the operation <o:p></o:p></span></p>  style='mso-tab-count:1'>                  </span>// execute the operation <o:p></o:p></span></p>
1037    
1038  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1039  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void redo(<span class=SpellE>IProgressMonitor</span>);<span
 style='font-size:10.0pt;font-family:Arial'> redo(<span class=SpellE>IProgressMonitor</span>);<span  
1040  style='mso-tab-count:1'>                       </span>// redo the operation<o:p></o:p></span></p>  style='mso-tab-count:1'>                       </span>// redo the operation<o:p></o:p></span></p>
1041    
1042  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1043  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void undo(<span class=SpellE>IProgressMonitor</span>);<span
 style='font-size:10.0pt;font-family:Arial'> undo(<span class=SpellE>IProgressMonitor</span>);<span  
1044  style='mso-tab-count:1'>                      </span>// undo the operation<o:p></o:p></span></p>  style='mso-tab-count:1'>                      </span>// undo the operation<o:p></o:p></span></p>
1045    
1046  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1047  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void dispose();<span style='mso-tab-count:1'>                                          </span>//
1048  style='font-size:10.0pt;font-family:Arial'> dispose();<span style='mso-tab-count:  the operation is no longer needed<o:p></o:p></span></p>
 1'>                                          </span>// the operation is no  
 longer needed<o:p></o:p></span></p>  
1049    
1050  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1051  font-family:Arial'>String <span class=SpellE><span class=GramE>getLabel</span></span><span  font-family:Arial'>String <span class=SpellE>getLabel</span>();<span
1052  class=GramE>(</span>);<span style='mso-tab-count:1'>                                      </span>//  style='mso-tab-count:1'>                                      </span>// provide
1053  provide a label to name this operation for the user<o:p></o:p></span></p>  a label to name this operation for the user<o:p></o:p></span></p>
1054    
1055  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1056  font-family:Arial'>String <span class=SpellE><span class=GramE>getDescription</span></span><span  font-family:Arial'>String <span class=SpellE>getDescription</span>();<span
1057  class=GramE>(</span>);<span style='mso-tab-count:1'>                              </span>//  style='mso-tab-count:1'>                              </span>// provide a
1058  provide a description of this operation for the user<o:p></o:p></span></p>  description of this operation for the user<o:p></o:p></span></p>
1059    
1060  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;  <p class=MsoNormal style='tab-stops:.5in 189.0pt'><span style='font-size:10.0pt;
1061  font-family:Arial'>}<o:p></o:p></span></p>  font-family:Arial'>}<o:p></o:p></span></p>
# Line 1052  Line 1064 
1064  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>
1065    
1066  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1067  class=GramE><span style='font-size:10.0pt;font-family:Arial'>public</span></span><span  style='font-size:10.0pt;font-family:Arial'>public interface <span class=SpellE>IOperationHistory</span>
 style='font-size:10.0pt;font-family:Arial'> interface <span class=SpellE>IOperationHistory</span>  
1068  {<o:p></o:p></span></p>  {<o:p></o:p></span></p>
1069    
1070  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1071  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void add(<span class=SpellE>IOperation</span>);<span
 style='font-size:10.0pt;font-family:Arial'> add(<span class=SpellE>IOperation</span>);<span  
1072  style='mso-tab-count:1'>                                        </span>// add  style='mso-tab-count:1'>                                        </span>// add
1073  the specified operation to the history<o:p></o:p></span></p>  the specified operation to the history<o:p></o:p></span></p>
1074    
1075  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1076  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void redo(<span class=SpellE>IOperationContext</span>,
 style='font-size:10.0pt;font-family:Arial'> redo(<span class=SpellE>IOperationContext</span>,  
1077  <span class=SpellE>IProgressMonitor</span>);<o:p></o:p></span></p>  <span class=SpellE>IProgressMonitor</span>);<o:p></o:p></span></p>
1078    
1079  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1072  Line 1081 
1081  perform the redo operation for the given context<o:p></o:p></span></p>  perform the redo operation for the given context<o:p></o:p></span></p>
1082    
1083  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1084  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void undo(<span class=SpellE>IOperationContext</span>,
 style='font-size:10.0pt;font-family:Arial'> undo(<span class=SpellE>IOperationContext</span>,  
1085  <span class=SpellE>IProgressMonitor</span>);<o:p></o:p></span></p>  <span class=SpellE>IProgressMonitor</span>);<o:p></o:p></span></p>
1086    
1087  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1082  Line 1090 
1090    
1091  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1092  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span
1093  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>canRedoIn</span>(<span
 class=GramE>canRedoIn</span></span><span class=GramE>(</span><span  
1094  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>              </span>//  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>              </span>//
1095  answer whether redo is available in the given context<o:p></o:p></span></p>  answer whether redo is available in the given context<o:p></o:p></span></p>
1096    
1097  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1098  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IStatus</span></span><span
1099  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>canUndoIn</span>(<span
 class=GramE>canUndoIn</span></span><span class=GramE>(</span><span  
1100  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>              </span>//  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>              </span>//
1101  answer whether undo is available in the given context<o:p></o:p></span></p>  answer whether undo is available in the given context<o:p></o:p></span></p>
1102    
1103  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1104  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void <span class=SpellE>addOperationHistoryListener</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>addOperationHistoryListener</span>(<span  
1105  class=SpellE>IOperationHistoryListener</span>);<o:p></o:p></span></p>  class=SpellE>IOperationHistoryListener</span>);<o:p></o:p></span></p>
1106    
1107  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1104  Line 1109 
1109  add a listener for changes to the operation history<o:p></o:p></span></p>  add a listener for changes to the operation history<o:p></o:p></span></p>
1110    
1111  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1112  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void <span class=SpellE>removeOperationHistoryListener</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>removeOperationHistoryListener</span>(<span  
1113  class=SpellE>IOperationHistoryListener</span>);<o:p></o:p></span></p>  class=SpellE>IOperationHistoryListener</span>);<o:p></o:p></span></p>
1114    
1115  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1114  Line 1118 
1118    
1119  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1120  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span
1121  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>getRedoFor</span>(<span
 class=GramE>getRedoFor</span></span><span class=GramE>(</span><span  
1122  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>        </span>//  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>        </span>//
1123  get the redo operation for the given context<o:p></o:p></span></p>  get the redo operation for the given context<o:p></o:p></span></p>
1124    
1125  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1126  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span
1127  style='font-size:10.0pt;font-family:Arial'> [] <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> [] <span class=SpellE>getRedoHistoryFor</span>(<span
 class=GramE>getRedoHistoryFor</span></span><span class=GramE>(</span><span  
1128  class=SpellE>IOperationContext</span>);<span style='mso-spacerun:yes'>  </span>//  class=SpellE>IOperationContext</span>);<span style='mso-spacerun:yes'>  </span>//
1129  answer the redo history list for the given context<o:p></o:p></span></p>  answer the redo history list for the given context<o:p></o:p></span></p>
1130    
1131  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1132  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span
1133  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>getUndoFor</span>(<span
 class=GramE>getUndoFor</span></span><span class=GramE>(</span><span  
1134  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>        </span>//  class=SpellE>IOperationContext</span>);<span style='mso-tab-count:1'>        </span>//
1135  answer the undo operation for the given context<o:p></o:p></span></p>  answer the undo operation for the given context<o:p></o:p></span></p>
1136    
1137  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1138  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>IOperation</span></span><span
1139  style='font-size:10.0pt;font-family:Arial'> [] <span class=SpellE><span  style='font-size:10.0pt;font-family:Arial'> [] <span class=SpellE>getUndoHistoryFor</span>(<span
 class=GramE>getUndoHistoryFor</span></span><span class=GramE>(</span><span  
1140  class=SpellE>IOperationContext</span>);<span style='mso-spacerun:yes'>  </span>//  class=SpellE>IOperationContext</span>);<span style='mso-spacerun:yes'>  </span>//
1141  answer the undo history list for the given context<o:p></o:p></span></p>  answer the undo history list for the given context<o:p></o:p></span></p>
1142    
1143  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1144  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void <span class=SpellE>disposeAll</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>disposeAll</span>(<span  
1145  class=SpellE>IOperationContext</span>);<o:p></o:p></span></p>  class=SpellE>IOperationContext</span>);<o:p></o:p></span></p>
1146    
1147  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1155  Line 1154 
1154  determine how to handle operations that have additional contexts.<o:p></o:p></span></p>  determine how to handle operations that have additional contexts.<o:p></o:p></span></p>
1155    
1156  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
1157  class=GramE><span style='font-size:10.0pt;font-family:Arial'>void</span></span><span  style='font-size:10.0pt;font-family:Arial'>void <span class=SpellE>setLimit</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>setLimit</span>(<span  
1158  class=SpellE>int</span>);<o:p></o:p></span></p>  class=SpellE>int</span>);<o:p></o:p></span></p>
1159    
1160  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span  <p class=MsoNormal style='tab-stops:.5in .75in 207.0pt 3.5in 297.0pt 4.75in'><span
# Line 1174  Line 1172 
1172  <p class=MsoNormal style='tab-stops:.75in 207.0pt'><span style='font-size:10.0pt;  <p class=MsoNormal style='tab-stops:.75in 207.0pt'><span style='font-size:10.0pt;
1173  font-family:Arial'><o:p>&nbsp;</o:p></span></p>  font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1174    
1175  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1176  style='font-size:10.0pt;font-family:Arial'>public</span></span><span  font-family:Arial'>public interface <span class=SpellE>IOperationHistoryListener</span>
 style='font-size:10.0pt;font-family:Arial'> interface <span class=SpellE>IOperationHistoryListener</span>  
1177  {<o:p></o:p></span></p>  {<o:p></o:p></span></p>
1178    
1179  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1180  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void <span class=SpellE>operationAdded</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>operationAdded</span>(<span  
1181  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                      </span>//  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                      </span>//
1182  an operation has been added to the history<o:p></o:p></span></p>  an operation has been added to the history<o:p></o:p></span></p>
1183    
1184  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1185  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void <span class=SpellE>aboutToUndo</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>aboutToUndo</span>(<span  
1186  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                          </span>//  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                          </span>//
1187  the operation is about to be undone<o:p></o:p></span></p>  the operation is about to be undone<o:p></o:p></span></p>
1188    
1189  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1190  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void undone(<span class=SpellE>IOperation</span>);<span
 style='font-size:10.0pt;font-family:Arial'> undone(<span class=SpellE>IOperation</span>);<span  
1191  style='mso-tab-count:1'>                                  </span>// the  style='mso-tab-count:1'>                                  </span>// the
1192  operation was undone<o:p></o:p></span></p>  operation was undone<o:p></o:p></span></p>
1193    
1194  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1195  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void <span class=SpellE>aboutToRedo</span>(<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>aboutToRedo</span>(<span  
1196  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                          </span>//  class=SpellE>IOperation</span>);<span style='mso-tab-count:1'>                          </span>//
1197  the operation is about to be redone<o:p></o:p></span></p>  the operation is about to be redone<o:p></o:p></span></p>
1198    
1199  <p class=MsoNormal style='tab-stops:207.0pt'><span class=GramE><span  <p class=MsoNormal style='tab-stops:207.0pt'><span style='font-size:10.0pt;
1200  style='font-size:10.0pt;font-family:Arial'>void</span></span><span  font-family:Arial'>void redone(<span class=SpellE>IOperation</span>);<span
 style='font-size:10.0pt;font-family:Arial'> redone(<span class=SpellE>IOperation</span>);<span  
1201  style='mso-tab-count:1'>                                   </span>// the  style='mso-tab-count:1'>                                   </span>// the
1202  operation was redone<o:p></o:p></span></p>  operation was redone<o:p></o:p></span></p>
1203    
# Line 1214  Line 1206 
1206    
1207  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1208    
1209  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>public
 Arial'>public</span></span><span style='font-size:10.0pt;font-family:Arial'>  
1210  interface <span class=SpellE>IOperationContext</span> {<o:p></o:p></span></p>  interface <span class=SpellE>IOperationContext</span> {<o:p></o:p></span></p>
1211    
1212  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1213  Arial'>IOperationApproval</span></span><span style='font-size:10.0pt;  Arial'>IOperationApproval</span></span><span style='font-size:10.0pt;
1214  font-family:Arial'> <span class=SpellE><span class=GramE>getOperationApproval</span></span><span  font-family:Arial'> <span class=SpellE>getOperationApproval</span>();<o:p></o:p></span></p>
 class=GramE>(</span>);<o:p></o:p></span></p>  
1215    
1216  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>String <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>String <span
1217  class=SpellE><span class=GramE>getDescription</span></span><span class=GramE>(</span>);<o:p></o:p></span></p>  class=SpellE>getDescription</span>();<o:p></o:p></span></p>
1218    
1219  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>String <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>String <span
1220  class=SpellE><span class=GramE>getLabel</span></span><span class=GramE>(</span>);<o:p></o:p></span></p>  class=SpellE>getLabel</span>();<o:p></o:p></span></p>
1221    
1222  <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1223  10.0pt;font-family:Arial'>boolean</span></span></span><span style='font-size:  Arial'>boolean</span></span><span style='font-size:10.0pt;font-family:Arial'>
1224  10.0pt;font-family:Arial'> equals(<span class=SpellE>IOperationContext</span>);<o:p></o:p></span></p>  equals(<span class=SpellE>IOperationContext</span>);<o:p></o:p></span></p>
1225    
1226  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>}<o:p></o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>}<o:p></o:p></span></p>
1227    
1228  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1229    
1230  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>public
 Arial'>public</span></span><span style='font-size:10.0pt;font-family:Arial'>  
1231  interface <span class=SpellE>IOperationApproval</span> {<o:p></o:p></span></p>  interface <span class=SpellE>IOperationApproval</span> {<o:p></o:p></span></p>
1232    
1233  <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1234  10.0pt;font-family:Arial'>boolean</span></span></span><span style='font-size:  Arial'>boolean</span></span><span style='font-size:10.0pt;font-family:Arial'> <span
1235  10.0pt;font-family:Arial'> <span class=SpellE>proceedUndoing</span>(<span  class=SpellE>proceedUndoing</span>(<span class=SpellE>IOperation</span>);<o:p></o:p></span></p>
1236  class=SpellE>IOperation</span>);<o:p></o:p></span></p>  
1237    <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1238  <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size:  Arial'>boolean</span></span><span style='font-size:10.0pt;font-family:Arial'> <span
1239  10.0pt;font-family:Arial'>boolean</span></span></span><span style='font-size:  class=SpellE>proceedRedoing</span>(<span class=SpellE>IOperation</span>);<o:p></o:p></span></p>
 10.0pt;font-family:Arial'> <span class=SpellE>proceedRedoing</span>(<span  
 class=SpellE>IOperation</span>);<o:p></o:p></span></p>  
1240    
1241  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>}<o:p></o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>}<o:p></o:p></span></p>
1242    
# Line 1355  Line 1342 
1342  operation triggered in the editor is the most recent operation that has the  operation triggered in the editor is the most recent operation that has the
1343  workspace context, but it also contains context “A.”<span  workspace context, but it also contains context “A.”<span
1344  style='mso-spacerun:yes'>  </span>Since subsequent operations in the history  style='mso-spacerun:yes'>  </span>Since subsequent operations in the history
1345  also have context “A,<span class=GramE>”,</span> the <span class=SpellE>IOperationApproval</span>  also have context “A,”, the <span class=SpellE>IOperationApproval</span> for
1346  for context “A” is consulted as to whether the undo should proceed.<span  context “A” is consulted as to whether the undo should proceed.<span
1347  style='mso-spacerun:yes'>  </span>The <span class=SpellE><span class=GramE>IOperationApproval</span></span><span  style='mso-spacerun:yes'>  </span>The <span class=SpellE>IOperationApproval</span>
1348  class=GramE> <span style='mso-spacerun:yes'> </span>supplied</span> by context  <span style='mso-spacerun:yes'> </span>supplied by context “A” could do one of
1349  “A” could do one of the following:<o:p></o:p></span></p>  the following:<o:p></o:p></span></p>
1350    
1351  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1352  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1353  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1354  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1355  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>allow
1356  font-family:Arial'>allow</span></span><span style='font-size:10.0pt;font-family:  the undo to proceed, leaving the local changes to “A” in the undo history.<o:p></o:p></span></p>
 Arial'> the undo to proceed, leaving the local changes to “A” in the undo  
 history.<o:p></o:p></span></p>  
1357    
1358  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1359  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1360  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1361  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1362  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>quietly
1363  font-family:Arial'>quietly</span></span><span style='font-size:10.0pt;  undo the subsequent local changes to “A” and then allow the original undo to
1364  font-family:Arial'> undo the subsequent local changes to “A” and then allow the  proceed.<o:p></o:p></span></p>
 original undo to proceed.<o:p></o:p></span></p>  
1365    
1366  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1367  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1368  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1369  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1370  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>switch
1371  font-family:Arial'>switch</span></span><span style='font-size:10.0pt;  to the editor and non-quietly undo the local changes to “A” before allowing the
1372  font-family:Arial'> to the editor and non-quietly undo the local changes to “A”  original undo to proceed.<o:p></o:p></span></p>
 before allowing the original undo to proceed.<o:p></o:p></span></p>  
1373    
1374  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1375  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1376  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1377  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1378  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>prompt
1379  font-family:Arial'>prompt</span></span><span style='font-size:10.0pt;  the user for the preferred action.<o:p></o:p></span></p>
 font-family:Arial'> the user for the preferred action.<o:p></o:p></span></p>  
1380    
1381  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1382  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1383  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1384  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1385  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>provide
1386  font-family:Arial'>provide</span></span><span style='font-size:10.0pt;  a user preference that drives the behavior of the scenario.<o:p></o:p></span></p>
 font-family:Arial'> a user preference that drives the behavior of the scenario.<o:p></o:p></span></p>  
1387    
1388  <h4>Workbench IDE undo contexts<o:p></o:p></h4>  <h4>Workbench IDE undo contexts<o:p></o:p></h4>
1389    
# Line 1421  Line 1402 
1402       </span>Additional actions that affect the workspace (such as delete and       </span>Additional actions that affect the workspace (such as delete and
1403       create resources) would use this context.<span style='mso-spacerun:yes'>        create resources) would use this context.<span style='mso-spacerun:yes'> 
1404       </span>Views that manipulate the workspace, such as the navigator and       </span>Views that manipulate the workspace, such as the navigator and
1405       package explorer, will use this context when creating operations and querying       package explorer, will use this context when creating operations and
1406       for the current “undo operation.”<span style='mso-spacerun:yes'>        querying for the current “undo operation.”<span style='mso-spacerun:yes'> 
1407       </span>Views or editors that may be affected by workspace operations can       </span>Views or editors that may be affected by workspace operations can
1408       add a listener to the operation history and add their context as needed to       add a listener to the operation history and add their context as needed to
1409       operations that have been added to the history.<span       operations that have been added to the history.<span
# Line 1464  Line 1445 
1445  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1446  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Any  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Any
1447  additional contexts required by the SDK (Team?<span style='mso-spacerun:yes'>   additional contexts required by the SDK (Team?<span style='mso-spacerun:yes'> 
1448  </span>Debug?) <span class=GramE>must</span> be defined.<o:p></o:p></span></p>  </span>Debug?) must be defined.<o:p></o:p></span></p>
1449    
1450  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1451  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
# Line 1515  Line 1496 
1496    
1497  <h5>Minimal support</h5>  <h5>Minimal support</h5>
1498    
1499  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The Edit&gt;Undo
1500  Edit&gt;Undo and Edit&gt;Redo commands should be retargeted by most of the  and Edit&gt;Redo commands should be retargeted by most of the major views (list
1501  major views (list of views TBD).<span style='mso-spacerun:yes'>  </span>If a  of views TBD).<span style='mso-spacerun:yes'>  </span>If a view retargets
1502  view retargets Undo/Redo, then it knows what operation contexts it supports,  Undo/Redo, then it knows what operation contexts it supports, and it uses these
1503  and it uses these contexts to retrieve the available undo operation.<o:p></o:p></span></p>  contexts to retrieve the available undo operation.<o:p></o:p></span></p>
1504    
1505  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1506    
# Line 1528  Line 1509 
1509    
1510  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1511  style='mso-tab-count:1'>            </span><span class=SpellE>IStatus</span>  style='mso-tab-count:1'>            </span><span class=SpellE>IStatus</span>
1512  status = <span class=SpellE><span class=GramE>operationHistory.canUndoIn</span></span><span  status = <span class=SpellE>operationHistory.canUndoIn</span>(<span
1513  class=GramE>(</span><span class=SpellE>myContext</span>);<o:p></o:p></span></p>  class=SpellE>myContext</span>);<o:p></o:p></span></p>
1514    
1515  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1516  style='mso-tab-count:1'>            </span>// up to the active part to define  style='mso-tab-count:1'>            </span>// up to the active part to define
# Line 1541  Line 1522 
1522  for the undo action should be appended with a description of the operation.<o:p></o:p></span></p>  for the undo action should be appended with a description of the operation.<o:p></o:p></span></p>
1523    
1524  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1525  style='mso-tab-count:1'>            </span><span class=SpellE><span  style='mso-tab-count:1'>            </span><span class=SpellE>operationToUndo</span>
1526  class=GramE>operationToUndo</span></span> = <span class=SpellE>operationHistory.getUndoFor</span>(<span  = <span class=SpellE>operationHistory.getUndoFor</span>(<span class=SpellE>myContext</span>);<o:p></o:p></span></p>
 class=SpellE>myContext</span>);<o:p></o:p></span></p>  
1527    
1528  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1529  style='mso-tab-count:1'>            </span><span class=GramE>label</span> =  style='mso-tab-count:1'>            </span>label = “Undo “+ <span class=SpellE>operationToUndo.label</span>();<o:p></o:p></span></p>
 “Undo “+ <span class=SpellE>operationToUndo.label</span>();<o:p></o:p></span></p>  
1530    
1531  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1532    
# Line 1557  Line 1536 
1536  context.<o:p></o:p></span></p>  context.<o:p></o:p></span></p>
1537    
1538  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1539  style='mso-tab-count:1'>            </span><span class=SpellE><span  style='mso-tab-count:1'>            </span><span class=SpellE>operationHistory.getUndoHistoryFor</span>(<span
 class=GramE>operationHistory.getUndoHistoryFor</span></span><span class=GramE>(</span><span  
1540  class=SpellE>myContext</span>);<o:p></o:p></span></p>  class=SpellE>myContext</span>);<o:p></o:p></span></p>
1541    
1542  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The drop  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The drop
# Line 1627  Line 1605 
1605  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
1606  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span  font-family:Arial;mso-fareast-font-family:Arial'><span style='mso-list:Ignore'>-<span
1607  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1608  </span></span></span><![endif]><span class=GramE><span style='font-size:10.0pt;  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>provide
1609  font-family:Arial'>provide</span></span><span style='font-size:10.0pt;  a user preference that drives the behavior of the scenario.<o:p></o:p></span></p>
 font-family:Arial'> a user preference that drives the behavior of the scenario.<o:p></o:p></span></p>  
1610    
1611  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1612    
# Line 1642  Line 1619 
1619  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1620  style='font-size:10.0pt;font-family:Arial'>Scenario #2</span></b><span  style='font-size:10.0pt;font-family:Arial'>Scenario #2</span></b><span
1621  style='font-size:10.0pt;font-family:Arial'>:<span style='mso-spacerun:yes'>   style='font-size:10.0pt;font-family:Arial'>:<span style='mso-spacerun:yes'> 
1622  </span>Editor <span class=GramE>undo</span> triggers a non-local operation<o:p></o:p></span></p>  </span>Editor undo triggers a non-local operation<o:p></o:p></span></p>
1623    
1624  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;  <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l21 level1 lfo1;
1625  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt;
# Line 1694  Line 1671 
1671    
1672  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1673    
1674  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The<span
1675  Arial'>The<span style='mso-spacerun:yes'>  </span>solution</span></span><span  style='mso-spacerun:yes'>  </span>solution for this scenario will be prototyped
1676  style='font-size:10.0pt;font-family:Arial'> for this scenario will be  and may involve both a warning and subsequent preference.<span
 prototyped and may involve both a warning and subsequent preference.<span  
1677  style='mso-spacerun:yes'>  </span>For example, a prompt could provide the label  style='mso-spacerun:yes'>  </span>For example, a prompt could provide the label
1678  and description of the operation and warn that it affects other views.<span  and description of the operation and warn that it affects other views.<span
1679  style='mso-spacerun:yes'>  </span>The user could choose whether to proceed, and  style='mso-spacerun:yes'>  </span>The user could choose whether to proceed, and
# Line 1733  Line 1709 
1709    
1710  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;
1711  font-family:Arial'><span style='mso-tab-count:1'>            </span><span  font-family:Arial'><span style='mso-tab-count:1'>            </span><span
1712  class=SpellE><span class=GramE>operationHistory.getUndoHistoryFor</span></span><span  class=SpellE>operationHistory.getUndoHistoryFor</span>(<span class=SpellE>myContext</span>);<o:p></o:p></span></p>
 class=GramE>(</span><span class=SpellE>myContext</span>);<o:p></o:p></span></p>  
1713    
1714  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1715    
# Line 1765  Line 1740 
1740  <h4><span class=SpellE>JFace</span> Text</h4>  <h4><span class=SpellE>JFace</span> Text</h4>
1741    
1742  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1743  Arial'>JFace</span></span><span style='font-size:10.0pt;font-family:Arial'>  Arial'>JFace</span></span><span style='font-size:10.0pt;font-family:Arial'> text
1744  text currently has API for retrieving an <span class=SpellE>IUndoManager</span>  currently has API for retrieving an <span class=SpellE>IUndoManager</span> from
1745  from a text viewer.<span style='mso-spacerun:yes'>  </span>The undo manager is  a text viewer.<span style='mso-spacerun:yes'>  </span>The undo manager is
1746  connected to a text viewer and watches the changes that happen in the  connected to a text viewer and watches the changes that happen in the
1747  viewer.<span style='mso-spacerun:yes'>  </span>As editing actions occurs,  viewer.<span style='mso-spacerun:yes'>  </span>As editing actions occurs,
1748  commands (<span class=SpellE>TextCommand</span>) are created and then  commands (<span class=SpellE>TextCommand</span>) are created and then
# Line 1781  Line 1756 
1756  style='mso-spacerun:yes'>  </span>The mapping from <span class=SpellE>IOperation</span>  style='mso-spacerun:yes'>  </span>The mapping from <span class=SpellE>IOperation</span>
1757  to <span class=SpellE>TextCommand</span> protocol is straightforward.<span  to <span class=SpellE>TextCommand</span> protocol is straightforward.<span
1758  style='mso-spacerun:yes'>  </span>Currently the <span class=SpellE>TextCommand</span>  style='mso-spacerun:yes'>  </span>Currently the <span class=SpellE>TextCommand</span>
1759  directly pushes itself onto a local command stack of a viewer when a set of  directly pushes itself onto a local command stack of a viewer when a set of pending
1760  pending changes are committed.<span style='mso-spacerun:yes'>  </span>Instead, it  changes are committed.<span style='mso-spacerun:yes'>  </span>Instead, it would
1761  would need to set its context to one appropriate for the text viewer and add  need to set its context to one appropriate for the text viewer and add itself
1762  itself to the workbench operation history.<span style='mso-spacerun:yes'>   to the workbench operation history.<span style='mso-spacerun:yes'>  </span><span
1763  </span><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>  style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
1764    
1765  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1766    
# Line 1793  Line 1768 
1768  Arial'>IUndoManager</span></span><span style='font-size:10.0pt;font-family:  Arial'>IUndoManager</span></span><span style='font-size:10.0pt;font-family:
1769  Arial'> API could be mapped as follows:<o:p></o:p></span></p>  Arial'> API could be mapped as follows:<o:p></o:p></span></p>
1770    
1771  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1772  style='font-size:10.0pt;font-family:Arial'>connect(</span></b></span><span  style='font-size:10.0pt;font-family:Arial'>connect(<span class=SpellE>ITextViewer</span>)
1773  class=SpellE><b style='mso-bidi-font-weight:normal'><span style='font-size:  <o:p></o:p></span></b></p>
 10.0pt;font-family:Arial'>ITextViewer</span></b></span><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>) <o:p></o:p></span></b></p>  
1774    
1775  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creates a  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creates a
1776  context (<span class=SpellE>myContext</span>) appropriate for representing this  context (<span class=SpellE>myContext</span>) appropriate for representing this
1777  document’s operations<o:p></o:p></span></p>  document’s operations<o:p></o:p></span></p>
1778    
1779  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1780  style='font-size:10.0pt;font-family:Arial'>disconnect(</span></b></span><span  style='font-size:10.0pt;font-family:Arial'>disconnect(<span class=SpellE>ITextViewer</span>)
1781  class=SpellE><b style='mso-bidi-font-weight:normal'><span style='font-size:  <o:p></o:p></span></b></p>
 10.0pt;font-family:Arial'>ITextViewer</span></b></span><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>) <o:p></o:p></span></b></p>  
1782    
1783  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Performs  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Performs
1784  necessary disconnect behavior and clears the operation history of operations involving  necessary disconnect behavior and clears the operation history of operations involving
1785  the viewer.<o:p></o:p></span></p>  the viewer.<o:p></o:p></span></p>
1786    
1787  <p class=MsoNormal style='margin-left:.5in'><span class=SpellE><span  <p class=MsoNormal style='margin-left:.5in'><span class=SpellE><span
1788  class=GramE><span style='font-size:10.0pt;font-family:Arial'>operationHistory.disposeAll</span></span></span><span  style='font-size:10.0pt;font-family:Arial'>operationHistory.disposeAll</span></span><span
1789  class=GramE><span style='font-size:10.0pt;font-family:Arial'>(</span></span><span  style='font-size:10.0pt;font-family:Arial'>(<span class=SpellE>myContext</span>);<o:p></o:p></span></p>
1790  class=SpellE><span style='font-size:10.0pt;font-family:Arial'>myContext</span></span><span  
1791  style='font-size:10.0pt;font-family:Arial'>);<o:p></o:p></span></p>  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1792    style='font-size:10.0pt;font-family:Arial'>beginCompoundChange</span></b></span><b
1793  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1794  normal'><span style='font-size:10.0pt;font-family:Arial'>beginCompoundChange</span></b></span></span><span  Arial'>() <o:p></o:p></span></b></p>
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'> <o:p></o:p></span></b></p>  
1795    
1796  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creates a <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Creates a <span
1797  class=SpellE>CompoundOperation</span> and stores subsequent <span class=SpellE>TextCommands</span>  class=SpellE>CompoundOperation</span> and stores subsequent <span class=SpellE>TextCommands</span>
1798  in this operation.<o:p></o:p></span></p>  in this operation.<o:p></o:p></span></p>
1799    
1800  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1801  normal'><span style='font-size:10.0pt;font-family:Arial'>endCompoundChange</span></b></span></span><b  style='font-size:10.0pt;font-family:Arial'>endCompoundChange</span></b></span><b
1802  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1803  Arial'><o:p></o:p></span></b></p>  Arial'><o:p></o:p></span></b></p>
1804    
1805  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Adds the current
1806  Arial'>Adds the current compound operation to the operation history.</span></span><span  compound operation to the operation history.<o:p></o:p></span></p>
 style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>  
1807    
1808  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1809  style='font-size:10.0pt;font-family:Arial'>reset()</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>reset()<o:p></o:p></span></b></p>
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'><o:p></o:p></span></b></p>  
1810    
1811  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Clears the operation
1812  Arial'>Clears the operation history of operations involving the viewer.</span></span><span  history of operations involving the viewer.<o:p></o:p></span></p>
 style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p>  
1813    
1814  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
1815  style='mso-tab-count:1'>            </span><span class=SpellE><span  style='mso-tab-count:1'>            </span><span class=SpellE>operationHistory.disposeAll</span>(<span
 class=GramE>operationHistory.disposeAll</span></span><span class=GramE>(</span><span  
1816  class=SpellE>myContext</span>);<o:p></o:p></span></p>  class=SpellE>myContext</span>);<o:p></o:p></span></p>
1817    
1818  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1819  normal'><span style='font-size:10.0pt;font-family:Arial'>setMaximumUndoLevel</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>setMaximumUndoLevel</span></b></span><b
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><span class=SpellE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>int</span></b></span><b  
1820  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1821  Arial'>) – TBD<o:p></o:p></span></b></p>  Arial'>(<span class=SpellE>int</span>) – TBD<o:p></o:p></span></b></p>
1822    
1823  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1824  style='font-size:10.0pt;font-family:Arial'>undoable()</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>undoable() <o:p></o:p></span></b></p>
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'> <o:p></o:p></span></b></p>  
1825    
1826  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps as  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps as
1827  follows:<o:p></o:p></span></p>  follows:<o:p></o:p></span></p>
1828    
1829  <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;
1830  style='font-size:10.0pt;font-family:Arial'>status</span></span><span  font-family:Arial'>status = <span class=SpellE>operationHistory.canUndoIn</span>(<span
 style='font-size:10.0pt;font-family:Arial'> = <span class=SpellE>operationHistory.canUndoIn</span>(<span  
1831  class=SpellE>myContext</span>);<o:p></o:p></span></p>  class=SpellE>myContext</span>);<o:p></o:p></span></p>
1832    
1833  <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;
1834  style='font-size:10.0pt;font-family:Arial'>return</span></span><span  font-family:Arial'>return <span class=SpellE>status.isOK</span>();<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>status.isOK</span>();<span  
1835  style='mso-spacerun:yes'>  </span>// may require further checking of other  style='mso-spacerun:yes'>  </span>// may require further checking of other
1836  cases<o:p></o:p></span></p>  cases<o:p></o:p></span></p>
1837    
1838  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1839  normal'><span style='font-size:10.0pt;font-family:Arial'>redoable</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>redoable</span></b></span><b
1840  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1841  font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>() <o:p></o:p></span></b></p>
 style='font-size:10.0pt;font-family:Arial'> <o:p></o:p></span></b></p>  
1842    
1843  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps as  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps as
1844  follows:<o:p></o:p></span></p>  follows:<o:p></o:p></span></p>
1845    
1846  <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;
1847  style='font-size:10.0pt;font-family:Arial'>status</span></span><span  font-family:Arial'>status = <span class=SpellE>operationHistory.canRedoIn</span>(<span
 style='font-size:10.0pt;font-family:Arial'> = <span class=SpellE>operationHistory.canRedoIn</span>(<span  
1848  class=SpellE>myContext</span>);<o:p></o:p></span></p>  class=SpellE>myContext</span>);<o:p></o:p></span></p>
1849    
1850  <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span  <p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt;
1851  style='font-size:10.0pt;font-family:Arial'>return</span></span><span  font-family:Arial'>return <span class=SpellE>status.isOK</span>();<span
 style='font-size:10.0pt;font-family:Arial'> <span class=SpellE>status.isOK</span>();<span  
1852  style='mso-spacerun:yes'>  </span>// may require further checking of other  style='mso-spacerun:yes'>  </span>// may require further checking of other
1853  cases<o:p></o:p></span></p>  cases<o:p></o:p></span></p>
1854    
1855  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1856  style='font-size:10.0pt;font-family:Arial'>undo()</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>undo()<o:p></o:p></span></b></p>
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'><o:p></o:p></span></b></p>  
1857    
1858  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Use <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Use <span
1859  class=SpellE><span class=GramE>operationHistory.performUndoFor</span></span><span  class=SpellE>operationHistory.performUndoFor</span>(<span class=SpellE>myContext</span>)
1860  class=GramE>(</span><span class=SpellE>myContext</span>) instead of managing  instead of managing its own stack.<o:p></o:p></span></p>
 its own stack.<o:p></o:p></span></p>  
1861    
1862  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
1863  style='font-size:10.0pt;font-family:Arial'>redo()</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>redo()<o:p></o:p></span></b></p>
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'><o:p></o:p></span></b></p>  
1864    
1865  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Use <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Use <span
1866  class=SpellE><span class=GramE>operationHistory.performRedoFor</span></span><span  class=SpellE>operationHistory.performRedoFor</span>(<span class=SpellE>myContext</span>)
1867  class=GramE>(</span><span class=SpellE>myContext</span>) instead of managing  instead of managing its own stack.<o:p></o:p></span></p>
 its own stack.<o:p></o:p></span></p>  
1868    
1869  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1870    
# Line 1977  Line 1924 
1924    
1925  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1926  Arial'>Refactoring</span></span><span style='font-size:10.0pt;font-family:Arial'>  Arial'>Refactoring</span></span><span style='font-size:10.0pt;font-family:Arial'>
1927  undo is currently implemented with change objects<span class=GramE>,<span  undo is currently implemented with change objects,<span
1928  style='mso-spacerun:yes'>  </span>Change</span> objects record workspace  style='mso-spacerun:yes'>  </span>Change objects record workspace changes
1929  changes initiated by <span class=SpellE>refactoring</span> operations.<span  initiated by <span class=SpellE>refactoring</span> operations.<span
1930  style='mso-spacerun:yes'>  </span>When a <span class=SpellE>refactoring</span>  style='mso-spacerun:yes'>  </span>When a <span class=SpellE>refactoring</span>
1931  change is performed, it can optionally return another change that could be used  change is performed, it can optionally return another change that could be used
1932  to undo the change just executed.<span style='mso-spacerun:yes'>  </span>The  to undo the change just executed.<span style='mso-spacerun:yes'>  </span>The
# Line 2015  Line 1962 
1962  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1963    
1964  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Protocol is  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Protocol is
1965  also provided to return the object modified by a change (<span class=SpellE><span  also provided to return the object modified by a change (<span class=SpellE>getModifiedElement</span>()).<o:p></o:p></span></p>
 class=GramE>getModifiedElement</span></span><span class=GramE>(</span>)).<o:p></o:p></span></p>  
1966    
1967  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1968    
# Line 2031  Line 1977 
1977    
1978  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
1979    
1980  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1981  normal'><span style='font-size:10.0pt;font-family:Arial'>getModifiedElement</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>getModifiedElement</span></b></span><b
1982  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1983  font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>() <o:p></o:p></span></b></p>
1984  style='font-size:10.0pt;font-family:Arial'> <o:p></o:p></span></b></p>  
1985    <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
1986  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  style='font-size:10.0pt;font-family:Arial'>getAdapter</span></b></span><b
1987  normal'><span style='font-size:10.0pt;font-family:Arial'>getAdapter</span></b></span></span><span  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
1988  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  Arial'>(Class)<o:p></o:p></span></b></p>
 font-family:Arial'>(</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'>Class)<o:p></o:p></span></b></p>  
1989    
1990  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span class=SpellE><span style='font-size:10.0pt;font-family:
1991  Arial'>Refactoring</span></span><span style='font-size:10.0pt;font-family:Arial'>  Arial'>Refactoring</span></span><span style='font-size:10.0pt;font-family:Arial'>
# Line 2053  Line 1997 
1997  might in fact be suitable for all workspace-affecting operations.<span  might in fact be suitable for all workspace-affecting operations.<span
1998  style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>  style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
1999    
2000  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2001  normal'><span style='font-size:10.0pt;font-family:Arial'>getParent</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>getParent</span></b></span><b
2002  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2003  font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>()<o:p></o:p></span></b></p>
2004  style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></b></p>  
2005    <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2006  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  style='font-size:10.0pt;font-family:Arial'>setParent</span></b></span><b
 normal'><span style='font-size:10.0pt;font-family:Arial'>setParent</span></b></span></span><span  
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'>Change)<o:p></o:p></span></b></p>  
   
 <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>isEnabled</span></b></span></span><span  
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></b></p>  
   
 <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>setEnabled</span></b></span></span><span  
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><span class=SpellE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>boolean</span></b></span><b  
2007  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2008  Arial'>)<o:p></o:p></span></b></p>  Arial'>(Change)<o:p></o:p></span></b></p>
2009    
2010    <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2011    style='font-size:10.0pt;font-family:Arial'>isEnabled</span></b></span><b
2012    style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2013    Arial'>()<o:p></o:p></span></b></p>
2014    
2015    <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2016    style='font-size:10.0pt;font-family:Arial'>setEnabled</span></b></span><b
2017    style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2018    Arial'>(<span class=SpellE>boolean</span>)<o:p></o:p></span></b></p>
2019    
2020  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The
2021  associated fields and protocol can be defined in an abstract class. <o:p></o:p></span></p>  associated fields and protocol can be defined in an abstract class. <o:p></o:p></span></p>
2022    
2023  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2024  normal'><span style='font-size:10.0pt;font-family:Arial'>initializeValidationData</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>initializeValidationData</span></b></span><b
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><span class=SpellE><span  
 style='font-size:10.0pt;font-family:Arial'>IProgressMonitor</span></span><b  
2025  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2026  Arial'>)<o:p></o:p></span></b></p>  Arial'>(</span></b><span class=SpellE><span style='font-size:10.0pt;font-family:
2027    Arial'>IProgressMonitor</span></span><b style='mso-bidi-font-weight:normal'><span
2028    style='font-size:10.0pt;font-family:Arial'>)<o:p></o:p></span></b></p>
2029    
2030  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This hook  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This hook
2031  allows changes to cache local validation data, or to hook up listeners to the  allows changes to cache local validation data, or to hook up listeners to the
# Line 2096  Line 2033 
2033  style='mso-spacerun:yes'>  </span>This protocol could be provided in the  style='mso-spacerun:yes'>  </span>This protocol could be provided in the
2034  abstract <span class=SpellE>refactoring</span> class. <o:p></o:p></span></p>  abstract <span class=SpellE>refactoring</span> class. <o:p></o:p></span></p>
2035    
2036  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
2037  style='font-size:10.0pt;font-family:Arial'>dispose()</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>dispose()<o:p></o:p></span></b></p>
2038  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
2039  Arial'><o:p></o:p></span></b></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps
2040    directly.<o:p></o:p></span></p>
2041    
2042  <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2043  Arial'>Maps directly.</span></span><span style='font-size:10.0pt;font-family:  style='font-size:10.0pt;font-family:Arial'>getName</span></b></span><b
2044  Arial'><o:p></o:p></span></p>  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2045    Arial'>()<o:p></o:p></span></b></p>
 <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>getName</span></b></span></span><span  
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></b></p>  
2046    
2047  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to <span
2048  class=SpellE>operation.getLabel</span><o:p></o:p></span></p>  class=SpellE>operation.getLabel</span><o:p></o:p></span></p>
2049    
2050  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2051  normal'><span style='font-size:10.0pt;font-family:Arial'>isValid</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>isValid</span></b></span><b
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><span class=SpellE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>IProgressMonitor</span></b></span><b  
2052  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2053  Arial'>)<o:p></o:p></span></b></p>  Arial'>(<span class=SpellE>IProgressMonitor</span>)<o:p></o:p></span></b></p>
2054    
2055  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to <span
2056  class=SpellE><span class=GramE>canUndo</span></span><span class=GramE>(</span>),  class=SpellE>canUndo</span>(), <span class=SpellE>canRedo</span>(), and <span
2057  <span class=SpellE>canRedo</span>(), and <span class=SpellE>canExecute</span>().<span  class=SpellE>canExecute</span>().<span style='mso-spacerun:yes'>  </span>See
2058  style='mso-spacerun:yes'>  </span>See discussion below.<o:p></o:p></span></p>  discussion below.<o:p></o:p></span></p>
2059    
2060  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
2061  style='font-size:10.0pt;font-family:Arial'>perform(</span></b></span><span  style='font-size:10.0pt;font-family:Arial'>perform(<span class=SpellE>IProgressMonitor</span>)<o:p></o:p></span></b></p>
 class=SpellE><b style='mso-bidi-font-weight:normal'><span style='font-size:  
 10.0pt;font-family:Arial'>IProgressMonitor</span></b></span><b  
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'>)<o:p></o:p></span></b></p>  
2062    
2063  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to <span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Maps to undo(<span
2064  class=GramE>undo(</span><span class=SpellE>IProgressMonitor</span>), redo(<span  class=SpellE>IProgressMonitor</span>), redo(<span class=SpellE>IProgressMonitor</span>)
2065  class=SpellE>IProgressMonitor</span>) and <span class=SpellE>canExecute</span>(<span  and <span class=SpellE>canExecute</span>(<span class=SpellE>IProgressMonitor</span>).<span
2066  class=SpellE>IProgressMonitor</span>).<span style='mso-spacerun:yes'>   style='mso-spacerun:yes'>  </span>See discussion below.<o:p></o:p></span></p>
 </span>See discussion below.<o:p></o:p></span></p>  
2067    
2068  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
2069    
# Line 2150  Line 2075 
2075  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2076  </span></span></span><![endif]><span class=SpellE><span style='font-size:10.0pt;  </span></span></span><![endif]><span class=SpellE><span style='font-size:10.0pt;
2077  font-family:Arial'>Refactoring</span></span><span style='font-size:10.0pt;  font-family:Arial'>Refactoring</span></span><span style='font-size:10.0pt;
2078  font-family:Arial'> change objects do not support direct <span class=GramE>undo(</span>)  font-family:Arial'> change objects do not support direct undo() or redo().<span
2079  or redo().<span style='mso-spacerun:yes'>  </span>Rather, a change that  style='mso-spacerun:yes'>  </span>Rather, a change that supports undo() returns
2080  supports <span class=GramE>undo(</span>) returns a new change that “undoes” it  a new change that “undoes” it whenever it is executed.<span
2081  whenever it is executed.<span style='mso-spacerun:yes'>  </span>The code for <span  style='mso-spacerun:yes'>  </span>The code for <span class=SpellE>refactoring</span>
2082  class=SpellE>refactoring</span> changes would have to be <span class=SpellE>refactored</span>  changes would have to be <span class=SpellE>refactored</span> in one of these
2083  in one of these ways:<o:p></o:p></span></p>  ways:<o:p></o:p></span></p>
2084    
2085  <p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l17 level2 lfo20;  <p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l17 level2 lfo20;
2086  tab-stops:list 1.25in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list 1.25in'><![if !supportLists]><span style='font-size:10.0pt;
2087  font-family:"Courier New";mso-fareast-font-family:"Courier New"'><span  font-family:"Courier New";mso-fareast-font-family:"Courier New"'><span
2088  style='mso-list:Ignore'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  style='mso-list:Ignore'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2089  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Eliminate  </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Arial'>Eliminate
2090  the creation of the undo change and move this work into an <span class=GramE>undo(</span>)  the creation of the undo change and move this work into an undo() method.<o:p></o:p></span></p>
 method.<o:p></o:p></span></p>  
2091    
2092  <p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l17 level2 lfo20;  <p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l17 level2 lfo20;
2093  tab-stops:list 1.25in'><![if !supportLists]><span style='font-size:10.0pt;  tab-stops:list 1.25in'><![if !supportLists]><span style='font-size:10.0pt;
# Line 2192  Line 2116 
2116    
2117  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>It is  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>It is
2118  likely that many views and editors in the workbench IDE will be aware of this special  likely that many views and editors in the workbench IDE will be aware of this special
2119  kind of <span class=SpellE>IOperation</span>. <span  kind of <span class=SpellE>IOperation</span>.<span style='mso-spacerun:yes'> 
2120  style='mso-spacerun:yes'> </span>An additional interface, <span class=SpellE>IWorkspaceOperation</span>,  </span>An additional interface, <span class=SpellE>IWorkspaceOperation</span>,
2121  may evolve as <span class=SpellE>refactoring</span> changes are adapted to the  may evolve as <span class=SpellE>refactoring</span> changes are adapted to the
2122  new operations framework.<span style='mso-spacerun:yes'>  </span>Patterns  new operations framework.<span style='mso-spacerun:yes'>  </span>Patterns
2123  surrounding the workspace operation will develop, particularly involving  surrounding the workspace operation will develop, particularly involving
# Line 2230  Line 2154 
2154    
2155  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
2156    
2157  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2158  normal'><span style='font-size:10.0pt;font-family:Arial'>isDirty</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>isDirty</span></b></span><b
2159  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2160  font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>()<o:p></o:p></span></b></p>
2161  style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></b></p>  
2162    <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2163  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  style='font-size:10.0pt;font-family:Arial'>markSaveLocation</span></b></span><b
2164  normal'><span style='font-size:10.0pt;font-family:Arial'>markSaveLocation</span></b></span></span><span  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2165  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  Arial'>()<o:p></o:p></span></b></p>
 font-family:Arial'>()</span></b></span><b style='mso-bidi-font-weight:normal'><span  
 style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></b></p>  
2166    
2167  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>GEF  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>GEF
2168  supports a marker (<span class=SpellE>saveLocation</span>) that becomes dirty  supports a marker (<span class=SpellE>saveLocation</span>) that becomes dirty
# Line 2249  Line 2171 
2171  the new framework, then GEF might have to mark the location inside its own  the new framework, then GEF might have to mark the location inside its own
2172  commands or using a dummy marker command.<o:p></o:p></span></p>  commands or using a dummy marker command.<o:p></o:p></span></p>
2173    
2174  <p class=MsoNormal><span class=GramE><b style='mso-bidi-font-weight:normal'><span  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
2175  style='font-size:10.0pt;font-family:Arial'>execute(</span></b></span><b  style='font-size:10.0pt;font-family:Arial'>execute(Command)<o:p></o:p></span></b></p>
 style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  
 Arial'>Command)<o:p></o:p></span></b></p>  
2176    
2177  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The GEF  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>The GEF
2178  command stack executes commands on behalf of the client and adds them to the  command stack executes commands on behalf of the client and adds them to the
2179  stack, while the operation history does not do the execution on behalf of the  stack, while the operation history does not do the execution on behalf of the
2180  client.<span style='mso-spacerun:yes'>  </span>GEF clients that create GEF  client.<span style='mso-spacerun:yes'>  </span>GEF clients that create GEF
2181  commands would alter the pattern “<span class=SpellE><span class=GramE>commandStack.execute</span></span><span  commands would alter the pattern “<span class=SpellE>commandStack.execute</span>(<span
2182  class=GramE>(</span><span class=SpellE>someCommand</span>)” to instead use “<span  class=SpellE>someCommand</span>)” to instead use “<span class=SpellE>someCommand.execute</span>(null);
2183  class=SpellE>someCommand.execute</span>(null); <span class=SpellE>operationHistory.add</span>(<span  <span class=SpellE>operationHistory.add</span>(<span class=SpellE>someCommand</span>)”<span
2184  class=SpellE>someCommand</span>)”<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>  style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>
2185    
2186  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2187  normal'><span style='font-size:10.0pt;font-family:Arial'>addCommandStackListener</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>addCommandStackListener</span></b></span><b
 class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  
 font-family:Arial'>(</span></b></span><span class=SpellE><b style='mso-bidi-font-weight:  
 normal'><span style='font-size:10.0pt;font-family:Arial'>CommandStackListener</span></b></span><b  
2188  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2189  Arial'>)<o:p></o:p></span></b></p>  Arial'>(<span class=SpellE>CommandStackListener</span>)<o:p></o:p></span></b></p>
2190    
2191  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>GEF is  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>GEF is
2192  evolving its <span class=SpellE>CommandListener</span> interface in R3.1 to  evolving its <span class=SpellE>CommandListener</span> interface in R3.1 to
# Line 2287  Line 2204 
2204    
2205  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
2206    
2207  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2208  normal'><span style='font-size:10.0pt;font-family:Arial'>getResult</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>getResult</span></b></span><b
2209  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2210  font-family:Arial'>(</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>();<o:p></o:p></span></b></p>
 style='font-size:10.0pt;font-family:Arial'>);<o:p></o:p></span></b></p>  
2211    
2212  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This method  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This method
2213  answers the result of command execution when the command is in certain  answers the result of command execution when the command is in certain
# Line 2301  Line 2217 
2217  style='mso-spacerun:yes'>  </span>This protocol could then be provided in the  style='mso-spacerun:yes'>  </span>This protocol could then be provided in the
2218  EMF operations.<o:p></o:p></span></p>  EMF operations.<o:p></o:p></span></p>
2219    
2220  <p class=MsoNormal><span class=SpellE><span class=GramE><b style='mso-bidi-font-weight:  <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
2221  normal'><span style='font-size:10.0pt;font-family:Arial'>getAffectedObjects</span></b></span></span><span  style='font-size:10.0pt;font-family:Arial'>getAffectedObjects</span></b></span><b
2222  class=GramE><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;  style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt;font-family:
2223  font-family:Arial'>(</span></b></span><b style='mso-bidi-font-weight:normal'><span  Arial'>();<o:p></o:p></span></b></p>
 style='font-size:10.0pt;font-family:Arial'>);<o:p></o:p></span></b></p>  
2224    
2225  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This method  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>This method
2226  is used to highlight the appropriate objects in a view to show what the EMF command  is used to highlight the appropriate objects in a view to show what the EMF command
# Line 2389  Line 2304 
2304    
2305  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
2306    
2307  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Proposal Outcome:<span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Proposal
2308  style='mso-spacerun:yes'>  </span>Desired Outcome.<span  Outcome:<span style='mso-spacerun:yes'>  </span>Desired Outcome.<span
2309  style='mso-spacerun:yes'>  </span>(Unrelated <span class=SpellE>refactoring</span>  style='mso-spacerun:yes'>  </span>(Unrelated <span class=SpellE>refactoring</span>
2310  operation did not have the editor’s context).<span style='mso-spacerun:yes'>   operation did not have the editor’s context).<span style='mso-spacerun:yes'> 
2311  </span><o:p></o:p></span></p>  </span><o:p></o:p></span></p>
# Line 2463  Line 2378 
2378  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
2379  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>
2380    
2381  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Desired Outcome:<span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Desired
2382  style='mso-spacerun:yes'>  </span>At this point, the user needs information  Outcome:<span style='mso-spacerun:yes'>  </span>At this point, the user needs
2383  that helps explain the disappearance of the typo.<span  information that helps explain the disappearance of the typo.<span
2384  style='mso-spacerun:yes'>  </span>In this case, there are two helpful options:<o:p></o:p></span></p>  style='mso-spacerun:yes'>  </span>In this case, there are two helpful options:<o:p></o:p></span></p>
2385    
2386  <ol style='margin-top:0in' start=1 type=1>  <ol style='margin-top:0in' start=1 type=1>
# Line 2477  Line 2392 
2392       style='mso-spacerun:yes'>  </span>The user then selects “Redo,” having       style='mso-spacerun:yes'>  </span>The user then selects “Redo,” having
2393       been satisfied that the typo was corrected by the <span class=SpellE>refactoring</span>       been satisfied that the typo was corrected by the <span class=SpellE>refactoring</span>
2394       operation.<span style='mso-spacerun:yes'>  </span>This operation is       operation.<span style='mso-spacerun:yes'>  </span>This operation is
2395       somewhat “<span class=GramE>heavyweight</span>,” but one could argue that       somewhat “heavyweight,” but one could argue that it’s the more expected
2396       it’s the more expected outcome.<o:p></o:p></span></li>       outcome.<o:p></o:p></span></li>
2397   <li class=MsoNormal style='mso-list:l16 level1 lfo5;tab-stops:list .5in'><span   <li class=MsoNormal style='mso-list:l16 level1 lfo5;tab-stops:list .5in'><span
2398       style='font-size:10.0pt;font-family:Arial'>The text edit caused by the <span       style='font-size:10.0pt;font-family:Arial'>The text edit caused by the <span
2399       class=SpellE>refactoring</span> is undone, exposing the typo and, in       class=SpellE>refactoring</span> is undone, exposing the typo and, in
# Line 2516  Line 2431 
2431  rename the method.<span style='mso-spacerun:yes'>  </span>The <span  rename the method.<span style='mso-spacerun:yes'>  </span>The <span
2432  class=SpellE>refactor</span> causes references to be updated in other  class=SpellE>refactor</span> causes references to be updated in other
2433  files.<span style='mso-spacerun:yes'>  </span>The user then decides that the  files.<span style='mso-spacerun:yes'>  </span>The user then decides that the
2434  rename was not appropriate.<span style='mso-spacerun:yes'>  </span>The user  rename was not appropriate.<span style='mso-spacerun:yes'>  </span>The user selects
2435  selects Edit&gt;Undo.<o:p></o:p></span></p>  Edit&gt;Undo.<o:p></o:p></span></p>
2436    
2437  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><span
2438  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>  style='mso-tab-count:1'>            </span><o:p></o:p></span></p>
# Line 2569  Line 2484 
2484  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Desired  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'>Desired
2485  Outcome:<span style='mso-spacerun:yes'>  </span>The most recent editing changes  Outcome:<span style='mso-spacerun:yes'>  </span>The most recent editing changes
2486  to the <span class=SpellE>javadoc</span> are undone.<span  to the <span class=SpellE>javadoc</span> are undone.<span
2487  style='mso-spacerun:yes'>  </span>The user can continue selecting “Undo” until the  style='mso-spacerun:yes'>  </span>The user can continue selecting “Undo” until
2488  <span class=SpellE>refactoring</span> operation is undone, updating all of the  the <span class=SpellE>refactoring</span> operation is undone, updating all of
2489  references. <o:p></o:p></span></p>  the references. <o:p></o:p></span></p>
2490    
2491  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>  <p class=MsoNormal><span style='font-size:10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></p>
2492    
# Line 2629  Line 2544 
2544  outcome:<span style='mso-spacerun:yes'>  </span>This can be implemented in  outcome:<span style='mso-spacerun:yes'>  </span>This can be implemented in
2545  different ways with <span class=SpellE>IOperationApproval</span>.<span  different ways with <span class=SpellE>IOperationApproval</span>.<span
2546  style='mso-spacerun:yes'>  </span>The operation history would notice that the  style='mso-spacerun:yes'>  </span>The operation history would notice that the
2547  chosen operation has context “A” and that later changes for “<span class=GramE>A</span>”  chosen operation has context “A” and that later changes for “A” are in the
2548  are in the history.<span style='mso-spacerun:yes'>  </span>The <span  history.<span style='mso-spacerun:yes'>  </span>The <span class=SpellE>IOperationApproval</span>
2549  class=SpellE>IOperationApproval</span> assigned to context “A” could prompt the  assigned to context “A” could prompt the user as to whether to undo the more
2550  user as to whether to undo the more recent changes in “A.”<o:p></o:p></span></p>  recent changes in “A.”<o:p></o:p></span></p>
2551    
2552  <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;  <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
2553  font-family:Arial'><o:p>&nbsp;</o:p></span></p>  font-family:Arial'><o:p>&nbsp;</o:p></span></p>
# Line 2658  Line 2573 
2573  issues in a multi-user model.<span style='mso-spacerun:yes'>   issues in a multi-user model.<span style='mso-spacerun:yes'> 
2574  </span>Collaborating users may expect a global undo scope while users working  </span>Collaborating users may expect a global undo scope while users working
2575  in separate contexts may not.<span style='mso-spacerun:yes'>  </span>Users may  in separate contexts may not.<span style='mso-spacerun:yes'>  </span>Users may
2576  be moving between collaboration and separation in a single work session, and  be moving between collaboration and separation in a single work session, and the
2577  the system cannot detect which is the case.<span style='mso-spacerun:yes'>   system cannot detect which is the case.<span style='mso-spacerun:yes'> 
2578  </span>Undo implementations in these systems typically keep track of the user  </span>Undo implementations in these systems typically keep track of the user
2579  who initiated the operation within a global history and filter the history  who initiated the operation within a global history and filter the history
2580  appropriately.<span style='mso-spacerun:yes'>  </span>Potential conflicts are  appropriately.<span style='mso-spacerun:yes'>  </span>Potential conflicts are

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2