<br><br><div class="gmail_quote">On Fri, Nov 13, 2009 at 11:20 PM, Deepayan Sarkar <span dir="ltr">&lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Fri, Nov 13, 2009 at 1:04 PM, Michael Lawrence &lt;<a href="mailto:lawremi@gmail.com">lawremi@gmail.com</a>&gt; wrote:<br>
<br>
&gt;&gt; It would also be useful to have an existing C++ class wrapped<br>
&gt;&gt; directly, as with the Qt classes. How much work is involved in having<br>
&gt;&gt; that set up? This must be a common enough problem.<br>
&gt;&gt;<br>
&gt;<br>
&gt; This is a problem and is a major hang-up for qtpaint. Essentially, we need<br>
&gt; to generate the smoke metadata/bindings for every class we define in C++.<br>
&gt; Otherwise, instances of the class are not compatible with Smoke (which is<br>
&gt; usually important when you are extending a Qt class).<br>
<br>
</div>So basically, there&#39;s some manual work that needs to be done for each<br>
new class to be made available. Do you have a sense of how much work<br>
it would be to:<br>
<br>
(1) Create a new package with smoke bindings (say that produces a new<br>
&quot;module&quot; like Qt)<br>
<br></blockquote><div><br>With qtpaint, I&#39;m trying to figure out the minimal amount of work necessary. It won&#39;t be that bad, if it&#39;s well documented. Just need to copy over a lot of boilerplate and modify the right files. I&#39;d like to do more sharing, especially with qtbase, but R does not make it so easy. For example, we&#39;d have to compile the smokegenerator separately for each package. If I could find that within some &#39;bin&#39; directory in qtbase it would be a lot cleaner.  <br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
(2) Add a new class to that package.<br>
<div></div></blockquote><div><br>This would only require adding a single element to an XML file.<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div> <br></div></blockquote><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">
&gt; For qtpaint, I&#39;m working on getting the infrastructure in place for<br>
&gt; generating Smoke for some of the classes (like Layer), though I think I&#39;ll<br>
&gt; still just directly bind the painting interface, since Painter just derives<br>
&gt; from QObject, and we do not need those methods.<br>
<br>
</div>Sounds good.<br>
<div class="im"><br>
&gt;&gt; &gt;&gt;  o Related question: Let&#39;s say I want to manipulate a QWidget in<br>
&gt;&gt; &gt;&gt;   native code; e.g.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;   In R:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;      edit &lt;- Qt$QTextEdit()<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;   The in C++:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;      QTextEdit *editor = getPointer(edit);<br>
&gt;&gt; &gt;&gt;      RSyntaxHighlighter *highlighter =<br>
&gt;&gt; &gt;&gt;          new RSyntaxHighlighter(editor-&gt;document());<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;   unwrapQWidget() doesn&#39;t work obviously, as it uses the old model.<br>
&gt;&gt; &gt;&gt;   What would be the equivalent in the new world?  If this is<br>
&gt;&gt; &gt;&gt;   available, then we probably get some flexibility in using both the<br>
&gt;&gt; &gt;&gt;   old and new models together, even if we can&#39;t easily make new C++<br>
&gt;&gt; &gt;&gt;   classes available in R.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; This would be unwrapSmoke().<br>
<br>
</div>This seems to work. I&#39;ve checked in a few changes in qtbase to export<br>
this, please take a look and make sure I haven&#39;t screwed anything up<br>
(or added unnecessary things).<br>
<font color="#888888"><br></font></blockquote><div><br>Looks good.<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><font color="#888888">
-Deepayan<br>
</font></blockquote></div><br>