Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/__init__.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/__init__.py	(revision 42)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/__init__.py	(revision 43)
@@ -0,0 +1,4 @@
+    
+def initialize(context):
+    
+    pass
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/__init__.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/__init__.py	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/__init__.py	(revision 43)
@@ -0,0 +1,1 @@
+# I'm a package
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/configure.zcml	(revision 43)
@@ -0,0 +1,18 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+    
+    <include file="kssactions.zcml" />
+    
+    <include file="resources.zcml" />
+    
+    <browser:page
+        name="plonetabs-controlpanel"
+        for="Products.CMFPlone.interfaces.IPloneSiteRoot"
+        class=".plonetabs.PloneTabsControlPanel"
+        template="./templates/plonetabs.pt"
+        permission="cmf.ManagePortal"
+        allowed_interface = ".interfaces.IPloneTabsControlPanel"
+        />
+    
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/interfaces.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/interfaces.py	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/interfaces.py	(revision 43)
@@ -0,0 +1,35 @@
+from zope.interface import Interface
+
+class IPloneTabsControlPanel(Interface):
+    """ Configlet for managing portal_actions, quintagroup.plonetabs """
+    
+    def getPageTitle(category='portal_tabs'):
+        """ Return Title for configlet page for given category """
+    
+    def hasActions(category="portal_tabs"):
+        """ Whether there are actions in portal_actions with given category """
+    
+    def getPortalActions(category="portal_tabs"):
+        """ Return portal actions with given category """
+    
+    def isGeneratedTabs():
+        """ Whether disable_folder_section field is turned off """
+    
+    def isNotFoldersGenerated():
+        """ Whether disable_nonfolderish_sections field is turned off """
+    
+    def getActionsList(category="portal_tabs"):
+        """ Return html code for actions list with given category """
+    
+    def getGeneratedTabs():
+        """ Return html code for autogenerated tabs """
+    
+    def getRootTabs():
+        """ Return portal root elements """
+    
+    def getCategories():
+        """ Return list of categories contained in portal_actions tool """
+    
+    def test(condition, ifTrue, ifFalse):
+        """ Instead of test function in skins page templates """
+    
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/kssactions.zcml	(revision 43)
@@ -0,0 +1,13 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+    
+    <browser:page
+        for="plone.app.kss.interfaces.IPortalObject"
+        attribute="toggleGeneratedTabs"
+        class=".plonetabs.PloneTabsControlPanel"
+        name="plonetabs-toggleGeneratedTabs"
+        permission="cmf.ManagePortal"
+        />
+    
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py	(revision 43)
@@ -0,0 +1,186 @@
+from zope.interface import implements
+from zope.component import getUtility
+from zope.i18n import translate
+from zope.schema.interfaces import IVocabularyFactory
+
+from Acquisition import aq_inner
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFEditions.setuphandlers import DEFAULT_POLICIES
+from Products.CMFPlone import PloneMessageFactory as _
+from Products.CMFPlone import PloneMessageFactory as pmf
+from Products.CMFPlone import utils
+from Products.CMFPlone.browser.navigation import get_view_url
+from Products.Five.browser import BrowserView
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+
+from plone.app.layout.navigation.root import getNavigationRoot
+from plone.app.kss.plonekssview import PloneKSSView
+from plone.app.workflow.remap import remap_workflow
+from plone.memoize.instance import memoize
+from kss.core import kssaction
+
+from quintagroup.plonetabs.config import *
+from interfaces import IPloneTabsControlPanel
+
+def format_description(text, request=None):
+    # We expect the workflow to be a text of "- " divided bullet points.
+    text = translate(text.strip(), domain="plone", context=request)
+    return [s.strip() for s in text.split("- ") if s]
+
+
+class PloneTabsControlPanel(PloneKSSView):
+    
+    implements(IPloneTabsControlPanel)
+    
+    actionslist_template = ViewPageTemplateFile("templates/actionslist.pt")
+    autogenerated_template = ViewPageTemplateFile("templates/autogenerated.pt")
+    
+    def getPageTitle(self, category="portal_tabs"):
+        """ See interface """
+        portal_props = getToolByName(self.context, "portal_properties")
+        default_title = "Plone '%s' Configuration" % category
+        
+        if not hasattr(portal_props, PROPERTY_SHEET):
+            return default_title
+        
+        sheet = getattr(portal_props, PROPERTY_SHEET)
+        if not hasattr(sheet, FIELD_NAME):
+            return default_title
+        
+        field = sheet.getProperty(FIELD_NAME)
+        dict = {}
+        for line in field:
+            cat, title = line.split("|", 2)
+            dict[cat] = title
+        
+        return dict.get(category, None) or default_title
+    
+    def hasActions(self, category="portal_tabs"):
+        """ See interface """
+        return len(getToolByName(self.context, "portal_actions").listActions(categories=[category,])) > 0
+    
+    def getPortalActions(self, category="portal_tabs"):
+        """ See interface """
+        return getToolByName(self.context, "portal_actions").listActions(categories=[category,])
+    
+    def isGeneratedTabs(self):
+        """ See interface """
+        site_properties = getToolByName(self.context, "portal_properties").site_properties
+        return not site_properties.getProperty("disable_folder_sections", False)
+    
+    def isNotFoldersGenerated(self):
+        """ See interface """
+        site_properties = getToolByName(self.context, "portal_properties").site_properties
+        return not site_properties.getProperty("disable_nonfolderish_sections", False)
+    
+    def getActionsList(self, category="portal_tabs"):
+        """ See interface """
+        return self.actionslist_template(category=category)
+    
+    def getGeneratedTabs(self):
+        """ See interface """
+        return self.autogenerated_template()
+    
+    def getRootTabs(self):
+        """ See interface """
+        context = aq_inner(self.context)
+        
+        portal_catalog = getToolByName(context, 'portal_catalog')
+        portal_properties = getToolByName(context, 'portal_properties')
+        navtree_properties = getattr(portal_properties, 'navtree_properties')
+        
+        # Build result dict
+        result = []
+        
+        # check whether we only want actions
+        if not self.isGeneratedTabs():
+            return result
+        
+        query = {}
+        
+        rootPath = getNavigationRoot(context)
+        query['path'] = {'query' : rootPath, 'depth' : 1}
+        query['portal_type'] = utils.typesToList(context)
+        
+        sortAttribute = navtree_properties.getProperty('sortAttribute', None)
+        if sortAttribute is not None:
+            query['sort_on'] = sortAttribute
+            
+            sortOrder = navtree_properties.getProperty('sortOrder', None)
+            if sortOrder is not None:
+                query['sort_order'] = sortOrder
+        
+        if navtree_properties.getProperty('enable_wf_state_filtering', False):
+            query['review_state'] = navtree_properties.getProperty('wf_states_to_show', [])
+        
+        query['is_default_page'] = False
+
+        if not self.isNotFoldersGenerated():
+            query['is_folderish'] = True
+
+        # Get ids not to list and make a dict to make the search fast
+        idsNotToList = navtree_properties.getProperty('idsNotToList', ())
+        excludedIds = {}
+        for id in idsNotToList:
+            excludedIds[id]=1
+
+        rawresult = portal_catalog.searchResults(**query)
+
+        # now add the content to results
+        for item in rawresult:
+            if not excludedIds.has_key(item.getId):
+                id, item_url = get_view_url(item)
+                data = {'name'       : utils.pretty_title_or_id(context, item),
+                        'id'         : id,
+                        'url'        : item_url,
+                        'description': item.Description,
+                        'exclude_from_nav' : item.exclude_from_nav}
+                result.append(data)
+        
+        return result
+    
+    def getCategories(self):
+        """ See interface """
+        portal_actions = getToolByName(self.context, "portal_actions")
+        return portal_actions.objectIds()
+    
+    def test(self, condition, ifTrue, ifFalse):
+        """ See interface """
+        if condition:
+            return ifTrue
+        else:
+            return ifFalse
+    
+    ##########################
+    # kss server actions
+    ##########################
+    
+    def updateGlobalSections(self, ksscore):
+        """ Method for updating global-sections on client """
+        ksscore.replaceHTML(
+            ksscore.getHtmlIdSelector("portal-globalnav"),
+            self.macroContent("global_sections/macros/portal_tabs"),
+            withKssSetup="False")
+    
+    @kssaction
+    def toggleGeneratedTabs(self, field, checked="0"):
+        """ Toggle autogenaration setting on configlet """
+        
+        changeProperties = getToolByName(self.context, "portal_properties").site_properties.manage_changeProperties
+        if checked == "1":
+            changeProperties(**{field : False})
+        else:
+            changeProperties(**{field : True})
+        
+        ksscore = self.getCommandSet("core")
+        replace_id = "roottabs"
+        content = self.getGeneratedTabs()
+        
+        ksscore.replaceInnerHTML(ksscore.getHtmlIdSelector(replace_id), content, withKssSetup="True")
+        
+        
+        self.updateGlobalSections(ksscore)
+    
+
+
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources.zcml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources.zcml	(revision 43)
@@ -0,0 +1,51 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+    
+    <!-- Register images -->
+    
+    <browser:resource
+        name="plonetabs.gif"
+        image="./images/plonetabs.gif"
+        />
+    
+    <browser:resource
+        name="busy_icon.gif"
+        image="./images/busy_icon.gif"
+        />
+    
+    <browser:resource
+        name="trash.gif"
+        image="./images/trash.gif"
+        />
+    
+    <browser:resource
+        name="treeExpanded.gif"
+        image="./images/treeExpanded.gif"
+        />
+    
+    <browser:resource
+        name="treeCollapsed.gif"
+        image="./images/treeCollapsed.gif"
+        />
+    
+    <browser:resource
+        name="drag.gif"
+        image="./images/drag.gif"
+        />
+    
+    <!-- Register stylesheets -->
+    
+    <browser:resource
+        name="plonetabs.css"
+        file="./resources/plonetabs.css"
+        />
+    
+    <!-- Register kukit stylesheets -->
+    
+    <browser:resource
+        name="plonetabs.kss"
+        file="./resources/plonetabs.kss"
+        />
+    
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.css	(revision 43)
@@ -0,0 +1,352 @@
+/* <dtml-with base_properties> (do not remove this :) */
+/* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */
+
+/*
+***************************************************************************************************
+*                                                                                                 *
+*   There are two global self-excluding classes: 'viewing' and 'sorting',                         *
+*   one local class 'editing' for menu items which are expanded for editing,                      *
+*   and one more local class 'adding' for adding form when it's in open state.                    *
+*                                                                                                 *
+*   Reorder action are always available and it TEMPORARY stop other actions on the form:          *
+*       editing items                                                                             *
+*       deleting items                                                                            *
+*       toggling item visibility                                                                  *
+*       adding item                                                                               *
+*                                                                                                 *
+*   After returning to 'viewing' class from 'sorting' all items become to the same state they     *
+*   were before sorting (in editing state or not).                                                *
+*                                                                                                 *
+*   And the same behaviour for adding form: form state ('adding' or not) become the same it was   *
+*   before sorting.                                                                               *
+*                                                                                                 *
+*   All actions except reordering could be done at any time in relationship to each other.        *
+*                                                                                                 *
+***************************************************************************************************
+*/
+
+#app.viewing                        .reorder-controls,
+#app.sorting                        .sort-controls,
+#app.viewing li.editing             .editform,
+#app #addaction.adding              .field-visible,
+#app #addaction.adding              .field-name dt,
+#app #addaction.adding              .field-action,
+#app #addaction.adding              .field-action label,
+#app #addaction.adding              .advanced,
+#app #addaction.adding              .field-id,
+#app #addaction.adding              .field-condition,
+#app #addaction.adding              .add-controls {
+    display: block;
+}
+
+#app                                #busy,
+#app.viewing                        .noitems,
+#app                                .reorder-controls,
+#app                                .sort-controls,
+#app.viewing li.editing             .url-helper,
+#app.viewing li.editing             .tab-title,
+#app                                .drag-handle,
+#app                                .delete,
+#app                                .visibility,
+#app                                .editform,
+#app.sorting                        #addaction,
+#app                                .field-visible,
+#app                                .field-name dt,
+#app                                .field-action,
+#app                                .advanced,
+#app                                .field-id,
+#app                                .field-condition,
+#app                                .add-controls {
+    display: none;
+}
+
+#app.working #busy,
+#app.viewing ul.csshover li:hover    .delete,
+#app.viewing ul.csshover li.onHover  .delete,
+#app.viewing ul.csshover li:hover    .visibility,
+#app.viewing ul.csshover li.onHover  .visibility,
+#app ul#roottabs.csshover li:hover   .visibility,
+#app ul#roottabs.csshover li.onHover .visibility,
+#app.sorting                         .drag-handle {
+    display: inline;
+}
+
+/**********************************************************/
+
+#app.sorting #tabslist img.drag-handle {
+    cursor: move;
+}
+
+#app .invisible span.tab-title {
+    color:#aaa;
+}
+
+/*common***************************************************/
+
+div.reorder-controls,
+div.sort-controls {
+    float:left;
+}
+
+.drag-handle {
+    float:left;
+    margin:0.5em 0.5em 0 0;
+}
+
+#app ul {
+    list-style-type: none;
+    list-style-image: none;
+    margin:2.5em 0 0 1.7em;
+}
+
+#app .delete {
+    background: url(++resource++trash.gif) 12px 50% no-repeat;
+    padding: 0 0 0 25px;
+    line-height:1.8em;
+    font-size:80%;
+    border:0;
+    position:absolute;
+    right:0;
+    margin-right:-5.7em;
+    color: #436976 !important;
+}
+
+* html #app .delete {
+    margin-right:-4.7em;
+}
+
+#app ul.csshover li {
+    border: 1px solid transparent;
+    border-right:0;
+    padding: 0 0.5em;
+    margin: 0.1em 0;
+    width:35em;
+    margin-right:6.5em;
+    line-height:1.5em;
+    clear:left;
+    position:relative;
+}
+
+* html #app ul.csshover li {
+    border-color:white;
+}
+
+#app ul.csshover li span {
+    display:block;
+}
+
+#app ul.csshover li span.url-helper {
+    position:absolute;
+    right:0;
+    margin-left:20%;
+    padding-right:0.5em;
+    overflow:hidden;
+    font-size:80%;
+    color:#aaa;
+    text-align: right;
+    width: 80%;
+
+}
+
+#app ul.csshover li.editing {
+    padding:0;
+    margin: 0;
+    width:36em;
+}
+
+#app.sorting ul.csshover li.editing {
+    padding: 0 0.5em;
+}
+
+#app li.editing form {
+    margin:-0.1em;
+}
+
+* html #app li.editing form {
+    margin: -0.2em 0 0 0;
+}
+
+#app dl {
+    margin:0;
+}
+
+#app dl label {
+    display:none;
+}
+
+#app dl dl label {
+    display:block;
+} 
+
+#app dd {
+    margin:0;
+}
+
+#app dd dl {
+    margin:0.5em 0;
+}
+
+#app input[type="text"] {
+    width: 99.5%;
+}
+
+#app .bridge {
+    position:absolute;
+    left:-1.5em;
+    top:0.2em;
+    width:3em;
+}
+
+* html #app div.bridge {
+    top:0;
+    left:-2em;
+}
+
+#app input:focus {
+    border:  1px inset threedface !important;
+}
+
+* html #app input {
+    width:97.3%;
+    padding: 0.1em 0.4em;
+}
+
+#app form div {
+    line-height:1.4em;
+    margin-top:0.1em;
+    min-height:1.6em;
+}
+
+* html #app form div {
+    margin-top:-0.2em;
+    position:relative;
+    height:1%;
+}
+
+#app div input {
+    width:auto;
+    padding: 0.05em 0.5em;
+    float:left;
+    margin:0 0.1em 0 0;
+}
+
+* html #app div input {
+    padding: 0 0.3em;
+}
+
+div.field { margin-top:2em; }
+
+/*hover***************************************************/
+
+#app.viewing ul#tabslist.csshover li:hover,
+#app.viewing ul#tabslist.csshover li.onHover {
+    background-color: #FFFFDD;
+    border: 1px inset threedface;
+    cursor: text;
+}
+
+#app.viewing ul#tabslist.csshover li.editing {
+    background-color: White;
+    border: 1px solid white;
+    cursor: auto;
+}
+
+#app ul#roottabs.csshover li:hover,
+#app ul#roottabs.csshover li.onHover {
+    background-color: #FFFFDD;
+/*    border:  1px inset threedface;*/
+    cursor: default;
+}
+
+/*edit*****************************************************/
+
+#app dl.collapseAdvanced {
+    margin-top:0.15em;
+    position:relative;
+    padding:0;
+    border:0 !important;
+    height:auto;
+    line-height:1em;
+}
+
+#app dl.collapseAdvanced dt.headerAdvanced {
+    cursor: pointer;
+    font-size: 90%;
+    font-weight:normal;
+    position:absolute;
+    padding-right:0.5em;
+    display:block;
+    margin:0;
+    top:0;
+    right:0;
+    color: #436976;
+    line-height:2em;
+    background-color:transparent;
+}
+
+#app dl.collapseAdvanced dd.contentAdvanced {
+    padding:1em 1.5em 0 1.5em;
+    border:0;
+    background-color:#dee7ec;
+}
+
+dl.expandedBlock dt.headerAdvanced {
+    padding: 0 6px 0 22px;
+    background: url(++resource++treeExpanded.gif) no-repeat 6px 50%;
+}
+
+dl.collapsedBlock dt.headerAdvanced {
+    padding: 0 0 0 22px;
+    background: url(++resource++treeCollapsed.gif) no-repeat 6px 50%;
+ }
+
+#app dl.advanced { 
+    clear: both;
+}
+
+/****************************************************************/
+
+#app #addaction {
+    margin-left:1.7em;
+    width:36.2em;
+    position:relative;
+}
+
+* html #app #addaction {
+    width:36.15em;
+}
+
+#app #addaction.adding .field-action label {
+    position:absolute;
+    line-height:2.1em;
+    font-size:80%;
+    color: #8cacbb;
+    right:0.5em;
+    font-weight:normal;
+    background-color:transparent;
+}
+
+#app #addaction.adding .field-action input {
+    margin-top:0.1em; 
+    padding-right:9em;
+    width:27em;
+}
+
+* html #app #addaction.adding .field-action input {
+    padding-right:0.5em;
+    width:96.8%;
+    margin-top:-0.05em;
+}
+
+#app #addaction .bridge {
+    left:-1.8em;
+    top:0em;
+}
+
+* html #app #addaction .bridge {
+    width:1.7em;
+    left:-2em;
+}
+
+
+/* </dtml-with> (do not remove this either :) */
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/resources/plonetabs.kss	(revision 43)
@@ -0,0 +1,36 @@
+/* <dtml-call expr="RESPONSE.setHeader('pragma','no-cache')"> */
+
+/*
+    The above trick to let this file not be cached does not work, unless this file is renamed to have
+    a kss.dtml extension.
+*/
+
+
+/* General stylesheet for Plone Tabs AJAX configlet */
+
+/* Add class to body to allow conditional styling when kss is available */
+
+#select_category:change {
+    action-client: plonetabs-redirectTo;
+    plonetabs-redirectTo-search: currentFormVar();
+}
+
+/* Hovering for IE especially */
+#app li:mouseover {
+}
+
+#app li:mouseout {
+}
+
+/* Automatically generated tabs */
+#generated_tabs:click {
+    action-server: plonetabs-toggleGeneratedTabs;
+    plonetabs-toggleGeneratedTabs-field: disable_folder_sections;
+    plonetabs-toggleGeneratedTabs-checked: currentFormVar();
+}
+
+#nonfolderish_tabs:click {
+    action-server: plonetabs-toggleGeneratedTabs;
+    plonetabs-toggleGeneratedTabs-field: disable_nonfolderish_sections;
+    plonetabs-toggleGeneratedTabs-checked: currentFormVar();
+}
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/actionslist.pt	(revision 43)
@@ -0,0 +1,62 @@
+<tal:tabs tal:define="test nocall:view/test;
+                      dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT');
+                      category python:options.get('category', None) or 'portal_tabs'"
+          tal:repeat="tab python:view.getPortalActions(category)">
+<li tal:define="id tab/id;
+                visible tab/visible;
+                index repeat/tab/index"
+    tal:attributes="id string:tabslist_${id};
+                    title tab/description;
+                    class python:test(visible, '', 'invisible')">
+  <img class="drag-handle" src="++resource++drag.gif" alt="" height="11" width="25" />
+  <div class="bridge">
+    <input type="checkbox" class="visibility" value="1" name="visibility" title="visibility"
+           tal:attributes="checked python:test(visible, 'checked', None);
+                           name string:i${index}_${attrs/name}" />
+  </div>
+  <a class="delete" href="#">Delete</a>
+  <span class="url-helper" tal:content="tab/url_expr">Tab Action</span>
+  <span class="tab-title" tal:content="tab/title">Tab Name</span>
+  <form class="editform"
+        method="post"
+        action="@@plonetabs-controlpanel"
+        tal:attributes="action string:${context/portal_url}/${attrs/action};
+                        name string:f$index">
+      <input type="hidden" name="idx" tal:attributes="value index" />
+      <dl>
+        <dt><label>Name</label></dt>
+        <dd><input type="text" value="" name="name"
+                   tal:attributes="value tab/title;
+                                   name string:i${index}_${attrs/name}"      /></dd>
+      </dl>
+      <dl class="collapseAdvanced expandedBlock">
+        <dt class="headerAdvanced">Advanced</dt>
+        <dd class="contentAdvanced">
+          <dl>
+            <dt><label>URL (Expression)</label></dt>
+            <dd><input type="text" value="" name="action"     size="30"
+                       tal:attributes="value tab/url_expr;
+                                       name string:i${index}_${attrs/name}" /></dd>
+          </dl>
+          <dl>
+            <dt><label>Id</label></dt>
+            <dd><input type="text" value="" name="id"
+                       tal:attributes="value tab/id;
+                                       name string:i${index}_${attrs/name}" /></dd>
+          </dl>
+          <dl>
+            <dt><label>Condition (Expression)</label></dt>
+            <dd><input type="text" value="" name="condition"  size="30"
+                       tal:attributes="value tab/available_expr;
+                                       name string:i${index}_${attrs/name}" /></dd>
+          </dl>
+          <div class="visualClear"><!-- --></div>
+        </dd>
+      </dl>
+      <div>
+        <input type="submit" class="editsave"   i18n:attributes="value" value="Save"   />
+        <input type="submit" class="editcancel" i18n:attributes="value" value="Cancel" />
+      </div>
+  </form>
+</li>
+</tal:tabs>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/autogenerated.pt	(revision 43)
@@ -0,0 +1,24 @@
+<metal:block use-macro="here/global_defines/macros/defines" />
+
+<tal:cache tal:define="lang language;
+                       charset site_properties/default_charset|string:utf-8">
+  <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
+    Get the global cache headers located in global_cache_settings.
+  </metal:cache>
+</tal:cache>
+
+<tal:tabs tal:define="dummy python:request.RESPONSE.setHeader('Expires', 'Mon, 26 Jul 1996 05:00:00 GMT')"
+          tal:repeat="tab view/getRootTabs">
+<li tal:define="id tab/id;
+                visible python:not tab['exclude_from_nav']"
+    tal:attributes="id string:tabslist_${id};
+                    title tab/description|nothing;
+                    class python:view.test(visible, '', 'invisible')">
+  <div class="bridge"><input type="checkbox" class="visibility" value="1" id="id" name="rootvis"  title="visibility"
+         tal:attributes="name string:i${repeat/tab/index}_${attrs/name};
+                         id id;
+                         checked python:view.test(visible, 'checked', None)" /></div>
+  <span class="url-helper" tal:content="python:tab['url']">Tab Action</span>
+  <span class="tab-title"  tal:content="tab/name">Tab Name</span>
+</li>
+</tal:tabs>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/templates/plonetabs.pt	(revision 43)
@@ -0,0 +1,170 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      xml:lang="en" lang="en"
+      metal:use-macro="context/prefs_main_template/macros/master"
+      i18n:domain="quintagroup.plonetabs">
+
+<metal:block metal:fill-slot="top_slot"
+             tal:define="dummy python:request.set('disable_border', 1)" />
+
+<body>
+
+<div metal:fill-slot="prefs_configlet_main"
+     tal:define="test nocall:view/test;
+                 category here/REQUEST/category|nothing;
+                 category python:test(category and category != '', category, 'portal_tabs');">
+
+<div id="app" class="viewing">
+
+  <h1 class="documentFirstHeading">
+    <span i18n:translate="heading_plonetabs">
+      <tal:title replace="python:view.getPageTitle(category)">Plone Tabs</tal:title>
+    </span>
+    <span id="busy"><img src="++resource++busy_icon.gif" alt="" tal:attributes="src string:${portal_url}/${attrs/src}" /></span>
+  </h1>
+
+  <a href=""
+     class="link-parent"
+     tal:attributes="href string: $portal_url/plone_control_panel"
+     i18n:domain="plone"
+     i18n:translate="label_up_to_plone_setup">
+    Up to Site Setup
+  </a>
+
+  <p i18n:translate="description_plonetabs">
+    Select category to manage:
+    <select name="select_category"
+            id="select_category"
+            tal:define="categories view/getCategories">
+      <tal:options repeat="cat categories">
+        <option tal:attributes="value string:category=${cat};
+                                selected python:test(category == cat, 'selected', None)"
+                tal:content="cat" />
+      </tal:options>
+    </select>
+  </p>
+
+  <input type="hidden" name="category" value="portal_tabs" id="actions_category"
+         tal:attributes="value category" />
+
+  <div class="reorder-controls"
+       tal:define="notempty python:view.hasActions(category)">
+    <a href="#" id="reorder" class=""
+       tal:attributes="class python:test(notempty, '', 'noitems')">Reorder</a>
+  </div>
+
+  <div class="sort-controls">
+    <a href="#" id="save">Save</a> |
+    <a href="#" id="cancel">Cancel</a>
+  </div>
+
+  <ul class="csshover"
+      id="tabslist"
+      tal:content="structure python:view.getActionsList(category=category)" />
+
+  <form id="addaction"
+        method="post"
+        action="@@plonetabs_controlpanel"
+        tal:attributes="action string:${portal_url}/${attrs/action}">
+    <dl class="field-visible bridge">
+      <dt>
+        <label>Visible</label>
+      </dt>
+      <dd>
+        <input id="actvisible" type="checkbox" value="1" checked="checked" title="visibility" name="visible" />
+      </dd>
+    </dl>
+    <dl class="field-name">
+      <dt>
+        <label>Name</label>
+      </dt>
+      <dd>
+        <input id="actname" type="text" value="" name="name" />
+      </dd>
+    </dl>
+    <dl class="field-action">
+      <dt>
+        <label>URL (Expression)</label>
+      </dt>
+      <dd>
+        <input id="actaction" type="text" value="" size="30" name="action" />
+      </dd>
+    </dl>
+    <dl class="advanced collapseAdvanced expandedBlock">
+      <dt class="headerAdvanced">Advanced</dt>
+      <dd class="contentAdvanced">
+        <dl class="field-id">
+          <dt>
+            <label>Id</label>
+          </dt>
+          <dd>
+            <input id="actid" type="text" value="" name="id" />
+          </dd>
+        </dl>
+        <dl class="field-condition">
+          <dt>
+            <label>Condition (Expression)</label>
+          </dt>
+          <dd>
+            <input id="actcondition" type="text" value="" size="30" name="condition" />
+          </dd>
+        </dl>
+        <div class="visualClear"><!-- --></div>
+      </dd>
+    </dl>
+    <div class="add-controls">
+      <input type="submit" id="buttonadd" i18n:attributes="value" value="Add" />
+      <input type="submit" id="buttoncancel" i18n:attributes="value" value="Cancel" />
+    </div>
+  </form>
+
+  <tal:autogeneration condition="python:category == 'portal_tabs'">
+
+    <div class="field"
+         tal:define="generated_tabs request/generated_tabs|view/isGeneratedTabs;
+                     error errors/generated_tabs|nothing"
+         tal:attributes="class python:test(error, 'field error', 'field')">
+      <input type="checkbox"
+             id="generated_tabs"
+             name="generated_tabs"
+             value="1"
+             tal:attributes="checked python:test(generated_tabs, 'checked', None)" />
+      <label for="generated_tabs" i18n:translate="label_generated_tabs_enable">Automatically generate tabs</label>
+      <div class="formHelp" i18n:translate="help_generated_tabs">
+        By default, all folders created at the root level will have global section
+        navigation generated. You can turn this off if you prefer manually constructing
+        this part of the navigation.
+      </div>
+    </div>
+
+    <div class="field"
+         tal:define="nonfolderish_tabs request/nonfolderish_tabs|view/isNotFoldersGenerated;
+                     error errors/nonfolderish_tabs|nothing"
+         tal:attributes="class python:test(error, 'field error', 'field')">
+      <input type="checkbox"
+             id="nonfolderish_tabs"
+             name="nonfolderish_tabs"
+             value="1"
+             tal:attributes="checked python:test(nonfolderish_tabs, 'checked', None)" />
+      <label for="nonfolderish_tabs" i18n:translate="label_nonfolderish_tabs_enable">Generate tabs for items other than folders</label>
+      <div class="formHelp" i18n:translate="help_nonfolderish_tabs">
+        By default, any content item in the root of the portal will be shown as
+        a global section. If you turn this option off, only folders will be shown.
+        This only has an effect if "Automatically generate tabs" is enabled
+      </div>
+    </div>
+
+    <ul class="csshover" id="roottabs"
+        tal:content="structure view/getGeneratedTabs" />
+
+  </tal:autogeneration>
+
+
+</div>
+
+</div>
+
+</body>
+</html>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/config.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/config.py	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/config.py	(revision 43)
@@ -0,0 +1,68 @@
+PROPERTY_SHEET = "tabs_properties"
+FIELD_NAME     = "titles"
+
+""" Example javascript
+{"id"          : "test.js",
+ "expression"  : "python: member is not None",
+ "inline"      : False,
+ "enabled"     : True,
+ "cookable"    : True,
+ "compression" : "safe",
+ "cacheable"   : True}
+"""
+
+JAVASCRIPTS = [{"id"          : "++resource++prototype.js",
+                "expression"  : "python:request['URL'].find('/prefs_tabs_form') > 0",
+                "inline"      : False,
+                "enabled"     : True,
+                "cookable"    : True,
+                "compression" : "safe",
+                "cacheable"   : True},
+               {"id"          : "++resource++effects.js",
+                "expression"  : "python:request['URL'].find('/prefs_tabs_form') > 0",
+                "inline"      : False,
+                "enabled"     : True,
+                "cookable"    : True,
+                "compression" : "safe",
+                "cacheable"   : True}]
+
+""" Example css
+{"id"          : "test.css",
+ "expression"  : "python: member is not None",
+ "media"       : "screen",
+ "rel"         : "stylesheet",
+ "title"       : "example styles",
+ "rendering"   : "import",
+ "enabled":    : True,
+ "cookable"    : True,
+ "compression" : "safe",
+ "cacheable"   : True}
+"""
+
+CSSES = [{"id"          : "qplonetabs.css",
+          "expression"  : "python:request['URL'].find('/prefs_tabs_form') > 0",
+          "media"       : "screen",
+          "rel"         : "stylesheet",
+          "title"       : "qPloneTabs styles",
+          "rendering"   : "import",
+          "enabled"     : True,
+          "cookable"    : True,
+          "compression" : "safe",
+          "cacheable"   : True}]
+
+""" Example kss
+{"id"          : "test.kss",
+ "expression"  : "python: member is not None",
+ "enabled":    : True,
+ "cookable"    : True,
+ "compression" : "safe",
+ "cacheable"   : True}
+"""
+
+KSSES = [{"id"          : "qplonetabs.kss",
+          "expression"  : "python:request['URL'].find('/prefs_tabs_form') > 0",
+          "enabled"     : True,
+          "cookable"    : True,
+          "compression" : "safe",
+          "cacheable"   : True},]
+
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/configure.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/configure.zcml	(revision 42)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/configure.zcml	(revision 43)
@@ -3,5 +3,13 @@
     xmlns:five="http://namespaces.zope.org/five"
     i18n_domain="quintagroup.plonetabs">
-
-
+    
+    <!-- Set up as a Zope2 product -->
+    <five:registerPackage package="." initialize=".initialize" />
+    
+    <include file="profiles.zcml" />
+    
+    <include package=".browser" />
+    
+    <include package=".plugins" />
+    
 </configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/__init__.py
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/__init__.py	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/__init__.py	(revision 43)
@@ -0,0 +1,1 @@
+# I'm a package
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/configure.zcml	(revision 43)
@@ -0,0 +1,101 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+     xmlns:browser="http://namespaces.zope.org/browser"
+     xmlns:kss="http://namespaces.zope.org/kss"
+     >
+     
+    
+    <!-- plugin registration -->    
+
+    <!-- kss client actions -->
+    
+    <kss:action
+        name="plonetabs-redirectTo"
+        command_factory="selector"
+        jsfile="plugin.js"
+        params_mandatory=""
+        params_optional="protocol host pathname search hash"
+        />
+    
+<!--     <kss:action
+        name="plone-removeLockProtection"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+     <kss:action
+        name="plone-initLockingProtection"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initKupu"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-followLink"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-submitCurrentForm"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initFormTabs"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-formProtectionCheck"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:eventtype
+        name="plone-formProtectionChecked"
+        jsfile="plugin.js"
+        />
+
+    <kss:eventtype
+        name="plone-formProtectionFailed"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initFormProtection"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initShiftDetection"
+        command_factory="global"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initCheckBoxSelection"
+        command_factory="global"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-createCheckBoxSelection"
+        command_factory="selector"
+        jsfile="plugin.js"
+        />
+
+    <kss:action
+        name="plone-initDragAndDrop"
+        command_factory="global"
+        jsfile="plugin.js"
+        />-->
+
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/plugin.js	(revision 43)
@@ -0,0 +1,39 @@
+
+/* Use onDOMLoad event to initialize kukit
+   earlier then the document is fully loaded,
+   but after the DOM is at its place already.
+
+   This functionality is missing from Plone 2.1,
+   the script is present in >=2.5, but it is not
+   always added to RR - it needs to be added manually.
+
+   If it's present we use it.
+*/
+
+kukit.plonetabs = {};
+
+/* Base kukit plugins for plonetabs */
+
+kukit.actionsGlobalRegistry.register('plonetabs-redirectTo', function(oper) {
+;;; oper.componentName = '[plonetabs-redirectTo] action';
+    var wl = window.location;
+    oper.evaluateParameters([], {'protocol' : wl.protocol,
+                                 'host'     : wl.host,
+                                 'pathname' : wl.pathname,
+                                 'search'   : wl.search,
+                                 'hash'     : wl.hash});
+
+    // normalize parameters
+    var protocol = oper.parms.protocol + (oper.parms.protocol[oper.parms.protocol.length - 1] == ":") ?  "" : ":";
+    var host = oper.parms.host;
+    var pathname = oper.parms.pathname;
+    var search = (oper.parms.search.substr(0, 1) == "?") ? "" : "?" + oper.parms.search;
+    var hash = (oper.parms.hash.length > 1) ? ((oper.parms.hash.substr(0, 1) == "#" ? "" : "#") + oper.parms.hash) : "";
+
+    url = protocol + "//" + host + pathname + search + hash;
+    window.location.replace(url);
+
+});
+kukit.commandsGlobalRegistry.registerFromAction('plonetabs-redirectTo',
+    kukit.cr.makeSelectorCommand);
+
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles.zcml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles.zcml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles.zcml	(revision 43)
@@ -0,0 +1,14 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
+    i18n_domain="quintagroup.plonetabs">
+    
+    <genericsetup:registerProfile
+       name="quintagroup.plonetabs"
+       title="Plone Tabs"
+       directory="profiles/default"
+       description="Quintagroup Plone Tabs for manage portal_actions tool"
+       provides="Products.GenericSetup.interfaces.EXTENSION"
+       />
+    
+</configure>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/actionicons.xml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/actionicons.xml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/actionicons.xml	(revision 43)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<action-icons xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+    i18n:domain="plone">
+ <action-icon category="controlpanel" action_id="plonetabs"
+              title="Plone Tabs" priority="0"
+              icon_expr="++resource++plonetabs.gif"
+              i18n:attributes="title"/>
+</action-icons>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/controlpanel.xml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/controlpanel.xml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/controlpanel.xml	(revision 43)
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<object name="portal_controlpanel" meta_type="Plone Control Panel Tool"
+    xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone">
+ <configlet title="Plone Tabs" action_id="plonetabs"
+    appId="quintagroup.plonetabs" category="Products" condition_expr=""
+    url_expr="string:${portal_url}/@@plonetabs-controlpanel"
+    visible="True" i18n:attributes="title">
+  <permission>Manage portal</permission>
+ </configlet>
+</object>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/cssregistry.xml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/cssregistry.xml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/cssregistry.xml	(revision 43)
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<object name="portal_css" meta_type="Stylesheets Registry">
+ <stylesheet title="Plone Tabs" cacheable="True" compression="safe" cookable="True"
+    enabled="1" expression="python: request['URL'].find('/@@plonetabs-controlpanel') > 0"
+    id="++resource++plonetabs.css" media="screen" rel="stylesheet" rendering="import"/>
+</object>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/kssregistry.xml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/kssregistry.xml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/kssregistry.xml	(revision 43)
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<object name="portal_kss" meta_type="KSS Registry">
+ <kineticstylesheet cacheable="True" compression="safe" cookable="True"
+    enabled="1" expression="python: request['URL'].find('/@@plonetabs-controlpanel') > 0" id="++resource++plonetabs.kss"/>
+</object>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/propertiestool.xml
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/propertiestool.xml	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/profiles/default/propertiestool.xml	(revision 43)
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<object name="portal_properties" meta_type="Plone Properties Tool">
+ <object name="tabs_properties" meta_type="Portal Tabs Properties">
+  <property name="titles" type="lines">
+   <element value="portal_tabs|Portal Tabs Configuration"/>
+   <element value="portal_footer|Portal Footer Configuration"/>
+  </property>
+ </object>
+</object>
Index: qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/version.txt
===================================================================
--- qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/version.txt	(revision 43)
+++ qPloneTabs/branches/quintagroup.plonetabs/trunk/quintagroup/plonetabs/version.txt	(revision 43)
@@ -0,0 +1,1 @@
+0.5
