<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4792533110214295730</id><updated>2011-04-21T11:34:29.896-07:00</updated><title type='text'>ScripterNG - a new scripting plug-in for Scribus</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-2266502856158749138</id><published>2008-08-14T22:13:00.000-07:00</published><updated>2008-08-14T22:21:16.240-07:00</updated><title type='text'>Introduction video</title><content type='html'>I will try to add some comments later. Here you can see a recorded sessions with &lt;a style="font-weight: bold;" href="http://henning.cco-ev.de/scribus/scripterng.html"&gt;ScripterNG in action&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It includes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the object explorer&lt;/li&gt;&lt;li&gt;the script editor with interactive console&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the error handler&lt;/li&gt;&lt;li&gt;the source checker&lt;/li&gt;&lt;li&gt;and an example script which shows to main window in full-screen mode&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-2266502856158749138?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/2266502856158749138/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=2266502856158749138' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/2266502856158749138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/2266502856158749138'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/08/introduction-video.html' title='Introduction video'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-5549047771016412293</id><published>2008-08-10T10:21:00.000-07:00</published><updated>2008-08-10T10:42:37.104-07:00</updated><title type='text'>How to add functions to the scripting interface</title><content type='html'>First a little bit about good API-design. The (mostly) property-based object model in InDesign is a great example how to create a well-designed easy API. Take a look at this &lt;a href="http://www.adobe.com/products/indesign/scripting/pdfs/InDesignCS3_ScriptingGuide_JS.pdf%20"&gt;guide&lt;/a&gt; (PDF, 3.2 MB).&lt;br /&gt;&lt;br /&gt;You start with a &lt;a href="http://en.wikipedia.org/wiki/Scaffold_%28programming%29"&gt;scaffolding-like&lt;/a&gt; script:&lt;br /&gt;&lt;br /&gt;Go to the scripterng plug-in directory and call&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ./new_api.py test&lt;/span&gt;&lt;br /&gt;This will generate two files:&lt;br /&gt;&lt;ul style="font-family: courier new;"&gt;&lt;li&gt; api_test.h&lt;/li&gt;&lt;li&gt; api_test.cpp&lt;/li&gt;&lt;/ul&gt;from &lt;span style="font-family:courier new;"&gt;api_example.{h,cpp}&lt;/span&gt; as a template.&lt;br /&gt;&lt;br /&gt;The files are added to &lt;span style="font-family:courier new;"&gt;CMakeLists.txt&lt;/span&gt; and the header file is included in &lt;span style="font-family:courier new;"&gt;scripterngimpl.h&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Inside these files there is a class TestAPI defined. By default the class is a child of ScriperNGImpl and has the object-name Test. So the class will be automatically available under the name ScriperNG.Test from Python or QtScript.&lt;br /&gt;&lt;br /&gt;The class is created at start-up in&lt;span style="font-family:courier new;"&gt; scriperngimpl.cpp&lt;/span&gt; but you might want to change that. Look for the activeDocument Q_PROPERTY in scripterngimpl to see how to create an object on demand.&lt;br /&gt;&lt;br /&gt;To write a function which is available for scripting you have to write a public slot method. Allowed as parameters and as return types are basic types (int, bool, ..) and Qt objects. Pointers to pointers and complicated stuff like that does not work - but would not make any sense anyway...&lt;br /&gt;One caveat: If you want to return instances of QObject or QWidget you have to declare the base class QObject or QWidget as return type. The correct typecasting is done later at runtime via the Qt Meta-Object system.&lt;br /&gt;&lt;br /&gt;That's all. You do not have to know anything about the scripting language or about any binding api to do parameter conversation and validation. This is done by ScripterNG.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-5549047771016412293?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/5549047771016412293/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=5549047771016412293' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/5549047771016412293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/5549047771016412293'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/08/how-to-add-functions-to-scripting.html' title='How to add functions to the scripting interface'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-7622691744024871646</id><published>2008-08-09T17:36:00.000-07:00</published><updated>2008-08-10T10:43:51.910-07:00</updated><title type='text'>Script Descriptor Files</title><content type='html'>These files describe a script. Its extension is .scs and you can write them easily by hand. Here are the possible options and their defaults:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;name =&lt;br /&gt;title =&lt;br /&gt;description =&lt;br /&gt;icon =&lt;br /&gt;menu = ScripterNG&lt;br /&gt;shortcut =                # A valid QKeySequence as a string, see Qt4-docs&lt;br /&gt;filename =                # name of script file&lt;br /&gt;subroutine =              # additional entry point?&lt;br /&gt;author =&lt;br /&gt;contact =&lt;br /&gt;homepage =&lt;br /&gt;version =&lt;br /&gt;copyright =               # GPL2&lt;br /&gt;scribus_version =&lt;br /&gt;redraw = True&lt;br /&gt;mode = interactive        # allowed: batch, interactive, extension&lt;br /&gt;language = python         # allowed: python, qtscript&lt;br /&gt;separator_before = False  # in menu&lt;br /&gt;separator_after = False   # in menu&lt;br /&gt;background_mode = False   # threaded execution only for non-gui scripts&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;More options are already planned and will come with a later release. Feedback on needed features is always welcome.&lt;br /&gt;&lt;br /&gt;If you put a script descriptor file inside the &lt;span style="font-family:courier new;"&gt;scripterng/autoload&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;~/.scribus/scripterng/autoload&lt;/span&gt; folder it will be loaded at startup, added to the menu bar, etc.&lt;br /&gt;Every entry you see in the ScriperNG menu is already a separate script in autoload.&lt;br /&gt;&lt;br /&gt;You can also put the script descriptor inside a source file at the top in double comments. Python files have to be called &lt;span style="font-family: courier new;"&gt;.spy&lt;/span&gt; and look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;## name = about&lt;br /&gt;## title = About ScripterNG&lt;br /&gt;## shortcut = Esc,a&lt;br /&gt;# ScripterNG is a builtin and does not need to be imported&lt;br /&gt;ScripterNG.aboutScripterNG()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;With QtScript (extension is &lt;span style="font-family: courier new;"&gt;.sqts&lt;/span&gt;) the same is possible:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/// name = aboutqts&lt;br /&gt;/// title = About ScripterNG from QtScript&lt;br /&gt;ScripterNG.aboutScripter();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Support for .zip-packaged scripts is on the TODO.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-7622691744024871646?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/7622691744024871646/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=7622691744024871646' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/7622691744024871646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/7622691744024871646'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/08/script-descriptor-files.html' title='Script Descriptor Files'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-4846477835636952632</id><published>2008-07-18T12:59:00.000-07:00</published><updated>2008-07-18T13:25:31.993-07:00</updated><title type='text'>Dockable dialogs - manipulate the GUI with PyQt and ScripterNG</title><content type='html'>&lt;span style="font-size:100%;"&gt;With ScripterNG and PyQt you have access to the GUI and you can test new stuff easily.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is an example with &lt;span style="font-style: italic;"&gt;dockwidgets&lt;/span&gt;, which are curently not used inside Scribus:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_jsGr4WYTVvU/SID2pgGCvqI/AAAAAAAAA-o/usV2Fdfj9ek/s1600-h/dockdialogs.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_jsGr4WYTVvU/SID2pgGCvqI/AAAAAAAAA-o/usV2Fdfj9ek/s400/dockdialogs.png" alt="" id="BLOGGER_PHOTO_ID_5224446760600125090" border="0" /&gt;&lt;/a&gt;If you look in the lower left you can see that overlapping dockwidgets get tabbed. This is a new feature in Qt4.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is done by the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;from PyQt4.QtCore import *&lt;br /&gt;from PyQt4.QtGui import *&lt;br /&gt;&lt;br /&gt;class DockDialog(QDockWidget):&lt;br /&gt;&lt;br /&gt; def __init__(self, dlg, area=Qt.RightDockWidgetArea):&lt;br /&gt;     QDockWidget.__init__(self, dlg.windowTitle())&lt;br /&gt;     self.setObjectName(dlg.objectName() or i18n(dlg.windowTitle()))&lt;br /&gt;     self.resize(dlg.size())&lt;br /&gt;     dlg.parent().addDockWidget(area, self)&lt;br /&gt;     dlg.setParent(self)&lt;br /&gt;     dlg.move(0, 0)&lt;br /&gt;     self.setWidget(dlg)&lt;br /&gt;     self.show()&lt;br /&gt;     dlg.installEventFilter(self)&lt;br /&gt;&lt;br /&gt; def eventFilter(self, obj, event):&lt;br /&gt;     return False&lt;br /&gt;     if isinstance(event, QCloseEvent) or isinstance(event, QHideEvent):&lt;br /&gt;         obj.hide()&lt;br /&gt;         self.hide()&lt;br /&gt;         return True&lt;br /&gt;     elif isinstance(event, QShowEvent):&lt;br /&gt;         self.show()&lt;br /&gt;     return QDockWidget.eventFilter(self, obj, event)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;dockables = ["Properties", "Outline", "Layers", "Arrange Pages",&lt;br /&gt;          "Scrapbook", "Bookmarks", "Align and Distribute"]&lt;br /&gt;docks = qApp.docks = {}&lt;br /&gt;&lt;br /&gt;for tlw in qApp.topLevelWidgets():&lt;br /&gt; if isinstance(tlw, QDialog):&lt;br /&gt;     title = str(tlw.windowTitle())&lt;br /&gt;     if i18n(title) in dockables:&lt;br /&gt;        docks[title] = DockDialog(tlw)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is more a proof of concept and the code should not be used in production, of course.  But you can see what is possible with a few lines. And it might be an inspiration how to improve the GUI of Scribus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-4846477835636952632?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/4846477835636952632/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=4846477835636952632' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/4846477835636952632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/4846477835636952632'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/07/dockable-dialogs-manipulate-gui-with.html' title='Dockable dialogs - manipulate the GUI with PyQt and ScripterNG'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_jsGr4WYTVvU/SID2pgGCvqI/AAAAAAAAA-o/usV2Fdfj9ek/s72-c/dockdialogs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-6751412452521952205</id><published>2008-06-28T12:00:00.000-07:00</published><updated>2008-06-28T12:07:06.857-07:00</updated><title type='text'>Sorry no updates right now</title><content type='html'>I am busy with doing stuff for University but I hope I will find some time the next days to complete the core. Therefore I have to add support for the new script descriptor files. More on that later in a separate post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-6751412452521952205?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/6751412452521952205/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=6751412452521952205' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/6751412452521952205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/6751412452521952205'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/sorry-no-updates-right-now.html' title='Sorry no updates right now'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-6364403050200611952</id><published>2008-06-19T19:17:00.000-07:00</published><updated>2008-06-19T19:28:54.281-07:00</updated><title type='text'>ScripterNG plug-in documentation</title><content type='html'>&lt;div id="google_header" class="google_header"&gt;&lt;p id="cwj8"&gt; &lt;/p&gt;&lt;/div&gt;In progress documentation is now available at &lt;a href="http://docs.google.com/Doc?id=ddggcjfj_205f5wsvf2"&gt;http://docs.google.com/Doc?id=ddggcjfj_205f5wsvf2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is also a document about my previous evaluation at &lt;a href="http://docs.google.com/Doc?id=ddggcjfj_16ccjdxrcp"&gt;http://docs.google.com/Doc?id=ddggcjfj_16ccjdxrcp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-6364403050200611952?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/6364403050200611952/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=6364403050200611952' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/6364403050200611952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/6364403050200611952'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/scripterng-plug-in-documentation-in.html' title='ScripterNG plug-in documentation'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-683588318091825681</id><published>2008-06-19T16:05:00.000-07:00</published><updated>2008-06-19T16:08:12.824-07:00</updated><title type='text'>ChangeLog, part 2</title><content type='html'>&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 22:55  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/scripterngimpl.cpp: forgot to raise error&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   if openDocument fails&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 22:55  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/init_scripterng.py: make mikro.Error&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   class available as ScripterNG.Error&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 22:06  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/api_prefs.cpp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/scripterng.cpp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/scripterngimpl.cpp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/scripterngimpl.h: added checkDocument,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   haveDocument, closeDocument, openDocument and setModified&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 21:52  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/__init__.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/mainwindow.py: menu and&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   mainwindow are now attributes of ScripterNG. EditorMainWindow is&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   now a child of ScribusMainWindow&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 21:50  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/mikro.py: added exception support.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   Use RAISE from scripterimpl.h&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 02:05  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * playground/ElementPath.py, playground/ElementTree.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   playground/scxml.py: further work on xml support&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   (now needs newest version of elementtree)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-19 00:46  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/sceditor/console.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/highlighter.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/widget.py: Ported source&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   editor from QTextEdit to QPlainTextEdit which is faster.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   Disabled empty_format in highlighter.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-17 02:04  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * playground/full_issue_draft_1.sla, playground/scxml.py: Scirbus&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   XML file-format support module&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-17 02:02  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * playground/compat.py: compat module stub&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-16 23:05  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/mikro.py: improved speed of child&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   object access&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-16 01:43  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/api_prefs.cpp,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/scripterngimpl.cpp: ScripterNG(impl) is now&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   top-level object (from the scripting point of view),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   changed parent for ApiPrefs.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   Removed not working reload menu item and added a run script menu&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   item&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-14 23:41  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/excepthook.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/excepthook.ui,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/excepthook_ui.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/scripterngimpl.cpp: Added a nice looking&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   error handler if a script raises an exception&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-14 05:11  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/CMakeLists.txt,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sandbox.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/__init__.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/assist.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/console.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/highlighter.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/indenter.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/mainwindow.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/mainwindow.ui,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/mainwindow_ui.py,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/rope.zip,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   src/scripterng_plugin/python/sceditor/widget.py: Removed sandbox.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   Added a small editor/console for Python and (partly) QtScript&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-14 05:08  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/scripterngimpl.cpp: removed a warning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-14 05:08  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/init_scripterng.py: cleaner init&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;2008-06-14 05:07  henning&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt; * src/scripterng_plugin/python/mikro.py, tests/test_mikro.py:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   Better introspection support for ScripterNG object (via&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;   __members__)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-683588318091825681?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/683588318091825681/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=683588318091825681' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/683588318091825681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/683588318091825681'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/changelog-part-2.html' title='ChangeLog, part 2'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-1775396714616734464</id><published>2008-06-19T15:21:00.000-07:00</published><updated>2008-06-19T15:57:36.655-07:00</updated><title type='text'>The benefits of dynamic binding using the Qt meta object system</title><content type='html'>Here you can see the&lt;span style="font-style: italic;"&gt; old way&lt;/span&gt; to write a function which can be used from Python:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;PyObject *scribus_opendoc(PyObject* /* self */, PyObject* args)&lt;br /&gt;{&lt;br /&gt; char *Name;&lt;br /&gt; if (!PyArg_ParseTuple(args, "es", "utf-8", &amp;amp;Name))&lt;br /&gt;     return NULL;&lt;br /&gt; bool ret = ScCore-&gt;primaryMainWindow()-&gt;loadDoc(QString::fromUtf8(Name));&lt;br /&gt; if (!ret)&lt;br /&gt; {&lt;br /&gt;     PyErr_SetString(ScribusException, QObject::tr("Failed to open document.","python error").toLocal8Bit().constData());&lt;br /&gt;     return NULL;&lt;br /&gt; }&lt;br /&gt; return PyBool_FromLong(static_cast&lt;long&gt;(true));&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And now the &lt;span style="font-style: italic;"&gt;new way&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;bool ScripterNGImpl::openDocument(const QString &amp;amp; filename)&lt;br /&gt;{&lt;br /&gt; bool ret = ScCore-&gt;primaryMainWindow()-&gt;loadDoc(filename);&lt;br /&gt; if (!ret)&lt;br /&gt; {&lt;br /&gt;  RAISE("Cannot open " + filename);&lt;br /&gt;  return NULL;&lt;br /&gt; }&lt;br /&gt; return ret;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;That's all :-) &lt;br/&gt;&lt;br /&gt;You only have to make sure the method is defined as a slot or as invokeable. Parsing, checking and converting parameters is not needed anymore. For a more complex method you will save a lot of overhead. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Less code is easier to understand and to modify. &lt;br /&gt;So I hope this will motivate others to contribute to this plug-in. &lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-1775396714616734464?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/1775396714616734464/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=1775396714616734464' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/1775396714616734464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/1775396714616734464'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/benefits-of-dynamic-binding-using-qt.html' title='The benefits of dynamic binding using the Qt meta object system'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-4151213954856102333</id><published>2008-06-19T15:10:00.000-07:00</published><updated>2008-06-19T15:19:55.366-07:00</updated><title type='text'>Real screenshots</title><content type='html'>These are actual screenshots and no mockups like before.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jsGr4WYTVvU/SFrZwGaVfDI/AAAAAAAAAvM/M7-yhQNsO-E/s1600-h/exception.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jsGr4WYTVvU/SFrZwGaVfDI/AAAAAAAAAvM/M7-yhQNsO-E/s400/exception.png" alt="" id="BLOGGER_PHOTO_ID_5213718939012791346" border="0" /&gt;&lt;/a&gt;I hope you won't see this window that often. It pops up if an error occures.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jsGr4WYTVvU/SFrahX-WsXI/AAAAAAAAAvU/SJsSHHZAa00/s1600-h/scripteditor1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_jsGr4WYTVvU/SFrahX-WsXI/AAAAAAAAAvU/SJsSHHZAa00/s400/scripteditor1.png" alt="" id="BLOGGER_PHOTO_ID_5213719785540858226" border="0" /&gt;&lt;/a&gt;Here you can see the script editor which is available via the ScripterNG menu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jsGr4WYTVvU/SFrbEeFGs1I/AAAAAAAAAvc/jTuxDx_rdaI/s1600-h/scripteditor2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_jsGr4WYTVvU/SFrbEeFGs1I/AAAAAAAAAvc/jTuxDx_rdaI/s400/scripteditor2.png" alt="" id="BLOGGER_PHOTO_ID_5213720388475204434" border="0" /&gt;&lt;/a&gt;QtScript is already enabled.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-4151213954856102333?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/4151213954856102333/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=4151213954856102333' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/4151213954856102333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/4151213954856102333'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/real-screenshots.html' title='Real screenshots'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jsGr4WYTVvU/SFrZwGaVfDI/AAAAAAAAAvM/M7-yhQNsO-E/s72-c/exception.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-1366892221358143112</id><published>2008-06-12T11:33:00.000-07:00</published><updated>2008-06-12T13:35:25.749-07:00</updated><title type='text'>ChangeLog</title><content type='html'>&lt;span style="font-style: italic;"&gt;I removed this feed from &lt;a href="http://www.planet-soc.com"&gt;planet-soc.com&lt;/a&gt; because I don't think there are many interested in this blog and I don't want to bore the rest ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But here you are on my blog, so I guess you are interested in some progress. I am currently in the stage where I complete the core. With core I mean the technical base which will enable me to add new API functions easily bit by bit.&lt;br /&gt;&lt;br /&gt;The current plug-in code compiles and is available on the &lt;a href="http://sourceforge.net/svn/?group_id=125235"&gt;SourceForge SVN server&lt;/a&gt;. But you won't see much because most stuff is under the hood currently.&lt;br /&gt;&lt;br /&gt;Here is a complete changelog so far:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;2008-06-12 15:17  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/mikro.py, tests/test_mikro.py: Moved&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      mikro test code into separate file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-12 02:16  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/mikro.py: Fixed connect and added&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      disconnect&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-12 02:15  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/init_scripterng.py: Check for PyQt4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      and report problems on console&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-12 01:52  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/mikro.py: Named child objects are&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      now available as attributes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-12 00:56  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/mikro.py: First use of PyQt 4.4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      features.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      C++ methods can now be called from Python scripts inside&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      ScripterNG.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      This is an important step to make Scribus functionality available&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      to&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      Python.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      It's not that much code but it required heavy thinking about a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      efficient implementation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-10 22:58  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/sandbox.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/scripterng_hooks.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterngimpl.cpp, tests,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      tests/mainwinstub.py, tests/mainwinstub.ui, tests/test_menus.py:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      Now the plug-in can hook into menus and a menu entry in the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      ScripterNG&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      menu with an example editor/shell was added.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-10 00:13  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin/README,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterngimpl.cpp: added README document&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      and unified some indentions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-09 22:21  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/scripterng_plugin, src/scripterng_plugin/CMakeLists.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/INSTALL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/api_prefs.cpp,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/api_prefs.h, src/scripterng_plugin/python,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/cleanup_scripterng.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/init_scripterng.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/mikro.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/python/pyqtscript.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/pythonize.cpp,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/pythonize.h,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterng.cpp,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterng.h,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterngimpl.cpp,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/scripterng_plugin/scripterngimpl.h: first updated version in&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      new repository&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-06-05 18:18  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * src/repository_webapp, src/repository_webapp/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/repository,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/repository/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/repository/models.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/repository/urls.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/repository/views.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/fields.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/forms.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/generic.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/managers.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/models.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/settings.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/CHANGELOG.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/INSTALL.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/LICENSE.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/MANIFEST.in,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/README.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/docs,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/docs/overview.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/setup.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/fields.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/forms.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/generic.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/managers.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/models.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/settings.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/templatetags,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/templatetags/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/templatetags/tagging_tags.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests/models.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests/settings.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests/tags.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/tests/tests.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/utils.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/validators.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tagging_trunk/tagging/views.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/templatetags,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/templatetags/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/templatetags/tagging_tags.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests/models.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests/settings.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests/tags.txt,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/tests/tests.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/utils.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/validators.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/apps/tagging/views.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/create_database.sh,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/manage.py, src/repository_webapp/media,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/media/media,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/media/media/upload,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/media/upload,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/media/upload/releases,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/middleware,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/middleware/__init__.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/middleware/threadlocaluser.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/run_testserver.sh,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/settings.py,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      src/repository_webapp/templates, src/repository_webapp/urls.py:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      skeleton for web-based repository&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-05-01 16:39  henning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * doc, playground, src: initial directory structure (and test if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      committing works)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2008-04-25 00:21  oleksa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    * .: Project branch for Henning's scripter-ng project&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-1366892221358143112?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/1366892221358143112/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=1366892221358143112' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/1366892221358143112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/1366892221358143112'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/06/changelog.html' title='ChangeLog'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-8874092057670516607</id><published>2008-05-22T15:52:00.001-07:00</published><updated>2008-05-22T16:12:13.861-07:00</updated><title type='text'>Mockups</title><content type='html'>After my first post, my new blog about Scripter got deactivated because it was classified as a spam blog by some automatic software on blogger.com. Luckyly this issue has been resolved.&lt;br /&gt;&lt;br /&gt;So here are now some screenshots of some widgets I was working on in the past and which I would like to integrate into ScripterNG.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jsGr4WYTVvU/SDX6SBivCBI/AAAAAAAAArk/--gs-nsAvh0/s1600-h/mockup1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jsGr4WYTVvU/SDX6SBivCBI/AAAAAAAAArk/--gs-nsAvh0/s400/mockup1.png" alt="" id="BLOGGER_PHOTO_ID_5203340132055189522" border="0" /&gt;&lt;/a&gt;Inform the user about possible security problems.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jsGr4WYTVvU/SDX6ihivCCI/AAAAAAAAArs/vX4IbtwJ6SQ/s1600-h/mockup2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jsGr4WYTVvU/SDX6ihivCCI/AAAAAAAAArs/vX4IbtwJ6SQ/s400/mockup2.png" alt="" id="BLOGGER_PHOTO_ID_5203340415523031074" border="0" /&gt;&lt;/a&gt;Heavily inspired by Firefox...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jsGr4WYTVvU/SDX6ihivCDI/AAAAAAAAAr0/veE61TKdbKI/s1600-h/mockup3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jsGr4WYTVvU/SDX6ihivCDI/AAAAAAAAAr0/veE61TKdbKI/s400/mockup3.png" alt="" id="BLOGGER_PHOTO_ID_5203340415523031090" border="0" /&gt;&lt;/a&gt;Currently uses QTextBrowser for HTML rendering but will probably switch to QtWebKit later&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jsGr4WYTVvU/SDX6ixivCEI/AAAAAAAAAr8/b8PX08noQ94/s1600-h/mockup4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jsGr4WYTVvU/SDX6ixivCEI/AAAAAAAAAr8/b8PX08noQ94/s400/mockup4.png" alt="" id="BLOGGER_PHOTO_ID_5203340419817998402" border="0" /&gt;&lt;/a&gt;The interactive console will also work for QtScript when finished.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jsGr4WYTVvU/SDX6ixivCFI/AAAAAAAAAsE/OgWhVm0ZaTo/s1600-h/mockup5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jsGr4WYTVvU/SDX6ixivCFI/AAAAAAAAAsE/OgWhVm0ZaTo/s400/mockup5.png" alt="" id="BLOGGER_PHOTO_ID_5203340419817998418" border="0" /&gt;&lt;/a&gt;I do not plan to replace Emacs but I think a nice editor can be very helpful.&lt;br /&gt;This will be available as an extension to keep the plug-in core small.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Book&lt;/span&gt;&lt;br /&gt;Google sent every summer of code student a very nice book. I already enjoyed reading some articles in this book. It is called &lt;a href="http://www.oreilly.com/catalog/9780596510046/"&gt;Beautiful Code.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-8874092057670516607?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/8874092057670516607/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=8874092057670516607' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/8874092057670516607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/8874092057670516607'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/05/mockups.html' title='Mockups'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jsGr4WYTVvU/SDX6SBivCBI/AAAAAAAAArk/--gs-nsAvh0/s72-c/mockup1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4792533110214295730.post-5077287989174362506</id><published>2008-05-18T13:48:00.000-07:00</published><updated>2008-05-18T14:50:46.389-07:00</updated><title type='text'>Summary so far</title><content type='html'>&lt;span style="font-style: italic;"&gt;Hi this is my first post regarding my summer of code project.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;LGM&lt;/span&gt;&lt;br /&gt;Last week I was attending the &lt;a href="http://www.libregraphicsmeeting.org/2008/index.php?lang=en"&gt;Libre Graphics Meeting&lt;/a&gt; in Wroclaw, Poland. It was a great experience meeting all the people in person I already know from IRC and talking to new people involved in free graphics software as well as talking to random people in my hostel (BTW the Avantgarade hostel is really nice and friendly but the kitchen is a little bit small unfortunately).&lt;br /&gt;Ten years ago I once was in Wroclaw and now it was nice to see the improvements all over the place. Nevertheless there is still a lot to do and I hope that Poland will further profit from its membership in the EU.&lt;br /&gt;While discussing with the Scribus developers I got a clear impression that they are looking forward to my project. I described my ideas and got positive feedback. So the real planing and coding can start :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;PyQt&lt;/span&gt;&lt;br /&gt;PyQt are the Python bindings for Qt. These bindings will be used extensively in my project and will be a runtime dependency. So people creating scripts for ScripterNG can rely on the fact that this powerful framework is available (you can say goodbye to Tkinter :-) ). One main benefit is better integration. Additionally it will be possible to reduce the C++ code to its minimum while doing everything else in Python.&lt;br /&gt;I worked with the author of PyQt to make sure that some missing features were added which are very usefull for PyQt inside a C++ application.&lt;br /&gt;A few days ago there was a &lt;a href="http://www.riverbankcomputing.com/news/pyqt-44"&gt;new release&lt;/a&gt; where about 50% of its new features are related to interaction with C++ objects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Feedback&lt;/span&gt;&lt;br /&gt;While I have already concrete ideas and plans I would appreciate any feedback, especially about the document object model (InDesign seems to provide an interesting object model for JavaScript [&lt;a href="http://www.adobe.com/products/indesign/scripting/pdfs/InDesignCS3_ScriptingGuide_JS.pdf"&gt;PDF&lt;/a&gt;]).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4792533110214295730-5077287989174362506?l=scripterng.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scripterng.blogspot.com/feeds/5077287989174362506/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4792533110214295730&amp;postID=5077287989174362506' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/5077287989174362506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4792533110214295730/posts/default/5077287989174362506'/><link rel='alternate' type='text/html' href='http://scripterng.blogspot.com/2008/05/summary-so-far.html' title='Summary so far'/><author><name>Henning</name><uri>http://www.blogger.com/profile/07905870049975057669</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
