Initial add of defaria.com
[clearscm.git] / defaria.com / blogs / Status / 2007 / 10 / createwor-subcl.html
1 <!DOCTYPE html>
2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
3   <head>
4     <meta charset="utf-8">
5     <meta name="description" content=" Added onChange like callbacks to CreateWOR's text field and text widget. This required subclassing the TextUndo class and properly handling the call back....">
6     <meta name="generator" content="Movable Type 5.2.3">
7     <title>CreateWOR: Subclassing TextUndo - Status</title>
8     <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9     <link rel="canonical" href="http://defaria.com/blogs/Status/2007/10/createwor-subcl.html">
10     <meta name="viewport" content="width=device-width,initial-scale=1">
11     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
12     <!--[if lt IE 9]>
13     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14     <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
15     <![endif]-->
16     
17     <link rel="start" href="http://defaria.com/blogs/Status/">
18
19     <link rel="prev" href="http://defaria.com/blogs/Status/2007/10/createwor.html" title="CreateWOR">
20     <link rel="next" href="http://defaria.com/blogs/Status/2007/10/cqtalk.html" title="cqtalk">
21     <!-- Open Graph Protocol -->
22     <meta property="og:type" content="article">
23     <meta property="og:locale" content="en-us">
24     <meta property="og:title" content="CreateWOR: Subclassing TextUndo">
25     <meta property="og:url" content="http://defaria.com/blogs/Status/2007/10/createwor-subcl.html">
26     <meta property="og:description" content=" Added onChange like callbacks to CreateWOR's text field and text widget. This required subclassing the TextUndo class and properly handling the call back....">
27     <meta property="og:site_name" content="Status">
28     <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
29     <!-- Metadata -->
30     <meta itemprop="description" content=" Added onChange like callbacks to CreateWOR's text field and text widget. This required subclassing the TextUndo class and properly handling the call back....">
31     <link itemprop="url" href="http://defaria.com/blogs/Status/2007/10/createwor-subcl.html">
32     <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
33     
34   </head>
35   <body>
36     <div id="container">
37       <div id="container-inner">
38         <header id="header" role="banner">
39           <div id="header-inner">
40             <div id="header-content">
41               <h1>
42                 <a href="http://defaria.com/blogs/Status/">
43
44                   Status
45
46                 </a>
47               </h1>
48               
49             </div>
50
51             <nav role="navigation">
52           <ul>
53             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
54
55
56           </ul>
57         </nav>
58
59           </div>
60         </header>
61         <div id="content">
62           <div id="content-inner">
63             <ul class="breadcrumb breadcrumb-list">
64               <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65               <li class="breadcrumb-list-item">CreateWOR: Subclassing TextUndo</li>
66             </ul>
67             <div id="individual-main" class="main" role="main">
68               <article id="entry-1932" class="entry entry-asset asset hentry">
69                 <div class="asset-header">
70                   <h2 itemprop="name" class="asset-name entry-title">CreateWOR: Subclassing TextUndo</h2>
71                   <footer class="asset-meta">
72                     <ul class="asset-meta-list">
73                       <li class="asset-meta-list-item">Posted on <time datetime="2007-10-03T11:17:48-08:00" itemprop="datePublished">October  3, 2007</time></li>
74                       <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
75
76   
77                       <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics</a></li>
78   
79
80                    </ul>
81                 </footer>
82                 </div>
83                 <div class="entry-content asset-content" itemprop="articleBody">
84                   <ul>
85   <li>Added onChange like callbacks to CreateWOR's text field and text widget. This required subclassing the TextUndo class and properly handling the call back.</li>
86 </ul>
87                   <h3>Subclassing TextUndo</h3>
88
89 <p>This is not working exactly as it should. I can't seem to store things like the onChange callback and a scalar representing the contents of the TextUndo widget in the new MyText object. I rely on overriding the methods InsertKeypress, insert, delete and replace in order to trap when modifications are made to the text, changing the $text member and to call the appropriate callback, but the object that's passed in is different than the object as it was in new and member variables for $text and $modified_CB are missing! So instead I use a package global but this means that only one, the same one, $modification_CB is used for all instantiations of MyText and the $text variable doesn't work at all. Instead one must call get_text in the &$modified_CB:</p>
90
91 <div class=code><pre>
92 # Subclass TextUndo widget to trap and call subroutine when text changes
93 package Tk::MyText;
94   use Tk::TextUndo;
95
96   use base qw/Tk::TextUndo/;
97
98   Construct Tk::Widget "MyText";
99
100   my $modified_CB;
101
102   sub new {
103     my $class   = shift;
104     my $self    = shift;
105     my %parms   = @_;
106
107     $modified_CB        = delete $parms{-modified}      if $parms{-modified};
108     $self->{text}       = delete $parms{-text}          if $parms{-text};
109
110     $class->SUPER::new ($self, %parms);
111   } # new
112
113   sub get_text {
114     my $self = shift;
115
116     return $self->{text};
117   } # get_text
118
119   sub InsertKeypress {
120     my $self = shift;
121
122     $self->SUPER::InsertKeypress (@_);
123     $self->{text} = $self->get ("1.0", "end");
124     &$modified_CB ($self) if $modified_CB;
125   } # InsertKeypress
126
127   sub insert {
128     my $self = shift;
129
130     $self->SUPER::insert (@_);
131     $self->{text} = $self->get ("1.0", "end");
132   } # insert
133
134   sub delete {
135     my $self = shift;
136
137     $self->SUPER::delete (@_);
138     $self->{text} = $self->get ("1.0", "end");
139     &$modified_CB ($self) if $modified_CB;
140   } # delete
141
142   sub replace {
143     my $self = shift;
144
145     $self->SUPER::replace (@_);
146     $self->{text} = $self->get ("1.0", "end");
147     &$modified_CB ($self) if $modified_CB;
148   } # replace
149
150 </pre></div>
151                 </div>
152                 <nav class="page-navigation entry-navigation pagination content-nav">
153                   <ul class="page-navigation-list">
154
155                     <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2007/10/createwor.html" title="CreateWOR">Previous entry</a></li>
156
157
158                     <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2007/10/cqtalk.html" title="cqtalk">Next entry</a></li>
159
160                   </ul>
161                 </nav>
162                 <!--
163 <aside id="zenback" class="zenback feedback">
164   Please paste Zenback script code here.
165 </aside>
166 -->
167                 
168                 
169               </article>
170             </div>
171             <aside class="widgets related" role="complementary">
172               <nav class="widget-search widget">
173   <div class="widget-content">
174     <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
175       <div>
176         <input type="text" name="search" value="" placeholder="Search...">
177
178         <input type="hidden" name="IncludeBlogs" value="8">
179
180         <input type="hidden" name="limit" value="20">
181         <button type="submit" name="button">
182           <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
183         </button>
184       </div>
185     </form>
186   </div>
187 </nav>
188 <nav class="widget-archive-category widget">
189   <h3 class="widget-header">Categories</h3>
190   <div class="widget-content">
191     
192       
193     <ul class="widget-list">
194       
195       
196       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
197       
198       
199       </li>
200       
201     
202       
203       
204       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
205       
206       
207       </li>
208       
209     
210       
211       
212       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
213       
214       
215       </li>
216       
217     
218       
219       
220       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
221       
222       
223       </li>
224       
225     
226       
227       
228       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
229       
230       
231       </li>
232       
233     
234       
235       
236       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
237       
238       
239       </li>
240       
241     
242       
243       
244       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
245       
246       
247       </li>
248       
249     
250       
251       
252       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
253       
254       
255       </li>
256       
257     
258       
259       
260       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
261       
262       
263       </li>
264       
265     
266       
267       
268       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
269       
270       
271       </li>
272       
273     
274       
275       
276       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
277       
278       
279       </li>
280       
281     
282       
283       
284       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
285       
286       
287       </li>
288       
289     </ul>
290       
291     
292   </div>
293 </nav>
294   
295
296 <nav class="widget-archive-dropdown widget">
297   <h3 class="widget-header">Archives</h3>
298   <div class="widget-content">
299     <select>
300       <option>Select a Month...</option>
301     
302       <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
303     
304   
305     
306       <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
307     
308   
309     
310       <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
311     
312   
313     
314       <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
315     
316   
317     
318       <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
319     
320   
321     
322       <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
323     
324   
325     
326       <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
327     
328   
329     
330       <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
331     
332   
333     
334       <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
335     
336   
337     
338       <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
339     
340   
341     
342       <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
343     
344   
345     
346       <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
347     
348   
349     
350       <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
351     
352   
353     
354       <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
355     
356   
357     
358       <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
359     
360   
361     
362       <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
363     
364   
365     
366       <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
367     
368   
369     
370       <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
371     
372   
373     
374       <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
375     
376   
377     
378       <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
379     
380   
381     
382       <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
383     
384   
385     
386       <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
387     
388   
389     
390       <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
391     
392   
393     
394       <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
395     
396   
397     
398       <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
399     
400   
401     
402       <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
403     
404   
405     
406       <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
407     
408   
409     
410       <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
411     
412   
413     
414       <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
415     
416   
417     
418       <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
419     
420   
421     
422       <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
423     
424   
425     
426       <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
427     
428   
429     
430       <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
431     
432   
433     
434       <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
435     
436   
437     
438       <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
439     
440   
441     
442       <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
443     
444   
445     
446       <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
447     
448   
449     
450       <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
451     
452   
453     
454       <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
455     
456   
457     
458       <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
459     
460   
461     
462       <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
463     
464   
465     
466       <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
467     
468   
469     
470       <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
471     
472   
473     
474       <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
475     
476   
477     
478       <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
479     
480   
481     
482       <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
483     
484   
485     
486       <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
487     
488   
489     
490       <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
491     
492   
493     
494       <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
495     
496   
497     
498       <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
499     
500   
501     
502       <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
503     
504   
505     
506       <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
507     
508   
509     
510       <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
511     
512   
513     
514       <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
515     
516   
517     
518       <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
519     
520   
521     
522       <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
523     
524   
525     
526       <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
527     
528   
529     
530       <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
531     
532   
533     
534       <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
535     
536   
537     
538       <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
539     
540   
541     
542       <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
543     
544   
545     
546       <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
547     
548   
549     
550       <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
551     
552   
553     
554       <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
555     
556   
557     
558       <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
559     
560   
561     
562       <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
563     
564   
565     
566       <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
567     
568   
569     
570       <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
571     
572   
573     
574       <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
575     
576   
577     
578       <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
579     
580   
581     
582       <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
583     
584   
585     
586       <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
587     
588     </select>
589   </div>
590 </nav>
591     
592   
593
594 <div class="widget-syndication widget section">
595   <div class="widget-content">
596     <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
597
598   </div>
599 </div>
600
601             </aside>
602           </div>
603         </div>
604         <footer id="footer" role="contentinfo">
605           <div id="footer-inner">
606             <div id="footer-content">
607   <nav role="navigation">
608           <ul>
609             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
610
611
612           </ul>
613         </nav>
614
615   <p class="license">&copy; Copyright 2016.</p>
616   <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
617 </div>
618           </div>
619         </footer>
620       </div>
621     </div>
622     <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
623     <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>
624   </body>
625 </html>