2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
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">
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>
17 <link rel="start" href="http://defaria.com/blogs/Status/">
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">
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">
37 <div id="container-inner">
38 <header id="header" role="banner">
39 <div id="header-inner">
40 <div id="header-content">
42 <a href="http://defaria.com/blogs/Status/">
51 <nav role="navigation">
53 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
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>
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>
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>
83 <div class="entry-content asset-content" itemprop="articleBody">
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>
87 <h3>Subclassing TextUndo</h3>
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>
92 # Subclass TextUndo widget to trap and call subroutine when text changes
96 use base qw/Tk::TextUndo/;
98 Construct Tk::Widget "MyText";
107 $modified_CB = delete $parms{-modified} if $parms{-modified};
108 $self->{text} = delete $parms{-text} if $parms{-text};
110 $class->SUPER::new ($self, %parms);
116 return $self->{text};
122 $self->SUPER::InsertKeypress (@_);
123 $self->{text} = $self->get ("1.0", "end");
124 &$modified_CB ($self) if $modified_CB;
130 $self->SUPER::insert (@_);
131 $self->{text} = $self->get ("1.0", "end");
137 $self->SUPER::delete (@_);
138 $self->{text} = $self->get ("1.0", "end");
139 &$modified_CB ($self) if $modified_CB;
145 $self->SUPER::replace (@_);
146 $self->{text} = $self->get ("1.0", "end");
147 &$modified_CB ($self) if $modified_CB;
152 <nav class="page-navigation entry-navigation pagination content-nav">
153 <ul class="page-navigation-list">
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>
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>
163 <aside id="zenback" class="zenback feedback">
164 Please paste Zenback script code here.
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">
176 <input type="text" name="search" value="" placeholder="Search...">
178 <input type="hidden" name="IncludeBlogs" value="8">
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">
188 <nav class="widget-archive-category widget">
189 <h3 class="widget-header">Categories</h3>
190 <div class="widget-content">
193 <ul class="widget-list">
196 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
204 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
212 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
220 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
228 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
236 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
244 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
252 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
260 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
268 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
276 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
284 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
296 <nav class="widget-archive-dropdown widget">
297 <h3 class="widget-header">Archives</h3>
298 <div class="widget-content">
300 <option>Select a Month...</option>
302 <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
306 <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
310 <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
314 <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
318 <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
322 <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
326 <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
330 <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
334 <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
338 <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
342 <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
346 <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
350 <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
354 <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
358 <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
362 <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
366 <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
370 <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
374 <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
378 <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
382 <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
386 <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
390 <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
394 <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
398 <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
402 <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
406 <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
410 <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
414 <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
418 <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
422 <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
426 <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
430 <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
434 <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
438 <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
442 <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
446 <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
450 <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
454 <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
458 <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
462 <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
466 <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
470 <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
474 <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
478 <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
482 <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
486 <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
490 <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
494 <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
498 <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
502 <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
506 <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
510 <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
514 <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
518 <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
522 <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
526 <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
530 <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
534 <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
538 <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
542 <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
546 <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
550 <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
554 <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
558 <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
562 <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
566 <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
570 <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
574 <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
578 <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
582 <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
586 <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
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>
604 <footer id="footer" role="contentinfo">
605 <div id="footer-inner">
606 <div id="footer-content">
607 <nav role="navigation">
609 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
615 <p class="license">© Copyright 2016.</p>
616 <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
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>